vendor.js 787 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064180651806618067180681806918070180711807218073180741807518076180771807818079180801808118082180831808418085180861808718088180891809018091180921809318094180951809618097180981809918100181011810218103181041810518106181071810818109181101811118112181131811418115181161811718118181191812018121181221812318124181251812618127181281812918130181311813218133181341813518136181371813818139181401814118142181431814418145181461814718148181491815018151181521815318154181551815618157181581815918160181611816218163181641816518166181671816818169181701817118172181731817418175181761817718178181791818018181181821818318184181851818618187181881818918190181911819218193181941819518196181971819818199182001820118202182031820418205182061820718208182091821018211182121821318214182151821618217182181821918220182211822218223182241822518226182271822818229182301823118232182331823418235182361823718238182391824018241182421824318244182451824618247182481824918250182511825218253182541825518256182571825818259182601826118262182631826418265182661826718268182691827018271182721827318274182751827618277182781827918280182811828218283182841828518286182871828818289182901829118292182931829418295182961829718298182991830018301183021830318304183051830618307183081830918310183111831218313183141831518316183171831818319183201832118322183231832418325183261832718328183291833018331183321833318334183351833618337183381833918340183411834218343183441834518346183471834818349183501835118352183531835418355183561835718358183591836018361183621836318364183651836618367183681836918370183711837218373183741837518376183771837818379183801838118382183831838418385183861838718388183891839018391183921839318394183951839618397183981839918400184011840218403184041840518406184071840818409184101841118412184131841418415184161841718418184191842018421184221842318424184251842618427184281842918430184311843218433184341843518436184371843818439184401844118442184431844418445184461844718448184491845018451184521845318454184551845618457184581845918460184611846218463184641846518466184671846818469184701847118472184731847418475184761847718478184791848018481184821848318484184851848618487184881848918490184911849218493184941849518496184971849818499185001850118502185031850418505185061850718508185091851018511185121851318514185151851618517185181851918520185211852218523185241852518526185271852818529185301853118532185331853418535185361853718538185391854018541185421854318544185451854618547185481854918550185511855218553185541855518556185571855818559185601856118562185631856418565185661856718568185691857018571185721857318574185751857618577185781857918580185811858218583185841858518586185871858818589185901859118592185931859418595185961859718598185991860018601186021860318604186051860618607186081860918610186111861218613186141861518616186171861818619186201862118622186231862418625186261862718628186291863018631186321863318634186351863618637186381863918640186411864218643186441864518646186471864818649186501865118652186531865418655186561865718658186591866018661186621866318664186651866618667186681866918670186711867218673186741867518676186771867818679186801868118682186831868418685186861868718688186891869018691186921869318694186951869618697186981869918700187011870218703187041870518706187071870818709187101871118712187131871418715187161871718718187191872018721187221872318724187251872618727187281872918730187311873218733187341873518736187371873818739187401874118742187431874418745187461874718748187491875018751187521875318754187551875618757187581875918760187611876218763187641876518766187671876818769187701877118772187731877418775187761877718778187791878018781187821878318784187851878618787187881878918790187911879218793187941879518796187971879818799188001880118802188031880418805188061880718808188091881018811188121881318814188151881618817188181881918820188211882218823188241882518826188271882818829188301883118832188331883418835188361883718838188391884018841188421884318844188451884618847188481884918850188511885218853188541885518856188571885818859188601886118862188631886418865188661886718868188691887018871188721887318874188751887618877188781887918880188811888218883188841888518886188871888818889188901889118892188931889418895188961889718898188991890018901189021890318904189051890618907189081890918910189111891218913189141891518916189171891818919189201892118922189231892418925189261892718928189291893018931189321893318934189351893618937189381893918940189411894218943189441894518946189471894818949189501895118952189531895418955189561895718958189591896018961189621896318964189651896618967189681896918970189711897218973189741897518976189771897818979189801898118982189831898418985189861898718988189891899018991189921899318994189951899618997189981899919000190011900219003190041900519006190071900819009190101901119012190131901419015190161901719018190191902019021190221902319024190251902619027190281902919030190311903219033190341903519036190371903819039190401904119042190431904419045190461904719048190491905019051190521905319054190551905619057190581905919060190611906219063190641906519066190671906819069190701907119072190731907419075190761907719078190791908019081190821908319084190851908619087190881908919090190911909219093190941909519096190971909819099191001910119102191031910419105191061910719108191091911019111191121911319114191151911619117191181911919120191211912219123191241912519126191271912819129191301913119132191331913419135191361913719138191391914019141191421914319144191451914619147191481914919150191511915219153191541915519156191571915819159191601916119162191631916419165191661916719168191691917019171191721917319174191751917619177191781917919180191811918219183191841918519186191871918819189191901919119192191931919419195191961919719198191991920019201192021920319204192051920619207192081920919210192111921219213192141921519216192171921819219192201922119222192231922419225192261922719228192291923019231192321923319234192351923619237192381923919240192411924219243192441924519246192471924819249192501925119252192531925419255192561925719258192591926019261192621926319264192651926619267192681926919270192711927219273192741927519276192771927819279192801928119282192831928419285192861928719288192891929019291192921929319294192951929619297192981929919300193011930219303193041930519306193071930819309193101931119312193131931419315193161931719318193191932019321193221932319324193251932619327193281932919330193311933219333193341933519336193371933819339193401934119342193431934419345193461934719348193491935019351193521935319354193551935619357193581935919360193611936219363193641936519366193671936819369193701937119372
  1. (global["webpackJsonp"] = global["webpackJsonp"] || []).push([["common/vendor"],{
  2. /***/ 1:
  3. /*!************************************************************!*\
  4. !*** ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js ***!
  5. \************************************************************/
  6. /*! no static exports found */
  7. /***/ (function(module, exports, __webpack_require__) {
  8. "use strict";
  9. /* WEBPACK VAR INJECTION */(function(global) {Object.defineProperty(exports, "__esModule", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.createPlugin = createPlugin;exports.createSubpackageApp = createSubpackageApp;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 3));
  10. var _uniI18n = __webpack_require__(/*! @dcloudio/uni-i18n */ 4);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(Object(source), true).forEach(function (key) {_defineProperty(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(Object(source)).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;}function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _iterableToArrayLimit(arr, i) {if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"] != null) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}function _toConsumableArray(arr) {return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o, minLen) {if (!o) return;if (typeof o === "string") return _arrayLikeToArray(o, minLen);var n = Object.prototype.toString.call(o).slice(8, -1);if (n === "Object" && o.constructor) n = o.constructor.name;if (n === "Map" || n === "Set") return Array.from(o);if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);}function _iterableToArray(iter) {if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);}function _arrayWithoutHoles(arr) {if (Array.isArray(arr)) return _arrayLikeToArray(arr);}function _arrayLikeToArray(arr, len) {if (len == null || len > arr.length) len = arr.length;for (var i = 0, arr2 = new Array(len); i < len; i++) {arr2[i] = arr[i];}return arr2;}
  11. var realAtob;
  12. var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  13. var b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
  14. if (typeof atob !== 'function') {
  15. realAtob = function realAtob(str) {
  16. str = String(str).replace(/[\t\n\f\r ]+/g, '');
  17. if (!b64re.test(str)) {throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");}
  18. // Adding the padding if missing, for semplicity
  19. str += '=='.slice(2 - (str.length & 3));
  20. var bitmap;var result = '';var r1;var r2;var i = 0;
  21. for (; i < str.length;) {
  22. bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 |
  23. (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));
  24. result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) :
  25. r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) :
  26. String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
  27. }
  28. return result;
  29. };
  30. } else {
  31. // 注意atob只能在全局对象上调用,例如:`const Base64 = {atob};Base64.atob('xxxx')`是错误的用法
  32. realAtob = atob;
  33. }
  34. function b64DecodeUnicode(str) {
  35. return decodeURIComponent(realAtob(str).split('').map(function (c) {
  36. return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  37. }).join(''));
  38. }
  39. function getCurrentUserInfo() {
  40. var token = wx.getStorageSync('uni_id_token') || '';
  41. var tokenArr = token.split('.');
  42. if (!token || tokenArr.length !== 3) {
  43. return {
  44. uid: null,
  45. role: [],
  46. permission: [],
  47. tokenExpired: 0 };
  48. }
  49. var userInfo;
  50. try {
  51. userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
  52. } catch (error) {
  53. throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message);
  54. }
  55. userInfo.tokenExpired = userInfo.exp * 1000;
  56. delete userInfo.exp;
  57. delete userInfo.iat;
  58. return userInfo;
  59. }
  60. function uniIdMixin(Vue) {
  61. Vue.prototype.uniIDHasRole = function (roleId) {var _getCurrentUserInfo =
  62. getCurrentUserInfo(),role = _getCurrentUserInfo.role;
  63. return role.indexOf(roleId) > -1;
  64. };
  65. Vue.prototype.uniIDHasPermission = function (permissionId) {var _getCurrentUserInfo2 =
  66. getCurrentUserInfo(),permission = _getCurrentUserInfo2.permission;
  67. return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1;
  68. };
  69. Vue.prototype.uniIDTokenValid = function () {var _getCurrentUserInfo3 =
  70. getCurrentUserInfo(),tokenExpired = _getCurrentUserInfo3.tokenExpired;
  71. return tokenExpired > Date.now();
  72. };
  73. }
  74. var _toString = Object.prototype.toString;
  75. var hasOwnProperty = Object.prototype.hasOwnProperty;
  76. function isFn(fn) {
  77. return typeof fn === 'function';
  78. }
  79. function isStr(str) {
  80. return typeof str === 'string';
  81. }
  82. function isPlainObject(obj) {
  83. return _toString.call(obj) === '[object Object]';
  84. }
  85. function hasOwn(obj, key) {
  86. return hasOwnProperty.call(obj, key);
  87. }
  88. function noop() {}
  89. /**
  90. * Create a cached version of a pure function.
  91. */
  92. function cached(fn) {
  93. var cache = Object.create(null);
  94. return function cachedFn(str) {
  95. var hit = cache[str];
  96. return hit || (cache[str] = fn(str));
  97. };
  98. }
  99. /**
  100. * Camelize a hyphen-delimited string.
  101. */
  102. var camelizeRE = /-(\w)/g;
  103. var camelize = cached(function (str) {
  104. return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});
  105. });
  106. var HOOKS = [
  107. 'invoke',
  108. 'success',
  109. 'fail',
  110. 'complete',
  111. 'returnValue'];
  112. var globalInterceptors = {};
  113. var scopedInterceptors = {};
  114. function mergeHook(parentVal, childVal) {
  115. var res = childVal ?
  116. parentVal ?
  117. parentVal.concat(childVal) :
  118. Array.isArray(childVal) ?
  119. childVal : [childVal] :
  120. parentVal;
  121. return res ?
  122. dedupeHooks(res) :
  123. res;
  124. }
  125. function dedupeHooks(hooks) {
  126. var res = [];
  127. for (var i = 0; i < hooks.length; i++) {
  128. if (res.indexOf(hooks[i]) === -1) {
  129. res.push(hooks[i]);
  130. }
  131. }
  132. return res;
  133. }
  134. function removeHook(hooks, hook) {
  135. var index = hooks.indexOf(hook);
  136. if (index !== -1) {
  137. hooks.splice(index, 1);
  138. }
  139. }
  140. function mergeInterceptorHook(interceptor, option) {
  141. Object.keys(option).forEach(function (hook) {
  142. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  143. interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
  144. }
  145. });
  146. }
  147. function removeInterceptorHook(interceptor, option) {
  148. if (!interceptor || !option) {
  149. return;
  150. }
  151. Object.keys(option).forEach(function (hook) {
  152. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  153. removeHook(interceptor[hook], option[hook]);
  154. }
  155. });
  156. }
  157. function addInterceptor(method, option) {
  158. if (typeof method === 'string' && isPlainObject(option)) {
  159. mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
  160. } else if (isPlainObject(method)) {
  161. mergeInterceptorHook(globalInterceptors, method);
  162. }
  163. }
  164. function removeInterceptor(method, option) {
  165. if (typeof method === 'string') {
  166. if (isPlainObject(option)) {
  167. removeInterceptorHook(scopedInterceptors[method], option);
  168. } else {
  169. delete scopedInterceptors[method];
  170. }
  171. } else if (isPlainObject(method)) {
  172. removeInterceptorHook(globalInterceptors, method);
  173. }
  174. }
  175. function wrapperHook(hook) {
  176. return function (data) {
  177. return hook(data) || data;
  178. };
  179. }
  180. function isPromise(obj) {
  181. return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
  182. }
  183. function queue(hooks, data) {
  184. var promise = false;
  185. for (var i = 0; i < hooks.length; i++) {
  186. var hook = hooks[i];
  187. if (promise) {
  188. promise = Promise.resolve(wrapperHook(hook));
  189. } else {
  190. var res = hook(data);
  191. if (isPromise(res)) {
  192. promise = Promise.resolve(res);
  193. }
  194. if (res === false) {
  195. return {
  196. then: function then() {} };
  197. }
  198. }
  199. }
  200. return promise || {
  201. then: function then(callback) {
  202. return callback(data);
  203. } };
  204. }
  205. function wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  206. ['success', 'fail', 'complete'].forEach(function (name) {
  207. if (Array.isArray(interceptor[name])) {
  208. var oldCallback = options[name];
  209. options[name] = function callbackInterceptor(res) {
  210. queue(interceptor[name], res).then(function (res) {
  211. /* eslint-disable no-mixed-operators */
  212. return isFn(oldCallback) && oldCallback(res) || res;
  213. });
  214. };
  215. }
  216. });
  217. return options;
  218. }
  219. function wrapperReturnValue(method, returnValue) {
  220. var returnValueHooks = [];
  221. if (Array.isArray(globalInterceptors.returnValue)) {
  222. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));
  223. }
  224. var interceptor = scopedInterceptors[method];
  225. if (interceptor && Array.isArray(interceptor.returnValue)) {
  226. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));
  227. }
  228. returnValueHooks.forEach(function (hook) {
  229. returnValue = hook(returnValue) || returnValue;
  230. });
  231. return returnValue;
  232. }
  233. function getApiInterceptorHooks(method) {
  234. var interceptor = Object.create(null);
  235. Object.keys(globalInterceptors).forEach(function (hook) {
  236. if (hook !== 'returnValue') {
  237. interceptor[hook] = globalInterceptors[hook].slice();
  238. }
  239. });
  240. var scopedInterceptor = scopedInterceptors[method];
  241. if (scopedInterceptor) {
  242. Object.keys(scopedInterceptor).forEach(function (hook) {
  243. if (hook !== 'returnValue') {
  244. interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
  245. }
  246. });
  247. }
  248. return interceptor;
  249. }
  250. function invokeApi(method, api, options) {for (var _len = arguments.length, params = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {params[_key - 3] = arguments[_key];}
  251. var interceptor = getApiInterceptorHooks(method);
  252. if (interceptor && Object.keys(interceptor).length) {
  253. if (Array.isArray(interceptor.invoke)) {
  254. var res = queue(interceptor.invoke, options);
  255. return res.then(function (options) {
  256. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  257. });
  258. } else {
  259. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  260. }
  261. }
  262. return api.apply(void 0, [options].concat(params));
  263. }
  264. var promiseInterceptor = {
  265. returnValue: function returnValue(res) {
  266. if (!isPromise(res)) {
  267. return res;
  268. }
  269. return new Promise(function (resolve, reject) {
  270. res.then(function (res) {
  271. if (res[0]) {
  272. reject(res[0]);
  273. } else {
  274. resolve(res[1]);
  275. }
  276. });
  277. });
  278. } };
  279. var SYNC_API_RE =
  280. /^\$|Window$|WindowStyle$|sendHostEvent|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getLocale|setLocale/;
  281. var CONTEXT_API_RE = /^create|Manager$/;
  282. // Context例外情况
  283. var CONTEXT_API_RE_EXC = ['createBLEConnection'];
  284. // 同步例外情况
  285. var ASYNC_API = ['createBLEConnection'];
  286. var CALLBACK_API_RE = /^on|^off/;
  287. function isContextApi(name) {
  288. return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
  289. }
  290. function isSyncApi(name) {
  291. return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
  292. }
  293. function isCallbackApi(name) {
  294. return CALLBACK_API_RE.test(name) && name !== 'onPush';
  295. }
  296. function handlePromise(promise) {
  297. return promise.then(function (data) {
  298. return [null, data];
  299. }).
  300. catch(function (err) {return [err];});
  301. }
  302. function shouldPromise(name) {
  303. if (
  304. isContextApi(name) ||
  305. isSyncApi(name) ||
  306. isCallbackApi(name))
  307. {
  308. return false;
  309. }
  310. return true;
  311. }
  312. /* eslint-disable no-extend-native */
  313. if (!Promise.prototype.finally) {
  314. Promise.prototype.finally = function (callback) {
  315. var promise = this.constructor;
  316. return this.then(
  317. function (value) {return promise.resolve(callback()).then(function () {return value;});},
  318. function (reason) {return promise.resolve(callback()).then(function () {
  319. throw reason;
  320. });});
  321. };
  322. }
  323. function promisify(name, api) {
  324. if (!shouldPromise(name)) {
  325. return api;
  326. }
  327. return function promiseApi() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {params[_key2 - 1] = arguments[_key2];}
  328. if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
  329. return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));
  330. }
  331. return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {
  332. invokeApi.apply(void 0, [name, api, Object.assign({}, options, {
  333. success: resolve,
  334. fail: reject })].concat(
  335. params));
  336. })));
  337. };
  338. }
  339. var EPS = 1e-4;
  340. var BASE_DEVICE_WIDTH = 750;
  341. var isIOS = false;
  342. var deviceWidth = 0;
  343. var deviceDPR = 0;
  344. function checkDeviceWidth() {var _wx$getSystemInfoSync =
  345. wx.getSystemInfoSync(),platform = _wx$getSystemInfoSync.platform,pixelRatio = _wx$getSystemInfoSync.pixelRatio,windowWidth = _wx$getSystemInfoSync.windowWidth; // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni
  346. deviceWidth = windowWidth;
  347. deviceDPR = pixelRatio;
  348. isIOS = platform === 'ios';
  349. }
  350. function upx2px(number, newDeviceWidth) {
  351. if (deviceWidth === 0) {
  352. checkDeviceWidth();
  353. }
  354. number = Number(number);
  355. if (number === 0) {
  356. return 0;
  357. }
  358. var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);
  359. if (result < 0) {
  360. result = -result;
  361. }
  362. result = Math.floor(result + EPS);
  363. if (result === 0) {
  364. if (deviceDPR === 1 || !isIOS) {
  365. result = 1;
  366. } else {
  367. result = 0.5;
  368. }
  369. }
  370. return number < 0 ? -result : result;
  371. }
  372. function getLocale() {
  373. // 优先使用 $locale
  374. var app = getApp({
  375. allowDefault: true });
  376. if (app && app.$vm) {
  377. return app.$vm.$locale;
  378. }
  379. return wx.getSystemInfoSync().language || 'zh-Hans';
  380. }
  381. function setLocale(locale) {
  382. var app = getApp();
  383. if (!app) {
  384. return false;
  385. }
  386. var oldLocale = app.$vm.$locale;
  387. if (oldLocale !== locale) {
  388. app.$vm.$locale = locale;
  389. onLocaleChangeCallbacks.forEach(function (fn) {return fn({
  390. locale: locale });});
  391. return true;
  392. }
  393. return false;
  394. }
  395. var onLocaleChangeCallbacks = [];
  396. function onLocaleChange(fn) {
  397. if (onLocaleChangeCallbacks.indexOf(fn) === -1) {
  398. onLocaleChangeCallbacks.push(fn);
  399. }
  400. }
  401. if (typeof global !== 'undefined') {
  402. global.getLocale = getLocale;
  403. }
  404. var interceptors = {
  405. promiseInterceptor: promiseInterceptor };
  406. var baseApi = /*#__PURE__*/Object.freeze({
  407. __proto__: null,
  408. upx2px: upx2px,
  409. getLocale: getLocale,
  410. setLocale: setLocale,
  411. onLocaleChange: onLocaleChange,
  412. addInterceptor: addInterceptor,
  413. removeInterceptor: removeInterceptor,
  414. interceptors: interceptors });
  415. function findExistsPageIndex(url) {
  416. var pages = getCurrentPages();
  417. var len = pages.length;
  418. while (len--) {
  419. var page = pages[len];
  420. if (page.$page && page.$page.fullPath === url) {
  421. return len;
  422. }
  423. }
  424. return -1;
  425. }
  426. var redirectTo = {
  427. name: function name(fromArgs) {
  428. if (fromArgs.exists === 'back' && fromArgs.delta) {
  429. return 'navigateBack';
  430. }
  431. return 'redirectTo';
  432. },
  433. args: function args(fromArgs) {
  434. if (fromArgs.exists === 'back' && fromArgs.url) {
  435. var existsPageIndex = findExistsPageIndex(fromArgs.url);
  436. if (existsPageIndex !== -1) {
  437. var delta = getCurrentPages().length - 1 - existsPageIndex;
  438. if (delta > 0) {
  439. fromArgs.delta = delta;
  440. }
  441. }
  442. }
  443. } };
  444. var previewImage = {
  445. args: function args(fromArgs) {
  446. var currentIndex = parseInt(fromArgs.current);
  447. if (isNaN(currentIndex)) {
  448. return;
  449. }
  450. var urls = fromArgs.urls;
  451. if (!Array.isArray(urls)) {
  452. return;
  453. }
  454. var len = urls.length;
  455. if (!len) {
  456. return;
  457. }
  458. if (currentIndex < 0) {
  459. currentIndex = 0;
  460. } else if (currentIndex >= len) {
  461. currentIndex = len - 1;
  462. }
  463. if (currentIndex > 0) {
  464. fromArgs.current = urls[currentIndex];
  465. fromArgs.urls = urls.filter(
  466. function (item, index) {return index < currentIndex ? item !== urls[currentIndex] : true;});
  467. } else {
  468. fromArgs.current = urls[0];
  469. }
  470. return {
  471. indicator: false,
  472. loop: false };
  473. } };
  474. var UUID_KEY = '__DC_STAT_UUID';
  475. var deviceId;
  476. function addUuid(result) {
  477. deviceId = deviceId || wx.getStorageSync(UUID_KEY);
  478. if (!deviceId) {
  479. deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);
  480. wx.setStorage({
  481. key: UUID_KEY,
  482. data: deviceId });
  483. }
  484. result.deviceId = deviceId;
  485. }
  486. function addSafeAreaInsets(result) {
  487. if (result.safeArea) {
  488. var safeArea = result.safeArea;
  489. result.safeAreaInsets = {
  490. top: safeArea.top,
  491. left: safeArea.left,
  492. right: result.windowWidth - safeArea.right,
  493. bottom: result.windowHeight - safeArea.bottom };
  494. }
  495. }
  496. var getSystemInfo = {
  497. returnValue: function returnValue(result) {
  498. addUuid(result);
  499. addSafeAreaInsets(result);
  500. } };
  501. // import navigateTo from 'uni-helpers/navigate-to'
  502. var protocols = {
  503. redirectTo: redirectTo,
  504. // navigateTo, // 由于在微信开发者工具的页面参数,会显示__id__参数,因此暂时关闭mp-weixin对于navigateTo的AOP
  505. previewImage: previewImage,
  506. getSystemInfo: getSystemInfo,
  507. getSystemInfoSync: getSystemInfo };
  508. var todos = [
  509. 'vibrate',
  510. 'preloadPage',
  511. 'unPreloadPage',
  512. 'loadSubPackage'];
  513. var canIUses = [];
  514. var CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
  515. function processCallback(methodName, method, returnValue) {
  516. return function (res) {
  517. return method(processReturnValue(methodName, res, returnValue));
  518. };
  519. }
  520. function processArgs(methodName, fromArgs) {var argsOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};var returnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};var keepFromArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
  521. if (isPlainObject(fromArgs)) {// 一般 api 的参数解析
  522. var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值
  523. if (isFn(argsOption)) {
  524. argsOption = argsOption(fromArgs, toArgs) || {};
  525. }
  526. for (var key in fromArgs) {
  527. if (hasOwn(argsOption, key)) {
  528. var keyOption = argsOption[key];
  529. if (isFn(keyOption)) {
  530. keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
  531. }
  532. if (!keyOption) {// 不支持的参数
  533. console.warn("The '".concat(methodName, "' method of platform '\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F' does not support option '").concat(key, "'"));
  534. } else if (isStr(keyOption)) {// 重写参数 key
  535. toArgs[keyOption] = fromArgs[key];
  536. } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value
  537. toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
  538. }
  539. } else if (CALLBACKS.indexOf(key) !== -1) {
  540. if (isFn(fromArgs[key])) {
  541. toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);
  542. }
  543. } else {
  544. if (!keepFromArgs) {
  545. toArgs[key] = fromArgs[key];
  546. }
  547. }
  548. }
  549. return toArgs;
  550. } else if (isFn(fromArgs)) {
  551. fromArgs = processCallback(methodName, fromArgs, returnValue);
  552. }
  553. return fromArgs;
  554. }
  555. function processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  556. if (isFn(protocols.returnValue)) {// 处理通用 returnValue
  557. res = protocols.returnValue(methodName, res);
  558. }
  559. return processArgs(methodName, res, returnValue, {}, keepReturnValue);
  560. }
  561. function wrapper(methodName, method) {
  562. if (hasOwn(protocols, methodName)) {
  563. var protocol = protocols[methodName];
  564. if (!protocol) {// 暂不支持的 api
  565. return function () {
  566. console.error("Platform '\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F' does not support '".concat(methodName, "'."));
  567. };
  568. }
  569. return function (arg1, arg2) {// 目前 api 最多两个参数
  570. var options = protocol;
  571. if (isFn(protocol)) {
  572. options = protocol(arg1);
  573. }
  574. arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
  575. var args = [arg1];
  576. if (typeof arg2 !== 'undefined') {
  577. args.push(arg2);
  578. }
  579. if (isFn(options.name)) {
  580. methodName = options.name(arg1);
  581. } else if (isStr(options.name)) {
  582. methodName = options.name;
  583. }
  584. var returnValue = wx[methodName].apply(wx, args);
  585. if (isSyncApi(methodName)) {// 同步 api
  586. return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
  587. }
  588. return returnValue;
  589. };
  590. }
  591. return method;
  592. }
  593. var todoApis = Object.create(null);
  594. var TODOS = [
  595. 'onTabBarMidButtonTap',
  596. 'subscribePush',
  597. 'unsubscribePush',
  598. 'onPush',
  599. 'offPush',
  600. 'share'];
  601. function createTodoApi(name) {
  602. return function todoApi(_ref)
  603. {var fail = _ref.fail,complete = _ref.complete;
  604. var res = {
  605. errMsg: "".concat(name, ":fail method '").concat(name, "' not supported") };
  606. isFn(fail) && fail(res);
  607. isFn(complete) && complete(res);
  608. };
  609. }
  610. TODOS.forEach(function (name) {
  611. todoApis[name] = createTodoApi(name);
  612. });
  613. var providers = {
  614. oauth: ['weixin'],
  615. share: ['weixin'],
  616. payment: ['wxpay'],
  617. push: ['weixin'] };
  618. function getProvider(_ref2)
  619. {var service = _ref2.service,success = _ref2.success,fail = _ref2.fail,complete = _ref2.complete;
  620. var res = false;
  621. if (providers[service]) {
  622. res = {
  623. errMsg: 'getProvider:ok',
  624. service: service,
  625. provider: providers[service] };
  626. isFn(success) && success(res);
  627. } else {
  628. res = {
  629. errMsg: 'getProvider:fail service not found' };
  630. isFn(fail) && fail(res);
  631. }
  632. isFn(complete) && complete(res);
  633. }
  634. var extraApi = /*#__PURE__*/Object.freeze({
  635. __proto__: null,
  636. getProvider: getProvider });
  637. var getEmitter = function () {
  638. var Emitter;
  639. return function getUniEmitter() {
  640. if (!Emitter) {
  641. Emitter = new _vue.default();
  642. }
  643. return Emitter;
  644. };
  645. }();
  646. function apply(ctx, method, args) {
  647. return ctx[method].apply(ctx, args);
  648. }
  649. function $on() {
  650. return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));
  651. }
  652. function $off() {
  653. return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));
  654. }
  655. function $once() {
  656. return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));
  657. }
  658. function $emit() {
  659. return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));
  660. }
  661. var eventApi = /*#__PURE__*/Object.freeze({
  662. __proto__: null,
  663. $on: $on,
  664. $off: $off,
  665. $once: $once,
  666. $emit: $emit });
  667. var api = /*#__PURE__*/Object.freeze({
  668. __proto__: null });
  669. var MPPage = Page;
  670. var MPComponent = Component;
  671. var customizeRE = /:/g;
  672. var customize = cached(function (str) {
  673. return camelize(str.replace(customizeRE, '-'));
  674. });
  675. function initTriggerEvent(mpInstance) {
  676. var oldTriggerEvent = mpInstance.triggerEvent;
  677. var newTriggerEvent = function newTriggerEvent(event) {for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {args[_key3 - 1] = arguments[_key3];}
  678. return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));
  679. };
  680. try {
  681. // 京东小程序 triggerEvent 为只读
  682. mpInstance.triggerEvent = newTriggerEvent;
  683. } catch (error) {
  684. mpInstance._triggerEvent = newTriggerEvent;
  685. }
  686. }
  687. function initHook(name, options, isComponent) {
  688. var oldHook = options[name];
  689. if (!oldHook) {
  690. options[name] = function () {
  691. initTriggerEvent(this);
  692. };
  693. } else {
  694. options[name] = function () {
  695. initTriggerEvent(this);for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {args[_key4] = arguments[_key4];}
  696. return oldHook.apply(this, args);
  697. };
  698. }
  699. }
  700. if (!MPPage.__$wrappered) {
  701. MPPage.__$wrappered = true;
  702. Page = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  703. initHook('onLoad', options);
  704. return MPPage(options);
  705. };
  706. Page.after = MPPage.after;
  707. Component = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  708. initHook('created', options);
  709. return MPComponent(options);
  710. };
  711. }
  712. var PAGE_EVENT_HOOKS = [
  713. 'onPullDownRefresh',
  714. 'onReachBottom',
  715. 'onAddToFavorites',
  716. 'onShareTimeline',
  717. 'onShareAppMessage',
  718. 'onPageScroll',
  719. 'onResize',
  720. 'onTabItemTap'];
  721. function initMocks(vm, mocks) {
  722. var mpInstance = vm.$mp[vm.mpType];
  723. mocks.forEach(function (mock) {
  724. if (hasOwn(mpInstance, mock)) {
  725. vm[mock] = mpInstance[mock];
  726. }
  727. });
  728. }
  729. function hasHook(hook, vueOptions) {
  730. if (!vueOptions) {
  731. return true;
  732. }
  733. if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {
  734. return true;
  735. }
  736. vueOptions = vueOptions.default || vueOptions;
  737. if (isFn(vueOptions)) {
  738. if (isFn(vueOptions.extendOptions[hook])) {
  739. return true;
  740. }
  741. if (vueOptions.super &&
  742. vueOptions.super.options &&
  743. Array.isArray(vueOptions.super.options[hook])) {
  744. return true;
  745. }
  746. return false;
  747. }
  748. if (isFn(vueOptions[hook])) {
  749. return true;
  750. }
  751. var mixins = vueOptions.mixins;
  752. if (Array.isArray(mixins)) {
  753. return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});
  754. }
  755. }
  756. function initHooks(mpOptions, hooks, vueOptions) {
  757. hooks.forEach(function (hook) {
  758. if (hasHook(hook, vueOptions)) {
  759. mpOptions[hook] = function (args) {
  760. return this.$vm && this.$vm.__call_hook(hook, args);
  761. };
  762. }
  763. });
  764. }
  765. function initVueComponent(Vue, vueOptions) {
  766. vueOptions = vueOptions.default || vueOptions;
  767. var VueComponent;
  768. if (isFn(vueOptions)) {
  769. VueComponent = vueOptions;
  770. } else {
  771. VueComponent = Vue.extend(vueOptions);
  772. }
  773. vueOptions = VueComponent.options;
  774. return [VueComponent, vueOptions];
  775. }
  776. function initSlots(vm, vueSlots) {
  777. if (Array.isArray(vueSlots) && vueSlots.length) {
  778. var $slots = Object.create(null);
  779. vueSlots.forEach(function (slotName) {
  780. $slots[slotName] = true;
  781. });
  782. vm.$scopedSlots = vm.$slots = $slots;
  783. }
  784. }
  785. function initVueIds(vueIds, mpInstance) {
  786. vueIds = (vueIds || '').split(',');
  787. var len = vueIds.length;
  788. if (len === 1) {
  789. mpInstance._$vueId = vueIds[0];
  790. } else if (len === 2) {
  791. mpInstance._$vueId = vueIds[0];
  792. mpInstance._$vuePid = vueIds[1];
  793. }
  794. }
  795. function initData(vueOptions, context) {
  796. var data = vueOptions.data || {};
  797. var methods = vueOptions.methods || {};
  798. if (typeof data === 'function') {
  799. try {
  800. data = data.call(context); // 支持 Vue.prototype 上挂的数据
  801. } catch (e) {
  802. if (Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  803. console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);
  804. }
  805. }
  806. } else {
  807. try {
  808. // 对 data 格式化
  809. data = JSON.parse(JSON.stringify(data));
  810. } catch (e) {}
  811. }
  812. if (!isPlainObject(data)) {
  813. data = {};
  814. }
  815. Object.keys(methods).forEach(function (methodName) {
  816. if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {
  817. data[methodName] = methods[methodName];
  818. }
  819. });
  820. return data;
  821. }
  822. var PROP_TYPES = [String, Number, Boolean, Object, Array, null];
  823. function createObserver(name) {
  824. return function observer(newVal, oldVal) {
  825. if (this.$vm) {
  826. this.$vm[name] = newVal; // 为了触发其他非 render watcher
  827. }
  828. };
  829. }
  830. function initBehaviors(vueOptions, initBehavior) {
  831. var vueBehaviors = vueOptions.behaviors;
  832. var vueExtends = vueOptions.extends;
  833. var vueMixins = vueOptions.mixins;
  834. var vueProps = vueOptions.props;
  835. if (!vueProps) {
  836. vueOptions.props = vueProps = [];
  837. }
  838. var behaviors = [];
  839. if (Array.isArray(vueBehaviors)) {
  840. vueBehaviors.forEach(function (behavior) {
  841. behaviors.push(behavior.replace('uni://', "wx".concat("://")));
  842. if (behavior === 'uni://form-field') {
  843. if (Array.isArray(vueProps)) {
  844. vueProps.push('name');
  845. vueProps.push('value');
  846. } else {
  847. vueProps.name = {
  848. type: String,
  849. default: '' };
  850. vueProps.value = {
  851. type: [String, Number, Boolean, Array, Object, Date],
  852. default: '' };
  853. }
  854. }
  855. });
  856. }
  857. if (isPlainObject(vueExtends) && vueExtends.props) {
  858. behaviors.push(
  859. initBehavior({
  860. properties: initProperties(vueExtends.props, true) }));
  861. }
  862. if (Array.isArray(vueMixins)) {
  863. vueMixins.forEach(function (vueMixin) {
  864. if (isPlainObject(vueMixin) && vueMixin.props) {
  865. behaviors.push(
  866. initBehavior({
  867. properties: initProperties(vueMixin.props, true) }));
  868. }
  869. });
  870. }
  871. return behaviors;
  872. }
  873. function parsePropType(key, type, defaultValue, file) {
  874. // [String]=>String
  875. if (Array.isArray(type) && type.length === 1) {
  876. return type[0];
  877. }
  878. return type;
  879. }
  880. function initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
  881. var properties = {};
  882. if (!isBehavior) {
  883. properties.vueId = {
  884. type: String,
  885. value: '' };
  886. // 用于字节跳动小程序模拟抽象节点
  887. properties.generic = {
  888. type: Object,
  889. value: null };
  890. // scopedSlotsCompiler auto
  891. properties.scopedSlotsCompiler = {
  892. type: String,
  893. value: '' };
  894. properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
  895. type: null,
  896. value: [],
  897. observer: function observer(newVal, oldVal) {
  898. var $slots = Object.create(null);
  899. newVal.forEach(function (slotName) {
  900. $slots[slotName] = true;
  901. });
  902. this.setData({
  903. $slots: $slots });
  904. } };
  905. }
  906. if (Array.isArray(props)) {// ['title']
  907. props.forEach(function (key) {
  908. properties[key] = {
  909. type: null,
  910. observer: createObserver(key) };
  911. });
  912. } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}
  913. Object.keys(props).forEach(function (key) {
  914. var opts = props[key];
  915. if (isPlainObject(opts)) {// title:{type:String,default:''}
  916. var value = opts.default;
  917. if (isFn(value)) {
  918. value = value();
  919. }
  920. opts.type = parsePropType(key, opts.type);
  921. properties[key] = {
  922. type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,
  923. value: value,
  924. observer: createObserver(key) };
  925. } else {// content:String
  926. var type = parsePropType(key, opts);
  927. properties[key] = {
  928. type: PROP_TYPES.indexOf(type) !== -1 ? type : null,
  929. observer: createObserver(key) };
  930. }
  931. });
  932. }
  933. return properties;
  934. }
  935. function wrapper$1(event) {
  936. // TODO 又得兼容 mpvue 的 mp 对象
  937. try {
  938. event.mp = JSON.parse(JSON.stringify(event));
  939. } catch (e) {}
  940. event.stopPropagation = noop;
  941. event.preventDefault = noop;
  942. event.target = event.target || {};
  943. if (!hasOwn(event, 'detail')) {
  944. event.detail = {};
  945. }
  946. if (hasOwn(event, 'markerId')) {
  947. event.detail = typeof event.detail === 'object' ? event.detail : {};
  948. event.detail.markerId = event.markerId;
  949. }
  950. if (isPlainObject(event.detail)) {
  951. event.target = Object.assign({}, event.target, event.detail);
  952. }
  953. return event;
  954. }
  955. function getExtraValue(vm, dataPathsArray) {
  956. var context = vm;
  957. dataPathsArray.forEach(function (dataPathArray) {
  958. var dataPath = dataPathArray[0];
  959. var value = dataPathArray[2];
  960. if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']
  961. var propPath = dataPathArray[1];
  962. var valuePath = dataPathArray[3];
  963. var vFor;
  964. if (Number.isInteger(dataPath)) {
  965. vFor = dataPath;
  966. } else if (!dataPath) {
  967. vFor = context;
  968. } else if (typeof dataPath === 'string' && dataPath) {
  969. if (dataPath.indexOf('#s#') === 0) {
  970. vFor = dataPath.substr(3);
  971. } else {
  972. vFor = vm.__get_value(dataPath, context);
  973. }
  974. }
  975. if (Number.isInteger(vFor)) {
  976. context = value;
  977. } else if (!propPath) {
  978. context = vFor[value];
  979. } else {
  980. if (Array.isArray(vFor)) {
  981. context = vFor.find(function (vForItem) {
  982. return vm.__get_value(propPath, vForItem) === value;
  983. });
  984. } else if (isPlainObject(vFor)) {
  985. context = Object.keys(vFor).find(function (vForKey) {
  986. return vm.__get_value(propPath, vFor[vForKey]) === value;
  987. });
  988. } else {
  989. console.error('v-for 暂不支持循环数据:', vFor);
  990. }
  991. }
  992. if (valuePath) {
  993. context = vm.__get_value(valuePath, context);
  994. }
  995. }
  996. });
  997. return context;
  998. }
  999. function processEventExtra(vm, extra, event) {
  1000. var extraObj = {};
  1001. if (Array.isArray(extra) && extra.length) {
  1002. /**
  1003. *[
  1004. * ['data.items', 'data.id', item.data.id],
  1005. * ['metas', 'id', meta.id]
  1006. *],
  1007. *[
  1008. * ['data.items', 'data.id', item.data.id],
  1009. * ['metas', 'id', meta.id]
  1010. *],
  1011. *'test'
  1012. */
  1013. extra.forEach(function (dataPath, index) {
  1014. if (typeof dataPath === 'string') {
  1015. if (!dataPath) {// model,prop.sync
  1016. extraObj['$' + index] = vm;
  1017. } else {
  1018. if (dataPath === '$event') {// $event
  1019. extraObj['$' + index] = event;
  1020. } else if (dataPath === 'arguments') {
  1021. if (event.detail && event.detail.__args__) {
  1022. extraObj['$' + index] = event.detail.__args__;
  1023. } else {
  1024. extraObj['$' + index] = [event];
  1025. }
  1026. } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value
  1027. extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);
  1028. } else {
  1029. extraObj['$' + index] = vm.__get_value(dataPath);
  1030. }
  1031. }
  1032. } else {
  1033. extraObj['$' + index] = getExtraValue(vm, dataPath);
  1034. }
  1035. });
  1036. }
  1037. return extraObj;
  1038. }
  1039. function getObjByArray(arr) {
  1040. var obj = {};
  1041. for (var i = 1; i < arr.length; i++) {
  1042. var element = arr[i];
  1043. obj[element[0]] = element[1];
  1044. }
  1045. return obj;
  1046. }
  1047. function processEventArgs(vm, event) {var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];var isCustom = arguments.length > 4 ? arguments[4] : undefined;var methodName = arguments.length > 5 ? arguments[5] : undefined;
  1048. var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象
  1049. if (isCustom) {// 自定义事件
  1050. isCustomMPEvent = event.currentTarget &&
  1051. event.currentTarget.dataset &&
  1052. event.currentTarget.dataset.comType === 'wx';
  1053. if (!args.length) {// 无参数,直接传入 event 或 detail 数组
  1054. if (isCustomMPEvent) {
  1055. return [event];
  1056. }
  1057. return event.detail.__args__ || event.detail;
  1058. }
  1059. }
  1060. var extraObj = processEventExtra(vm, extra, event);
  1061. var ret = [];
  1062. args.forEach(function (arg) {
  1063. if (arg === '$event') {
  1064. if (methodName === '__set_model' && !isCustom) {// input v-model value
  1065. ret.push(event.target.value);
  1066. } else {
  1067. if (isCustom && !isCustomMPEvent) {
  1068. ret.push(event.detail.__args__[0]);
  1069. } else {// wxcomponent 组件或内置组件
  1070. ret.push(event);
  1071. }
  1072. }
  1073. } else {
  1074. if (Array.isArray(arg) && arg[0] === 'o') {
  1075. ret.push(getObjByArray(arg));
  1076. } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {
  1077. ret.push(extraObj[arg]);
  1078. } else {
  1079. ret.push(arg);
  1080. }
  1081. }
  1082. });
  1083. return ret;
  1084. }
  1085. var ONCE = '~';
  1086. var CUSTOM = '^';
  1087. function isMatchEventType(eventType, optType) {
  1088. return eventType === optType ||
  1089. optType === 'regionchange' && (
  1090. eventType === 'begin' ||
  1091. eventType === 'end');
  1092. }
  1093. function getContextVm(vm) {
  1094. var $parent = vm.$parent;
  1095. // 父组件是 scoped slots 或者其他自定义组件时继续查找
  1096. while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {
  1097. $parent = $parent.$parent;
  1098. }
  1099. return $parent && $parent.$parent;
  1100. }
  1101. function handleEvent(event) {var _this = this;
  1102. event = wrapper$1(event);
  1103. // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
  1104. var dataset = (event.currentTarget || event.target).dataset;
  1105. if (!dataset) {
  1106. return console.warn('事件信息不存在');
  1107. }
  1108. var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰
  1109. if (!eventOpts) {
  1110. return console.warn('事件信息不存在');
  1111. }
  1112. // [['handle',[1,2,a]],['handle1',[1,2,a]]]
  1113. var eventType = event.type;
  1114. var ret = [];
  1115. eventOpts.forEach(function (eventOpt) {
  1116. var type = eventOpt[0];
  1117. var eventsArray = eventOpt[1];
  1118. var isCustom = type.charAt(0) === CUSTOM;
  1119. type = isCustom ? type.slice(1) : type;
  1120. var isOnce = type.charAt(0) === ONCE;
  1121. type = isOnce ? type.slice(1) : type;
  1122. if (eventsArray && isMatchEventType(eventType, type)) {
  1123. eventsArray.forEach(function (eventArray) {
  1124. var methodName = eventArray[0];
  1125. if (methodName) {
  1126. var handlerCtx = _this.$vm;
  1127. if (handlerCtx.$options.generic) {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
  1128. handlerCtx = getContextVm(handlerCtx) || handlerCtx;
  1129. }
  1130. if (methodName === '$emit') {
  1131. handlerCtx.$emit.apply(handlerCtx,
  1132. processEventArgs(
  1133. _this.$vm,
  1134. event,
  1135. eventArray[1],
  1136. eventArray[2],
  1137. isCustom,
  1138. methodName));
  1139. return;
  1140. }
  1141. var handler = handlerCtx[methodName];
  1142. if (!isFn(handler)) {
  1143. throw new Error(" _vm.".concat(methodName, " is not a function"));
  1144. }
  1145. if (isOnce) {
  1146. if (handler.once) {
  1147. return;
  1148. }
  1149. handler.once = true;
  1150. }
  1151. var params = processEventArgs(
  1152. _this.$vm,
  1153. event,
  1154. eventArray[1],
  1155. eventArray[2],
  1156. isCustom,
  1157. methodName);
  1158. params = Array.isArray(params) ? params : [];
  1159. // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
  1160. if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) {
  1161. // eslint-disable-next-line no-sparse-arrays
  1162. params = params.concat([,,,,,,,,,, event]);
  1163. }
  1164. ret.push(handler.apply(handlerCtx, params));
  1165. }
  1166. });
  1167. }
  1168. });
  1169. if (
  1170. eventType === 'input' &&
  1171. ret.length === 1 &&
  1172. typeof ret[0] !== 'undefined')
  1173. {
  1174. return ret[0];
  1175. }
  1176. }
  1177. var messages = {};
  1178. var locale;
  1179. {
  1180. locale = wx.getSystemInfoSync().language;
  1181. }
  1182. function initI18nMessages() {
  1183. if (!isEnableLocale()) {
  1184. return;
  1185. }
  1186. var localeKeys = Object.keys(__uniConfig.locales);
  1187. if (localeKeys.length) {
  1188. localeKeys.forEach(function (locale) {
  1189. var curMessages = messages[locale];
  1190. var userMessages = __uniConfig.locales[locale];
  1191. if (curMessages) {
  1192. Object.assign(curMessages, userMessages);
  1193. } else {
  1194. messages[locale] = userMessages;
  1195. }
  1196. });
  1197. }
  1198. }
  1199. initI18nMessages();
  1200. var i18n = (0, _uniI18n.initVueI18n)(
  1201. locale,
  1202. {});
  1203. var t = i18n.t;
  1204. var i18nMixin = i18n.mixin = {
  1205. beforeCreate: function beforeCreate() {var _this2 = this;
  1206. var unwatch = i18n.i18n.watchLocale(function () {
  1207. _this2.$forceUpdate();
  1208. });
  1209. this.$once('hook:beforeDestroy', function () {
  1210. unwatch();
  1211. });
  1212. },
  1213. methods: {
  1214. $$t: function $$t(key, values) {
  1215. return t(key, values);
  1216. } } };
  1217. var setLocale$1 = i18n.setLocale;
  1218. var getLocale$1 = i18n.getLocale;
  1219. function initAppLocale(Vue, appVm, locale) {
  1220. var state = Vue.observable({
  1221. locale: locale || i18n.getLocale() });
  1222. var localeWatchers = [];
  1223. appVm.$watchLocale = function (fn) {
  1224. localeWatchers.push(fn);
  1225. };
  1226. Object.defineProperty(appVm, '$locale', {
  1227. get: function get() {
  1228. return state.locale;
  1229. },
  1230. set: function set(v) {
  1231. state.locale = v;
  1232. localeWatchers.forEach(function (watch) {return watch(v);});
  1233. } });
  1234. }
  1235. function isEnableLocale() {
  1236. return typeof __uniConfig !== 'undefined' && __uniConfig.locales && !!Object.keys(__uniConfig.locales).length;
  1237. }
  1238. // export function initI18n() {
  1239. // const localeKeys = Object.keys(__uniConfig.locales || {})
  1240. // if (localeKeys.length) {
  1241. // localeKeys.forEach((locale) =>
  1242. // i18n.add(locale, __uniConfig.locales[locale])
  1243. // )
  1244. // }
  1245. // }
  1246. var eventChannels = {};
  1247. var eventChannelStack = [];
  1248. function getEventChannel(id) {
  1249. if (id) {
  1250. var eventChannel = eventChannels[id];
  1251. delete eventChannels[id];
  1252. return eventChannel;
  1253. }
  1254. return eventChannelStack.shift();
  1255. }
  1256. var hooks = [
  1257. 'onShow',
  1258. 'onHide',
  1259. 'onError',
  1260. 'onPageNotFound',
  1261. 'onThemeChange',
  1262. 'onUnhandledRejection'];
  1263. function initEventChannel() {
  1264. _vue.default.prototype.getOpenerEventChannel = function () {
  1265. // 微信小程序使用自身getOpenerEventChannel
  1266. {
  1267. return this.$scope.getOpenerEventChannel();
  1268. }
  1269. };
  1270. var callHook = _vue.default.prototype.__call_hook;
  1271. _vue.default.prototype.__call_hook = function (hook, args) {
  1272. if (hook === 'onLoad' && args && args.__id__) {
  1273. this.__eventChannel__ = getEventChannel(args.__id__);
  1274. delete args.__id__;
  1275. }
  1276. return callHook.call(this, hook, args);
  1277. };
  1278. }
  1279. function initScopedSlotsParams() {
  1280. var center = {};
  1281. var parents = {};
  1282. _vue.default.prototype.$hasScopedSlotsParams = function (vueId) {
  1283. var has = center[vueId];
  1284. if (!has) {
  1285. parents[vueId] = this;
  1286. this.$on('hook:destroyed', function () {
  1287. delete parents[vueId];
  1288. });
  1289. }
  1290. return has;
  1291. };
  1292. _vue.default.prototype.$getScopedSlotsParams = function (vueId, name, key) {
  1293. var data = center[vueId];
  1294. if (data) {
  1295. var object = data[name] || {};
  1296. return key ? object[key] : object;
  1297. } else {
  1298. parents[vueId] = this;
  1299. this.$on('hook:destroyed', function () {
  1300. delete parents[vueId];
  1301. });
  1302. }
  1303. };
  1304. _vue.default.prototype.$setScopedSlotsParams = function (name, value) {
  1305. var vueIds = this.$options.propsData.vueId;
  1306. if (vueIds) {
  1307. var vueId = vueIds.split(',')[0];
  1308. var object = center[vueId] = center[vueId] || {};
  1309. object[name] = value;
  1310. if (parents[vueId]) {
  1311. parents[vueId].$forceUpdate();
  1312. }
  1313. }
  1314. };
  1315. _vue.default.mixin({
  1316. destroyed: function destroyed() {
  1317. var propsData = this.$options.propsData;
  1318. var vueId = propsData && propsData.vueId;
  1319. if (vueId) {
  1320. delete center[vueId];
  1321. delete parents[vueId];
  1322. }
  1323. } });
  1324. }
  1325. function parseBaseApp(vm, _ref3)
  1326. {var mocks = _ref3.mocks,initRefs = _ref3.initRefs;
  1327. initEventChannel();
  1328. {
  1329. initScopedSlotsParams();
  1330. }
  1331. if (vm.$options.store) {
  1332. _vue.default.prototype.$store = vm.$options.store;
  1333. }
  1334. uniIdMixin(_vue.default);
  1335. _vue.default.prototype.mpHost = "mp-weixin";
  1336. _vue.default.mixin({
  1337. beforeCreate: function beforeCreate() {
  1338. if (!this.$options.mpType) {
  1339. return;
  1340. }
  1341. this.mpType = this.$options.mpType;
  1342. this.$mp = _defineProperty({
  1343. data: {} },
  1344. this.mpType, this.$options.mpInstance);
  1345. this.$scope = this.$options.mpInstance;
  1346. delete this.$options.mpType;
  1347. delete this.$options.mpInstance;
  1348. if (this.mpType === 'page' && typeof getApp === 'function') {// hack vue-i18n
  1349. var app = getApp();
  1350. if (app.$vm && app.$vm.$i18n) {
  1351. this._i18n = app.$vm.$i18n;
  1352. }
  1353. }
  1354. if (this.mpType !== 'app') {
  1355. initRefs(this);
  1356. initMocks(this, mocks);
  1357. }
  1358. } });
  1359. var appOptions = {
  1360. onLaunch: function onLaunch(args) {
  1361. if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
  1362. return;
  1363. }
  1364. {
  1365. if (wx.canIUse && !wx.canIUse('nextTick')) {// 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断
  1366. console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上');
  1367. }
  1368. }
  1369. this.$vm = vm;
  1370. this.$vm.$mp = {
  1371. app: this };
  1372. this.$vm.$scope = this;
  1373. // vm 上也挂载 globalData
  1374. this.$vm.globalData = this.globalData;
  1375. this.$vm._isMounted = true;
  1376. this.$vm.__call_hook('mounted', args);
  1377. this.$vm.__call_hook('onLaunch', args);
  1378. } };
  1379. // 兼容旧版本 globalData
  1380. appOptions.globalData = vm.$options.globalData || {};
  1381. // 将 methods 中的方法挂在 getApp() 中
  1382. var methods = vm.$options.methods;
  1383. if (methods) {
  1384. Object.keys(methods).forEach(function (name) {
  1385. appOptions[name] = methods[name];
  1386. });
  1387. }
  1388. initAppLocale(_vue.default, vm, wx.getSystemInfoSync().language || 'zh-Hans');
  1389. initHooks(appOptions, hooks);
  1390. return appOptions;
  1391. }
  1392. var mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];
  1393. function findVmByVueId(vm, vuePid) {
  1394. var $children = vm.$children;
  1395. // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)
  1396. for (var i = $children.length - 1; i >= 0; i--) {
  1397. var childVm = $children[i];
  1398. if (childVm.$scope._$vueId === vuePid) {
  1399. return childVm;
  1400. }
  1401. }
  1402. // 反向递归查找
  1403. var parentVm;
  1404. for (var _i = $children.length - 1; _i >= 0; _i--) {
  1405. parentVm = findVmByVueId($children[_i], vuePid);
  1406. if (parentVm) {
  1407. return parentVm;
  1408. }
  1409. }
  1410. }
  1411. function initBehavior(options) {
  1412. return Behavior(options);
  1413. }
  1414. function isPage() {
  1415. return !!this.route;
  1416. }
  1417. function initRelation(detail) {
  1418. this.triggerEvent('__l', detail);
  1419. }
  1420. function selectAllComponents(mpInstance, selector, $refs) {
  1421. var components = mpInstance.selectAllComponents(selector);
  1422. components.forEach(function (component) {
  1423. var ref = component.dataset.ref;
  1424. $refs[ref] = component.$vm || component;
  1425. {
  1426. if (component.dataset.vueGeneric === 'scoped') {
  1427. component.selectAllComponents('.scoped-ref').forEach(function (scopedComponent) {
  1428. selectAllComponents(scopedComponent, selector, $refs);
  1429. });
  1430. }
  1431. }
  1432. });
  1433. }
  1434. function initRefs(vm) {
  1435. var mpInstance = vm.$scope;
  1436. Object.defineProperty(vm, '$refs', {
  1437. get: function get() {
  1438. var $refs = {};
  1439. selectAllComponents(mpInstance, '.vue-ref', $refs);
  1440. // TODO 暂不考虑 for 中的 scoped
  1441. var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');
  1442. forComponents.forEach(function (component) {
  1443. var ref = component.dataset.ref;
  1444. if (!$refs[ref]) {
  1445. $refs[ref] = [];
  1446. }
  1447. $refs[ref].push(component.$vm || component);
  1448. });
  1449. return $refs;
  1450. } });
  1451. }
  1452. function handleLink(event) {var _ref4 =
  1453. event.detail || event.value,vuePid = _ref4.vuePid,vueOptions = _ref4.vueOptions; // detail 是微信,value 是百度(dipatch)
  1454. var parentVm;
  1455. if (vuePid) {
  1456. parentVm = findVmByVueId(this.$vm, vuePid);
  1457. }
  1458. if (!parentVm) {
  1459. parentVm = this.$vm;
  1460. }
  1461. vueOptions.parent = parentVm;
  1462. }
  1463. function parseApp(vm) {
  1464. return parseBaseApp(vm, {
  1465. mocks: mocks,
  1466. initRefs: initRefs });
  1467. }
  1468. function createApp(vm) {
  1469. App(parseApp(vm));
  1470. return vm;
  1471. }
  1472. var encodeReserveRE = /[!'()*]/g;
  1473. var encodeReserveReplacer = function encodeReserveReplacer(c) {return '%' + c.charCodeAt(0).toString(16);};
  1474. var commaRE = /%2C/g;
  1475. // fixed encodeURIComponent which is more conformant to RFC3986:
  1476. // - escapes [!'()*]
  1477. // - preserve commas
  1478. var encode = function encode(str) {return encodeURIComponent(str).
  1479. replace(encodeReserveRE, encodeReserveReplacer).
  1480. replace(commaRE, ',');};
  1481. function stringifyQuery(obj) {var encodeStr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : encode;
  1482. var res = obj ? Object.keys(obj).map(function (key) {
  1483. var val = obj[key];
  1484. if (val === undefined) {
  1485. return '';
  1486. }
  1487. if (val === null) {
  1488. return encodeStr(key);
  1489. }
  1490. if (Array.isArray(val)) {
  1491. var result = [];
  1492. val.forEach(function (val2) {
  1493. if (val2 === undefined) {
  1494. return;
  1495. }
  1496. if (val2 === null) {
  1497. result.push(encodeStr(key));
  1498. } else {
  1499. result.push(encodeStr(key) + '=' + encodeStr(val2));
  1500. }
  1501. });
  1502. return result.join('&');
  1503. }
  1504. return encodeStr(key) + '=' + encodeStr(val);
  1505. }).filter(function (x) {return x.length > 0;}).join('&') : null;
  1506. return res ? "?".concat(res) : '';
  1507. }
  1508. function parseBaseComponent(vueComponentOptions)
  1509. {var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref5.isPage,initRelation = _ref5.initRelation;var _initVueComponent =
  1510. initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];
  1511. var options = _objectSpread({
  1512. multipleSlots: true,
  1513. addGlobalClass: true },
  1514. vueOptions.options || {});
  1515. {
  1516. // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项
  1517. if (vueOptions['mp-weixin'] && vueOptions['mp-weixin'].options) {
  1518. Object.assign(options, vueOptions['mp-weixin'].options);
  1519. }
  1520. }
  1521. var componentOptions = {
  1522. options: options,
  1523. data: initData(vueOptions, _vue.default.prototype),
  1524. behaviors: initBehaviors(vueOptions, initBehavior),
  1525. properties: initProperties(vueOptions.props, false, vueOptions.__file),
  1526. lifetimes: {
  1527. attached: function attached() {
  1528. var properties = this.properties;
  1529. var options = {
  1530. mpType: isPage.call(this) ? 'page' : 'component',
  1531. mpInstance: this,
  1532. propsData: properties };
  1533. initVueIds(properties.vueId, this);
  1534. // 处理父子关系
  1535. initRelation.call(this, {
  1536. vuePid: this._$vuePid,
  1537. vueOptions: options });
  1538. // 初始化 vue 实例
  1539. this.$vm = new VueComponent(options);
  1540. // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
  1541. initSlots(this.$vm, properties.vueSlots);
  1542. // 触发首次 setData
  1543. this.$vm.$mount();
  1544. },
  1545. ready: function ready() {
  1546. // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发
  1547. // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800
  1548. if (this.$vm) {
  1549. this.$vm._isMounted = true;
  1550. this.$vm.__call_hook('mounted');
  1551. this.$vm.__call_hook('onReady');
  1552. }
  1553. },
  1554. detached: function detached() {
  1555. this.$vm && this.$vm.$destroy();
  1556. } },
  1557. pageLifetimes: {
  1558. show: function show(args) {
  1559. this.$vm && this.$vm.__call_hook('onPageShow', args);
  1560. },
  1561. hide: function hide() {
  1562. this.$vm && this.$vm.__call_hook('onPageHide');
  1563. },
  1564. resize: function resize(size) {
  1565. this.$vm && this.$vm.__call_hook('onPageResize', size);
  1566. } },
  1567. methods: {
  1568. __l: handleLink,
  1569. __e: handleEvent } };
  1570. // externalClasses
  1571. if (vueOptions.externalClasses) {
  1572. componentOptions.externalClasses = vueOptions.externalClasses;
  1573. }
  1574. if (Array.isArray(vueOptions.wxsCallMethods)) {
  1575. vueOptions.wxsCallMethods.forEach(function (callMethod) {
  1576. componentOptions.methods[callMethod] = function (args) {
  1577. return this.$vm[callMethod](args);
  1578. };
  1579. });
  1580. }
  1581. if (isPage) {
  1582. return componentOptions;
  1583. }
  1584. return [componentOptions, VueComponent];
  1585. }
  1586. function parseComponent(vueComponentOptions) {
  1587. return parseBaseComponent(vueComponentOptions, {
  1588. isPage: isPage,
  1589. initRelation: initRelation });
  1590. }
  1591. var hooks$1 = [
  1592. 'onShow',
  1593. 'onHide',
  1594. 'onUnload'];
  1595. hooks$1.push.apply(hooks$1, PAGE_EVENT_HOOKS);
  1596. function parseBasePage(vuePageOptions, _ref6)
  1597. {var isPage = _ref6.isPage,initRelation = _ref6.initRelation;
  1598. var pageOptions = parseComponent(vuePageOptions);
  1599. initHooks(pageOptions.methods, hooks$1, vuePageOptions);
  1600. pageOptions.methods.onLoad = function (query) {
  1601. this.options = query;
  1602. var copyQuery = Object.assign({}, query);
  1603. delete copyQuery.__id__;
  1604. this.$page = {
  1605. fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery) };
  1606. this.$vm.$mp.query = query; // 兼容 mpvue
  1607. this.$vm.__call_hook('onLoad', query);
  1608. };
  1609. return pageOptions;
  1610. }
  1611. function parsePage(vuePageOptions) {
  1612. return parseBasePage(vuePageOptions, {
  1613. isPage: isPage,
  1614. initRelation: initRelation });
  1615. }
  1616. function createPage(vuePageOptions) {
  1617. {
  1618. return Component(parsePage(vuePageOptions));
  1619. }
  1620. }
  1621. function createComponent(vueOptions) {
  1622. {
  1623. return Component(parseComponent(vueOptions));
  1624. }
  1625. }
  1626. function createSubpackageApp(vm) {
  1627. var appOptions = parseApp(vm);
  1628. var app = getApp({
  1629. allowDefault: true });
  1630. vm.$scope = app;
  1631. var globalData = app.globalData;
  1632. if (globalData) {
  1633. Object.keys(appOptions.globalData).forEach(function (name) {
  1634. if (!hasOwn(globalData, name)) {
  1635. globalData[name] = appOptions.globalData[name];
  1636. }
  1637. });
  1638. }
  1639. Object.keys(appOptions).forEach(function (name) {
  1640. if (!hasOwn(app, name)) {
  1641. app[name] = appOptions[name];
  1642. }
  1643. });
  1644. if (isFn(appOptions.onShow) && wx.onAppShow) {
  1645. wx.onAppShow(function () {for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {args[_key5] = arguments[_key5];}
  1646. vm.__call_hook('onShow', args);
  1647. });
  1648. }
  1649. if (isFn(appOptions.onHide) && wx.onAppHide) {
  1650. wx.onAppHide(function () {for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {args[_key6] = arguments[_key6];}
  1651. vm.__call_hook('onHide', args);
  1652. });
  1653. }
  1654. if (isFn(appOptions.onLaunch)) {
  1655. var args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();
  1656. vm.__call_hook('onLaunch', args);
  1657. }
  1658. return vm;
  1659. }
  1660. function createPlugin(vm) {
  1661. var appOptions = parseApp(vm);
  1662. if (isFn(appOptions.onShow) && wx.onAppShow) {
  1663. wx.onAppShow(function () {for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {args[_key7] = arguments[_key7];}
  1664. vm.__call_hook('onShow', args);
  1665. });
  1666. }
  1667. if (isFn(appOptions.onHide) && wx.onAppHide) {
  1668. wx.onAppHide(function () {for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {args[_key8] = arguments[_key8];}
  1669. vm.__call_hook('onHide', args);
  1670. });
  1671. }
  1672. if (isFn(appOptions.onLaunch)) {
  1673. var args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();
  1674. vm.__call_hook('onLaunch', args);
  1675. }
  1676. return vm;
  1677. }
  1678. todos.forEach(function (todoApi) {
  1679. protocols[todoApi] = false;
  1680. });
  1681. canIUses.forEach(function (canIUseApi) {
  1682. var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :
  1683. canIUseApi;
  1684. if (!wx.canIUse(apiName)) {
  1685. protocols[canIUseApi] = false;
  1686. }
  1687. });
  1688. var uni = {};
  1689. if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') {
  1690. uni = new Proxy({}, {
  1691. get: function get(target, name) {
  1692. if (hasOwn(target, name)) {
  1693. return target[name];
  1694. }
  1695. if (baseApi[name]) {
  1696. return baseApi[name];
  1697. }
  1698. if (api[name]) {
  1699. return promisify(name, api[name]);
  1700. }
  1701. {
  1702. if (extraApi[name]) {
  1703. return promisify(name, extraApi[name]);
  1704. }
  1705. if (todoApis[name]) {
  1706. return promisify(name, todoApis[name]);
  1707. }
  1708. }
  1709. if (eventApi[name]) {
  1710. return eventApi[name];
  1711. }
  1712. if (!hasOwn(wx, name) && !hasOwn(protocols, name)) {
  1713. return;
  1714. }
  1715. return promisify(name, wrapper(name, wx[name]));
  1716. },
  1717. set: function set(target, name, value) {
  1718. target[name] = value;
  1719. return true;
  1720. } });
  1721. } else {
  1722. Object.keys(baseApi).forEach(function (name) {
  1723. uni[name] = baseApi[name];
  1724. });
  1725. {
  1726. Object.keys(todoApis).forEach(function (name) {
  1727. uni[name] = promisify(name, todoApis[name]);
  1728. });
  1729. Object.keys(extraApi).forEach(function (name) {
  1730. uni[name] = promisify(name, todoApis[name]);
  1731. });
  1732. }
  1733. Object.keys(eventApi).forEach(function (name) {
  1734. uni[name] = eventApi[name];
  1735. });
  1736. Object.keys(api).forEach(function (name) {
  1737. uni[name] = promisify(name, api[name]);
  1738. });
  1739. Object.keys(wx).forEach(function (name) {
  1740. if (hasOwn(wx, name) || hasOwn(protocols, name)) {
  1741. uni[name] = promisify(name, wrapper(name, wx[name]));
  1742. }
  1743. });
  1744. }
  1745. wx.createApp = createApp;
  1746. wx.createPage = createPage;
  1747. wx.createComponent = createComponent;
  1748. wx.createSubpackageApp = createSubpackageApp;
  1749. wx.createPlugin = createPlugin;
  1750. var uni$1 = uni;var _default =
  1751. uni$1;exports.default = _default;
  1752. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ 2)))
  1753. /***/ }),
  1754. /***/ 11:
  1755. /*!**********************************************************************************************************!*\
  1756. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js ***!
  1757. \**********************************************************************************************************/
  1758. /*! exports provided: default */
  1759. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1760. "use strict";
  1761. __webpack_require__.r(__webpack_exports__);
  1762. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
  1763. /* globals __VUE_SSR_CONTEXT__ */
  1764. // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
  1765. // This module is a runtime utility for cleaner component module output and will
  1766. // be included in the final webpack user bundle.
  1767. function normalizeComponent (
  1768. scriptExports,
  1769. render,
  1770. staticRenderFns,
  1771. functionalTemplate,
  1772. injectStyles,
  1773. scopeId,
  1774. moduleIdentifier, /* server only */
  1775. shadowMode, /* vue-cli only */
  1776. components, // fixed by xxxxxx auto components
  1777. renderjs // fixed by xxxxxx renderjs
  1778. ) {
  1779. // Vue.extend constructor export interop
  1780. var options = typeof scriptExports === 'function'
  1781. ? scriptExports.options
  1782. : scriptExports
  1783. // fixed by xxxxxx auto components
  1784. if (components) {
  1785. if (!options.components) {
  1786. options.components = {}
  1787. }
  1788. var hasOwn = Object.prototype.hasOwnProperty
  1789. for (var name in components) {
  1790. if (hasOwn.call(components, name) && !hasOwn.call(options.components, name)) {
  1791. options.components[name] = components[name]
  1792. }
  1793. }
  1794. }
  1795. // fixed by xxxxxx renderjs
  1796. if (renderjs) {
  1797. (renderjs.beforeCreate || (renderjs.beforeCreate = [])).unshift(function() {
  1798. this[renderjs.__module] = this
  1799. });
  1800. (options.mixins || (options.mixins = [])).push(renderjs)
  1801. }
  1802. // render functions
  1803. if (render) {
  1804. options.render = render
  1805. options.staticRenderFns = staticRenderFns
  1806. options._compiled = true
  1807. }
  1808. // functional template
  1809. if (functionalTemplate) {
  1810. options.functional = true
  1811. }
  1812. // scopedId
  1813. if (scopeId) {
  1814. options._scopeId = 'data-v-' + scopeId
  1815. }
  1816. var hook
  1817. if (moduleIdentifier) { // server build
  1818. hook = function (context) {
  1819. // 2.3 injection
  1820. context =
  1821. context || // cached call
  1822. (this.$vnode && this.$vnode.ssrContext) || // stateful
  1823. (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
  1824. // 2.2 with runInNewContext: true
  1825. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  1826. context = __VUE_SSR_CONTEXT__
  1827. }
  1828. // inject component styles
  1829. if (injectStyles) {
  1830. injectStyles.call(this, context)
  1831. }
  1832. // register component module identifier for async chunk inferrence
  1833. if (context && context._registeredComponents) {
  1834. context._registeredComponents.add(moduleIdentifier)
  1835. }
  1836. }
  1837. // used by ssr in case component is cached and beforeCreate
  1838. // never gets called
  1839. options._ssrRegister = hook
  1840. } else if (injectStyles) {
  1841. hook = shadowMode
  1842. ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
  1843. : injectStyles
  1844. }
  1845. if (hook) {
  1846. if (options.functional) {
  1847. // for template-only hot-reload because in that case the render fn doesn't
  1848. // go through the normalizer
  1849. options._injectStyles = hook
  1850. // register for functioal component in vue file
  1851. var originalRender = options.render
  1852. options.render = function renderWithStyleInjection (h, context) {
  1853. hook.call(context)
  1854. return originalRender(h, context)
  1855. }
  1856. } else {
  1857. // inject component registration as beforeCreate hook
  1858. var existing = options.beforeCreate
  1859. options.beforeCreate = existing
  1860. ? [].concat(existing, hook)
  1861. : [hook]
  1862. }
  1863. }
  1864. return {
  1865. exports: scriptExports,
  1866. options: options
  1867. }
  1868. }
  1869. /***/ }),
  1870. /***/ 12:
  1871. /*!****************************************************************!*\
  1872. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/index.js ***!
  1873. \****************************************************************/
  1874. /*! no static exports found */
  1875. /***/ (function(module, exports, __webpack_require__) {
  1876. "use strict";
  1877. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;
  1878. var _mixin = _interopRequireDefault(__webpack_require__(/*! ./libs/mixin/mixin.js */ 13));
  1879. var _request = _interopRequireDefault(__webpack_require__(/*! ./libs/request */ 14));
  1880. var _queryParams = _interopRequireDefault(__webpack_require__(/*! ./libs/function/queryParams.js */ 18));
  1881. var _route = _interopRequireDefault(__webpack_require__(/*! ./libs/function/route.js */ 19));
  1882. var _timeFormat = _interopRequireDefault(__webpack_require__(/*! ./libs/function/timeFormat.js */ 23));
  1883. var _timeFrom = _interopRequireDefault(__webpack_require__(/*! ./libs/function/timeFrom.js */ 24));
  1884. var _colorGradient = _interopRequireDefault(__webpack_require__(/*! ./libs/function/colorGradient.js */ 25));
  1885. var _guid = _interopRequireDefault(__webpack_require__(/*! ./libs/function/guid.js */ 26));
  1886. var _color = _interopRequireDefault(__webpack_require__(/*! ./libs/function/color.js */ 27));
  1887. var _type2icon = _interopRequireDefault(__webpack_require__(/*! ./libs/function/type2icon.js */ 28));
  1888. var _randomArray = _interopRequireDefault(__webpack_require__(/*! ./libs/function/randomArray.js */ 29));
  1889. var _deepClone = _interopRequireDefault(__webpack_require__(/*! ./libs/function/deepClone.js */ 16));
  1890. var _deepMerge = _interopRequireDefault(__webpack_require__(/*! ./libs/function/deepMerge.js */ 15));
  1891. var _addUnit = _interopRequireDefault(__webpack_require__(/*! ./libs/function/addUnit.js */ 30));
  1892. var _test = _interopRequireDefault(__webpack_require__(/*! ./libs/function/test.js */ 17));
  1893. var _random = _interopRequireDefault(__webpack_require__(/*! ./libs/function/random.js */ 31));
  1894. var _trim = _interopRequireDefault(__webpack_require__(/*! ./libs/function/trim.js */ 32));
  1895. var _toast = _interopRequireDefault(__webpack_require__(/*! ./libs/function/toast.js */ 33));
  1896. var _getParent = _interopRequireDefault(__webpack_require__(/*! ./libs/function/getParent.js */ 34));
  1897. var _$parent = _interopRequireDefault(__webpack_require__(/*! ./libs/function/$parent.js */ 35));
  1898. var _sys = __webpack_require__(/*! ./libs/function/sys.js */ 36);
  1899. var _debounce = _interopRequireDefault(__webpack_require__(/*! ./libs/function/debounce.js */ 37));
  1900. var _throttle = _interopRequireDefault(__webpack_require__(/*! ./libs/function/throttle.js */ 38));
  1901. var _config = _interopRequireDefault(__webpack_require__(/*! ./libs/config/config.js */ 39));
  1902. var _zIndex = _interopRequireDefault(__webpack_require__(/*! ./libs/config/zIndex.js */ 40));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} // 引入全局mixin
  1903. // 引入关于是否mixin集成小程序分享的配置
  1904. // import wxshare from './libs/mixin/mpShare.js'
  1905. // 全局挂载引入http相关请求拦截插件
  1906. function wranning(str) {// 开发环境进行信息输出,主要是一些报错信息
  1907. // 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:
  1908. // https://uniapp.dcloud.io/frame?id=%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e5%92%8c%e7%94%9f%e4%ba%a7%e7%8e%af%e5%a2%83
  1909. if (true) {console.warn(str);}} // 尝试判断在根目录的/store中是否有$u.mixin.js,此文件uView默认为需要挂在到全局的vuex的state变量
  1910. // HX2.6.11版本,放到try中,控制台依然会警告,暂时不用此方式,
  1911. // let vuexStore = {};
  1912. // try {
  1913. // vuexStore = require("@/store/$u.mixin.js");
  1914. // } catch (e) {
  1915. // //TODO handle the exception
  1916. // }
  1917. // post类型对象参数转为get类型url参数
  1918. var $u = { queryParams: _queryParams.default, route: _route.default, timeFormat: _timeFormat.default, date: _timeFormat.default, // 另名date
  1919. timeFrom: _timeFrom.default, colorGradient: _colorGradient.default.colorGradient, colorToRgba: _colorGradient.default.colorToRgba, guid: _guid.default, color: _color.default, sys: _sys.sys, os: _sys.os, type2icon: _type2icon.default, randomArray: _randomArray.default, wranning: wranning, get: _request.default.get,
  1920. post: _request.default.post,
  1921. put: _request.default.put,
  1922. 'delete': _request.default.delete,
  1923. hexToRgb: _colorGradient.default.hexToRgb,
  1924. rgbToHex: _colorGradient.default.rgbToHex,
  1925. test: _test.default,
  1926. random: _random.default,
  1927. deepClone: _deepClone.default,
  1928. deepMerge: _deepMerge.default,
  1929. getParent: _getParent.default,
  1930. $parent: _$parent.default,
  1931. addUnit: _addUnit.default,
  1932. trim: _trim.default,
  1933. type: ['primary', 'success', 'error', 'warning', 'info'],
  1934. http: _request.default,
  1935. toast: _toast.default,
  1936. config: _config.default, // uView配置信息相关,比如版本号
  1937. zIndex: _zIndex.default,
  1938. debounce: _debounce.default,
  1939. throttle: _throttle.default };
  1940. // $u挂载到uni对象上
  1941. uni.$u = $u;
  1942. var install = function install(Vue) {
  1943. Vue.mixin(_mixin.default);
  1944. if (Vue.prototype.openShare) {
  1945. Vue.mixin(mpShare);
  1946. }
  1947. // Vue.mixin(vuexStore);
  1948. // 时间格式化,同时两个名称,date和timeFormat
  1949. Vue.filter('timeFormat', function (timestamp, format) {
  1950. return (0, _timeFormat.default)(timestamp, format);
  1951. });
  1952. Vue.filter('date', function (timestamp, format) {
  1953. return (0, _timeFormat.default)(timestamp, format);
  1954. });
  1955. // 将多久以前的方法,注入到全局过滤器
  1956. Vue.filter('timeFrom', function (timestamp, format) {
  1957. return (0, _timeFrom.default)(timestamp, format);
  1958. });
  1959. Vue.prototype.$u = $u;
  1960. };var _default =
  1961. {
  1962. install: install };exports.default = _default;
  1963. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  1964. /***/ }),
  1965. /***/ 13:
  1966. /*!***************************************************************************!*\
  1967. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/mixin/mixin.js ***!
  1968. \***************************************************************************/
  1969. /*! no static exports found */
  1970. /***/ (function(module, exports, __webpack_require__) {
  1971. /* WEBPACK VAR INJECTION */(function(uni) {module.exports = {
  1972. data: function data() {
  1973. return {};
  1974. },
  1975. onLoad: function onLoad() {
  1976. // getRect挂载到$u上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出
  1977. this.$u.getRect = this.$uGetRect;
  1978. },
  1979. methods: {
  1980. // 查询节点信息
  1981. // 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
  1982. // 解决办法为在组件根部再套一个没有任何作用的view元素
  1983. $uGetRect: function $uGetRect(selector, all) {var _this = this;
  1984. return new Promise(function (resolve) {
  1985. uni.createSelectorQuery().
  1986. in(_this)[all ? 'selectAll' : 'select'](selector).
  1987. boundingClientRect(function (rect) {
  1988. if (all && Array.isArray(rect) && rect.length) {
  1989. resolve(rect);
  1990. }
  1991. if (!all && rect) {
  1992. resolve(rect);
  1993. }
  1994. }).
  1995. exec();
  1996. });
  1997. },
  1998. getParentData: function getParentData() {var _this2 = this;var parentName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  1999. // 避免在created中去定义parent变量
  2000. if (!this.parent) this.parent = false;
  2001. // 这里的本质原理是,通过获取父组件实例(也即u-radio-group的this)
  2002. // 将父组件this中对应的参数,赋值给本组件(u-radio的this)的parentData对象中对应的属性
  2003. // 之所以需要这么做,是因为所有端中,头条小程序不支持通过this.parent.xxx去监听父组件参数的变化
  2004. this.parent = this.$u.$parent.call(this, parentName);
  2005. if (this.parent) {
  2006. // 历遍parentData中的属性,将parent中的同名属性赋值给parentData
  2007. Object.keys(this.parentData).map(function (key) {
  2008. _this2.parentData[key] = _this2.parent[key];
  2009. });
  2010. }
  2011. },
  2012. // 阻止事件冒泡
  2013. preventEvent: function preventEvent(e) {
  2014. e && e.stopPropagation && e.stopPropagation();
  2015. } },
  2016. onReachBottom: function onReachBottom() {
  2017. uni.$emit('uOnReachBottom');
  2018. } };
  2019. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  2020. /***/ }),
  2021. /***/ 14:
  2022. /*!*****************************************************************************!*\
  2023. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/request/index.js ***!
  2024. \*****************************************************************************/
  2025. /*! no static exports found */
  2026. /***/ (function(module, exports, __webpack_require__) {
  2027. "use strict";
  2028. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _deepMerge = _interopRequireDefault(__webpack_require__(/*! ../function/deepMerge */ 15));
  2029. var _test = _interopRequireDefault(__webpack_require__(/*! ../function/test */ 17));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}var
  2030. Request = /*#__PURE__*/function () {_createClass(Request, [{ key: "setConfig",
  2031. // 设置全局默认配置
  2032. value: function setConfig(customConfig) {
  2033. // 深度合并对象,否则会造成对象深层属性丢失
  2034. this.config = (0, _deepMerge.default)(this.config, customConfig);
  2035. }
  2036. // 主要请求部分
  2037. }, { key: "request", value: function request() {var _this = this;var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  2038. // 检查请求拦截
  2039. if (this.interceptor.request && typeof this.interceptor.request === 'function') {
  2040. var tmpConfig = {};
  2041. var interceptorRequest = this.interceptor.request(options);
  2042. if (interceptorRequest === false) {
  2043. // 返回一个处于pending状态中的Promise,来取消原promise,避免进入then()回调
  2044. return new Promise(function () {});
  2045. }
  2046. this.options = interceptorRequest;
  2047. }
  2048. options.dataType = options.dataType || this.config.dataType;
  2049. options.responseType = options.responseType || this.config.responseType;
  2050. options.url = options.url || '';
  2051. options.params = options.params || {};
  2052. options.header = Object.assign(this.config.header, options.header);
  2053. options.method = options.method || this.config.method;
  2054. return new Promise(function (resolve, reject) {
  2055. options.complete = function (response) {
  2056. // 请求返回后,隐藏loading(如果请求返回快的话,可能会没有loading)
  2057. uni.hideLoading();
  2058. // 清除定时器,如果请求回来了,就无需loading
  2059. clearTimeout(_this.config.timer);
  2060. _this.config.timer = null;
  2061. // 判断用户对拦截返回数据的要求,如果originalData为true,返回所有的数据(response)到拦截器,否则只返回response.data
  2062. if (_this.config.originalData) {
  2063. // 判断是否存在拦截器
  2064. if (_this.interceptor.response && typeof _this.interceptor.response === 'function') {
  2065. var resInterceptors = _this.interceptor.response(response);
  2066. // 如果拦截器不返回false,就将拦截器返回的内容给this.$u.post的then回调
  2067. if (resInterceptors !== false) {
  2068. resolve(resInterceptors);
  2069. } else {
  2070. // 如果拦截器返回false,意味着拦截器定义者认为返回有问题,直接接入catch回调
  2071. reject(response);
  2072. }
  2073. } else {
  2074. // 如果要求返回原始数据,就算没有拦截器,也返回最原始的数据
  2075. resolve(response);
  2076. }
  2077. } else {
  2078. if (response.statusCode == 200) {
  2079. if (_this.interceptor.response && typeof _this.interceptor.response === 'function') {
  2080. var _resInterceptors = _this.interceptor.response(response.data);
  2081. if (_resInterceptors !== false) {
  2082. resolve(_resInterceptors);
  2083. } else {
  2084. reject(response.data);
  2085. }
  2086. } else {
  2087. // 如果不是返回原始数据(originalData=false),且没有拦截器的情况下,返回纯数据给then回调
  2088. resolve(response.data);
  2089. }
  2090. } else {
  2091. // 不返回原始数据的情况下,服务器状态码不为200,modal弹框提示
  2092. // if(response.errMsg) {
  2093. // uni.showModal({
  2094. // title: response.errMsg
  2095. // });
  2096. // }
  2097. reject(response);
  2098. }
  2099. }
  2100. };
  2101. // 判断用户传递的URL是否/开头,如果不是,加上/,这里使用了uView的test.js验证库的url()方法
  2102. options.url = _test.default.url(options.url) ? options.url : _this.config.baseUrl + (options.url.indexOf('/') == 0 ?
  2103. options.url : '/' + options.url);
  2104. // 是否显示loading
  2105. // 加一个是否已有timer定时器的判断,否则有两个同时请求的时候,后者会清除前者的定时器id
  2106. // 而没有清除前者的定时器,导致前者超时,一直显示loading
  2107. if (_this.config.showLoading && !_this.config.timer) {
  2108. _this.config.timer = setTimeout(function () {
  2109. uni.showLoading({
  2110. title: _this.config.loadingText,
  2111. mask: _this.config.loadingMask });
  2112. _this.config.timer = null;
  2113. }, _this.config.loadingTime);
  2114. }
  2115. uni.request(options);
  2116. });
  2117. // .catch(res => {
  2118. // // 如果返回reject(),不让其进入this.$u.post().then().catch()后面的catct()
  2119. // // 因为很多人都会忘了写后面的catch(),导致报错捕获不到catch
  2120. // return new Promise(()=>{});
  2121. // })
  2122. } }]);
  2123. function Request() {var _this2 = this;_classCallCheck(this, Request);
  2124. this.config = {
  2125. baseUrl: '', // 请求的根域名
  2126. // 默认的请求头
  2127. header: {},
  2128. method: 'POST',
  2129. // 设置为json,返回后uni.request会对数据进行一次JSON.parse
  2130. dataType: 'json',
  2131. // 此参数无需处理,因为5+和支付宝小程序不支持,默认为text即可
  2132. responseType: 'text',
  2133. showLoading: true, // 是否显示请求中的loading
  2134. loadingText: '请求中...',
  2135. loadingTime: 800, // 在此时间内,请求还没回来的话,就显示加载中动画,单位ms
  2136. timer: null, // 定时器
  2137. originalData: false, // 是否在拦截器中返回服务端的原始数据,见文档说明
  2138. loadingMask: true // 展示loading的时候,是否给一个透明的蒙层,防止触摸穿透
  2139. };
  2140. // 拦截器
  2141. this.interceptor = {
  2142. // 请求前的拦截
  2143. request: null,
  2144. // 请求后的拦截
  2145. response: null };
  2146. // get请求
  2147. this.get = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  2148. return _this2.request({
  2149. method: 'GET',
  2150. url: url,
  2151. header: header,
  2152. data: data });
  2153. };
  2154. // post请求
  2155. this.post = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  2156. return _this2.request({
  2157. url: url,
  2158. method: 'POST',
  2159. header: header,
  2160. data: data });
  2161. };
  2162. // put请求,不支持支付宝小程序(HX2.6.15)
  2163. this.put = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  2164. return _this2.request({
  2165. url: url,
  2166. method: 'PUT',
  2167. header: header,
  2168. data: data });
  2169. };
  2170. // delete请求,不支持支付宝和头条小程序(HX2.6.15)
  2171. this.delete = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  2172. return _this2.request({
  2173. url: url,
  2174. method: 'DELETE',
  2175. header: header,
  2176. data: data });
  2177. };
  2178. }return Request;}();var _default =
  2179. new Request();exports.default = _default;
  2180. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  2181. /***/ }),
  2182. /***/ 15:
  2183. /*!**********************************************************************************!*\
  2184. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/deepMerge.js ***!
  2185. \**********************************************************************************/
  2186. /*! no static exports found */
  2187. /***/ (function(module, exports, __webpack_require__) {
  2188. "use strict";
  2189. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _deepClone = _interopRequireDefault(__webpack_require__(/*! ./deepClone */ 16));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  2190. // JS对象深度合并
  2191. function deepMerge() {var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  2192. target = (0, _deepClone.default)(target);
  2193. if (typeof target !== 'object' || typeof source !== 'object') return false;
  2194. for (var prop in source) {
  2195. if (!source.hasOwnProperty(prop)) continue;
  2196. if (prop in target) {
  2197. if (typeof target[prop] !== 'object') {
  2198. target[prop] = source[prop];
  2199. } else {
  2200. if (typeof source[prop] !== 'object') {
  2201. target[prop] = source[prop];
  2202. } else {
  2203. if (target[prop].concat && source[prop].concat) {
  2204. target[prop] = target[prop].concat(source[prop]);
  2205. } else {
  2206. target[prop] = deepMerge(target[prop], source[prop]);
  2207. }
  2208. }
  2209. }
  2210. } else {
  2211. target[prop] = source[prop];
  2212. }
  2213. }
  2214. return target;
  2215. }var _default =
  2216. deepMerge;exports.default = _default;
  2217. /***/ }),
  2218. /***/ 153:
  2219. /*!*****************************************************************************!*\
  2220. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/static/js/equipState_dict.json ***!
  2221. \*****************************************************************************/
  2222. /*! exports provided: imei, iccid, csq, lat, lng, dtype, ws, dver, vbat, st, et, tps, lps, rps, dps, collt, current, hrt, hst, at, ah, stamp, dat_f, rcnt, htim, batStatus, tt, shake, shake_sec, ts, upds, dnds, lamp, fuse_voltage, ds, bt, tcs, clt_t, gps, cv, bv, ct, info, proj, btype, cs, bs, infr_ct, volt_ct, wind_drec, wind_sped, cold_sw, wind_sw, pre_temp, set_temp, usb_sta, imgres, staytime, cul_time, coll_time, addtime, hs, is_online, gs, tph, tpl, boot, lux, clt, dattim, datt, tbs, type, simStatus, default */
  2223. /***/ (function(module) {
  2224. module.exports = JSON.parse("{\"imei\":{\"name\":\"设备ID\",\"unit\":\"\",\"desc\":\"通讯板唯一ID\"},\"iccid\":{\"name\":\"物联网卡\",\"unit\":\"\",\"desc\":\"用于查询物联网卡的套餐、流量信息等\"},\"csq\":{\"name\":\"信号强度\",\"unit\":\"\",\"desc\":\"\"},\"lat\":{\"name\":\"纬度\",\"unit\":\"\",\"desc\":\"\"},\"lng\":{\"name\":\"经度\",\"unit\":\"\",\"desc\":\"\"},\"dtype\":{\"name\":\"设备类型\",\"unit\":\"\",\"desc\":\"\"},\"ws\":{\"name\":\"工作状态\",\"unit\":\"\",\"value\":{\"0\":\"待机\",\"1\":\"工作\",\"2\":\"工作\"},\"desc\":\"工作状态、0 待机, 1 工作\"},\"dver\":{\"name\":\"设备版本\",\"unit\":\"\",\"desc\":\"设备固件版本\"},\"vbat\":{\"name\":\"电压\",\"unit\":\"V\",\"desc\":\"\"},\"st\":{\"name\":\"开始时间\",\"unit\":\"h\",\"desc\":\"时控开始时间:0-23\"},\"et\":{\"name\":\"结束时间\",\"unit\":\"h\",\"desc\":\"时控结束时间:0-23\"},\"tps\":{\"name\":\"温控状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"温控\"},\"desc\":\"0-正常,1-保护\"},\"lps\":{\"name\":\"光控状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"光控\"},\"desc\":\"0-正常,1-保护\"},\"rps\":{\"name\":\"雨控状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"雨控\"},\"desc\":\"0-正常,1-保护\"},\"dps\":{\"name\":\"倾倒状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"保护\"},\"desc\":\"0-正常,1-保护\"},\"collt\":{\"name\":\"收集时间\",\"unit\":\"\",\"desc\":\"收集时间:1-30\"},\"current\":{\"name\":\"功率\",\"unit\":\"mA\",\"desc\":\"功率:单位mA\"},\"hrt\":{\"name\":\"加热仓温度\",\"unit\":\"°C\",\"desc\":\"加热仓实时温度\"},\"hst\":{\"name\":\"加热仓设定温度\",\"unit\":\"°C\",\"desc\":\"加热仓设定温度:70-130\"},\"at\":{\"name\":\"环境温度\",\"unit\":\"°C\",\"desc\":\"\"},\"ah\":{\"name\":\"环境湿度\",\"unit\":\"%RH\",\"desc\":\"\"},\"stamp\":{\"name\":\"时间\",\"unit\":\"\",\"desc\":\"\"},\"dat_f\":{\"name\":\"数据上传间隔\",\"unit\":\"\",\"desc\":\"数据上传时间间隔\"},\"rcnt\":{\"name\":\"开机次数\",\"unit\":\"\",\"desc\":\"每次重启加1\"},\"htim\":{\"name\":\"加热时间\",\"unit\":\"min\",\"desc\":\"加热时间:1-30分钟\"},\"batStatus\":{\"name\":\"电压状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"电量过低\"},\"desc\":\"0-正常 1-欠压\"},\"tt\":{\"name\":\"定时时长\",\"unit\":\"h\",\"desc\":\"定时时间1~10\"},\"shake\":{\"name\":\"震动开关\",\"unit\":\"\",\"value\":{\"0\":\"关闭\",\"1\":\"开启\"},\"desc\":\"0-关,1-开\"},\"shake_sec\":{\"name\":\"震动时间\",\"unit\":\"ms\",\"desc\":\"1~20(步长:100ms)\"},\"ts\":{\"name\":\"定时模式\",\"unit\":\"\",\"value\":{\"0\":\"光控\",\"1\":\"时控\"},\"desc\":\"0-光控,1-时控\"},\"upds\":{\"name\":\"上仓门状态\",\"unit\":\"\",\"value\":{\"0\":\"关闭\",\"1\":\"开启\"},\"desc\":\"1 打开,0 关闭\"},\"dnds\":{\"name\":\"下仓门状态\",\"unit\":\"\",\"value\":{\"0\":\"关闭\",\"1\":\"开启\"},\"desc\":\"1 打开,0 关闭\"},\"lamp\":{\"name\":\"灯管状态\",\"unit\":\"\",\"value\":{\"0\":\"工作\",\"1\":\"异常\"},\"desc\":\"灯管/工作状态 0 工作 1未工\"},\"fuse_voltage\":{\"name\":\"保险丝电压\",\"unit\":\"V\",\"desc\":\"\"},\"ds\":{\"name\":\"设备开关\",\"unit\":\"\",\"value\":{\"0\":\"关机\",\"1\":\"开机\"},\"desc\":\"0 关机 1 开机\"},\"bt\":{\"name\":\"主板温度\",\"unit\":\"°C\",\"desc\":\"\"},\"tcs\":{\"name\":\"时控开关\",\"unit\":\"\",\"value\":{\"0\":\"关机\",\"1\":\"开机\"},\"desc\":\"0 关闭 1 开启\"},\"clt_t\":{\"name\":\"清虫间隔\",\"unit\":\"min\",\"desc\":\"清虫时间间隔\"},\"gps\":{\"name\":\"定位方式\",\"unit\":\"\",\"value\":{\"0\":\"手动定位\",\"1\":\"GPS 定位\",\"2\":\"LBS 定位\"},\"desc\":\"0 手动定位 1 GPS 定位 2 LBS 定位\"},\"cv\":{\"name\":\"充电电压\",\"unit\":\"V\",\"desc\":\"充电电压\"},\"bv\":{\"name\":\"电池电压\",\"unit\":\"V\",\"desc\":\"电池电压\"},\"ct\":{\"name\":\"电击次数\",\"unit\":\"\",\"desc\":\"电击次数 (最大255)\"},\"info\":{\"name\":\"重启信息\",\"unit\":\"\",\"desc\":\"1正常 2 socket重连 3 MQTT重连\"},\"proj\":{\"name\":\"设备型号\",\"unit\":\"\",\"desc\":\"性诱一型或者二型\"},\"btype\":{\"name\":\"电池类型\",\"unit\":\"\",\"value\":{\"0\":\"蓄电池\",\"1\":\"锂电池\"},\"desc\":\"0 蓄电池,1锂电池\"},\"cs\":{\"name\":\"充电状态\",\"unit\":\"\",\"value\":{\"0\":\"非充电\",\"1\":\"充电\"},\"desc\":\"0非充电,1充电\"},\"bs\":{\"name\":\"电池状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"欠压\",\"2\":\"过压\"},\"desc\":\"0 正常,1欠压, 2过压\"},\"infr_ct\":{\"name\":\"红外计数值\",\"unit\":\"\",\"desc\":\"性诱红外计数值\"},\"volt_ct\":{\"name\":\"高压计数值\",\"unit\":\"\",\"desc\":\"性诱高压计数值\"},\"wind_drec\":{\"name\":\"风向\",\"unit\":\"\",\"desc\":\"性诱风向\"},\"wind_sped\":{\"name\":\"风速\",\"unit\":\"\",\"desc\":\"性诱风向\"},\"cold_sw\":{\"name\":\"制冷开关\",\"unit\":\"\",\"value\":{\"0\":\"关闭\",\"1\":\"开启\"},\"desc\":\"制冷机开关 0 关闭, 1 开启\"},\"wind_sw\":{\"name\":\"风机开关\",\"unit\":\"\",\"value\":{\"0\":\"关闭\",\"1\":\"开启\"},\"desc\":\"风机开关 0 关闭, 1 开启\"},\"pre_temp\":{\"name\":\"保温仓温度\",\"unit\":\"℃\",\"desc\":\"保温仓当前温度-℃\"},\"set_temp\":{\"name\":\"保温仓设定温度\",\"unit\":\"℃\",\"desc\":\"保温仓设定温度-℃\"},\"usb_sta\":{\"name\":\"摄像头状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"异常\"},\"desc\":\"摄像头状态 0 正常, 1 异常\"},\"imgres\":{\"name\":\"图片分辨率\",\"unit\":\"\",\"desc\":\"图片分辨率默认为7(最高)\"},\"staytime\":{\"name\":\"已培养时间\",\"unit\":\"h\",\"desc\":\"已培养时间-小时\"},\"cul_time\":{\"name\":\"孢子培养时间\",\"unit\":\"h\",\"desc\":\"孢子培养时间-小时\"},\"coll_time\":{\"name\":\"收集时间\",\"unit\":\"h\",\"desc\":\"收集时间[8-10,14-16]\"},\"addtime\":{\"name\":\"上报时间\",\"unit\":\"\",\"desc\":\"数据上报时间\"},\"hs\":{\"name\":\"加热状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"加热\"},\"desc\":\"测报灯状态0 正常, 1 加热\"},\"is_online\":{\"name\":\"在线状态\",\"unit\":\"\",\"value\":{\"0\":\"离线\",\"1\":\"在线\"},\"desc\":\"设备在线离线状态\"},\"gs\":{\"name\":\"通道状态\",\"unit\":\"\",\"value\":{\"0\":\"排水\",\"1\":\"落虫\"},\"desc\":\"通道状态\"},\"tph\":{\"name\":\"高温保护阀值\",\"unit\":\"°C\",\"desc\":\"高温保护阀值\"},\"tpl\":{\"name\":\"低温保护阀值\",\"unit\":\"°C\",\"desc\":\"低温保护阀值\"},\"boot\":{\"name\":\"禁止工作\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"使能(禁止工作)\"},\"desc\":\"禁止工作\"},\"lux\":{\"name\":\"光照强度\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"使能(禁止工作)\"},\"desc\":\"光照强度\"},\"clt\":{\"name\":\"清虫间隔\",\"unit\":\"min\",\"desc\":\"清虫时间间隔\"},\"dattim\":{\"name\":\"数据上传间隔\",\"unit\":\"\",\"desc\":\"数据上传时间间隔\"},\"datt\":{\"name\":\"数据上传间隔\",\"unit\":\"\",\"desc\":\"数据上传时间间隔\"},\"tbs\":{\"name\":\"灯管状态\",\"unit\":\"\",\"value\":{\"0\":\"正常\",\"1\":\"异常\"},\"desc\":\"数据上传时间间隔\"},\"type\":{\"name\":\"设备类型\",\"unit\":\"\",\"value\":{\"0\":\"--\",\"1\":\"--\",\"2\":\"杀虫灯\",\"3\":\"测报灯\",\"4\":\"性诱器\",\"5\":\"气象站\",\"6\":\"--\",\"7\":\"孢子仪\"},\"desc\":\"设备类型\"},\"simStatus\":{\"name\":\"sim卡状态\",\"unit\":\"\",\"value\":[{\"name\":\"未知\",\"val\":0},{\"name\":\"测试期\",\"val\":1},{\"name\":\"沉默期\",\"val\":2},{\"name\":\"使用中\",\"val\":3},{\"name\":\"停机\",\"val\":4},{\"name\":\"停机保号\",\"val\":5},{\"name\":\"预销号\",\"val\":6},{\"name\":\"销号\",\"val\":7}],\"desc\":\"sim卡状态\"}}");
  2225. /***/ }),
  2226. /***/ 16:
  2227. /*!**********************************************************************************!*\
  2228. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/deepClone.js ***!
  2229. \**********************************************************************************/
  2230. /*! no static exports found */
  2231. /***/ (function(module, exports, __webpack_require__) {
  2232. "use strict";
  2233. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 判断arr是否为一个数组,返回一个bool值
  2234. function isArray(arr) {
  2235. return Object.prototype.toString.call(arr) === '[object Array]';
  2236. }
  2237. // 深度克隆
  2238. function deepClone(obj) {
  2239. // 对常见的“非”值,直接返回原来值
  2240. if ([null, undefined, NaN, false].includes(obj)) return obj;
  2241. if (typeof obj !== "object" && typeof obj !== 'function') {
  2242. //原始类型直接返回
  2243. return obj;
  2244. }
  2245. var o = isArray(obj) ? [] : {};
  2246. for (var i in obj) {
  2247. if (obj.hasOwnProperty(i)) {
  2248. o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
  2249. }
  2250. }
  2251. return o;
  2252. }var _default =
  2253. deepClone;exports.default = _default;
  2254. /***/ }),
  2255. /***/ 17:
  2256. /*!*****************************************************************************!*\
  2257. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/test.js ***!
  2258. \*****************************************************************************/
  2259. /*! no static exports found */
  2260. /***/ (function(module, exports, __webpack_require__) {
  2261. "use strict";
  2262. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  2263. * 验证电子邮箱格式
  2264. */
  2265. function email(value) {
  2266. return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value);
  2267. }
  2268. /**
  2269. * 验证手机格式
  2270. */
  2271. function mobile(value) {
  2272. return /^1[23456789]\d{9}$/.test(value);
  2273. }
  2274. /**
  2275. * 验证URL格式
  2276. */
  2277. function url(value) {
  2278. return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(value);
  2279. }
  2280. /**
  2281. * 验证日期格式
  2282. */
  2283. function date(value) {
  2284. return !/Invalid|NaN/.test(new Date(value).toString());
  2285. }
  2286. /**
  2287. * 验证ISO类型的日期格式
  2288. */
  2289. function dateISO(value) {
  2290. return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
  2291. }
  2292. /**
  2293. * 验证十进制数字
  2294. */
  2295. function number(value) {
  2296. return /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
  2297. }
  2298. /**
  2299. * 验证整数
  2300. */
  2301. function digits(value) {
  2302. return /^\d+$/.test(value);
  2303. }
  2304. /**
  2305. * 验证身份证号码
  2306. */
  2307. function idCard(value) {
  2308. 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(
  2309. value);
  2310. }
  2311. /**
  2312. * 是否车牌号
  2313. */
  2314. function carNo(value) {
  2315. // 新能源车牌
  2316. var xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  2317. // 旧车牌
  2318. var creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
  2319. if (value.length === 7) {
  2320. return creg.test(value);
  2321. } else if (value.length === 8) {
  2322. return xreg.test(value);
  2323. } else {
  2324. return false;
  2325. }
  2326. }
  2327. /**
  2328. * 金额,只允许2位小数
  2329. */
  2330. function amount(value) {
  2331. //金额,只允许保留两位小数
  2332. return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value);
  2333. }
  2334. /**
  2335. * 中文
  2336. */
  2337. function chinese(value) {
  2338. var reg = /^[\u4e00-\u9fa5]+$/gi;
  2339. return reg.test(value);
  2340. }
  2341. /**
  2342. * 只能输入字母
  2343. */
  2344. function letter(value) {
  2345. return /^[a-zA-Z]*$/.test(value);
  2346. }
  2347. /**
  2348. * 只能是字母或者数字
  2349. */
  2350. function enOrNum(value) {
  2351. //英文或者数字
  2352. var reg = /^[0-9a-zA-Z]*$/g;
  2353. return reg.test(value);
  2354. }
  2355. /**
  2356. * 验证是否包含某个值
  2357. */
  2358. function contains(value, param) {
  2359. return value.indexOf(param) >= 0;
  2360. }
  2361. /**
  2362. * 验证一个值范围[min, max]
  2363. */
  2364. function range(value, param) {
  2365. return value >= param[0] && value <= param[1];
  2366. }
  2367. /**
  2368. * 验证一个长度范围[min, max]
  2369. */
  2370. function rangeLength(value, param) {
  2371. return value.length >= param[0] && value.length <= param[1];
  2372. }
  2373. /**
  2374. * 是否固定电话
  2375. */
  2376. function landline(value) {
  2377. var reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
  2378. return reg.test(value);
  2379. }
  2380. /**
  2381. * 判断是否为空
  2382. */
  2383. function empty(value) {
  2384. switch (typeof value) {
  2385. case 'undefined':
  2386. return true;
  2387. case 'string':
  2388. if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true;
  2389. break;
  2390. case 'boolean':
  2391. if (!value) return true;
  2392. break;
  2393. case 'number':
  2394. if (0 === value || isNaN(value)) return true;
  2395. break;
  2396. case 'object':
  2397. if (null === value || value.length === 0) return true;
  2398. for (var i in value) {
  2399. return false;
  2400. }
  2401. return true;}
  2402. return false;
  2403. }
  2404. /**
  2405. * 是否json字符串
  2406. */
  2407. function jsonString(value) {
  2408. if (typeof value == 'string') {
  2409. try {
  2410. var obj = JSON.parse(value);
  2411. if (typeof obj == 'object' && obj) {
  2412. return true;
  2413. } else {
  2414. return false;
  2415. }
  2416. } catch (e) {
  2417. return false;
  2418. }
  2419. }
  2420. return false;
  2421. }
  2422. /**
  2423. * 是否数组
  2424. */
  2425. function array(value) {
  2426. if (typeof Array.isArray === "function") {
  2427. return Array.isArray(value);
  2428. } else {
  2429. return Object.prototype.toString.call(value) === "[object Array]";
  2430. }
  2431. }
  2432. /**
  2433. * 是否对象
  2434. */
  2435. function object(value) {
  2436. return Object.prototype.toString.call(value) === '[object Object]';
  2437. }
  2438. /**
  2439. * 是否短信验证码
  2440. */
  2441. function code(value) {var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
  2442. return new RegExp("^\\d{".concat(len, "}$")).test(value);
  2443. }var _default =
  2444. {
  2445. email: email,
  2446. mobile: mobile,
  2447. url: url,
  2448. date: date,
  2449. dateISO: dateISO,
  2450. number: number,
  2451. digits: digits,
  2452. idCard: idCard,
  2453. carNo: carNo,
  2454. amount: amount,
  2455. chinese: chinese,
  2456. letter: letter,
  2457. enOrNum: enOrNum,
  2458. contains: contains,
  2459. range: range,
  2460. rangeLength: rangeLength,
  2461. empty: empty,
  2462. isEmpty: empty,
  2463. jsonString: jsonString,
  2464. landline: landline,
  2465. object: object,
  2466. array: array,
  2467. code: code };exports.default = _default;
  2468. /***/ }),
  2469. /***/ 18:
  2470. /*!************************************************************************************!*\
  2471. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/queryParams.js ***!
  2472. \************************************************************************************/
  2473. /*! no static exports found */
  2474. /***/ (function(module, exports, __webpack_require__) {
  2475. "use strict";
  2476. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  2477. * 对象转url参数
  2478. * @param {*} data,对象
  2479. * @param {*} isPrefix,是否自动加上"?"
  2480. */
  2481. function queryParams() {var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};var isPrefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;var arrayFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'brackets';
  2482. var prefix = isPrefix ? '?' : '';
  2483. var _result = [];
  2484. if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';var _loop = function _loop(
  2485. key) {
  2486. var value = data[key];
  2487. // 去掉为空的参数
  2488. if (['', undefined, null].indexOf(value) >= 0) {
  2489. return "continue";
  2490. }
  2491. // 如果值为数组,另行处理
  2492. if (value.constructor === Array) {
  2493. // e.g. {ids: [1, 2, 3]}
  2494. switch (arrayFormat) {
  2495. case 'indices':
  2496. // 结果: ids[0]=1&ids[1]=2&ids[2]=3
  2497. for (var i = 0; i < value.length; i++) {
  2498. _result.push(key + '[' + i + ']=' + value[i]);
  2499. }
  2500. break;
  2501. case 'brackets':
  2502. // 结果: ids[]=1&ids[]=2&ids[]=3
  2503. value.forEach(function (_value) {
  2504. _result.push(key + '[]=' + _value);
  2505. });
  2506. break;
  2507. case 'repeat':
  2508. // 结果: ids=1&ids=2&ids=3
  2509. value.forEach(function (_value) {
  2510. _result.push(key + '=' + _value);
  2511. });
  2512. break;
  2513. case 'comma':
  2514. // 结果: ids=1,2,3
  2515. var commaStr = "";
  2516. value.forEach(function (_value) {
  2517. commaStr += (commaStr ? "," : "") + _value;
  2518. });
  2519. _result.push(key + '=' + commaStr);
  2520. break;
  2521. default:
  2522. value.forEach(function (_value) {
  2523. _result.push(key + '[]=' + _value);
  2524. });}
  2525. } else {
  2526. _result.push(key + '=' + value);
  2527. }};for (var key in data) {var _ret = _loop(key);if (_ret === "continue") continue;
  2528. }
  2529. return _result.length ? prefix + _result.join('&') : '';
  2530. }var _default =
  2531. queryParams;exports.default = _default;
  2532. /***/ }),
  2533. /***/ 19:
  2534. /*!******************************************************************************!*\
  2535. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/route.js ***!
  2536. \******************************************************************************/
  2537. /*! no static exports found */
  2538. /***/ (function(module, exports, __webpack_require__) {
  2539. "use strict";
  2540. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 20));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);}_next(undefined);});};}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;} /**
  2541. * 路由跳转方法,该方法相对于直接使用uni.xxx的好处是使用更加简单快捷
  2542. * 并且带有路由拦截功能
  2543. */var
  2544. Router = /*#__PURE__*/function () {
  2545. // 原始属性定义
  2546. function Router() {_classCallCheck(this, Router);_defineProperty(this, "config", { type: 'navigateTo', url: '', delta: 1, // navigateBack页面后退时,回退的层数
  2547. params: {}, // 传递的参数
  2548. animationType: 'pop-in', // 窗口动画,只在APP有效
  2549. animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效
  2550. intercept: false // 是否需要拦截
  2551. }); // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文
  2552. // 这里在构造函数中进行this绑定
  2553. this.route = this.route.bind(this);} // 判断url前面是否有"/",如果没有则加上,否则无法跳转
  2554. _createClass(Router, [{ key: "addRootPath", value: function addRootPath(url) {return url[0] === '/' ? url : "/".concat(url);
  2555. }
  2556. // 整合路由参数
  2557. }, { key: "mixinParam", value: function mixinParam(url, params) {
  2558. url = this.addRootPath(url);
  2559. // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary"
  2560. // 如果有url中有get参数,转换后无需带上"?"
  2561. var query = '';
  2562. if (/.*\/.*\?.*=.*/.test(url)) {
  2563. // object对象转为get类型的参数
  2564. query = uni.$u.queryParams(params, false);
  2565. // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开
  2566. return url += "&" + query;
  2567. } else {
  2568. // 直接拼接参数,因为此处url中没有后面的query参数,也就没有"?/&"之类的符号
  2569. query = uni.$u.queryParams(params);
  2570. return url += query;
  2571. }
  2572. }
  2573. // 对外的方法名称
  2574. }, { key: "route", value: function () {var _route = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee() {var options,params,mergeConfig,isNext,_args = arguments;return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:options = _args.length > 0 && _args[0] !== undefined ? _args[0] : {};params = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
  2575. // 合并用户的配置和内部的默认配置
  2576. mergeConfig = {};
  2577. if (typeof options === 'string') {
  2578. // 如果options为字符串,则为route(url, params)的形式
  2579. mergeConfig.url = this.mixinParam(options, params);
  2580. mergeConfig.type = 'navigateTo';
  2581. } else {
  2582. mergeConfig = uni.$u.deepClone(options, this.config);
  2583. // 否则正常使用mergeConfig中的url和params进行拼接
  2584. mergeConfig.url = this.mixinParam(options.url, options.params);
  2585. }
  2586. if (params.intercept) {
  2587. this.config.intercept = params.intercept;
  2588. }
  2589. // params参数也带给拦截器
  2590. mergeConfig.params = params;
  2591. // 合并内外部参数
  2592. mergeConfig = uni.$u.deepMerge(this.config, mergeConfig);
  2593. // 判断用户是否定义了拦截器
  2594. if (!(typeof uni.$u.routeIntercept === 'function')) {_context.next = 14;break;}_context.next = 10;return (
  2595. new Promise(function (resolve, reject) {
  2596. uni.$u.routeIntercept(mergeConfig, resolve);
  2597. }));case 10:isNext = _context.sent;
  2598. // 如果isNext为true,则执行路由跳转
  2599. isNext && this.openPage(mergeConfig);_context.next = 15;break;case 14:
  2600. this.openPage(mergeConfig);case 15:case "end":return _context.stop();}}}, _callee, this);}));function route() {return _route.apply(this, arguments);}return route;}()
  2601. // 执行路由跳转
  2602. }, { key: "openPage", value: function openPage(config) {
  2603. // 解构参数
  2604. var
  2605. url =
  2606. config.url,type = config.type,delta = config.delta,animationType = config.animationType,animationDuration = config.animationDuration;
  2607. if (config.type == 'navigateTo' || config.type == 'to') {
  2608. uni.navigateTo({
  2609. url: url,
  2610. animationType: animationType,
  2611. animationDuration: animationDuration });
  2612. }
  2613. if (config.type == 'redirectTo' || config.type == 'redirect') {
  2614. uni.redirectTo({
  2615. url: url });
  2616. }
  2617. if (config.type == 'switchTab' || config.type == 'tab') {
  2618. uni.switchTab({
  2619. url: url });
  2620. }
  2621. if (config.type == 'reLaunch' || config.type == 'launch') {
  2622. uni.reLaunch({
  2623. url: url });
  2624. }
  2625. if (config.type == 'navigateBack' || config.type == 'back') {
  2626. uni.navigateBack({
  2627. delta: delta });
  2628. }
  2629. } }]);return Router;}();var _default =
  2630. new Router().route;exports.default = _default;
  2631. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  2632. /***/ }),
  2633. /***/ 2:
  2634. /*!***********************************!*\
  2635. !*** (webpack)/buildin/global.js ***!
  2636. \***********************************/
  2637. /*! no static exports found */
  2638. /***/ (function(module, exports) {
  2639. var g;
  2640. // This works in non-strict mode
  2641. g = (function() {
  2642. return this;
  2643. })();
  2644. try {
  2645. // This works if eval is allowed (see CSP)
  2646. g = g || new Function("return this")();
  2647. } catch (e) {
  2648. // This works if the window reference is available
  2649. if (typeof window === "object") g = window;
  2650. }
  2651. // g can still be undefined, but nothing to do about it...
  2652. // We return undefined, instead of nothing here, so it's
  2653. // easier to handle this case. if(!global) { ...}
  2654. module.exports = g;
  2655. /***/ }),
  2656. /***/ 20:
  2657. /*!**********************************************************!*\
  2658. !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
  2659. \**********************************************************/
  2660. /*! no static exports found */
  2661. /***/ (function(module, exports, __webpack_require__) {
  2662. module.exports = __webpack_require__(/*! regenerator-runtime */ 21);
  2663. /***/ }),
  2664. /***/ 202:
  2665. /*!**********************************************************************************************!*\
  2666. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/components/js_sdk/u-charts/u-charts/u-charts.js ***!
  2667. \**********************************************************************************************/
  2668. /*! no static exports found */
  2669. /***/ (function(module, exports, __webpack_require__) {
  2670. "use strict";
  2671. /* WEBPACK VAR INJECTION */(function(uni) {/*
  2672. * uCharts v1.9.6.20210214
  2673. * uni-app平台高性能跨全端图表,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)
  2674. * Copyright (c) 2021 QIUN秋云 https://www.ucharts.cn All rights reserved.
  2675. * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  2676. *
  2677. * uCharts官方网站
  2678. * https://www.uCharts.cn
  2679. *
  2680. * 开源地址:
  2681. * https://gitee.com/uCharts/uCharts
  2682. *
  2683. * uni-app插件市场地址:
  2684. * http://ext.dcloud.net.cn/plugin?id=271
  2685. *
  2686. */
  2687. var config = {
  2688. yAxisWidth: 15,
  2689. yAxisSplit: 5,
  2690. xAxisHeight: 22,
  2691. xAxisLineHeight: 22,
  2692. legendHeight: 15,
  2693. yAxisTitleWidth: 15,
  2694. padding: [10, 10, 10, 10],
  2695. pixelRatio: 1,
  2696. rotate: false,
  2697. columePadding: 3,
  2698. fontSize: 13,
  2699. //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],
  2700. dataPointShape: ['circle', 'circle', 'circle', 'circle'],
  2701. colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'],
  2702. pieChartLinePadding: 15,
  2703. pieChartTextPadding: 5,
  2704. xAxisTextPadding: 3,
  2705. titleColor: '#333333',
  2706. titleFontSize: 20,
  2707. subtitleColor: '#999999',
  2708. subtitleFontSize: 15,
  2709. toolTipPadding: 3,
  2710. toolTipBackground: '#000000',
  2711. toolTipOpacity: 0.7,
  2712. toolTipLineHeight: 20,
  2713. radarLabelTextMargin: 15,
  2714. gaugeLabelTextMargin: 15 };
  2715. var assign = function assign(target) {for (var _len2 = arguments.length, varArgs = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {varArgs[_key2 - 1] = arguments[_key2];}
  2716. if (target == null) {
  2717. throw new TypeError('Cannot convert undefined or null to object');
  2718. }
  2719. if (!varArgs || varArgs.length <= 0) {
  2720. return target;
  2721. }
  2722. // 深度合并对象
  2723. function deepAssign(obj1, obj2) {
  2724. for (var key in obj2) {
  2725. obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
  2726. deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key];
  2727. }
  2728. return obj1;
  2729. }
  2730. varArgs.forEach(function (val) {
  2731. target = deepAssign(target, val);
  2732. });
  2733. return target;
  2734. };
  2735. var util = {
  2736. toFixed: function toFixed(num, limit) {
  2737. limit = limit || 2;
  2738. if (this.isFloat(num)) {
  2739. num = num.toFixed(limit);
  2740. }
  2741. return num;
  2742. },
  2743. isFloat: function isFloat(num) {
  2744. return num % 1 !== 0;
  2745. },
  2746. approximatelyEqual: function approximatelyEqual(num1, num2) {
  2747. return Math.abs(num1 - num2) < 1e-10;
  2748. },
  2749. isSameSign: function isSameSign(num1, num2) {
  2750. return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;
  2751. },
  2752. isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {
  2753. return this.isSameSign(p1.x, p2.x);
  2754. },
  2755. isCollision: function isCollision(obj1, obj2) {
  2756. obj1.end = {};
  2757. obj1.end.x = obj1.start.x + obj1.width;
  2758. obj1.end.y = obj1.start.y - obj1.height;
  2759. obj2.end = {};
  2760. obj2.end.x = obj2.start.x + obj2.width;
  2761. obj2.end.y = obj2.start.y - obj2.height;
  2762. var flag = obj2.start.x > obj1.end.x || obj2.end.x < obj1.start.x || obj2.end.y > obj1.start.y || obj2.start.y < obj1.end.y;
  2763. return !flag;
  2764. } };
  2765. //兼容H5点击事件
  2766. function getH5Offset(e) {
  2767. e.mp = {
  2768. changedTouches: [] };
  2769. e.mp.changedTouches.push({
  2770. x: e.offsetX,
  2771. y: e.offsetY });
  2772. return e;
  2773. }
  2774. // hex 转 rgba
  2775. function hexToRgb(hexValue, opc) {
  2776. var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
  2777. var hex = hexValue.replace(rgx, function (m, r, g, b) {
  2778. return r + r + g + g + b + b;
  2779. });
  2780. var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  2781. var r = parseInt(rgb[1], 16);
  2782. var g = parseInt(rgb[2], 16);
  2783. var b = parseInt(rgb[3], 16);
  2784. return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')';
  2785. }
  2786. function findRange(num, type, limit) {
  2787. if (isNaN(num)) {
  2788. throw new Error('[uCharts] unvalid series data!');
  2789. }
  2790. limit = limit || 10;
  2791. type = type ? type : 'upper';
  2792. var multiple = 1;
  2793. while (limit < 1) {
  2794. limit *= 10;
  2795. multiple *= 10;
  2796. }
  2797. if (type === 'upper') {
  2798. num = Math.ceil(num * multiple);
  2799. } else {
  2800. num = Math.floor(num * multiple);
  2801. }
  2802. while (num % limit !== 0) {
  2803. if (type === 'upper') {
  2804. num++;
  2805. } else {
  2806. num--;
  2807. }
  2808. }
  2809. return num / multiple;
  2810. }
  2811. function calCandleMA(dayArr, nameArr, colorArr, kdata) {
  2812. var seriesTemp = [];
  2813. for (var k = 0; k < dayArr.length; k++) {
  2814. var seriesItem = {
  2815. data: [],
  2816. name: nameArr[k],
  2817. color: colorArr[k] };
  2818. for (var i = 0, len = kdata.length; i < len; i++) {
  2819. if (i < dayArr[k]) {
  2820. seriesItem.data.push(null);
  2821. continue;
  2822. }
  2823. var sum = 0;
  2824. for (var j = 0; j < dayArr[k]; j++) {
  2825. sum += kdata[i - j][1];
  2826. }
  2827. seriesItem.data.push(+(sum / dayArr[k]).toFixed(3));
  2828. }
  2829. seriesTemp.push(seriesItem);
  2830. }
  2831. return seriesTemp;
  2832. }
  2833. function calValidDistance(self, distance, chartData, config, opts) {
  2834. var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3];
  2835. var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length - 1);
  2836. var validDistance = distance;
  2837. if (distance >= 0) {
  2838. validDistance = 0;
  2839. self.event.trigger('scrollLeft');
  2840. } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {
  2841. validDistance = dataChartAreaWidth - dataChartWidth;
  2842. self.event.trigger('scrollRight');
  2843. }
  2844. return validDistance;
  2845. }
  2846. function isInAngleRange(angle, startAngle, endAngle) {
  2847. function adjust(angle) {
  2848. while (angle < 0) {
  2849. angle += 2 * Math.PI;
  2850. }
  2851. while (angle > 2 * Math.PI) {
  2852. angle -= 2 * Math.PI;
  2853. }
  2854. return angle;
  2855. }
  2856. angle = adjust(angle);
  2857. startAngle = adjust(startAngle);
  2858. endAngle = adjust(endAngle);
  2859. if (startAngle > endAngle) {
  2860. endAngle += 2 * Math.PI;
  2861. if (angle < startAngle) {
  2862. angle += 2 * Math.PI;
  2863. }
  2864. }
  2865. return angle >= startAngle && angle <= endAngle;
  2866. }
  2867. function calRotateTranslate(x, y, h) {
  2868. var xv = x;
  2869. var yv = h - y;
  2870. var transX = xv + (h - yv - xv) / Math.sqrt(2);
  2871. transX *= -1;
  2872. var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);
  2873. return {
  2874. transX: transX,
  2875. transY: transY };
  2876. }
  2877. function createCurveControlPoints(points, i) {
  2878. function isNotMiddlePoint(points, i) {
  2879. if (points[i - 1] && points[i + 1]) {
  2880. return points[i].y >= Math.max(points[i - 1].y, points[i + 1].y) || points[i].y <= Math.min(points[i - 1].y, points[i + 1].y);
  2881. } else {
  2882. return false;
  2883. }
  2884. }
  2885. function isNotMiddlePointX(points, i) {
  2886. if (points[i - 1] && points[i + 1]) {
  2887. return points[i].x >= Math.max(points[i - 1].x, points[i + 1].x) || points[i].x <= Math.min(points[i - 1].x, points[i + 1].x);
  2888. } else {
  2889. return false;
  2890. }
  2891. }
  2892. var a = 0.2;
  2893. var b = 0.2;
  2894. var pAx = null;
  2895. var pAy = null;
  2896. var pBx = null;
  2897. var pBy = null;
  2898. if (i < 1) {
  2899. pAx = points[0].x + (points[1].x - points[0].x) * a;
  2900. pAy = points[0].y + (points[1].y - points[0].y) * a;
  2901. } else {
  2902. pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;
  2903. pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;
  2904. }
  2905. if (i > points.length - 3) {
  2906. var last = points.length - 1;
  2907. pBx = points[last].x - (points[last].x - points[last - 1].x) * b;
  2908. pBy = points[last].y - (points[last].y - points[last - 1].y) * b;
  2909. } else {
  2910. pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;
  2911. pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;
  2912. }
  2913. if (isNotMiddlePoint(points, i + 1)) {
  2914. pBy = points[i + 1].y;
  2915. }
  2916. if (isNotMiddlePoint(points, i)) {
  2917. pAy = points[i].y;
  2918. }
  2919. if (isNotMiddlePointX(points, i + 1)) {
  2920. pBx = points[i + 1].x;
  2921. }
  2922. if (isNotMiddlePointX(points, i)) {
  2923. pAx = points[i].x;
  2924. }
  2925. if (pAy >= Math.max(points[i].y, points[i + 1].y) || pAy <= Math.min(points[i].y, points[i + 1].y)) {
  2926. pAy = points[i].y;
  2927. }
  2928. if (pBy >= Math.max(points[i].y, points[i + 1].y) || pBy <= Math.min(points[i].y, points[i + 1].y)) {
  2929. pBy = points[i + 1].y;
  2930. }
  2931. if (pAx >= Math.max(points[i].x, points[i + 1].x) || pAx <= Math.min(points[i].x, points[i + 1].x)) {
  2932. pAx = points[i].x;
  2933. }
  2934. if (pBx >= Math.max(points[i].x, points[i + 1].x) || pBx <= Math.min(points[i].x, points[i + 1].x)) {
  2935. pBx = points[i + 1].x;
  2936. }
  2937. return {
  2938. ctrA: {
  2939. x: pAx,
  2940. y: pAy },
  2941. ctrB: {
  2942. x: pBx,
  2943. y: pBy } };
  2944. }
  2945. function convertCoordinateOrigin(x, y, center) {
  2946. return {
  2947. x: center.x + x,
  2948. y: center.y - y };
  2949. }
  2950. function avoidCollision(obj, target) {
  2951. if (target) {
  2952. // is collision test
  2953. while (util.isCollision(obj, target)) {
  2954. if (obj.start.x > 0) {
  2955. obj.start.y--;
  2956. } else if (obj.start.x < 0) {
  2957. obj.start.y++;
  2958. } else {
  2959. if (obj.start.y > 0) {
  2960. obj.start.y++;
  2961. } else {
  2962. obj.start.y--;
  2963. }
  2964. }
  2965. }
  2966. }
  2967. return obj;
  2968. }
  2969. function fillSeries(series, opts, config) {
  2970. var index = 0;
  2971. return series.map(function (item) {
  2972. if (!item.color) {
  2973. item.color = config.colors[index];
  2974. index = (index + 1) % config.colors.length;
  2975. }
  2976. if (!item.index) {
  2977. item.index = 0;
  2978. }
  2979. if (!item.type) {
  2980. item.type = opts.type;
  2981. }
  2982. if (typeof item.show == "undefined") {
  2983. item.show = true;
  2984. }
  2985. if (!item.type) {
  2986. item.type = opts.type;
  2987. }
  2988. if (!item.pointShape) {
  2989. item.pointShape = "circle";
  2990. }
  2991. if (!item.legendShape) {
  2992. switch (item.type) {
  2993. case 'line':
  2994. item.legendShape = "line";
  2995. break;
  2996. case 'column':
  2997. item.legendShape = "rect";
  2998. break;
  2999. case 'area':
  3000. item.legendShape = "triangle";
  3001. break;
  3002. default:
  3003. item.legendShape = "circle";}
  3004. }
  3005. return item;
  3006. });
  3007. }
  3008. function getDataRange(minData, maxData) {
  3009. var limit = 0;
  3010. var range = maxData - minData;
  3011. if (range >= 10000) {
  3012. limit = 1000;
  3013. } else if (range >= 1000) {
  3014. limit = 100;
  3015. } else if (range >= 100) {
  3016. limit = 10;
  3017. } else if (range >= 10) {
  3018. limit = 5;
  3019. } else if (range >= 1) {
  3020. limit = 1;
  3021. } else if (range >= 0.1) {
  3022. limit = 0.1;
  3023. } else if (range >= 0.01) {
  3024. limit = 0.01;
  3025. } else if (range >= 0.001) {
  3026. limit = 0.001;
  3027. } else if (range >= 0.0001) {
  3028. limit = 0.0001;
  3029. } else if (range >= 0.00001) {
  3030. limit = 0.00001;
  3031. } else {
  3032. limit = 0.000001;
  3033. }
  3034. return {
  3035. minRange: findRange(minData, 'lower', limit),
  3036. maxRange: findRange(maxData, 'upper', limit) };
  3037. }
  3038. function measureText(text) {
  3039. var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize;
  3040. text = String(text);
  3041. var text = text.split('');
  3042. var width = 0;
  3043. for (var i = 0; i < text.length; i++) {
  3044. var item = text[i];
  3045. if (/[a-zA-Z]/.test(item)) {
  3046. width += 7;
  3047. } else if (/[0-9]/.test(item)) {
  3048. width += 5.5;
  3049. } else if (/\./.test(item)) {
  3050. width += 2.7;
  3051. } else if (/-/.test(item)) {
  3052. width += 3.25;
  3053. } else if (/[\u4e00-\u9fa5]/.test(item)) {
  3054. width += 10;
  3055. } else if (/\(|\)/.test(item)) {
  3056. width += 3.73;
  3057. } else if (/\s/.test(item)) {
  3058. width += 2.5;
  3059. } else if (/%/.test(item)) {
  3060. width += 8;
  3061. } else {
  3062. width += 10;
  3063. }
  3064. }
  3065. return width * fontSize / 10;
  3066. }
  3067. function dataCombine(series) {
  3068. return series.reduce(function (a, b) {
  3069. return (a.data ? a.data : a).concat(b.data);
  3070. }, []);
  3071. }
  3072. function dataCombineStack(series, len) {
  3073. var sum = new Array(len);
  3074. for (var j = 0; j < sum.length; j++) {
  3075. sum[j] = 0;
  3076. }
  3077. for (var i = 0; i < series.length; i++) {
  3078. for (var j = 0; j < sum.length; j++) {
  3079. sum[j] += series[i].data[j];
  3080. }
  3081. }
  3082. return series.reduce(function (a, b) {
  3083. return (a.data ? a.data : a).concat(b.data).concat(sum);
  3084. }, []);
  3085. }
  3086. function getTouches(touches, opts, e) {
  3087. var x, y;
  3088. if (touches.clientX) {
  3089. if (opts.rotate) {
  3090. y = opts.height - touches.clientX * opts.pixelRatio;
  3091. x = (touches.pageY - e.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;
  3092. } else {
  3093. x = touches.clientX * opts.pixelRatio;
  3094. y = (touches.pageY - e.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;
  3095. }
  3096. } else {
  3097. if (opts.rotate) {
  3098. y = opts.height - touches.x * opts.pixelRatio;
  3099. x = touches.y * opts.pixelRatio;
  3100. } else {
  3101. x = touches.x * opts.pixelRatio;
  3102. y = touches.y * opts.pixelRatio;
  3103. }
  3104. }
  3105. return {
  3106. x: x,
  3107. y: y };
  3108. }
  3109. function getSeriesDataItem(series, index) {
  3110. var data = [];
  3111. for (var i = 0; i < series.length; i++) {
  3112. var item = series[i];
  3113. if (item.data[index] !== null && typeof item.data[index] !== 'undefined' && item.show) {
  3114. var seriesItem = {};
  3115. seriesItem.color = item.color;
  3116. seriesItem.type = item.type;
  3117. seriesItem.style = item.style;
  3118. seriesItem.pointShape = item.pointShape;
  3119. seriesItem.disableLegend = item.disableLegend;
  3120. seriesItem.name = item.name;
  3121. seriesItem.show = item.show;
  3122. seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index];
  3123. data.push(seriesItem);
  3124. }
  3125. }
  3126. return data;
  3127. }
  3128. function getMaxTextListLength(list) {
  3129. var lengthList = list.map(function (item) {
  3130. return measureText(item);
  3131. });
  3132. return Math.max.apply(null, lengthList);
  3133. }
  3134. function getRadarCoordinateSeries(length) {
  3135. var eachAngle = 2 * Math.PI / length;
  3136. var CoordinateSeries = [];
  3137. for (var i = 0; i < length; i++) {
  3138. CoordinateSeries.push(eachAngle * i);
  3139. }
  3140. return CoordinateSeries.map(function (item) {
  3141. return -1 * item + Math.PI / 2;
  3142. });
  3143. }
  3144. function getToolTipData(seriesData, calPoints, index, categories) {
  3145. var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  3146. var textList = seriesData.map(function (item) {
  3147. var titleText = [];
  3148. if (categories) {
  3149. titleText = categories;
  3150. } else {
  3151. titleText = item.data;
  3152. }
  3153. return {
  3154. text: option.format ? option.format(item, titleText[index]) : item.name + ': ' + item.data,
  3155. color: item.color };
  3156. });
  3157. var validCalPoints = [];
  3158. var offset = {
  3159. x: 0,
  3160. y: 0 };
  3161. for (var i = 0; i < calPoints.length; i++) {
  3162. var points = calPoints[i];
  3163. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  3164. validCalPoints.push(points[index]);
  3165. }
  3166. }
  3167. for (var _i = 0; _i < validCalPoints.length; _i++) {
  3168. var item = validCalPoints[_i];
  3169. offset.x = Math.round(item.x);
  3170. offset.y += item.y;
  3171. }
  3172. offset.y /= validCalPoints.length;
  3173. return {
  3174. textList: textList,
  3175. offset: offset };
  3176. }
  3177. function getMixToolTipData(seriesData, calPoints, index, categories) {
  3178. var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  3179. var textList = seriesData.map(function (item) {
  3180. return {
  3181. text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,
  3182. color: item.color,
  3183. disableLegend: item.disableLegend ? true : false };
  3184. });
  3185. textList = textList.filter(function (item) {
  3186. if (item.disableLegend !== true) {
  3187. return item;
  3188. }
  3189. });
  3190. var validCalPoints = [];
  3191. var offset = {
  3192. x: 0,
  3193. y: 0 };
  3194. for (var i = 0; i < calPoints.length; i++) {
  3195. var points = calPoints[i];
  3196. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  3197. validCalPoints.push(points[index]);
  3198. }
  3199. }
  3200. for (var _i2 = 0; _i2 < validCalPoints.length; _i2++) {
  3201. var item = validCalPoints[_i2];
  3202. offset.x = Math.round(item.x);
  3203. offset.y += item.y;
  3204. }
  3205. offset.y /= validCalPoints.length;
  3206. return {
  3207. textList: textList,
  3208. offset: offset };
  3209. }
  3210. function getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) {
  3211. var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};
  3212. var upColor = extra.color.upFill;
  3213. var downColor = extra.color.downFill;
  3214. //颜色顺序为开盘,收盘,最低,最高
  3215. var color = [upColor, upColor, downColor, upColor];
  3216. var textList = [];
  3217. var text0 = {
  3218. text: categories[index],
  3219. color: null };
  3220. textList.push(text0);
  3221. seriesData.map(function (item) {
  3222. if (index == 0) {
  3223. if (item.data[1] - item.data[0] < 0) {
  3224. color[1] = downColor;
  3225. } else {
  3226. color[1] = upColor;
  3227. }
  3228. } else {
  3229. if (item.data[0] < series[index - 1][1]) {
  3230. color[0] = downColor;
  3231. }
  3232. if (item.data[1] < item.data[0]) {
  3233. color[1] = downColor;
  3234. }
  3235. if (item.data[2] > series[index - 1][1]) {
  3236. color[2] = upColor;
  3237. }
  3238. if (item.data[3] < series[index - 1][1]) {
  3239. color[3] = downColor;
  3240. }
  3241. }
  3242. var text1 = {
  3243. text: '开盘:' + item.data[0],
  3244. color: color[0] };
  3245. var text2 = {
  3246. text: '收盘:' + item.data[1],
  3247. color: color[1] };
  3248. var text3 = {
  3249. text: '最低:' + item.data[2],
  3250. color: color[2] };
  3251. var text4 = {
  3252. text: '最高:' + item.data[3],
  3253. color: color[3] };
  3254. textList.push(text1, text2, text3, text4);
  3255. });
  3256. var validCalPoints = [];
  3257. var offset = {
  3258. x: 0,
  3259. y: 0 };
  3260. for (var i = 0; i < calPoints.length; i++) {
  3261. var points = calPoints[i];
  3262. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  3263. validCalPoints.push(points[index]);
  3264. }
  3265. }
  3266. offset.x = Math.round(validCalPoints[0][0].x);
  3267. return {
  3268. textList: textList,
  3269. offset: offset };
  3270. }
  3271. function filterSeries(series) {
  3272. var tempSeries = [];
  3273. for (var i = 0; i < series.length; i++) {
  3274. if (series[i].show == true) {
  3275. tempSeries.push(series[i]);
  3276. }
  3277. }
  3278. return tempSeries;
  3279. }
  3280. function findCurrentIndex(currentPoints, calPoints, opts, config) {
  3281. var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
  3282. var currentIndex = -1;
  3283. var spacing = opts.chartData.eachSpacing / 2;
  3284. var xAxisPoints = [];
  3285. if (calPoints && calPoints.length > 0) {
  3286. for (var i = 1; i < opts.chartData.xAxisPoints.length; i++) {
  3287. xAxisPoints.push(opts.chartData.xAxisPoints[i] - spacing);
  3288. }
  3289. if ((opts.type == 'line' || opts.type == 'area') && opts.xAxis.boundaryGap == 'justify') {
  3290. spacing = opts.chartData.eachSpacing / 2;
  3291. }
  3292. if (!opts.categories) {
  3293. spacing = 0;
  3294. }
  3295. if (isInExactChartArea(currentPoints, opts, config)) {
  3296. xAxisPoints.forEach(function (item, index) {
  3297. if (currentPoints.x + offset + spacing > item) {
  3298. currentIndex = index;
  3299. }
  3300. });
  3301. }
  3302. }
  3303. return currentIndex;
  3304. }
  3305. function findLegendIndex(currentPoints, legendData, opts) {
  3306. var currentIndex = -1;
  3307. if (isInExactLegendArea(currentPoints, legendData.area)) {
  3308. var points = legendData.points;
  3309. var index = -1;
  3310. for (var i = 0, len = points.length; i < len; i++) {
  3311. var item = points[i];
  3312. for (var j = 0; j < item.length; j++) {
  3313. index += 1;
  3314. var area = item[j]['area'];
  3315. if (currentPoints.x > area[0] && currentPoints.x < area[2] && currentPoints.y > area[1] && currentPoints.y < area[3]) {
  3316. currentIndex = index;
  3317. break;
  3318. }
  3319. }
  3320. }
  3321. return currentIndex;
  3322. }
  3323. return currentIndex;
  3324. }
  3325. function isInExactLegendArea(currentPoints, area) {
  3326. return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y &&
  3327. currentPoints.y < area.end.y;
  3328. }
  3329. function isInExactChartArea(currentPoints, opts, config) {
  3330. return currentPoints.x <= opts.width - opts.area[1] + 10 && currentPoints.x >= opts.area[3] - 10 && currentPoints.y >= opts.area[0] && currentPoints.y <= opts.height - opts.area[2];
  3331. }
  3332. function findRadarChartCurrentIndex(currentPoints, radarData, count) {
  3333. var eachAngleArea = 2 * Math.PI / count;
  3334. var currentIndex = -1;
  3335. if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {
  3336. var fixAngle = function fixAngle(angle) {
  3337. if (angle < 0) {
  3338. angle += 2 * Math.PI;
  3339. }
  3340. if (angle > 2 * Math.PI) {
  3341. angle -= 2 * Math.PI;
  3342. }
  3343. return angle;
  3344. };
  3345. var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);
  3346. angle = -1 * angle;
  3347. if (angle < 0) {
  3348. angle += 2 * Math.PI;
  3349. }
  3350. var angleList = radarData.angleList.map(function (item) {
  3351. item = fixAngle(-1 * item);
  3352. return item;
  3353. });
  3354. angleList.forEach(function (item, index) {
  3355. var rangeStart = fixAngle(item - eachAngleArea / 2);
  3356. var rangeEnd = fixAngle(item + eachAngleArea / 2);
  3357. if (rangeEnd < rangeStart) {
  3358. rangeEnd += 2 * Math.PI;
  3359. }
  3360. if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <=
  3361. rangeEnd) {
  3362. currentIndex = index;
  3363. }
  3364. });
  3365. }
  3366. return currentIndex;
  3367. }
  3368. function findFunnelChartCurrentIndex(currentPoints, funnelData) {
  3369. var currentIndex = -1;
  3370. for (var i = 0, len = funnelData.series.length; i < len; i++) {
  3371. var item = funnelData.series[i];
  3372. if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) {
  3373. currentIndex = i;
  3374. break;
  3375. }
  3376. }
  3377. return currentIndex;
  3378. }
  3379. function findWordChartCurrentIndex(currentPoints, wordData) {
  3380. var currentIndex = -1;
  3381. for (var i = 0, len = wordData.length; i < len; i++) {
  3382. var item = wordData[i];
  3383. if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) {
  3384. currentIndex = i;
  3385. break;
  3386. }
  3387. }
  3388. return currentIndex;
  3389. }
  3390. function findMapChartCurrentIndex(currentPoints, opts) {
  3391. var currentIndex = -1;
  3392. var cData = opts.chartData.mapData;
  3393. var data = opts.series;
  3394. var tmp = pointToCoordinate(currentPoints.y, currentPoints.x, cData.bounds, cData.scale, cData.xoffset, cData.yoffset);
  3395. var poi = [tmp.x, tmp.y];
  3396. for (var i = 0, len = data.length; i < len; i++) {
  3397. var item = data[i].geometry.coordinates;
  3398. if (isPoiWithinPoly(poi, item)) {
  3399. currentIndex = i;
  3400. break;
  3401. }
  3402. }
  3403. return currentIndex;
  3404. }
  3405. function findPieChartCurrentIndex(currentPoints, pieData) {
  3406. var currentIndex = -1;
  3407. if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
  3408. var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
  3409. angle = -angle;
  3410. for (var i = 0, len = pieData.series.length; i < len; i++) {
  3411. var item = pieData.series[i];
  3412. if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) {
  3413. currentIndex = i;
  3414. break;
  3415. }
  3416. }
  3417. }
  3418. return currentIndex;
  3419. }
  3420. function isInExactPieChartArea(currentPoints, center, radius) {
  3421. return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);
  3422. }
  3423. function splitPoints(points) {
  3424. var newPoints = [];
  3425. var items = [];
  3426. points.forEach(function (item, index) {
  3427. if (item !== null) {
  3428. items.push(item);
  3429. } else {
  3430. if (items.length) {
  3431. newPoints.push(items);
  3432. }
  3433. items = [];
  3434. }
  3435. });
  3436. if (items.length) {
  3437. newPoints.push(items);
  3438. }
  3439. return newPoints;
  3440. }
  3441. function calLegendData(series, opts, config, chartData) {
  3442. var legendData = {
  3443. area: {
  3444. start: {
  3445. x: 0,
  3446. y: 0 },
  3447. end: {
  3448. x: 0,
  3449. y: 0 },
  3450. width: 0,
  3451. height: 0,
  3452. wholeWidth: 0,
  3453. wholeHeight: 0 },
  3454. points: [],
  3455. widthArr: [],
  3456. heightArr: [] };
  3457. if (opts.legend.show === false) {
  3458. chartData.legendData = legendData;
  3459. return legendData;
  3460. }
  3461. var padding = opts.legend.padding;
  3462. var margin = opts.legend.margin;
  3463. var fontSize = opts.legend.fontSize;
  3464. var shapeWidth = 15 * opts.pixelRatio;
  3465. var shapeRight = 5 * opts.pixelRatio;
  3466. var lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
  3467. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  3468. var legendList = [];
  3469. var widthCount = 0;
  3470. var widthCountArr = [];
  3471. var currentRow = [];
  3472. for (var i = 0; i < series.length; i++) {
  3473. var item = series[i];
  3474. var itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize) + opts.legend.itemGap;
  3475. if (widthCount + itemWidth > opts.width - opts.padding[1] - opts.padding[3]) {
  3476. legendList.push(currentRow);
  3477. widthCountArr.push(widthCount - opts.legend.itemGap);
  3478. widthCount = itemWidth;
  3479. currentRow = [item];
  3480. } else {
  3481. widthCount += itemWidth;
  3482. currentRow.push(item);
  3483. }
  3484. }
  3485. if (currentRow.length) {
  3486. legendList.push(currentRow);
  3487. widthCountArr.push(widthCount - opts.legend.itemGap);
  3488. legendData.widthArr = widthCountArr;
  3489. var legendWidth = Math.max.apply(null, widthCountArr);
  3490. switch (opts.legend.float) {
  3491. case 'left':
  3492. legendData.area.start.x = opts.padding[3];
  3493. legendData.area.end.x = opts.padding[3] + 2 * padding;
  3494. break;
  3495. case 'right':
  3496. legendData.area.start.x = opts.width - opts.padding[1] - legendWidth - 2 * padding;
  3497. legendData.area.end.x = opts.width - opts.padding[1];
  3498. break;
  3499. default:
  3500. legendData.area.start.x = (opts.width - legendWidth) / 2 - padding;
  3501. legendData.area.end.x = (opts.width + legendWidth) / 2 + padding;}
  3502. legendData.area.width = legendWidth + 2 * padding;
  3503. legendData.area.wholeWidth = legendWidth + 2 * padding;
  3504. legendData.area.height = legendList.length * lineHeight + 2 * padding;
  3505. legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin;
  3506. legendData.points = legendList;
  3507. }
  3508. } else {
  3509. var len = series.length;
  3510. var maxHeight = opts.height - opts.padding[0] - opts.padding[2] - 2 * margin - 2 * padding;
  3511. var maxLength = Math.min(Math.floor(maxHeight / lineHeight), len);
  3512. legendData.area.height = maxLength * lineHeight + padding * 2;
  3513. legendData.area.wholeHeight = maxLength * lineHeight + padding * 2;
  3514. switch (opts.legend.float) {
  3515. case 'top':
  3516. legendData.area.start.y = opts.padding[0] + margin;
  3517. legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
  3518. break;
  3519. case 'bottom':
  3520. legendData.area.start.y = opts.height - opts.padding[2] - margin - legendData.area.height;
  3521. legendData.area.end.y = opts.height - opts.padding[2] - margin;
  3522. break;
  3523. default:
  3524. legendData.area.start.y = (opts.height - legendData.area.height) / 2;
  3525. legendData.area.end.y = (opts.height + legendData.area.height) / 2;}
  3526. var lineNum = len % maxLength === 0 ? len / maxLength : Math.floor(len / maxLength + 1);
  3527. var _currentRow = [];
  3528. for (var _i3 = 0; _i3 < lineNum; _i3++) {
  3529. var temp = series.slice(_i3 * maxLength, _i3 * maxLength + maxLength);
  3530. _currentRow.push(temp);
  3531. }
  3532. legendData.points = _currentRow;
  3533. if (_currentRow.length) {
  3534. for (var _i4 = 0; _i4 < _currentRow.length; _i4++) {
  3535. var _item = _currentRow[_i4];
  3536. var maxWidth = 0;
  3537. for (var j = 0; j < _item.length; j++) {
  3538. var _itemWidth = shapeWidth + shapeRight + measureText(_item[j].name || 'undefined', fontSize) + opts.legend.itemGap;
  3539. if (_itemWidth > maxWidth) {
  3540. maxWidth = _itemWidth;
  3541. }
  3542. }
  3543. legendData.widthArr.push(maxWidth);
  3544. legendData.heightArr.push(_item.length * lineHeight + padding * 2);
  3545. }
  3546. var _legendWidth = 0;
  3547. for (var _i5 = 0; _i5 < legendData.widthArr.length; _i5++) {
  3548. _legendWidth += legendData.widthArr[_i5];
  3549. }
  3550. legendData.area.width = _legendWidth - opts.legend.itemGap + 2 * padding;
  3551. legendData.area.wholeWidth = legendData.area.width + padding;
  3552. }
  3553. }
  3554. switch (opts.legend.position) {
  3555. case 'top':
  3556. legendData.area.start.y = opts.padding[0] + margin;
  3557. legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
  3558. break;
  3559. case 'bottom':
  3560. legendData.area.start.y = opts.height - opts.padding[2] - legendData.area.height - margin;
  3561. legendData.area.end.y = opts.height - opts.padding[2] - margin;
  3562. break;
  3563. case 'left':
  3564. legendData.area.start.x = opts.padding[3];
  3565. legendData.area.end.x = opts.padding[3] + legendData.area.width;
  3566. break;
  3567. case 'right':
  3568. legendData.area.start.x = opts.width - opts.padding[1] - legendData.area.width;
  3569. legendData.area.end.x = opts.width - opts.padding[1];
  3570. break;}
  3571. chartData.legendData = legendData;
  3572. return legendData;
  3573. }
  3574. function calCategoriesData(categories, opts, config, eachSpacing) {
  3575. var result = {
  3576. angle: 0,
  3577. xAxisHeight: config.xAxisHeight };
  3578. var categoriesTextLenth = categories.map(function (item) {
  3579. return measureText(item, opts.xAxis.fontSize || config.fontSize);
  3580. });
  3581. var maxTextLength = Math.max.apply(this, categoriesTextLenth);
  3582. if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
  3583. result.angle = 45 * Math.PI / 180;
  3584. result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
  3585. }
  3586. return result;
  3587. }
  3588. function getXAxisTextList(series, opts, config) {
  3589. var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
  3590. var data = dataCombine(series);
  3591. var sorted = [];
  3592. // remove null from data
  3593. data = data.filter(function (item) {
  3594. //return item !== null;
  3595. if (typeof item === 'object' && item !== null) {
  3596. if (item.constructor.toString().indexOf('Array') > -1) {
  3597. return item !== null;
  3598. } else {
  3599. return item.value !== null;
  3600. }
  3601. } else {
  3602. return item !== null;
  3603. }
  3604. });
  3605. data.map(function (item) {
  3606. if (typeof item === 'object') {
  3607. if (item.constructor.toString().indexOf('Array') > -1) {
  3608. if (opts.type == 'candle') {
  3609. item.map(function (subitem) {
  3610. sorted.push(subitem);
  3611. });
  3612. } else {
  3613. sorted.push(item[0]);
  3614. }
  3615. } else {
  3616. sorted.push(item.value);
  3617. }
  3618. } else {
  3619. sorted.push(item);
  3620. }
  3621. });
  3622. var minData = 0;
  3623. var maxData = 0;
  3624. if (sorted.length > 0) {
  3625. minData = Math.min.apply(this, sorted);
  3626. maxData = Math.max.apply(this, sorted);
  3627. }
  3628. //为了兼容v1.9.0之前的项目
  3629. if (index > -1) {
  3630. if (typeof opts.xAxis.data[index].min === 'number') {
  3631. minData = Math.min(opts.xAxis.data[index].min, minData);
  3632. }
  3633. if (typeof opts.xAxis.data[index].max === 'number') {
  3634. maxData = Math.max(opts.xAxis.data[index].max, maxData);
  3635. }
  3636. } else {
  3637. if (typeof opts.xAxis.min === 'number') {
  3638. minData = Math.min(opts.xAxis.min, minData);
  3639. }
  3640. if (typeof opts.xAxis.max === 'number') {
  3641. maxData = Math.max(opts.xAxis.max, maxData);
  3642. }
  3643. }
  3644. if (minData === maxData) {
  3645. var rangeSpan = maxData || 10;
  3646. maxData += rangeSpan;
  3647. }
  3648. //var dataRange = getDataRange(minData, maxData);
  3649. var minRange = minData;
  3650. var maxRange = maxData;
  3651. var range = [];
  3652. var eachRange = (maxRange - minRange) / opts.xAxis.splitNumber;
  3653. for (var i = 0; i <= opts.xAxis.splitNumber; i++) {
  3654. range.push(minRange + eachRange * i);
  3655. }
  3656. return range;
  3657. }
  3658. function calXAxisData(series, opts, config) {
  3659. var result = {
  3660. angle: 0,
  3661. xAxisHeight: config.xAxisHeight };
  3662. result.ranges = getXAxisTextList(series, opts, config);
  3663. result.rangesFormat = result.ranges.map(function (item) {
  3664. item = opts.xAxis.format ? opts.xAxis.format(item) : util.toFixed(item, 2);
  3665. return item;
  3666. });
  3667. var xAxisScaleValues = result.ranges.map(function (item) {
  3668. // 如果刻度值是浮点数,则保留两位小数
  3669. item = util.toFixed(item, 2);
  3670. // 若有自定义格式则调用自定义的格式化函数
  3671. item = opts.xAxis.format ? opts.xAxis.format(Number(item)) : item;
  3672. return item;
  3673. });
  3674. result = Object.assign(result, getXAxisPoints(xAxisScaleValues, opts, config));
  3675. // 计算X轴刻度的属性譬如每个刻度的间隔,刻度的起始点\结束点以及总长
  3676. var eachSpacing = result.eachSpacing;
  3677. var textLength = xAxisScaleValues.map(function (item) {
  3678. return measureText(item);
  3679. });
  3680. // get max length of categories text
  3681. var maxTextLength = Math.max.apply(this, textLength);
  3682. // 如果刻度值文本内容过长,则将其逆时针旋转45°
  3683. if (maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
  3684. result.angle = 45 * Math.PI / 180;
  3685. result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
  3686. }
  3687. if (opts.xAxis.disabled === true) {
  3688. result.xAxisHeight = 0;
  3689. }
  3690. return result;
  3691. }
  3692. function getRadarDataPoints(angleList, center, radius, series, opts) {
  3693. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  3694. var radarOption = opts.extra.radar || {};
  3695. radarOption.max = radarOption.max || 0;
  3696. var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
  3697. var data = [];var _loop2 = function _loop2(
  3698. i) {
  3699. var each = series[i];
  3700. var listItem = {};
  3701. listItem.color = each.color;
  3702. listItem.legendShape = each.legendShape;
  3703. listItem.pointShape = each.pointShape;
  3704. listItem.data = [];
  3705. each.data.forEach(function (item, index) {
  3706. var tmp = {};
  3707. tmp.angle = angleList[index];
  3708. tmp.proportion = item / maxData;
  3709. tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion *
  3710. process * Math.sin(tmp.angle), center);
  3711. listItem.data.push(tmp);
  3712. });
  3713. data.push(listItem);};for (var i = 0; i < series.length; i++) {_loop2(i);
  3714. }
  3715. return data;
  3716. }
  3717. function getPieDataPoints(series, radius) {
  3718. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  3719. var count = 0;
  3720. var _start_ = 0;
  3721. for (var i = 0; i < series.length; i++) {
  3722. var item = series[i];
  3723. item.data = item.data === null ? 0 : item.data;
  3724. count += item.data;
  3725. }
  3726. for (var _i6 = 0; _i6 < series.length; _i6++) {
  3727. var _item2 = series[_i6];
  3728. _item2.data = _item2.data === null ? 0 : _item2.data;
  3729. if (count === 0) {
  3730. _item2._proportion_ = 1 / series.length * process;
  3731. } else {
  3732. _item2._proportion_ = _item2.data / count * process;
  3733. }
  3734. _item2._radius_ = radius;
  3735. }
  3736. for (var _i7 = 0; _i7 < series.length; _i7++) {
  3737. var _item3 = series[_i7];
  3738. _item3._start_ = _start_;
  3739. _start_ += 2 * _item3._proportion_ * Math.PI;
  3740. }
  3741. return series;
  3742. }
  3743. function getFunnelDataPoints(series, radius) {
  3744. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  3745. series = series.sort(function (a, b) {return parseInt(b.data) - parseInt(a.data);});
  3746. for (var i = 0; i < series.length; i++) {
  3747. series[i].radius = series[i].data / series[0].data * radius * process;
  3748. series[i]._proportion_ = series[i].data / series[0].data;
  3749. }
  3750. return series.reverse();
  3751. }
  3752. function getRoseDataPoints(series, type, minRadius, radius) {
  3753. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  3754. var count = 0;
  3755. var _start_ = 0;
  3756. var dataArr = [];
  3757. for (var i = 0; i < series.length; i++) {
  3758. var item = series[i];
  3759. item.data = item.data === null ? 0 : item.data;
  3760. count += item.data;
  3761. dataArr.push(item.data);
  3762. }
  3763. var minData = Math.min.apply(null, dataArr);
  3764. var maxData = Math.max.apply(null, dataArr);
  3765. var radiusLength = radius - minRadius;
  3766. for (var _i8 = 0; _i8 < series.length; _i8++) {
  3767. var _item4 = series[_i8];
  3768. _item4.data = _item4.data === null ? 0 : _item4.data;
  3769. if (count === 0 || type == 'area') {
  3770. _item4._proportion_ = _item4.data / count * process;
  3771. _item4._rose_proportion_ = 1 / series.length * process;
  3772. } else {
  3773. _item4._proportion_ = _item4.data / count * process;
  3774. _item4._rose_proportion_ = _item4.data / count * process;
  3775. }
  3776. _item4._radius_ = minRadius + radiusLength * ((_item4.data - minData) / (maxData - minData));
  3777. }
  3778. for (var _i9 = 0; _i9 < series.length; _i9++) {
  3779. var _item5 = series[_i9];
  3780. _item5._start_ = _start_;
  3781. _start_ += 2 * _item5._rose_proportion_ * Math.PI;
  3782. }
  3783. return series;
  3784. }
  3785. function getArcbarDataPoints(series, arcbarOption) {
  3786. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  3787. if (process == 1) {
  3788. process = 0.999999;
  3789. }
  3790. for (var i = 0; i < series.length; i++) {
  3791. var item = series[i];
  3792. item.data = item.data === null ? 0 : item.data;
  3793. var totalAngle = void 0;
  3794. if (arcbarOption.type == 'circle') {
  3795. totalAngle = 2;
  3796. } else {
  3797. if (arcbarOption.endAngle < arcbarOption.startAngle) {
  3798. totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle;
  3799. } else {
  3800. totalAngle = arcbarOption.startAngle - arcbarOption.endAngle;
  3801. }
  3802. }
  3803. item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle;
  3804. if (item._proportion_ >= 2) {
  3805. item._proportion_ = item._proportion_ % 2;
  3806. }
  3807. }
  3808. return series;
  3809. }
  3810. function getGaugeAxisPoints(categories, startAngle, endAngle) {
  3811. var totalAngle = startAngle - endAngle + 1;
  3812. var tempStartAngle = startAngle;
  3813. for (var i = 0; i < categories.length; i++) {
  3814. categories[i].value = categories[i].value === null ? 0 : categories[i].value;
  3815. categories[i]._startAngle_ = tempStartAngle;
  3816. categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle;
  3817. if (categories[i]._endAngle_ >= 2) {
  3818. categories[i]._endAngle_ = categories[i]._endAngle_ % 2;
  3819. }
  3820. tempStartAngle = categories[i]._endAngle_;
  3821. }
  3822. return categories;
  3823. }
  3824. function getGaugeDataPoints(series, categories, gaugeOption) {
  3825. var process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
  3826. for (var i = 0; i < series.length; i++) {
  3827. var item = series[i];
  3828. item.data = item.data === null ? 0 : item.data;
  3829. if (gaugeOption.pointer.color == 'auto') {
  3830. for (var _i10 = 0; _i10 < categories.length; _i10++) {
  3831. if (item.data <= categories[_i10].value) {
  3832. item.color = categories[_i10].color;
  3833. break;
  3834. }
  3835. }
  3836. } else {
  3837. item.color = gaugeOption.pointer.color;
  3838. }
  3839. var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  3840. item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle;
  3841. item._oldAngle_ = gaugeOption.oldAngle;
  3842. if (gaugeOption.oldAngle < gaugeOption.endAngle) {
  3843. item._oldAngle_ += 2;
  3844. }
  3845. if (item.data >= gaugeOption.oldData) {
  3846. item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle;
  3847. } else {
  3848. item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process;
  3849. }
  3850. if (item._proportion_ >= 2) {
  3851. item._proportion_ = item._proportion_ % 2;
  3852. }
  3853. }
  3854. return series;
  3855. }
  3856. function getPieTextMaxLength(series) {
  3857. series = getPieDataPoints(series);
  3858. var maxLength = 0;
  3859. for (var i = 0; i < series.length; i++) {
  3860. var item = series[i];
  3861. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
  3862. maxLength = Math.max(maxLength, measureText(text));
  3863. }
  3864. return maxLength;
  3865. }
  3866. function fixColumeData(points, eachSpacing, columnLen, index, config, opts) {
  3867. return points.map(function (item) {
  3868. if (item === null) {
  3869. return null;
  3870. }
  3871. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / columnLen);
  3872. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  3873. item.width = Math.min(item.width, +opts.extra.column.width);
  3874. }
  3875. if (item.width <= 0) {
  3876. item.width = 1;
  3877. }
  3878. item.x += (index + 0.5 - columnLen / 2) * item.width;
  3879. return item;
  3880. });
  3881. }
  3882. function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) {
  3883. return points.map(function (item) {
  3884. if (item === null) {
  3885. return null;
  3886. }
  3887. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
  3888. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  3889. item.width = Math.min(item.width, +opts.extra.column.width);
  3890. }
  3891. if (index > 0) {
  3892. item.width -= 2 * border;
  3893. }
  3894. return item;
  3895. });
  3896. }
  3897. function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) {
  3898. return points.map(function (item, indexn) {
  3899. if (item === null) {
  3900. return null;
  3901. }
  3902. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
  3903. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  3904. item.width = Math.min(item.width, +opts.extra.column.width);
  3905. }
  3906. return item;
  3907. });
  3908. }
  3909. function getXAxisPoints(categories, opts, config) {
  3910. var spacingValid = opts.width - opts.area[1] - opts.area[3];
  3911. var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length;
  3912. if ((opts.type == 'line' || opts.type == 'area') && dataCount > 1 && opts.xAxis.boundaryGap == 'justify') {
  3913. dataCount -= 1;
  3914. }
  3915. var eachSpacing = spacingValid / dataCount;
  3916. var xAxisPoints = [];
  3917. var startX = opts.area[3];
  3918. var endX = opts.width - opts.area[1];
  3919. categories.forEach(function (item, index) {
  3920. xAxisPoints.push(startX + index * eachSpacing);
  3921. });
  3922. if (opts.xAxis.boundaryGap !== 'justify') {
  3923. if (opts.enableScroll === true) {
  3924. xAxisPoints.push(startX + categories.length * eachSpacing);
  3925. } else {
  3926. xAxisPoints.push(endX);
  3927. }
  3928. }
  3929. return {
  3930. xAxisPoints: xAxisPoints,
  3931. startX: startX,
  3932. endX: endX,
  3933. eachSpacing: eachSpacing };
  3934. }
  3935. function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
  3936. var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
  3937. var points = [];
  3938. var validHeight = opts.height - opts.area[0] - opts.area[2];
  3939. data.forEach(function (item, index) {
  3940. if (item === null) {
  3941. points.push(null);
  3942. } else {
  3943. var cPoints = [];
  3944. item.forEach(function (items, indexs) {
  3945. var point = {};
  3946. point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
  3947. var value = items.value || items;
  3948. var height = validHeight * (value - minRange) / (maxRange - minRange);
  3949. height *= process;
  3950. point.y = opts.height - Math.round(height) - opts.area[2];
  3951. cPoints.push(point);
  3952. });
  3953. points.push(cPoints);
  3954. }
  3955. });
  3956. return points;
  3957. }
  3958. function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
  3959. var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
  3960. var boundaryGap = 'center';
  3961. if (opts.type == 'line' || opts.type == 'area') {
  3962. boundaryGap = opts.xAxis.boundaryGap;
  3963. }
  3964. var points = [];
  3965. var validHeight = opts.height - opts.area[0] - opts.area[2];
  3966. var validWidth = opts.width - opts.area[1] - opts.area[3];
  3967. data.forEach(function (item, index) {
  3968. if (item === null) {
  3969. points.push(null);
  3970. } else {
  3971. var point = {};
  3972. point.color = item.color;
  3973. point.x = xAxisPoints[index];
  3974. var value = item;
  3975. if (typeof item === 'object' && item !== null) {
  3976. if (item.constructor.toString().indexOf('Array') > -1) {
  3977. var xranges, xminRange, xmaxRange;
  3978. xranges = [].concat(opts.chartData.xAxisData.ranges);
  3979. xminRange = xranges.shift();
  3980. xmaxRange = xranges.pop();
  3981. value = item[1];
  3982. point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange);
  3983. } else {
  3984. value = item.value;
  3985. }
  3986. }
  3987. if (boundaryGap == 'center') {
  3988. point.x += Math.round(eachSpacing / 2);
  3989. }
  3990. var height = validHeight * (value - minRange) / (maxRange - minRange);
  3991. height *= process;
  3992. point.y = opts.height - Math.round(height) - opts.area[2];
  3993. points.push(point);
  3994. }
  3995. });
  3996. return points;
  3997. }
  3998. function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {
  3999. var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;
  4000. var points = [];
  4001. var validHeight = opts.height - opts.area[0] - opts.area[2];
  4002. data.forEach(function (item, index) {
  4003. if (item === null) {
  4004. points.push(null);
  4005. } else {
  4006. var point = {};
  4007. point.color = item.color;
  4008. point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
  4009. if (seriesIndex > 0) {
  4010. var value = 0;
  4011. for (var i = 0; i <= seriesIndex; i++) {
  4012. value += stackSeries[i].data[index];
  4013. }
  4014. var value0 = value - item;
  4015. var height = validHeight * (value - minRange) / (maxRange - minRange);
  4016. var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);
  4017. } else {
  4018. var value = item;
  4019. var height = validHeight * (value - minRange) / (maxRange - minRange);
  4020. var height0 = 0;
  4021. }
  4022. var heightc = height0;
  4023. height *= process;
  4024. heightc *= process;
  4025. point.y = opts.height - Math.round(height) - opts.area[2];
  4026. point.y0 = opts.height - Math.round(heightc) - opts.area[2];
  4027. points.push(point);
  4028. }
  4029. });
  4030. return points;
  4031. }
  4032. function getYAxisTextList(series, opts, config, stack) {
  4033. var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
  4034. var data;
  4035. if (stack == 'stack') {
  4036. data = dataCombineStack(series, opts.categories.length);
  4037. } else {
  4038. data = dataCombine(series);
  4039. }
  4040. var sorted = [];
  4041. // remove null from data
  4042. data = data.filter(function (item) {
  4043. //return item !== null;
  4044. if (typeof item === 'object' && item !== null) {
  4045. if (item.constructor.toString().indexOf('Array') > -1) {
  4046. return item !== null;
  4047. } else {
  4048. return item.value !== null;
  4049. }
  4050. } else {
  4051. return item !== null;
  4052. }
  4053. });
  4054. data.map(function (item) {
  4055. if (typeof item === 'object') {
  4056. if (item.constructor.toString().indexOf('Array') > -1) {
  4057. if (opts.type == 'candle') {
  4058. item.map(function (subitem) {
  4059. sorted.push(subitem);
  4060. });
  4061. } else {
  4062. sorted.push(item[1]);
  4063. }
  4064. } else {
  4065. sorted.push(item.value);
  4066. }
  4067. } else {
  4068. sorted.push(item);
  4069. }
  4070. });
  4071. var minData = 0;
  4072. var maxData = 0;
  4073. if (sorted.length > 0) {
  4074. minData = Math.min.apply(this, sorted);
  4075. maxData = Math.max.apply(this, sorted);
  4076. }
  4077. //为了兼容v1.9.0之前的项目
  4078. if (index > -1) {
  4079. if (typeof opts.yAxis.data[index].min === 'number') {
  4080. minData = Math.min(opts.yAxis.data[index].min, minData);
  4081. }
  4082. if (typeof opts.yAxis.data[index].max === 'number') {
  4083. maxData = Math.max(opts.yAxis.data[index].max, maxData);
  4084. }
  4085. } else {
  4086. if (typeof opts.yAxis.min === 'number') {
  4087. minData = Math.min(opts.yAxis.min, minData);
  4088. }
  4089. if (typeof opts.yAxis.max === 'number') {
  4090. maxData = Math.max(opts.yAxis.max, maxData);
  4091. }
  4092. }
  4093. if (minData === maxData) {
  4094. var rangeSpan = maxData || 10;
  4095. maxData += rangeSpan;
  4096. }
  4097. var dataRange = getDataRange(minData, maxData);
  4098. var minRange = dataRange.minRange;
  4099. var maxRange = dataRange.maxRange;
  4100. var range = [];
  4101. var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber;
  4102. for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
  4103. range.push(minRange + eachRange * i);
  4104. }
  4105. return range.reverse();
  4106. }
  4107. function calYAxisData(series, opts, config) {
  4108. //堆叠图重算Y轴
  4109. var columnstyle = assign({}, {
  4110. type: "" },
  4111. opts.extra.column);
  4112. //如果是多Y轴,重新计算
  4113. var YLength = opts.yAxis.data.length;
  4114. var newSeries = new Array(YLength);
  4115. if (YLength > 0) {
  4116. for (var i = 0; i < YLength; i++) {
  4117. newSeries[i] = [];
  4118. for (var j = 0; j < series.length; j++) {
  4119. if (series[j].index == i) {
  4120. newSeries[i].push(series[j]);
  4121. }
  4122. }
  4123. }
  4124. var rangesArr = new Array(YLength);
  4125. var rangesFormatArr = new Array(YLength);
  4126. var yAxisWidthArr = new Array(YLength);var _loop3 = function _loop3(
  4127. _i11) {
  4128. var yData = opts.yAxis.data[_i11];
  4129. //如果总开关不显示,强制每个Y轴为不显示
  4130. if (opts.yAxis.disabled == true) {
  4131. yData.disabled = true;
  4132. }
  4133. rangesArr[_i11] = getYAxisTextList(newSeries[_i11], opts, config, columnstyle.type, _i11);
  4134. var yAxisFontSizes = yData.fontSize || config.fontSize;
  4135. yAxisWidthArr[_i11] = { position: yData.position ? yData.position : 'left', width: 0 };
  4136. rangesFormatArr[_i11] = rangesArr[_i11].map(function (items) {
  4137. items = util.toFixed(items, 6);
  4138. items = yData.format ? yData.format(Number(items)) : items;
  4139. yAxisWidthArr[_i11].width = Math.max(yAxisWidthArr[_i11].width, measureText(items, yAxisFontSizes) + 5);
  4140. return items;
  4141. });
  4142. var calibration = yData.calibration ? 4 * opts.pixelRatio : 0;
  4143. yAxisWidthArr[_i11].width += calibration + 3 * opts.pixelRatio;
  4144. if (yData.disabled === true) {
  4145. yAxisWidthArr[_i11].width = 0;
  4146. }};for (var _i11 = 0; _i11 < YLength; _i11++) {_loop3(_i11);
  4147. }
  4148. } else {
  4149. var rangesArr = new Array(1);
  4150. var rangesFormatArr = new Array(1);
  4151. var yAxisWidthArr = new Array(1);
  4152. rangesArr[0] = getYAxisTextList(series, opts, config, columnstyle.type);
  4153. yAxisWidthArr[0] = { position: 'left', width: 0 };
  4154. var yAxisFontSize = opts.yAxis.fontSize || config.fontSize;
  4155. rangesFormatArr[0] = rangesArr[0].map(function (item) {
  4156. item = util.toFixed(item, 6);
  4157. item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;
  4158. yAxisWidthArr[0].width = Math.max(yAxisWidthArr[0].width, measureText(item, yAxisFontSize) + 5);
  4159. return item;
  4160. });
  4161. yAxisWidthArr[0].width += 3 * opts.pixelRatio;
  4162. if (opts.yAxis.disabled === true) {
  4163. yAxisWidthArr[0] = { position: 'left', width: 0 };
  4164. opts.yAxis.data[0] = { disabled: true };
  4165. } else {
  4166. opts.yAxis.data[0] = { disabled: false, position: 'left', max: opts.yAxis.max, min: opts.yAxis.min, format: opts.yAxis.format };
  4167. }
  4168. }
  4169. return {
  4170. rangesFormat: rangesFormatArr,
  4171. ranges: rangesArr,
  4172. yAxisWidth: yAxisWidthArr };
  4173. }
  4174. function calTooltipYAxisData(point, series, opts, config, eachSpacing) {
  4175. var ranges = [].concat(opts.chartData.yAxisData.ranges);
  4176. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  4177. var minAxis = opts.area[0];
  4178. var items = [];
  4179. for (var i = 0; i < ranges.length; i++) {
  4180. var maxVal = ranges[i].shift();
  4181. var minVal = ranges[i].pop();
  4182. var item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid;
  4183. item = opts.yAxis.data[i].format ? opts.yAxis.data[i].format(Number(item)) : item.toFixed(0);
  4184. items.push(String(item));
  4185. }
  4186. return items;
  4187. }
  4188. function calMarkLineData(points, opts) {
  4189. var minRange, maxRange;
  4190. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  4191. for (var i = 0; i < points.length; i++) {
  4192. points[i].yAxisIndex = points[i].yAxisIndex ? points[i].yAxisIndex : 0;
  4193. var range = [].concat(opts.chartData.yAxisData.ranges[points[i].yAxisIndex]);
  4194. minRange = range.pop();
  4195. maxRange = range.shift();
  4196. var height = spacingValid * (points[i].value - minRange) / (maxRange - minRange);
  4197. points[i].y = opts.height - Math.round(height) - opts.area[2];
  4198. }
  4199. return points;
  4200. }
  4201. function contextRotate(context, opts) {
  4202. if (opts.rotateLock !== true) {
  4203. context.translate(opts.height, 0);
  4204. context.rotate(90 * Math.PI / 180);
  4205. } else if (opts._rotate_ !== true) {
  4206. context.translate(opts.height, 0);
  4207. context.rotate(90 * Math.PI / 180);
  4208. opts._rotate_ = true;
  4209. }
  4210. }
  4211. function drawPointShape(points, color, shape, context, opts) {
  4212. context.beginPath();
  4213. if (opts.dataPointShapeType == 'hollow') {
  4214. context.setStrokeStyle(color);
  4215. context.setFillStyle(opts.background);
  4216. context.setLineWidth(2 * opts.pixelRatio);
  4217. } else {
  4218. context.setStrokeStyle("#ffffff");
  4219. context.setFillStyle(color);
  4220. context.setLineWidth(1 * opts.pixelRatio);
  4221. }
  4222. if (shape === 'diamond') {
  4223. points.forEach(function (item, index) {
  4224. if (item !== null) {
  4225. context.moveTo(item.x, item.y - 4.5);
  4226. context.lineTo(item.x - 4.5, item.y);
  4227. context.lineTo(item.x, item.y + 4.5);
  4228. context.lineTo(item.x + 4.5, item.y);
  4229. context.lineTo(item.x, item.y - 4.5);
  4230. }
  4231. });
  4232. } else if (shape === 'circle') {
  4233. points.forEach(function (item, index) {
  4234. if (item !== null) {
  4235. context.moveTo(item.x + 2.5 * opts.pixelRatio, item.y);
  4236. context.arc(item.x, item.y, 3 * opts.pixelRatio, 0, 2 * Math.PI, false);
  4237. }
  4238. });
  4239. } else if (shape === 'rect') {
  4240. points.forEach(function (item, index) {
  4241. if (item !== null) {
  4242. context.moveTo(item.x - 3.5, item.y - 3.5);
  4243. context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
  4244. }
  4245. });
  4246. } else if (shape === 'triangle') {
  4247. points.forEach(function (item, index) {
  4248. if (item !== null) {
  4249. context.moveTo(item.x, item.y - 4.5);
  4250. context.lineTo(item.x - 4.5, item.y + 4.5);
  4251. context.lineTo(item.x + 4.5, item.y + 4.5);
  4252. context.lineTo(item.x, item.y - 4.5);
  4253. }
  4254. });
  4255. }
  4256. context.closePath();
  4257. context.fill();
  4258. context.stroke();
  4259. }
  4260. function drawRingTitle(opts, config, context, center) {
  4261. var titlefontSize = opts.title.fontSize || config.titleFontSize;
  4262. var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;
  4263. var title = opts.title.name || '';
  4264. var subtitle = opts.subtitle.name || '';
  4265. var titleFontColor = opts.title.color || config.titleColor;
  4266. var subtitleFontColor = opts.subtitle.color || config.subtitleColor;
  4267. var titleHeight = title ? titlefontSize : 0;
  4268. var subtitleHeight = subtitle ? subtitlefontSize : 0;
  4269. var margin = 5;
  4270. if (subtitle) {
  4271. var textWidth = measureText(subtitle, subtitlefontSize);
  4272. var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX || 0);
  4273. var startY = center.y + subtitlefontSize / 2 + (opts.subtitle.offsetY || 0);
  4274. if (title) {
  4275. startY += (titleHeight + margin) / 2;
  4276. }
  4277. context.beginPath();
  4278. context.setFontSize(subtitlefontSize);
  4279. context.setFillStyle(subtitleFontColor);
  4280. context.fillText(subtitle, startX, startY);
  4281. context.closePath();
  4282. context.stroke();
  4283. }
  4284. if (title) {
  4285. var _textWidth = measureText(title, titlefontSize);
  4286. var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0);
  4287. var _startY = center.y + titlefontSize / 2 + (opts.title.offsetY || 0);
  4288. if (subtitle) {
  4289. _startY -= (subtitleHeight + margin) / 2;
  4290. }
  4291. context.beginPath();
  4292. context.setFontSize(titlefontSize);
  4293. context.setFillStyle(titleFontColor);
  4294. context.fillText(title, _startX, _startY);
  4295. context.closePath();
  4296. context.stroke();
  4297. }
  4298. }
  4299. function drawPointText(points, series, config, context) {
  4300. // 绘制数据文案
  4301. var data = series.data;
  4302. points.forEach(function (item, index) {
  4303. if (item !== null) {
  4304. //var formatVal = series.format ? series.format(data[index]) : data[index];
  4305. context.beginPath();
  4306. context.setFontSize(series.textSize || config.fontSize);
  4307. context.setFillStyle(series.textColor || '#666666');
  4308. var value = data[index];
  4309. if (typeof data[index] === 'object' && data[index] !== null) {
  4310. if (data[index].constructor == Array) {
  4311. value = data[index][1];
  4312. } else {
  4313. value = data[index].value;
  4314. }
  4315. }
  4316. var formatVal = series.format ? series.format(value) : value;
  4317. context.fillText(String(formatVal), item.x - measureText(formatVal, series.textSize || config.fontSize) / 2, item.y - 4);
  4318. context.closePath();
  4319. context.stroke();
  4320. }
  4321. });
  4322. }
  4323. function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) {
  4324. radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin;
  4325. var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  4326. var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  4327. var totalNumber = gaugeOption.endNumber - gaugeOption.startNumber;
  4328. var splitNumber = totalNumber / gaugeOption.splitLine.splitNumber;
  4329. var nowAngle = gaugeOption.startAngle;
  4330. var nowNumber = gaugeOption.startNumber;
  4331. for (var i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
  4332. var pos = {
  4333. x: radius * Math.cos(nowAngle * Math.PI),
  4334. y: radius * Math.sin(nowAngle * Math.PI) };
  4335. var labelText = gaugeOption.labelFormat ? gaugeOption.labelFormat(nowNumber) : nowNumber;
  4336. pos.x += centerPosition.x - measureText(labelText) / 2;
  4337. pos.y += centerPosition.y;
  4338. var startX = pos.x;
  4339. var startY = pos.y;
  4340. context.beginPath();
  4341. context.setFontSize(config.fontSize);
  4342. context.setFillStyle(gaugeOption.labelColor || '#666666');
  4343. context.fillText(labelText, startX, startY + config.fontSize / 2);
  4344. context.closePath();
  4345. context.stroke();
  4346. nowAngle += splitAngle;
  4347. if (nowAngle >= 2) {
  4348. nowAngle = nowAngle % 2;
  4349. }
  4350. nowNumber += splitNumber;
  4351. }
  4352. }
  4353. function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {
  4354. var radarOption = opts.extra.radar || {};
  4355. radius += config.radarLabelTextMargin;
  4356. angleList.forEach(function (angle, index) {
  4357. var pos = {
  4358. x: radius * Math.cos(angle),
  4359. y: radius * Math.sin(angle) };
  4360. var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);
  4361. var startX = posRelativeCanvas.x;
  4362. var startY = posRelativeCanvas.y;
  4363. if (util.approximatelyEqual(pos.x, 0)) {
  4364. startX -= measureText(opts.categories[index] || '') / 2;
  4365. } else if (pos.x < 0) {
  4366. startX -= measureText(opts.categories[index] || '');
  4367. }
  4368. context.beginPath();
  4369. context.setFontSize(config.fontSize);
  4370. context.setFillStyle(radarOption.labelColor || '#666666');
  4371. context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);
  4372. context.closePath();
  4373. context.stroke();
  4374. });
  4375. }
  4376. function drawPieText(series, opts, config, context, radius, center) {
  4377. var lineRadius = config.pieChartLinePadding;
  4378. var textObjectCollection = [];
  4379. var lastTextObject = null;
  4380. var seriesConvert = series.map(function (item) {
  4381. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_.toFixed(4) * 100) + '%';
  4382. if (item._rose_proportion_) item._proportion_ = item._rose_proportion_;
  4383. var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);
  4384. var color = item.color;
  4385. var radius = item._radius_;
  4386. return {
  4387. arc: arc,
  4388. text: text,
  4389. color: color,
  4390. radius: radius,
  4391. textColor: item.textColor,
  4392. textSize: item.textSize };
  4393. });
  4394. for (var i = 0; i < seriesConvert.length; i++) {
  4395. var item = seriesConvert[i];
  4396. // line end
  4397. var orginX1 = Math.cos(item.arc) * (item.radius + lineRadius);
  4398. var orginY1 = Math.sin(item.arc) * (item.radius + lineRadius);
  4399. // line start
  4400. var orginX2 = Math.cos(item.arc) * item.radius;
  4401. var orginY2 = Math.sin(item.arc) * item.radius;
  4402. // text start
  4403. var orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;
  4404. var orginY3 = orginY1;
  4405. var textWidth = measureText(item.text, item.textSize || config.fontSize);
  4406. var startY = orginY3;
  4407. if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, {
  4408. x: orginX3 }))
  4409. {
  4410. if (orginX3 > 0) {
  4411. startY = Math.min(orginY3, lastTextObject.start.y);
  4412. } else if (orginX1 < 0) {
  4413. startY = Math.max(orginY3, lastTextObject.start.y);
  4414. } else {
  4415. if (orginY3 > 0) {
  4416. startY = Math.max(orginY3, lastTextObject.start.y);
  4417. } else {
  4418. startY = Math.min(orginY3, lastTextObject.start.y);
  4419. }
  4420. }
  4421. }
  4422. if (orginX3 < 0) {
  4423. orginX3 -= textWidth;
  4424. }
  4425. var textObject = {
  4426. lineStart: {
  4427. x: orginX2,
  4428. y: orginY2 },
  4429. lineEnd: {
  4430. x: orginX1,
  4431. y: orginY1 },
  4432. start: {
  4433. x: orginX3,
  4434. y: startY },
  4435. width: textWidth,
  4436. height: config.fontSize,
  4437. text: item.text,
  4438. color: item.color,
  4439. textColor: item.textColor,
  4440. textSize: item.textSize };
  4441. lastTextObject = avoidCollision(textObject, lastTextObject);
  4442. textObjectCollection.push(lastTextObject);
  4443. }
  4444. for (var _i12 = 0; _i12 < textObjectCollection.length; _i12++) {
  4445. var _item6 = textObjectCollection[_i12];
  4446. var lineStartPoistion = convertCoordinateOrigin(_item6.lineStart.x, _item6.lineStart.y, center);
  4447. var lineEndPoistion = convertCoordinateOrigin(_item6.lineEnd.x, _item6.lineEnd.y, center);
  4448. var textPosition = convertCoordinateOrigin(_item6.start.x, _item6.start.y, center);
  4449. context.setLineWidth(1 * opts.pixelRatio);
  4450. context.setFontSize(config.fontSize);
  4451. context.beginPath();
  4452. context.setStrokeStyle(_item6.color);
  4453. context.setFillStyle(_item6.color);
  4454. context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
  4455. var curveStartX = _item6.start.x < 0 ? textPosition.x + _item6.width : textPosition.x;
  4456. var textStartX = _item6.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;
  4457. context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);
  4458. context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
  4459. context.stroke();
  4460. context.closePath();
  4461. context.beginPath();
  4462. context.moveTo(textPosition.x + _item6.width, textPosition.y);
  4463. context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);
  4464. context.closePath();
  4465. context.fill();
  4466. context.beginPath();
  4467. context.setFontSize(_item6.textSize || config.fontSize);
  4468. context.setFillStyle(_item6.textColor || '#666666');
  4469. context.fillText(_item6.text, textStartX, textPosition.y + 3);
  4470. context.closePath();
  4471. context.stroke();
  4472. context.closePath();
  4473. }
  4474. }
  4475. function drawToolTipSplitLine(offsetX, opts, config, context) {
  4476. var toolTipOption = opts.extra.tooltip || {};
  4477. toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;
  4478. toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;
  4479. var startY = opts.area[0];
  4480. var endY = opts.height - opts.area[2];
  4481. if (toolTipOption.gridType == 'dash') {
  4482. context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
  4483. }
  4484. context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
  4485. context.setLineWidth(1 * opts.pixelRatio);
  4486. context.beginPath();
  4487. context.moveTo(offsetX, startY);
  4488. context.lineTo(offsetX, endY);
  4489. context.stroke();
  4490. context.setLineDash([]);
  4491. if (toolTipOption.xAxisLabel) {
  4492. var labelText = opts.categories[opts.tooltip.index];
  4493. context.setFontSize(config.fontSize);
  4494. var textWidth = measureText(labelText, config.fontSize);
  4495. var textX = offsetX - 0.5 * textWidth;
  4496. var textY = endY;
  4497. context.beginPath();
  4498. context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
  4499. context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
  4500. context.setLineWidth(1 * opts.pixelRatio);
  4501. context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);
  4502. context.closePath();
  4503. context.stroke();
  4504. context.fill();
  4505. context.beginPath();
  4506. context.setFontSize(config.fontSize);
  4507. context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
  4508. context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize);
  4509. context.closePath();
  4510. context.stroke();
  4511. }
  4512. }
  4513. function drawMarkLine(opts, config, context) {
  4514. var markLineOption = assign({}, {
  4515. type: 'solid',
  4516. dashLength: 4,
  4517. data: [] },
  4518. opts.extra.markLine);
  4519. var startX = opts.area[3];
  4520. var endX = opts.width - opts.area[1];
  4521. var points = calMarkLineData(markLineOption.data, opts);
  4522. for (var i = 0; i < points.length; i++) {
  4523. var item = assign({}, {
  4524. lineColor: '#DE4A42',
  4525. showLabel: false,
  4526. labelFontColor: '#666666',
  4527. labelBgColor: '#DFE8FF',
  4528. labelBgOpacity: 0.8,
  4529. yAxisIndex: 0 },
  4530. points[i]);
  4531. if (markLineOption.type == 'dash') {
  4532. context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]);
  4533. }
  4534. context.setStrokeStyle(item.lineColor);
  4535. context.setLineWidth(1 * opts.pixelRatio);
  4536. context.beginPath();
  4537. context.moveTo(startX, item.y);
  4538. context.lineTo(endX, item.y);
  4539. context.stroke();
  4540. context.setLineDash([]);
  4541. if (item.showLabel) {
  4542. var labelText = opts.yAxis.format ? opts.yAxis.format(Number(item.value)) : item.value;
  4543. context.setFontSize(config.fontSize);
  4544. var textWidth = measureText(labelText, config.fontSize);
  4545. var bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding;
  4546. var bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2);
  4547. var bgWidth = bgEndX - bgStartX;
  4548. var textX = bgStartX + (bgWidth - textWidth) / 2;
  4549. var textY = item.y;
  4550. context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity));
  4551. context.setStrokeStyle(item.labelBgColor);
  4552. context.setLineWidth(1 * opts.pixelRatio);
  4553. context.beginPath();
  4554. context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
  4555. context.closePath();
  4556. context.stroke();
  4557. context.fill();
  4558. context.beginPath();
  4559. context.setFontSize(config.fontSize);
  4560. context.setFillStyle(item.labelFontColor);
  4561. context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize);
  4562. context.stroke();
  4563. }
  4564. }
  4565. }
  4566. function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) {
  4567. var toolTipOption = assign({}, {
  4568. gridType: 'solid',
  4569. dashLength: 4 },
  4570. opts.extra.tooltip);
  4571. var startX = opts.area[3];
  4572. var endX = opts.width - opts.area[1];
  4573. if (toolTipOption.gridType == 'dash') {
  4574. context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
  4575. }
  4576. context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
  4577. context.setLineWidth(1 * opts.pixelRatio);
  4578. context.beginPath();
  4579. context.moveTo(startX, opts.tooltip.offset.y);
  4580. context.lineTo(endX, opts.tooltip.offset.y);
  4581. context.stroke();
  4582. context.setLineDash([]);
  4583. if (toolTipOption.yAxisLabel) {
  4584. var labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing);
  4585. var widthArr = opts.chartData.yAxisData.yAxisWidth;
  4586. var tStartLeft = opts.area[3];
  4587. var tStartRight = opts.width - opts.area[1];
  4588. for (var i = 0; i < labelText.length; i++) {
  4589. context.setFontSize(config.fontSize);
  4590. var textWidth = measureText(labelText[i], config.fontSize);
  4591. var bgStartX = void 0,bgEndX = void 0,bgWidth = void 0;
  4592. if (widthArr[i].position == 'left') {
  4593. bgStartX = tStartLeft - widthArr[i].width;
  4594. bgEndX = Math.max(bgStartX, bgStartX + textWidth + config.toolTipPadding * 2);
  4595. } else {
  4596. bgStartX = tStartRight;
  4597. bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + config.toolTipPadding * 2);
  4598. }
  4599. bgWidth = bgEndX - bgStartX;
  4600. var textX = bgStartX + (bgWidth - textWidth) / 2;
  4601. var textY = opts.tooltip.offset.y;
  4602. context.beginPath();
  4603. context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
  4604. context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
  4605. context.setLineWidth(1 * opts.pixelRatio);
  4606. context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
  4607. context.closePath();
  4608. context.stroke();
  4609. context.fill();
  4610. context.beginPath();
  4611. context.setFontSize(config.fontSize);
  4612. context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
  4613. context.fillText(labelText[i], textX, textY + 0.5 * config.fontSize);
  4614. context.closePath();
  4615. context.stroke();
  4616. if (widthArr[i].position == 'left') {
  4617. tStartLeft -= widthArr[i].width + opts.yAxis.padding;
  4618. } else {
  4619. tStartRight += widthArr[i].width + opts.yAxis.padding;
  4620. }
  4621. }
  4622. }
  4623. }
  4624. function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {
  4625. var toolTipOption = assign({}, {
  4626. activeBgColor: '#000000',
  4627. activeBgOpacity: 0.08 },
  4628. opts.extra.tooltip);
  4629. var startY = opts.area[0];
  4630. var endY = opts.height - opts.area[2];
  4631. context.beginPath();
  4632. context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
  4633. context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY);
  4634. context.closePath();
  4635. context.fill();
  4636. }
  4637. function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) {
  4638. var toolTipOption = assign({}, {
  4639. showBox: true,
  4640. bgColor: '#000000',
  4641. bgOpacity: 0.7,
  4642. fontColor: '#FFFFFF' },
  4643. opts.extra.tooltip);
  4644. var legendWidth = 4 * opts.pixelRatio;
  4645. var legendMarginRight = 5 * opts.pixelRatio;
  4646. var arrowWidth = 8 * opts.pixelRatio;
  4647. var isOverRightBorder = false;
  4648. if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') {
  4649. drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
  4650. }
  4651. offset = assign({
  4652. x: 0,
  4653. y: 0 },
  4654. offset);
  4655. offset.y -= 8 * opts.pixelRatio;
  4656. var textWidth = textList.map(function (item) {
  4657. return measureText(item.text, config.fontSize);
  4658. });
  4659. var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);
  4660. var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;
  4661. if (toolTipOption.showBox == false) {return;}
  4662. // if beyond the right border
  4663. if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) {
  4664. isOverRightBorder = true;
  4665. }
  4666. if (toolTipHeight + offset.y > opts.height) {
  4667. offset.y = opts.height - toolTipHeight;
  4668. }
  4669. // draw background rect
  4670. context.beginPath();
  4671. context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity));
  4672. if (isOverRightBorder) {
  4673. context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
  4674. context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
  4675. context.lineTo(offset.x - arrowWidth, offset.y);
  4676. context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y);
  4677. context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight);
  4678. context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight);
  4679. context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
  4680. context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
  4681. } else {
  4682. context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
  4683. context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
  4684. context.lineTo(offset.x + arrowWidth, offset.y);
  4685. context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y);
  4686. context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight);
  4687. context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight);
  4688. context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
  4689. context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
  4690. }
  4691. context.closePath();
  4692. context.fill();
  4693. // draw legend
  4694. textList.forEach(function (item, index) {
  4695. if (item.color !== null) {
  4696. context.beginPath();
  4697. context.setFillStyle(item.color);
  4698. var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;
  4699. var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
  4700. config.toolTipPadding + 1;
  4701. if (isOverRightBorder) {
  4702. startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;
  4703. }
  4704. context.fillRect(startX, startY, legendWidth, config.fontSize);
  4705. context.closePath();
  4706. }
  4707. });
  4708. // draw text list
  4709. textList.forEach(function (item, index) {
  4710. var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;
  4711. if (isOverRightBorder) {
  4712. startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;
  4713. }
  4714. var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
  4715. config.toolTipPadding;
  4716. context.beginPath();
  4717. context.setFontSize(config.fontSize);
  4718. context.setFillStyle(toolTipOption.fontColor);
  4719. context.fillText(item.text, startX, startY + config.fontSize);
  4720. context.closePath();
  4721. context.stroke();
  4722. });
  4723. }
  4724. function drawYAxisTitle(title, opts, config, context) {
  4725. var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2;
  4726. context.save();
  4727. context.beginPath();
  4728. context.setFontSize(config.fontSize);
  4729. context.setFillStyle(opts.yAxis.titleFontColor || '#333333');
  4730. context.translate(0, opts.height);
  4731. context.rotate(-90 * Math.PI / 180);
  4732. context.fillText(title, startX, opts.padding[3] + 0.5 * config.fontSize);
  4733. context.closePath();
  4734. context.stroke();
  4735. context.restore();
  4736. }
  4737. function drawColumnDataPoints(series, opts, config, context) {
  4738. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  4739. var xAxisData = opts.chartData.xAxisData,
  4740. xAxisPoints = xAxisData.xAxisPoints,
  4741. eachSpacing = xAxisData.eachSpacing;
  4742. var columnOption = assign({}, {
  4743. type: 'group',
  4744. width: eachSpacing / 2,
  4745. meter: {
  4746. border: 4,
  4747. fillColor: '#FFFFFF' } },
  4748. opts.extra.column);
  4749. var calPoints = [];
  4750. context.save();
  4751. var leftNum = -2;
  4752. var rightNum = xAxisPoints.length + 2;
  4753. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  4754. context.translate(opts._scrollDistance_, 0);
  4755. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  4756. rightNum = leftNum + opts.xAxis.itemCount + 4;
  4757. }
  4758. if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
  4759. drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing);
  4760. }
  4761. series.forEach(function (eachSeries, seriesIndex) {
  4762. var ranges, minRange, maxRange;
  4763. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  4764. minRange = ranges.pop();
  4765. maxRange = ranges.shift();
  4766. var data = eachSeries.data;
  4767. switch (columnOption.type) {
  4768. case 'group':
  4769. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4770. var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  4771. calPoints.push(tooltipPoints);
  4772. points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
  4773. for (var i = 0; i < points.length; i++) {
  4774. var item = points[i];
  4775. if (item !== null && i > leftNum && i < rightNum) {
  4776. context.beginPath();
  4777. context.setStrokeStyle(item.color || eachSeries.color);
  4778. context.setLineWidth(1);
  4779. context.setFillStyle(item.color || eachSeries.color);
  4780. var startX = item.x - item.width / 2;
  4781. var height = opts.height - item.y - opts.area[2];
  4782. context.moveTo(startX, item.y);
  4783. context.lineTo(startX + item.width - 2, item.y);
  4784. context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
  4785. context.lineTo(startX, opts.height - opts.area[2]);
  4786. context.lineTo(startX, item.y);
  4787. context.closePath();
  4788. context.stroke();
  4789. context.fill();
  4790. }
  4791. };
  4792. break;
  4793. case 'stack':
  4794. // 绘制堆叠数据图
  4795. var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  4796. calPoints.push(points);
  4797. points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);
  4798. for (var _i13 = 0; _i13 < points.length; _i13++) {
  4799. var _item7 = points[_i13];
  4800. if (_item7 !== null && _i13 > leftNum && _i13 < rightNum) {
  4801. context.beginPath();
  4802. context.setFillStyle(_item7.color || eachSeries.color);
  4803. var startX = _item7.x - _item7.width / 2 + 1;
  4804. var height = opts.height - _item7.y - opts.area[2];
  4805. var height0 = opts.height - _item7.y0 - opts.area[2];
  4806. if (seriesIndex > 0) {
  4807. height -= height0;
  4808. }
  4809. context.moveTo(startX, _item7.y);
  4810. context.fillRect(startX, _item7.y, _item7.width - 2, height);
  4811. context.closePath();
  4812. context.fill();
  4813. }
  4814. };
  4815. break;
  4816. case 'meter':
  4817. // 绘制温度计数据图
  4818. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4819. calPoints.push(points);
  4820. points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter.border);
  4821. if (seriesIndex == 0) {
  4822. for (var _i14 = 0; _i14 < points.length; _i14++) {
  4823. var _item8 = points[_i14];
  4824. if (_item8 !== null && _i14 > leftNum && _i14 < rightNum) {
  4825. //画背景颜色
  4826. context.beginPath();
  4827. context.setFillStyle(columnOption.meter.fillColor);
  4828. var startX = _item8.x - _item8.width / 2;
  4829. var height = opts.height - _item8.y - opts.area[2];
  4830. context.moveTo(startX, _item8.y);
  4831. context.fillRect(startX, _item8.y, _item8.width, height);
  4832. context.closePath();
  4833. context.fill();
  4834. //画边框线
  4835. if (columnOption.meter.border > 0) {
  4836. context.beginPath();
  4837. context.setStrokeStyle(eachSeries.color);
  4838. context.setLineWidth(columnOption.meter.border * opts.pixelRatio);
  4839. context.moveTo(startX + columnOption.meter.border * 0.5, _item8.y + height);
  4840. context.lineTo(startX + columnOption.meter.border * 0.5, _item8.y + columnOption.meter.border * 0.5);
  4841. context.lineTo(startX + _item8.width - columnOption.meter.border * 0.5, _item8.y + columnOption.meter.border * 0.5);
  4842. context.lineTo(startX + _item8.width - columnOption.meter.border * 0.5, _item8.y + height);
  4843. context.stroke();
  4844. }
  4845. }
  4846. };
  4847. } else {
  4848. for (var _i15 = 0; _i15 < points.length; _i15++) {
  4849. var _item9 = points[_i15];
  4850. if (_item9 !== null && _i15 > leftNum && _i15 < rightNum) {
  4851. context.beginPath();
  4852. context.setFillStyle(_item9.color || eachSeries.color);
  4853. var startX = _item9.x - _item9.width / 2;
  4854. var height = opts.height - _item9.y - opts.area[2];
  4855. context.moveTo(startX, _item9.y);
  4856. context.fillRect(startX, _item9.y, _item9.width, height);
  4857. context.closePath();
  4858. context.fill();
  4859. }
  4860. };
  4861. }
  4862. break;}
  4863. });
  4864. if (opts.dataLabel !== false && process === 1) {
  4865. series.forEach(function (eachSeries, seriesIndex) {
  4866. var ranges, minRange, maxRange;
  4867. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  4868. minRange = ranges.pop();
  4869. maxRange = ranges.shift();
  4870. var data = eachSeries.data;
  4871. switch (columnOption.type) {
  4872. case 'group':
  4873. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4874. points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
  4875. drawPointText(points, eachSeries, config, context);
  4876. break;
  4877. case 'stack':
  4878. var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  4879. drawPointText(points, eachSeries, config, context);
  4880. break;
  4881. case 'meter':
  4882. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4883. drawPointText(points, eachSeries, config, context);
  4884. break;}
  4885. });
  4886. }
  4887. context.restore();
  4888. return {
  4889. xAxisPoints: xAxisPoints,
  4890. calPoints: calPoints,
  4891. eachSpacing: eachSpacing };
  4892. }
  4893. function drawCandleDataPoints(series, seriesMA, opts, config, context) {
  4894. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  4895. var candleOption = assign({}, {
  4896. color: {},
  4897. average: {} },
  4898. opts.extra.candle);
  4899. candleOption.color = assign({}, {
  4900. upLine: '#f04864',
  4901. upFill: '#f04864',
  4902. downLine: '#2fc25b',
  4903. downFill: '#2fc25b' },
  4904. candleOption.color);
  4905. candleOption.average = assign({}, {
  4906. show: false,
  4907. name: [],
  4908. day: [],
  4909. color: config.colors },
  4910. candleOption.average);
  4911. opts.extra.candle = candleOption;
  4912. var xAxisData = opts.chartData.xAxisData,
  4913. xAxisPoints = xAxisData.xAxisPoints,
  4914. eachSpacing = xAxisData.eachSpacing;
  4915. var calPoints = [];
  4916. context.save();
  4917. var leftNum = -2;
  4918. var rightNum = xAxisPoints.length + 2;
  4919. var leftSpace = 0;
  4920. var rightSpace = opts.width + eachSpacing;
  4921. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  4922. context.translate(opts._scrollDistance_, 0);
  4923. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  4924. rightNum = leftNum + opts.xAxis.itemCount + 4;
  4925. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  4926. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  4927. }
  4928. //画均线
  4929. if (candleOption.average.show || seriesMA) {//Merge pull request !12 from 邱贵翔
  4930. seriesMA.forEach(function (eachSeries, seriesIndex) {
  4931. var ranges, minRange, maxRange;
  4932. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  4933. minRange = ranges.pop();
  4934. maxRange = ranges.shift();
  4935. var data = eachSeries.data;
  4936. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4937. var splitPointList = splitPoints(points);
  4938. for (var i = 0; i < splitPointList.length; i++) {
  4939. var _points = splitPointList[i];
  4940. context.beginPath();
  4941. context.setStrokeStyle(eachSeries.color);
  4942. context.setLineWidth(1);
  4943. if (_points.length === 1) {
  4944. context.moveTo(_points[0].x, _points[0].y);
  4945. context.arc(_points[0].x, _points[0].y, 1, 0, 2 * Math.PI);
  4946. } else {
  4947. context.moveTo(_points[0].x, _points[0].y);
  4948. var startPoint = 0;
  4949. for (var j = 0; j < _points.length; j++) {
  4950. var item = _points[j];
  4951. if (startPoint == 0 && item.x > leftSpace) {
  4952. context.moveTo(item.x, item.y);
  4953. startPoint = 1;
  4954. }
  4955. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  4956. var ctrlPoint = createCurveControlPoints(_points, j - 1);
  4957. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  4958. }
  4959. }
  4960. context.moveTo(_points[0].x, _points[0].y);
  4961. }
  4962. context.closePath();
  4963. context.stroke();
  4964. }
  4965. });
  4966. }
  4967. //画K线
  4968. series.forEach(function (eachSeries, seriesIndex) {
  4969. var ranges, minRange, maxRange;
  4970. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  4971. minRange = ranges.pop();
  4972. maxRange = ranges.shift();
  4973. var data = eachSeries.data;
  4974. var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  4975. calPoints.push(points);
  4976. var splitPointList = splitPoints(points);
  4977. for (var i = 0; i < splitPointList[0].length; i++) {
  4978. if (i > leftNum && i < rightNum) {
  4979. var item = splitPointList[0][i];
  4980. context.beginPath();
  4981. //如果上涨
  4982. if (data[i][1] - data[i][0] > 0) {
  4983. context.setStrokeStyle(candleOption.color.upLine);
  4984. context.setFillStyle(candleOption.color.upFill);
  4985. context.setLineWidth(1 * opts.pixelRatio);
  4986. context.moveTo(item[3].x, item[3].y); //顶点
  4987. context.lineTo(item[1].x, item[1].y); //收盘中间点
  4988. context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
  4989. context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
  4990. context.lineTo(item[0].x, item[0].y); //开盘中间点
  4991. context.lineTo(item[2].x, item[2].y); //底点
  4992. context.lineTo(item[0].x, item[0].y); //开盘中间点
  4993. context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
  4994. context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
  4995. context.lineTo(item[1].x, item[1].y); //收盘中间点
  4996. context.moveTo(item[3].x, item[3].y); //顶点
  4997. } else {
  4998. context.setStrokeStyle(candleOption.color.downLine);
  4999. context.setFillStyle(candleOption.color.downFill);
  5000. context.setLineWidth(1 * opts.pixelRatio);
  5001. context.moveTo(item[3].x, item[3].y); //顶点
  5002. context.lineTo(item[0].x, item[0].y); //开盘中间点
  5003. context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
  5004. context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
  5005. context.lineTo(item[1].x, item[1].y); //收盘中间点
  5006. context.lineTo(item[2].x, item[2].y); //底点
  5007. context.lineTo(item[1].x, item[1].y); //收盘中间点
  5008. context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
  5009. context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
  5010. context.lineTo(item[0].x, item[0].y); //开盘中间点
  5011. context.moveTo(item[3].x, item[3].y); //顶点
  5012. }
  5013. context.closePath();
  5014. context.fill();
  5015. context.stroke();
  5016. }
  5017. }
  5018. });
  5019. context.restore();
  5020. return {
  5021. xAxisPoints: xAxisPoints,
  5022. calPoints: calPoints,
  5023. eachSpacing: eachSpacing };
  5024. }
  5025. function drawAreaDataPoints(series, opts, config, context) {
  5026. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  5027. var areaOption = assign({}, {
  5028. type: 'straight',
  5029. opacity: 0.2,
  5030. addLine: false,
  5031. width: 2,
  5032. gradient: false },
  5033. opts.extra.area);
  5034. var xAxisData = opts.chartData.xAxisData,
  5035. xAxisPoints = xAxisData.xAxisPoints,
  5036. eachSpacing = xAxisData.eachSpacing;
  5037. var endY = opts.height - opts.area[2];
  5038. var calPoints = [];
  5039. context.save();
  5040. var leftSpace = 0;
  5041. var rightSpace = opts.width + eachSpacing;
  5042. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  5043. context.translate(opts._scrollDistance_, 0);
  5044. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  5045. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  5046. }
  5047. series.forEach(function (eachSeries, seriesIndex) {
  5048. var ranges, minRange, maxRange;
  5049. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5050. minRange = ranges.pop();
  5051. maxRange = ranges.shift();
  5052. var data = eachSeries.data;
  5053. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5054. calPoints.push(points);
  5055. var splitPointList = splitPoints(points);
  5056. for (var i = 0; i < splitPointList.length; i++) {
  5057. var _points2 = splitPointList[i];
  5058. // 绘制区域数
  5059. context.beginPath();
  5060. context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity));
  5061. if (areaOption.gradient) {
  5062. var gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height - opts.area[2]);
  5063. gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity));
  5064. gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
  5065. context.setFillStyle(gradient);
  5066. } else {
  5067. context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity));
  5068. }
  5069. context.setLineWidth(areaOption.width * opts.pixelRatio);
  5070. if (_points2.length > 1) {
  5071. var firstPoint = _points2[0];
  5072. var lastPoint = _points2[_points2.length - 1];
  5073. context.moveTo(firstPoint.x, firstPoint.y);
  5074. var startPoint = 0;
  5075. if (areaOption.type === 'curve') {
  5076. for (var j = 0; j < _points2.length; j++) {
  5077. var item = _points2[j];
  5078. if (startPoint == 0 && item.x > leftSpace) {
  5079. context.moveTo(item.x, item.y);
  5080. startPoint = 1;
  5081. }
  5082. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  5083. var ctrlPoint = createCurveControlPoints(_points2, j - 1);
  5084. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  5085. }
  5086. };
  5087. } else {
  5088. for (var _j = 0; _j < _points2.length; _j++) {
  5089. var _item10 = _points2[_j];
  5090. if (startPoint == 0 && _item10.x > leftSpace) {
  5091. context.moveTo(_item10.x, _item10.y);
  5092. startPoint = 1;
  5093. }
  5094. if (_j > 0 && _item10.x > leftSpace && _item10.x < rightSpace) {
  5095. context.lineTo(_item10.x, _item10.y);
  5096. }
  5097. };
  5098. }
  5099. context.lineTo(lastPoint.x, endY);
  5100. context.lineTo(firstPoint.x, endY);
  5101. context.lineTo(firstPoint.x, firstPoint.y);
  5102. } else {
  5103. var _item11 = _points2[0];
  5104. context.moveTo(_item11.x - eachSpacing / 2, _item11.y);
  5105. context.lineTo(_item11.x + eachSpacing / 2, _item11.y);
  5106. context.lineTo(_item11.x + eachSpacing / 2, endY);
  5107. context.lineTo(_item11.x - eachSpacing / 2, endY);
  5108. context.moveTo(_item11.x - eachSpacing / 2, _item11.y);
  5109. }
  5110. context.closePath();
  5111. context.fill();
  5112. //画连线
  5113. if (areaOption.addLine) {
  5114. if (eachSeries.lineType == 'dash') {
  5115. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  5116. dashLength *= opts.pixelRatio;
  5117. context.setLineDash([dashLength, dashLength]);
  5118. }
  5119. context.beginPath();
  5120. context.setStrokeStyle(eachSeries.color);
  5121. context.setLineWidth(areaOption.width * opts.pixelRatio);
  5122. if (_points2.length === 1) {
  5123. context.moveTo(_points2[0].x, _points2[0].y);
  5124. context.arc(_points2[0].x, _points2[0].y, 1, 0, 2 * Math.PI);
  5125. } else {
  5126. context.moveTo(_points2[0].x, _points2[0].y);
  5127. var _startPoint = 0;
  5128. if (areaOption.type === 'curve') {
  5129. for (var _j2 = 0; _j2 < _points2.length; _j2++) {
  5130. var _item12 = _points2[_j2];
  5131. if (_startPoint == 0 && _item12.x > leftSpace) {
  5132. context.moveTo(_item12.x, _item12.y);
  5133. _startPoint = 1;
  5134. }
  5135. if (_j2 > 0 && _item12.x > leftSpace && _item12.x < rightSpace) {
  5136. var _ctrlPoint = createCurveControlPoints(_points2, _j2 - 1);
  5137. context.bezierCurveTo(_ctrlPoint.ctrA.x, _ctrlPoint.ctrA.y, _ctrlPoint.ctrB.x, _ctrlPoint.ctrB.y, _item12.x, _item12.y);
  5138. }
  5139. };
  5140. } else {
  5141. for (var _j3 = 0; _j3 < _points2.length; _j3++) {
  5142. var _item13 = _points2[_j3];
  5143. if (_startPoint == 0 && _item13.x > leftSpace) {
  5144. context.moveTo(_item13.x, _item13.y);
  5145. _startPoint = 1;
  5146. }
  5147. if (_j3 > 0 && _item13.x > leftSpace && _item13.x < rightSpace) {
  5148. context.lineTo(_item13.x, _item13.y);
  5149. }
  5150. };
  5151. }
  5152. context.moveTo(_points2[0].x, _points2[0].y);
  5153. }
  5154. context.stroke();
  5155. context.setLineDash([]);
  5156. }
  5157. }
  5158. //画点
  5159. if (opts.dataPointShape !== false) {
  5160. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  5161. }
  5162. });
  5163. if (opts.dataLabel !== false && process === 1) {
  5164. series.forEach(function (eachSeries, seriesIndex) {
  5165. var ranges, minRange, maxRange;
  5166. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5167. minRange = ranges.pop();
  5168. maxRange = ranges.shift();
  5169. var data = eachSeries.data;
  5170. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5171. drawPointText(points, eachSeries, config, context);
  5172. });
  5173. }
  5174. context.restore();
  5175. return {
  5176. xAxisPoints: xAxisPoints,
  5177. calPoints: calPoints,
  5178. eachSpacing: eachSpacing };
  5179. }
  5180. function drawLineDataPoints(series, opts, config, context) {
  5181. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  5182. var lineOption = assign({}, {
  5183. type: 'straight',
  5184. width: 2 },
  5185. opts.extra.line);
  5186. lineOption.width *= opts.pixelRatio;
  5187. var xAxisData = opts.chartData.xAxisData,
  5188. xAxisPoints = xAxisData.xAxisPoints,
  5189. eachSpacing = xAxisData.eachSpacing;
  5190. var calPoints = [];
  5191. context.save();
  5192. var leftSpace = 0;
  5193. var rightSpace = opts.width + eachSpacing;
  5194. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  5195. context.translate(opts._scrollDistance_, 0);
  5196. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  5197. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  5198. }
  5199. series.forEach(function (eachSeries, seriesIndex) {
  5200. var ranges, minRange, maxRange;
  5201. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5202. minRange = ranges.pop();
  5203. maxRange = ranges.shift();
  5204. var data = eachSeries.data;
  5205. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5206. calPoints.push(points);
  5207. var splitPointList = splitPoints(points);
  5208. if (eachSeries.lineType == 'dash') {
  5209. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  5210. dashLength *= opts.pixelRatio;
  5211. context.setLineDash([dashLength, dashLength]);
  5212. }
  5213. context.beginPath();
  5214. context.setStrokeStyle(eachSeries.color);
  5215. context.setLineWidth(lineOption.width);
  5216. splitPointList.forEach(function (points, index) {
  5217. if (points.length === 1) {
  5218. context.moveTo(points[0].x, points[0].y);
  5219. context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
  5220. } else {
  5221. context.moveTo(points[0].x, points[0].y);
  5222. var startPoint = 0;
  5223. if (lineOption.type === 'curve') {
  5224. for (var j = 0; j < points.length; j++) {
  5225. var item = points[j];
  5226. if (startPoint == 0 && item.x > leftSpace) {
  5227. context.moveTo(item.x, item.y);
  5228. startPoint = 1;
  5229. }
  5230. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  5231. var ctrlPoint = createCurveControlPoints(points, j - 1);
  5232. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  5233. }
  5234. };
  5235. }
  5236. if (lineOption.type === 'straight') {
  5237. for (var _j4 = 0; _j4 < points.length; _j4++) {
  5238. var _item14 = points[_j4];
  5239. if (startPoint == 0 && _item14.x > leftSpace) {
  5240. context.moveTo(_item14.x, _item14.y);
  5241. startPoint = 1;
  5242. }
  5243. if (_j4 > 0 && _item14.x > leftSpace && _item14.x < rightSpace) {
  5244. context.lineTo(_item14.x, _item14.y);
  5245. }
  5246. };
  5247. }
  5248. if (lineOption.type === 'step') {
  5249. for (var _j5 = 0; _j5 < points.length; _j5++) {
  5250. var _item15 = points[_j5];
  5251. if (startPoint == 0 && _item15.x > leftSpace) {
  5252. context.moveTo(_item15.x, _item15.y);
  5253. startPoint = 1;
  5254. }
  5255. if (_j5 > 0 && _item15.x > leftSpace && _item15.x < rightSpace) {
  5256. context.lineTo(_item15.x, points[_j5 - 1].y);
  5257. context.lineTo(_item15.x, _item15.y);
  5258. }
  5259. };
  5260. }
  5261. context.moveTo(points[0].x, points[0].y);
  5262. }
  5263. });
  5264. context.stroke();
  5265. context.setLineDash([]);
  5266. if (opts.dataPointShape !== false) {
  5267. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  5268. }
  5269. });
  5270. if (opts.dataLabel !== false && process === 1) {
  5271. series.forEach(function (eachSeries, seriesIndex) {
  5272. var ranges, minRange, maxRange;
  5273. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5274. minRange = ranges.pop();
  5275. maxRange = ranges.shift();
  5276. var data = eachSeries.data;
  5277. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5278. drawPointText(points, eachSeries, config, context);
  5279. });
  5280. }
  5281. context.restore();
  5282. return {
  5283. xAxisPoints: xAxisPoints,
  5284. calPoints: calPoints,
  5285. eachSpacing: eachSpacing };
  5286. }
  5287. function drawMixDataPoints(series, opts, config, context) {
  5288. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  5289. var xAxisData = opts.chartData.xAxisData,
  5290. xAxisPoints = xAxisData.xAxisPoints,
  5291. eachSpacing = xAxisData.eachSpacing;
  5292. var endY = opts.height - opts.area[2];
  5293. var calPoints = [];
  5294. var columnIndex = 0;
  5295. var columnLength = 0;
  5296. series.forEach(function (eachSeries, seriesIndex) {
  5297. if (eachSeries.type == 'column') {
  5298. columnLength += 1;
  5299. }
  5300. });
  5301. context.save();
  5302. var leftNum = -2;
  5303. var rightNum = xAxisPoints.length + 2;
  5304. var leftSpace = 0;
  5305. var rightSpace = opts.width + eachSpacing;
  5306. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  5307. context.translate(opts._scrollDistance_, 0);
  5308. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  5309. rightNum = leftNum + opts.xAxis.itemCount + 4;
  5310. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  5311. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  5312. }
  5313. series.forEach(function (eachSeries, seriesIndex) {
  5314. var ranges, minRange, maxRange;
  5315. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5316. minRange = ranges.pop();
  5317. maxRange = ranges.shift();
  5318. var data = eachSeries.data;
  5319. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5320. calPoints.push(points);
  5321. // 绘制柱状数据图
  5322. if (eachSeries.type == 'column') {
  5323. points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
  5324. for (var i = 0; i < points.length; i++) {
  5325. var item = points[i];
  5326. if (item !== null && i > leftNum && i < rightNum) {
  5327. context.beginPath();
  5328. context.setStrokeStyle(item.color || eachSeries.color);
  5329. context.setLineWidth(1);
  5330. context.setFillStyle(item.color || eachSeries.color);
  5331. var startX = item.x - item.width / 2;
  5332. var height = opts.height - item.y - opts.area[2];
  5333. context.moveTo(startX, item.y);
  5334. context.moveTo(startX, item.y);
  5335. context.lineTo(startX + item.width - 2, item.y);
  5336. context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
  5337. context.lineTo(startX, opts.height - opts.area[2]);
  5338. context.lineTo(startX, item.y);
  5339. context.closePath();
  5340. context.stroke();
  5341. context.fill();
  5342. context.closePath();
  5343. context.fill();
  5344. }
  5345. }
  5346. columnIndex += 1;
  5347. }
  5348. //绘制区域图数据
  5349. if (eachSeries.type == 'area') {
  5350. var _splitPointList = splitPoints(points);
  5351. for (var _i16 = 0; _i16 < _splitPointList.length; _i16++) {
  5352. var _points3 = _splitPointList[_i16];
  5353. // 绘制区域数据
  5354. context.beginPath();
  5355. context.setStrokeStyle(eachSeries.color);
  5356. context.setFillStyle(hexToRgb(eachSeries.color, 0.2));
  5357. context.setLineWidth(2 * opts.pixelRatio);
  5358. if (_points3.length > 1) {
  5359. var firstPoint = _points3[0];
  5360. var lastPoint = _points3[_points3.length - 1];
  5361. context.moveTo(firstPoint.x, firstPoint.y);
  5362. var startPoint = 0;
  5363. if (eachSeries.style === 'curve') {
  5364. for (var j = 0; j < _points3.length; j++) {
  5365. var _item16 = _points3[j];
  5366. if (startPoint == 0 && _item16.x > leftSpace) {
  5367. context.moveTo(_item16.x, _item16.y);
  5368. startPoint = 1;
  5369. }
  5370. if (j > 0 && _item16.x > leftSpace && _item16.x < rightSpace) {
  5371. var ctrlPoint = createCurveControlPoints(_points3, j - 1);
  5372. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, _item16.x, _item16.y);
  5373. }
  5374. };
  5375. } else {
  5376. for (var _j6 = 0; _j6 < _points3.length; _j6++) {
  5377. var _item17 = _points3[_j6];
  5378. if (startPoint == 0 && _item17.x > leftSpace) {
  5379. context.moveTo(_item17.x, _item17.y);
  5380. startPoint = 1;
  5381. }
  5382. if (_j6 > 0 && _item17.x > leftSpace && _item17.x < rightSpace) {
  5383. context.lineTo(_item17.x, _item17.y);
  5384. }
  5385. };
  5386. }
  5387. context.lineTo(lastPoint.x, endY);
  5388. context.lineTo(firstPoint.x, endY);
  5389. context.lineTo(firstPoint.x, firstPoint.y);
  5390. } else {
  5391. var _item18 = _points3[0];
  5392. context.moveTo(_item18.x - eachSpacing / 2, _item18.y);
  5393. context.lineTo(_item18.x + eachSpacing / 2, _item18.y);
  5394. context.lineTo(_item18.x + eachSpacing / 2, endY);
  5395. context.lineTo(_item18.x - eachSpacing / 2, endY);
  5396. context.moveTo(_item18.x - eachSpacing / 2, _item18.y);
  5397. }
  5398. context.closePath();
  5399. context.fill();
  5400. }
  5401. }
  5402. // 绘制折线数据图
  5403. if (eachSeries.type == 'line') {
  5404. var splitPointList = splitPoints(points);
  5405. splitPointList.forEach(function (points, index) {
  5406. if (eachSeries.lineType == 'dash') {
  5407. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  5408. dashLength *= opts.pixelRatio;
  5409. context.setLineDash([dashLength, dashLength]);
  5410. }
  5411. context.beginPath();
  5412. context.setStrokeStyle(eachSeries.color);
  5413. context.setLineWidth(2 * opts.pixelRatio);
  5414. if (points.length === 1) {
  5415. context.moveTo(points[0].x, points[0].y);
  5416. context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
  5417. } else {
  5418. context.moveTo(points[0].x, points[0].y);
  5419. var _startPoint2 = 0;
  5420. if (eachSeries.style == 'curve') {
  5421. for (var _j7 = 0; _j7 < points.length; _j7++) {
  5422. var _item19 = points[_j7];
  5423. if (_startPoint2 == 0 && _item19.x > leftSpace) {
  5424. context.moveTo(_item19.x, _item19.y);
  5425. _startPoint2 = 1;
  5426. }
  5427. if (_j7 > 0 && _item19.x > leftSpace && _item19.x < rightSpace) {
  5428. var ctrlPoint = createCurveControlPoints(points, _j7 - 1);
  5429. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, _item19.x, _item19.y);
  5430. }
  5431. }
  5432. } else {
  5433. for (var _j8 = 0; _j8 < points.length; _j8++) {
  5434. var _item20 = points[_j8];
  5435. if (_startPoint2 == 0 && _item20.x > leftSpace) {
  5436. context.moveTo(_item20.x, _item20.y);
  5437. _startPoint2 = 1;
  5438. }
  5439. if (_j8 > 0 && _item20.x > leftSpace && _item20.x < rightSpace) {
  5440. context.lineTo(_item20.x, _item20.y);
  5441. }
  5442. }
  5443. }
  5444. context.moveTo(points[0].x, points[0].y);
  5445. }
  5446. context.stroke();
  5447. context.setLineDash([]);
  5448. });
  5449. }
  5450. // 绘制点数据图
  5451. if (eachSeries.type == 'point') {
  5452. eachSeries.addPoint = true;
  5453. }
  5454. if (eachSeries.addPoint == true && eachSeries.type !== 'column') {
  5455. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  5456. }
  5457. });
  5458. if (opts.dataLabel !== false && process === 1) {
  5459. var columnIndex = 0;
  5460. series.forEach(function (eachSeries, seriesIndex) {
  5461. var ranges, minRange, maxRange;
  5462. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  5463. minRange = ranges.pop();
  5464. maxRange = ranges.shift();
  5465. var data = eachSeries.data;
  5466. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  5467. if (eachSeries.type !== 'column') {
  5468. drawPointText(points, eachSeries, config, context);
  5469. } else {
  5470. points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
  5471. drawPointText(points, eachSeries, config, context);
  5472. columnIndex += 1;
  5473. }
  5474. });
  5475. }
  5476. context.restore();
  5477. return {
  5478. xAxisPoints: xAxisPoints,
  5479. calPoints: calPoints,
  5480. eachSpacing: eachSpacing };
  5481. }
  5482. function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) {
  5483. var toolTipOption = opts.extra.tooltip || {};
  5484. if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) {
  5485. drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints);
  5486. }
  5487. context.save();
  5488. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  5489. context.translate(opts._scrollDistance_, 0);
  5490. }
  5491. if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
  5492. drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints);
  5493. }
  5494. context.restore();
  5495. }
  5496. function drawXAxis(categories, opts, config, context) {
  5497. var xAxisData = opts.chartData.xAxisData,
  5498. xAxisPoints = xAxisData.xAxisPoints,
  5499. startX = xAxisData.startX,
  5500. endX = xAxisData.endX,
  5501. eachSpacing = xAxisData.eachSpacing;
  5502. var boundaryGap = 'center';
  5503. if (opts.type == 'line' || opts.type == 'area') {
  5504. boundaryGap = opts.xAxis.boundaryGap;
  5505. }
  5506. var startY = opts.height - opts.area[2];
  5507. var endY = opts.area[0];
  5508. //绘制滚动条
  5509. if (opts.enableScroll && opts.xAxis.scrollShow) {
  5510. var scrollY = opts.height - opts.area[2] + config.xAxisHeight;
  5511. var scrollScreenWidth = endX - startX;
  5512. var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1);
  5513. var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth;
  5514. var scrollLeft = 0;
  5515. if (opts._scrollDistance_) {
  5516. scrollLeft = -opts._scrollDistance_ * scrollScreenWidth / scrollTotalWidth;
  5517. }
  5518. context.beginPath();
  5519. context.setLineCap('round');
  5520. context.setLineWidth(6 * opts.pixelRatio);
  5521. context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF");
  5522. context.moveTo(startX, scrollY);
  5523. context.lineTo(endX, scrollY);
  5524. context.stroke();
  5525. context.closePath();
  5526. context.beginPath();
  5527. context.setLineCap('round');
  5528. context.setLineWidth(6 * opts.pixelRatio);
  5529. context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6");
  5530. context.moveTo(startX + scrollLeft, scrollY);
  5531. context.lineTo(startX + scrollLeft + scrollWidth, scrollY);
  5532. context.stroke();
  5533. context.closePath();
  5534. context.setLineCap('butt');
  5535. }
  5536. context.save();
  5537. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
  5538. context.translate(opts._scrollDistance_, 0);
  5539. }
  5540. //绘制X轴刻度线
  5541. if (opts.xAxis.calibration === true) {
  5542. context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
  5543. context.setLineCap('butt');
  5544. context.setLineWidth(1 * opts.pixelRatio);
  5545. xAxisPoints.forEach(function (item, index) {
  5546. if (index > 0) {
  5547. context.beginPath();
  5548. context.moveTo(item - eachSpacing / 2, startY);
  5549. context.lineTo(item - eachSpacing / 2, startY + 3 * opts.pixelRatio);
  5550. context.closePath();
  5551. context.stroke();
  5552. }
  5553. });
  5554. }
  5555. //绘制X轴网格
  5556. if (opts.xAxis.disableGrid !== true) {
  5557. context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
  5558. context.setLineCap('butt');
  5559. context.setLineWidth(1 * opts.pixelRatio);
  5560. if (opts.xAxis.gridType == 'dash') {
  5561. context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]);
  5562. }
  5563. opts.xAxis.gridEval = opts.xAxis.gridEval || 1;
  5564. xAxisPoints.forEach(function (item, index) {
  5565. if (index % opts.xAxis.gridEval == 0) {
  5566. context.beginPath();
  5567. context.moveTo(item, startY);
  5568. context.lineTo(item, endY);
  5569. context.stroke();
  5570. }
  5571. });
  5572. context.setLineDash([]);
  5573. }
  5574. //绘制X轴文案
  5575. if (opts.xAxis.disabled !== true) {
  5576. // 对X轴列表做抽稀处理
  5577. //默认全部显示X轴标签
  5578. var maxXAxisListLength = categories.length;
  5579. //如果设置了X轴单屏数量
  5580. if (opts.xAxis.labelCount) {
  5581. //如果设置X轴密度
  5582. if (opts.xAxis.itemCount) {
  5583. maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount);
  5584. } else {
  5585. maxXAxisListLength = opts.xAxis.labelCount;
  5586. }
  5587. maxXAxisListLength -= 1;
  5588. }
  5589. var ratio = Math.ceil(categories.length / maxXAxisListLength);
  5590. var newCategories = [];
  5591. var cgLength = categories.length;
  5592. for (var i = 0; i < cgLength; i++) {
  5593. if (i % ratio !== 0) {
  5594. newCategories.push("");
  5595. } else {
  5596. newCategories.push(categories[i]);
  5597. }
  5598. }
  5599. newCategories[cgLength - 1] = categories[cgLength - 1];
  5600. var xAxisFontSize = opts.xAxis.fontSize || config.fontSize;
  5601. if (config._xAxisTextAngle_ === 0) {
  5602. newCategories.forEach(function (item, index) {
  5603. var offset = -measureText(String(item), xAxisFontSize) / 2;
  5604. if (boundaryGap == 'center') {
  5605. offset += eachSpacing / 2;
  5606. }
  5607. var scrollHeight = 0;
  5608. if (opts.xAxis.scrollShow) {
  5609. scrollHeight = 6 * opts.pixelRatio;
  5610. }
  5611. context.beginPath();
  5612. context.setFontSize(xAxisFontSize);
  5613. context.setFillStyle(opts.xAxis.fontColor || '#666666');
  5614. context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - scrollHeight - xAxisFontSize) / 2);
  5615. context.closePath();
  5616. context.stroke();
  5617. });
  5618. } else {
  5619. newCategories.forEach(function (item, index) {
  5620. context.save();
  5621. context.beginPath();
  5622. context.setFontSize(xAxisFontSize);
  5623. context.setFillStyle(opts.xAxis.fontColor || '#666666');
  5624. var textWidth = measureText(String(item), xAxisFontSize);
  5625. var offset = -textWidth;
  5626. if (boundaryGap == 'center') {
  5627. offset += eachSpacing / 2;
  5628. }
  5629. var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height),
  5630. transX = _calRotateTranslate.transX,
  5631. transY = _calRotateTranslate.transY;
  5632. context.rotate(-1 * config._xAxisTextAngle_);
  5633. context.translate(transX, transY);
  5634. context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + 5);
  5635. context.closePath();
  5636. context.stroke();
  5637. context.restore();
  5638. });
  5639. }
  5640. }
  5641. context.restore();
  5642. //绘制X轴轴线
  5643. if (opts.xAxis.axisLine) {
  5644. context.beginPath();
  5645. context.setStrokeStyle(opts.xAxis.axisLineColor);
  5646. context.setLineWidth(1 * opts.pixelRatio);
  5647. context.moveTo(startX, opts.height - opts.area[2]);
  5648. context.lineTo(endX, opts.height - opts.area[2]);
  5649. context.stroke();
  5650. }
  5651. }
  5652. function drawYAxisGrid(categories, opts, config, context) {
  5653. if (opts.yAxis.disableGrid === true) {
  5654. return;
  5655. }
  5656. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  5657. var eachSpacing = spacingValid / opts.yAxis.splitNumber;
  5658. var startX = opts.area[3];
  5659. var xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
  5660. xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing;
  5661. var TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1);
  5662. var endX = startX + TotalWidth;
  5663. var points = [];
  5664. for (var i = 0; i < opts.yAxis.splitNumber + 1; i++) {
  5665. points.push(opts.height - opts.area[2] - eachSpacing * i);
  5666. }
  5667. context.save();
  5668. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
  5669. context.translate(opts._scrollDistance_, 0);
  5670. }
  5671. if (opts.yAxis.gridType == 'dash') {
  5672. context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]);
  5673. }
  5674. context.setStrokeStyle(opts.yAxis.gridColor);
  5675. context.setLineWidth(1 * opts.pixelRatio);
  5676. points.forEach(function (item, index) {
  5677. context.beginPath();
  5678. context.moveTo(startX, item);
  5679. context.lineTo(endX, item);
  5680. context.stroke();
  5681. });
  5682. context.setLineDash([]);
  5683. context.restore();
  5684. }
  5685. function drawYAxis(series, opts, config, context) {
  5686. if (opts.yAxis.disabled === true) {
  5687. return;
  5688. }
  5689. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  5690. var eachSpacing = spacingValid / opts.yAxis.splitNumber;
  5691. var startX = opts.area[3];
  5692. var endX = opts.width - opts.area[1];
  5693. var endY = opts.height - opts.area[2];
  5694. var fillEndY = endY + config.xAxisHeight;
  5695. if (opts.xAxis.scrollShow) {
  5696. fillEndY -= 3 * opts.pixelRatio;
  5697. }
  5698. if (opts.xAxis.rotateLabel) {
  5699. fillEndY = opts.height - opts.area[2] + 3;
  5700. }
  5701. // set YAxis background
  5702. context.beginPath();
  5703. context.setFillStyle(opts.background || '#ffffff');
  5704. if (opts._scrollDistance_ < 0) {
  5705. context.fillRect(0, 0, startX, fillEndY);
  5706. }
  5707. if (opts.enableScroll == true) {
  5708. context.fillRect(endX, 0, opts.width, fillEndY);
  5709. }
  5710. context.closePath();
  5711. context.stroke();
  5712. var points = [];
  5713. for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
  5714. points.push(opts.area[0] + eachSpacing * i);
  5715. }
  5716. var tStartLeft = opts.area[3];
  5717. var tStartRight = opts.width - opts.area[1];var _loop4 = function _loop4(
  5718. _i17) {
  5719. var yData = opts.yAxis.data[_i17];
  5720. if (yData.disabled !== true) {
  5721. var rangesFormat = opts.chartData.yAxisData.rangesFormat[_i17];
  5722. var yAxisFontSize = yData.fontSize || config.fontSize;
  5723. var yAxisWidth = opts.chartData.yAxisData.yAxisWidth[_i17];
  5724. //画Y轴刻度及文案
  5725. rangesFormat.forEach(function (item, index) {
  5726. var pos = points[index] ? points[index] : endY;
  5727. context.beginPath();
  5728. context.setFontSize(yAxisFontSize);
  5729. context.setLineWidth(1 * opts.pixelRatio);
  5730. context.setStrokeStyle(yData.axisLineColor || '#cccccc');
  5731. context.setFillStyle(yData.fontColor || '#666666');
  5732. if (yAxisWidth.position == 'left') {
  5733. context.fillText(String(item), tStartLeft - yAxisWidth.width, pos + yAxisFontSize / 2);
  5734. //画刻度线
  5735. if (yData.calibration == true) {
  5736. context.moveTo(tStartLeft, pos);
  5737. context.lineTo(tStartLeft - 3 * opts.pixelRatio, pos);
  5738. }
  5739. } else {
  5740. context.fillText(String(item), tStartRight + 4 * opts.pixelRatio, pos + yAxisFontSize / 2);
  5741. //画刻度线
  5742. if (yData.calibration == true) {
  5743. context.moveTo(tStartRight, pos);
  5744. context.lineTo(tStartRight + 3 * opts.pixelRatio, pos);
  5745. }
  5746. }
  5747. context.closePath();
  5748. context.stroke();
  5749. });
  5750. //画Y轴轴线
  5751. if (yData.axisLine !== false) {
  5752. context.beginPath();
  5753. context.setStrokeStyle(yData.axisLineColor || '#cccccc');
  5754. context.setLineWidth(1 * opts.pixelRatio);
  5755. if (yAxisWidth.position == 'left') {
  5756. context.moveTo(tStartLeft, opts.height - opts.area[2]);
  5757. context.lineTo(tStartLeft, opts.area[0]);
  5758. } else {
  5759. context.moveTo(tStartRight, opts.height - opts.area[2]);
  5760. context.lineTo(tStartRight, opts.area[0]);
  5761. }
  5762. context.stroke();
  5763. }
  5764. //画Y轴标题
  5765. if (opts.yAxis.showTitle) {
  5766. var titleFontSize = yData.titleFontSize || config.fontSize;
  5767. var title = yData.title;
  5768. context.beginPath();
  5769. context.setFontSize(titleFontSize);
  5770. context.setFillStyle(yData.titleFontColor || '#666666');
  5771. if (yAxisWidth.position == 'left') {
  5772. context.fillText(title, tStartLeft - measureText(title, titleFontSize) / 2, opts.area[0] - 10 * opts.pixelRatio);
  5773. } else {
  5774. context.fillText(title, tStartRight - measureText(title, titleFontSize) / 2, opts.area[0] - 10 * opts.pixelRatio);
  5775. }
  5776. context.closePath();
  5777. context.stroke();
  5778. }
  5779. if (yAxisWidth.position == 'left') {
  5780. tStartLeft -= yAxisWidth.width + opts.yAxis.padding;
  5781. } else {
  5782. tStartRight += yAxisWidth.width + opts.yAxis.padding;
  5783. }
  5784. }};for (var _i17 = 0; _i17 < opts.yAxis.data.length; _i17++) {_loop4(_i17);
  5785. }
  5786. }
  5787. function drawLegend(series, opts, config, context, chartData) {
  5788. if (opts.legend.show === false) {
  5789. return;
  5790. }
  5791. var legendData = chartData.legendData;
  5792. var legendList = legendData.points;
  5793. var legendArea = legendData.area;
  5794. var padding = opts.legend.padding;
  5795. var fontSize = opts.legend.fontSize;
  5796. var shapeWidth = 15 * opts.pixelRatio;
  5797. var shapeRight = 5 * opts.pixelRatio;
  5798. var itemGap = opts.legend.itemGap;
  5799. var lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
  5800. //画背景及边框
  5801. context.beginPath();
  5802. context.setLineWidth(opts.legend.borderWidth);
  5803. context.setStrokeStyle(opts.legend.borderColor);
  5804. context.setFillStyle(opts.legend.backgroundColor);
  5805. context.moveTo(legendArea.start.x, legendArea.start.y);
  5806. context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height);
  5807. context.closePath();
  5808. context.fill();
  5809. context.stroke();
  5810. legendList.forEach(function (itemList, listIndex) {
  5811. var width = 0;
  5812. var height = 0;
  5813. width = legendData.widthArr[listIndex];
  5814. height = legendData.heightArr[listIndex];
  5815. var startX = 0;
  5816. var startY = 0;
  5817. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  5818. startX = legendArea.start.x + (legendArea.width - width) / 2;
  5819. startY = legendArea.start.y + padding + listIndex * lineHeight;
  5820. } else {
  5821. if (listIndex == 0) {
  5822. width = 0;
  5823. } else {
  5824. width = legendData.widthArr[listIndex - 1];
  5825. }
  5826. startX = legendArea.start.x + padding + width;
  5827. startY = legendArea.start.y + padding + (legendArea.height - height) / 2;
  5828. }
  5829. context.setFontSize(config.fontSize);
  5830. for (var i = 0; i < itemList.length; i++) {
  5831. var item = itemList[i];
  5832. item.area = [0, 0, 0, 0];
  5833. item.area[0] = startX;
  5834. item.area[1] = startY;
  5835. item.area[3] = startY + lineHeight;
  5836. context.beginPath();
  5837. context.setLineWidth(1 * opts.pixelRatio);
  5838. context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor);
  5839. context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor);
  5840. switch (item.legendShape) {
  5841. case 'line':
  5842. context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio);
  5843. context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio, 15 * opts.pixelRatio, 4 * opts.pixelRatio);
  5844. break;
  5845. case 'triangle':
  5846. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5847. context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  5848. context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  5849. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5850. break;
  5851. case 'diamond':
  5852. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5853. context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  5854. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  5855. context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  5856. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5857. break;
  5858. case 'circle':
  5859. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  5860. context.arc(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight, 5 * opts.pixelRatio, 0, 2 * Math.PI);
  5861. break;
  5862. case 'rect':
  5863. context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5864. context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);
  5865. break;
  5866. default:
  5867. context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  5868. context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);}
  5869. context.closePath();
  5870. context.fill();
  5871. context.stroke();
  5872. startX += shapeWidth + shapeRight;
  5873. var fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2;
  5874. context.beginPath();
  5875. context.setFontSize(fontSize);
  5876. context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor);
  5877. context.fillText(item.name, startX, startY + fontTrans);
  5878. context.closePath();
  5879. context.stroke();
  5880. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  5881. startX += measureText(item.name, fontSize) + itemGap;
  5882. item.area[2] = startX;
  5883. } else {
  5884. item.area[2] = startX + measureText(item.name, fontSize) + itemGap;;
  5885. startX -= shapeWidth + shapeRight;
  5886. startY += lineHeight;
  5887. }
  5888. }
  5889. });
  5890. }
  5891. function drawPieDataPoints(series, opts, config, context) {
  5892. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  5893. var pieOption = assign({}, {
  5894. activeOpacity: 0.5,
  5895. activeRadius: 10 * opts.pixelRatio,
  5896. offsetAngle: 0,
  5897. labelWidth: 15 * opts.pixelRatio,
  5898. ringWidth: 0,
  5899. border: false,
  5900. borderWidth: 2,
  5901. borderColor: '#FFFFFF' },
  5902. opts.extra.pie);
  5903. var centerPosition = {
  5904. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  5905. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  5906. if (config.pieChartLinePadding == 0) {
  5907. config.pieChartLinePadding = pieOption.activeRadius;
  5908. }
  5909. var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
  5910. series = getPieDataPoints(series, radius, process);
  5911. var activeRadius = pieOption.activeRadius;
  5912. series = series.map(function (eachSeries) {
  5913. eachSeries._start_ += pieOption.offsetAngle * Math.PI / 180;
  5914. return eachSeries;
  5915. });
  5916. series.forEach(function (eachSeries, seriesIndex) {
  5917. if (opts.tooltip) {
  5918. if (opts.tooltip.index == seriesIndex) {
  5919. context.beginPath();
  5920. context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5));
  5921. context.moveTo(centerPosition.x, centerPosition.y);
  5922. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_,
  5923. eachSeries._start_ + 2 *
  5924. eachSeries._proportion_ * Math.PI);
  5925. context.closePath();
  5926. context.fill();
  5927. }
  5928. }
  5929. context.beginPath();
  5930. context.setLineWidth(pieOption.borderWidth * opts.pixelRatio);
  5931. context.lineJoin = "round";
  5932. context.setStrokeStyle(pieOption.borderColor);
  5933. context.setFillStyle(eachSeries.color);
  5934. context.moveTo(centerPosition.x, centerPosition.y);
  5935. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
  5936. context.closePath();
  5937. context.fill();
  5938. if (pieOption.border == true) {
  5939. context.stroke();
  5940. }
  5941. });
  5942. if (opts.type === 'ring') {
  5943. var innerPieWidth = radius * 0.6;
  5944. if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) {
  5945. innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth);
  5946. }
  5947. context.beginPath();
  5948. context.setFillStyle(opts.background || '#ffffff');
  5949. context.moveTo(centerPosition.x, centerPosition.y);
  5950. context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);
  5951. context.closePath();
  5952. context.fill();
  5953. }
  5954. if (opts.dataLabel !== false && process === 1) {
  5955. var valid = false;
  5956. for (var i = 0, len = series.length; i < len; i++) {
  5957. if (series[i].data > 0) {
  5958. valid = true;
  5959. break;
  5960. }
  5961. }
  5962. if (valid) {
  5963. drawPieText(series, opts, config, context, radius, centerPosition);
  5964. }
  5965. }
  5966. if (process === 1 && opts.type === 'ring') {
  5967. drawRingTitle(opts, config, context, centerPosition);
  5968. }
  5969. return {
  5970. center: centerPosition,
  5971. radius: radius,
  5972. series: series };
  5973. }
  5974. function drawRoseDataPoints(series, opts, config, context) {
  5975. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  5976. var roseOption = assign({}, {
  5977. type: 'area',
  5978. activeOpacity: 0.5,
  5979. activeRadius: 10 * opts.pixelRatio,
  5980. offsetAngle: 0,
  5981. labelWidth: 15 * opts.pixelRatio,
  5982. border: false,
  5983. borderWidth: 2,
  5984. borderColor: '#FFFFFF' },
  5985. opts.extra.rose);
  5986. if (config.pieChartLinePadding == 0) {
  5987. config.pieChartLinePadding = roseOption.activeRadius;
  5988. }
  5989. var centerPosition = {
  5990. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  5991. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  5992. var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding - config._pieTextMaxLength_, (opts.height - opts.area[0] - opts.area[2]) / 2 - config.pieChartLinePadding - config.pieChartTextPadding);
  5993. var minRadius = roseOption.minRadius || radius * 0.5;
  5994. series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process);
  5995. var activeRadius = roseOption.activeRadius;
  5996. series = series.map(function (eachSeries) {
  5997. eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180;
  5998. return eachSeries;
  5999. });
  6000. series.forEach(function (eachSeries, seriesIndex) {
  6001. if (opts.tooltip) {
  6002. if (opts.tooltip.index == seriesIndex) {
  6003. context.beginPath();
  6004. context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5));
  6005. context.moveTo(centerPosition.x, centerPosition.y);
  6006. context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_,
  6007. eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI);
  6008. context.closePath();
  6009. context.fill();
  6010. }
  6011. }
  6012. context.beginPath();
  6013. context.setLineWidth(roseOption.borderWidth * opts.pixelRatio);
  6014. context.lineJoin = "round";
  6015. context.setStrokeStyle(roseOption.borderColor);
  6016. context.setFillStyle(eachSeries.color);
  6017. context.moveTo(centerPosition.x, centerPosition.y);
  6018. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 *
  6019. eachSeries._rose_proportion_ * Math.PI);
  6020. context.closePath();
  6021. context.fill();
  6022. if (roseOption.border == true) {
  6023. context.stroke();
  6024. }
  6025. });
  6026. if (opts.dataLabel !== false && process === 1) {
  6027. var valid = false;
  6028. for (var i = 0, len = series.length; i < len; i++) {
  6029. if (series[i].data > 0) {
  6030. valid = true;
  6031. break;
  6032. }
  6033. }
  6034. if (valid) {
  6035. drawPieText(series, opts, config, context, radius, centerPosition);
  6036. }
  6037. }
  6038. return {
  6039. center: centerPosition,
  6040. radius: radius,
  6041. series: series };
  6042. }
  6043. function drawArcbarDataPoints(series, opts, config, context) {
  6044. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  6045. var arcbarOption = assign({}, {
  6046. startAngle: 0.75,
  6047. endAngle: 0.25,
  6048. type: 'default',
  6049. width: 12 * opts.pixelRatio,
  6050. gap: 2 * opts.pixelRatio },
  6051. opts.extra.arcbar);
  6052. series = getArcbarDataPoints(series, arcbarOption, process);
  6053. var centerPosition;
  6054. if (arcbarOption.center) {
  6055. centerPosition = arcbarOption.center;
  6056. } else {
  6057. centerPosition = {
  6058. x: opts.width / 2,
  6059. y: opts.height / 2 };
  6060. }
  6061. var radius;
  6062. if (arcbarOption.radius) {
  6063. radius = arcbarOption.radius;
  6064. } else {
  6065. radius = Math.min(centerPosition.x, centerPosition.y);
  6066. radius -= 5 * opts.pixelRatio;
  6067. radius -= arcbarOption.width / 2;
  6068. }
  6069. for (var i = 0; i < series.length; i++) {
  6070. var eachSeries = series[i];
  6071. //背景颜色
  6072. context.setLineWidth(arcbarOption.width);
  6073. context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9');
  6074. context.setLineCap('round');
  6075. context.beginPath();
  6076. if (arcbarOption.type == 'default') {
  6077. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, false);
  6078. } else {
  6079. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, 0, 2 * Math.PI, false);
  6080. }
  6081. context.stroke();
  6082. //进度条
  6083. context.setLineWidth(arcbarOption.width);
  6084. context.setStrokeStyle(eachSeries.color);
  6085. context.setLineCap('round');
  6086. context.beginPath();
  6087. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, false);
  6088. context.stroke();
  6089. }
  6090. drawRingTitle(opts, config, context, centerPosition);
  6091. return {
  6092. center: centerPosition,
  6093. radius: radius,
  6094. series: series };
  6095. }
  6096. function drawGaugeDataPoints(categories, series, opts, config, context) {
  6097. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  6098. var gaugeOption = assign({}, {
  6099. type: 'default',
  6100. startAngle: 0.75,
  6101. endAngle: 0.25,
  6102. width: 15,
  6103. splitLine: {
  6104. fixRadius: 0,
  6105. splitNumber: 10,
  6106. width: 15,
  6107. color: '#FFFFFF',
  6108. childNumber: 5,
  6109. childWidth: 5 },
  6110. pointer: {
  6111. width: 15,
  6112. color: 'auto' } },
  6113. opts.extra.gauge);
  6114. if (gaugeOption.oldAngle == undefined) {
  6115. gaugeOption.oldAngle = gaugeOption.startAngle;
  6116. }
  6117. if (gaugeOption.oldData == undefined) {
  6118. gaugeOption.oldData = 0;
  6119. }
  6120. categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle);
  6121. var centerPosition = {
  6122. x: opts.width / 2,
  6123. y: opts.height / 2 };
  6124. var radius = Math.min(centerPosition.x, centerPosition.y);
  6125. radius -= 5 * opts.pixelRatio;
  6126. radius -= gaugeOption.width / 2;
  6127. var innerRadius = radius - gaugeOption.width;
  6128. var totalAngle = 0;
  6129. //判断仪表盘的样式:default百度样式,progress新样式
  6130. if (gaugeOption.type == 'progress') {
  6131. //## 第一步画中心圆形背景和进度条背景
  6132. //中心圆形背景
  6133. var pieRadius = radius - gaugeOption.width * 3;
  6134. context.beginPath();
  6135. var gradient = context.createLinearGradient(centerPosition.x, centerPosition.y - pieRadius, centerPosition.x, centerPosition.y + pieRadius);
  6136. //配置渐变填充(起点:中心点向上减半径;结束点中心点向下加半径)
  6137. gradient.addColorStop('0', hexToRgb(series[0].color, 0.3));
  6138. gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
  6139. context.setFillStyle(gradient);
  6140. context.arc(centerPosition.x, centerPosition.y, pieRadius, 0, 2 * Math.PI, false);
  6141. context.fill();
  6142. //画进度条背景
  6143. context.setLineWidth(gaugeOption.width);
  6144. context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
  6145. context.setLineCap('round');
  6146. context.beginPath();
  6147. context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, gaugeOption.endAngle * Math.PI, false);
  6148. context.stroke();
  6149. //## 第二步画刻度线
  6150. totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  6151. var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  6152. var childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
  6153. var startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
  6154. var endX = -radius - gaugeOption.width - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
  6155. context.save();
  6156. context.translate(centerPosition.x, centerPosition.y);
  6157. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  6158. var len = gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1;
  6159. var proc = series[0].data * process;
  6160. for (var i = 0; i < len; i++) {
  6161. context.beginPath();
  6162. //刻度线随进度变色
  6163. if (proc > i / len) {
  6164. context.setStrokeStyle(hexToRgb(series[0].color, 1));
  6165. } else {
  6166. context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
  6167. }
  6168. context.setLineWidth(3 * opts.pixelRatio);
  6169. context.moveTo(startX, 0);
  6170. context.lineTo(endX, 0);
  6171. context.stroke();
  6172. context.rotate(childAngle * Math.PI);
  6173. }
  6174. context.restore();
  6175. //## 第三步画进度条
  6176. series = getArcbarDataPoints(series, gaugeOption, process);
  6177. context.setLineWidth(gaugeOption.width);
  6178. context.setStrokeStyle(series[0].color);
  6179. context.setLineCap('round');
  6180. context.beginPath();
  6181. context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, series[0]._proportion_ * Math.PI, false);
  6182. context.stroke();
  6183. //## 第四步画指针
  6184. var pointerRadius = radius - gaugeOption.width * 2.5;
  6185. context.save();
  6186. context.translate(centerPosition.x, centerPosition.y);
  6187. context.rotate((series[0]._proportion_ - 1) * Math.PI);
  6188. context.beginPath();
  6189. context.setLineWidth(gaugeOption.width / 3);
  6190. var gradient3 = context.createLinearGradient(0, -pointerRadius * 0.6, 0, pointerRadius * 0.6);
  6191. gradient3.addColorStop('0', hexToRgb('#FFFFFF', 0));
  6192. gradient3.addColorStop('0.5', hexToRgb(series[0].color, 1));
  6193. gradient3.addColorStop('1.0', hexToRgb('#FFFFFF', 0));
  6194. context.setStrokeStyle(gradient3);
  6195. context.arc(0, 0, pointerRadius, 0.85 * Math.PI, 1.15 * Math.PI, false);
  6196. context.stroke();
  6197. context.beginPath();
  6198. context.setLineWidth(1);
  6199. context.setStrokeStyle(series[0].color);
  6200. context.setFillStyle(series[0].color);
  6201. context.moveTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
  6202. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2 - 4, 0);
  6203. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, 4);
  6204. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
  6205. context.stroke();
  6206. context.fill();
  6207. context.restore();
  6208. //default百度样式
  6209. } else {
  6210. //画背景
  6211. context.setLineWidth(gaugeOption.width);
  6212. context.setLineCap('butt');
  6213. for (var _i18 = 0; _i18 < categories.length; _i18++) {
  6214. var eachCategories = categories[_i18];
  6215. context.beginPath();
  6216. context.setStrokeStyle(eachCategories.color);
  6217. context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * Math.PI, false);
  6218. context.stroke();
  6219. }
  6220. context.save();
  6221. //画刻度线
  6222. totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  6223. var _splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  6224. var _childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
  6225. var _startX2 = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
  6226. var _endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
  6227. var childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth;
  6228. context.translate(centerPosition.x, centerPosition.y);
  6229. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  6230. for (var _i19 = 0; _i19 < gaugeOption.splitLine.splitNumber + 1; _i19++) {
  6231. context.beginPath();
  6232. context.setStrokeStyle(gaugeOption.splitLine.color);
  6233. context.setLineWidth(2 * opts.pixelRatio);
  6234. context.moveTo(_startX2, 0);
  6235. context.lineTo(_endX, 0);
  6236. context.stroke();
  6237. context.rotate(_splitAngle * Math.PI);
  6238. }
  6239. context.restore();
  6240. context.save();
  6241. context.translate(centerPosition.x, centerPosition.y);
  6242. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  6243. for (var _i20 = 0; _i20 < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; _i20++) {
  6244. context.beginPath();
  6245. context.setStrokeStyle(gaugeOption.splitLine.color);
  6246. context.setLineWidth(1 * opts.pixelRatio);
  6247. context.moveTo(_startX2, 0);
  6248. context.lineTo(childendX, 0);
  6249. context.stroke();
  6250. context.rotate(_childAngle * Math.PI);
  6251. }
  6252. context.restore();
  6253. //画指针
  6254. series = getGaugeDataPoints(series, categories, gaugeOption, process);
  6255. for (var _i21 = 0; _i21 < series.length; _i21++) {
  6256. var eachSeries = series[_i21];
  6257. context.save();
  6258. context.translate(centerPosition.x, centerPosition.y);
  6259. context.rotate((eachSeries._proportion_ - 1) * Math.PI);
  6260. context.beginPath();
  6261. context.setFillStyle(eachSeries.color);
  6262. context.moveTo(gaugeOption.pointer.width, 0);
  6263. context.lineTo(0, -gaugeOption.pointer.width / 2);
  6264. context.lineTo(-innerRadius, 0);
  6265. context.lineTo(0, gaugeOption.pointer.width / 2);
  6266. context.lineTo(gaugeOption.pointer.width, 0);
  6267. context.closePath();
  6268. context.fill();
  6269. context.beginPath();
  6270. context.setFillStyle('#FFFFFF');
  6271. context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false);
  6272. context.fill();
  6273. context.restore();
  6274. }
  6275. if (opts.dataLabel !== false) {
  6276. drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context);
  6277. }
  6278. }
  6279. //画仪表盘标题,副标题
  6280. drawRingTitle(opts, config, context, centerPosition);
  6281. if (process === 1 && opts.type === 'gauge') {
  6282. opts.extra.gauge.oldAngle = series[0]._proportion_;
  6283. opts.extra.gauge.oldData = series[0].data;
  6284. }
  6285. return {
  6286. center: centerPosition,
  6287. radius: radius,
  6288. innerRadius: innerRadius,
  6289. categories: categories,
  6290. totalAngle: totalAngle };
  6291. }
  6292. function drawRadarDataPoints(series, opts, config, context) {
  6293. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  6294. var radarOption = assign({}, {
  6295. gridColor: '#cccccc',
  6296. gridType: 'radar',
  6297. labelColor: '#666666',
  6298. opacity: 0.2,
  6299. gridCount: 3 },
  6300. opts.extra.radar);
  6301. var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);
  6302. var centerPosition = {
  6303. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  6304. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  6305. var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin), centerPosition.y - config.radarLabelTextMargin);
  6306. //TODO逻辑不对
  6307. radius -= opts.padding[1];
  6308. // 画分割线
  6309. context.beginPath();
  6310. context.setLineWidth(1 * opts.pixelRatio);
  6311. context.setStrokeStyle(radarOption.gridColor);
  6312. coordinateAngle.forEach(function (angle) {
  6313. var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);
  6314. context.moveTo(centerPosition.x, centerPosition.y);
  6315. context.lineTo(pos.x, pos.y);
  6316. });
  6317. context.stroke();
  6318. context.closePath();
  6319. // 画背景网格
  6320. var _loop = function _loop(i) {
  6321. var startPos = {};
  6322. context.beginPath();
  6323. context.setLineWidth(1 * opts.pixelRatio);
  6324. context.setStrokeStyle(radarOption.gridColor);
  6325. if (radarOption.gridType == 'radar') {
  6326. coordinateAngle.forEach(function (angle, index) {
  6327. var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(angle), radius / radarOption.gridCount * i * Math.sin(angle), centerPosition);
  6328. if (index === 0) {
  6329. startPos = pos;
  6330. context.moveTo(pos.x, pos.y);
  6331. } else {
  6332. context.lineTo(pos.x, pos.y);
  6333. }
  6334. });
  6335. context.lineTo(startPos.x, startPos.y);
  6336. } else {
  6337. var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(1.5), radius / radarOption.gridCount * i * Math.sin(1.5), centerPosition);
  6338. context.arc(centerPosition.x, centerPosition.y, centerPosition.y - pos.y, 0, 2 * Math.PI, false);
  6339. }
  6340. context.stroke();
  6341. context.closePath();
  6342. };
  6343. for (var i = 1; i <= radarOption.gridCount; i++) {
  6344. _loop(i);
  6345. }
  6346. var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);
  6347. radarDataPoints.forEach(function (eachSeries, seriesIndex) {
  6348. // 绘制区域数据
  6349. context.beginPath();
  6350. context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity));
  6351. eachSeries.data.forEach(function (item, index) {
  6352. if (index === 0) {
  6353. context.moveTo(item.position.x, item.position.y);
  6354. } else {
  6355. context.lineTo(item.position.x, item.position.y);
  6356. }
  6357. });
  6358. context.closePath();
  6359. context.fill();
  6360. if (opts.dataPointShape !== false) {
  6361. var points = eachSeries.data.map(function (item) {
  6362. return item.position;
  6363. });
  6364. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  6365. }
  6366. });
  6367. // draw label text
  6368. drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
  6369. return {
  6370. center: centerPosition,
  6371. radius: radius,
  6372. angleList: coordinateAngle };
  6373. }
  6374. function normalInt(min, max, iter) {
  6375. iter = iter == 0 ? 1 : iter;
  6376. var arr = [];
  6377. for (var i = 0; i < iter; i++) {
  6378. arr[i] = Math.random();
  6379. };
  6380. return Math.floor(arr.reduce(function (i, j) {return i + j;}) / iter * (max - min)) + min;
  6381. };
  6382. function collisionNew(area, points, width, height) {
  6383. var isIn = false;
  6384. for (var i = 0; i < points.length; i++) {
  6385. if (points[i].area) {
  6386. if (area[3] < points[i].area[1] || area[0] > points[i].area[2] || area[1] > points[i].area[3] || area[2] < points[i].area[0]) {
  6387. if (area[0] < 0 || area[1] < 0 || area[2] > width || area[3] > height) {
  6388. isIn = true;
  6389. break;
  6390. } else {
  6391. isIn = false;
  6392. }
  6393. } else {
  6394. isIn = true;
  6395. break;
  6396. }
  6397. }
  6398. }
  6399. return isIn;
  6400. };
  6401. function getBoundingBox(data) {
  6402. var bounds = {},coords;
  6403. bounds.xMin = 180;
  6404. bounds.xMax = 0;
  6405. bounds.yMin = 90;
  6406. bounds.yMax = 0;
  6407. for (var i = 0; i < data.length; i++) {
  6408. var coorda = data[i].geometry.coordinates;
  6409. for (var k = 0; k < coorda.length; k++) {
  6410. coords = coorda[k];
  6411. if (coords.length == 1) {
  6412. coords = coords[0];
  6413. }
  6414. for (var j = 0; j < coords.length; j++) {
  6415. var longitude = coords[j][0];
  6416. var latitude = coords[j][1];
  6417. var point = {
  6418. x: longitude,
  6419. y: latitude };
  6420. bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x;
  6421. bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x;
  6422. bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y;
  6423. bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y;
  6424. }
  6425. }
  6426. }
  6427. return bounds;
  6428. }
  6429. function coordinateToPoint(latitude, longitude, bounds, scale, xoffset, yoffset) {
  6430. return {
  6431. x: (longitude - bounds.xMin) * scale + xoffset,
  6432. y: (bounds.yMax - latitude) * scale + yoffset };
  6433. }
  6434. function pointToCoordinate(pointY, pointX, bounds, scale, xoffset, yoffset) {
  6435. return {
  6436. x: (pointX - xoffset) / scale + bounds.xMin,
  6437. y: bounds.yMax - (pointY - yoffset) / scale };
  6438. }
  6439. function isRayIntersectsSegment(poi, s_poi, e_poi) {
  6440. if (s_poi[1] == e_poi[1]) {return false;}
  6441. if (s_poi[1] > poi[1] && e_poi[1] > poi[1]) {return false;}
  6442. if (s_poi[1] < poi[1] && e_poi[1] < poi[1]) {return false;}
  6443. if (s_poi[1] == poi[1] && e_poi[1] > poi[1]) {return false;}
  6444. if (e_poi[1] == poi[1] && s_poi[1] > poi[1]) {return false;}
  6445. if (s_poi[0] < poi[0] && e_poi[1] < poi[1]) {return false;}
  6446. var xseg = e_poi[0] - (e_poi[0] - s_poi[0]) * (e_poi[1] - poi[1]) / (e_poi[1] - s_poi[1]);
  6447. if (xseg < poi[0]) {
  6448. return false;
  6449. } else {
  6450. return true;
  6451. }
  6452. }
  6453. function isPoiWithinPoly(poi, poly) {
  6454. var sinsc = 0;
  6455. for (var i = 0; i < poly.length; i++) {
  6456. var epoly = poly[i][0];
  6457. if (poly.length == 1) {
  6458. epoly = poly[i][0];
  6459. }
  6460. for (var j = 0; j < epoly.length - 1; j++) {
  6461. var s_poi = epoly[j];
  6462. var e_poi = epoly[j + 1];
  6463. if (isRayIntersectsSegment(poi, s_poi, e_poi)) {
  6464. sinsc += 1;
  6465. }
  6466. }
  6467. }
  6468. if (sinsc % 2 == 1) {
  6469. return true;
  6470. } else {
  6471. return false;
  6472. }
  6473. }
  6474. function drawMapDataPoints(series, opts, config, context) {
  6475. var mapOption = assign({}, {
  6476. border: true,
  6477. borderWidth: 1,
  6478. borderColor: '#666666',
  6479. fillOpacity: 0.6,
  6480. activeBorderColor: '#f04864',
  6481. activeFillColor: '#facc14',
  6482. activeFillOpacity: 1 },
  6483. opts.extra.map);
  6484. var coords, point;
  6485. var data = series;
  6486. var bounds = getBoundingBox(data);
  6487. var xScale = opts.width / Math.abs(bounds.xMax - bounds.xMin);
  6488. var yScale = opts.height / Math.abs(bounds.yMax - bounds.yMin);
  6489. var scale = xScale < yScale ? xScale : yScale;
  6490. var xoffset = opts.width / 2 - Math.abs(bounds.xMax - bounds.xMin) / 2 * scale;
  6491. var yoffset = opts.height / 2 - Math.abs(bounds.yMax - bounds.yMin) / 2 * scale;
  6492. context.beginPath();
  6493. context.clearRect(0, 0, opts.width, opts.height);
  6494. context.setFillStyle(opts.background || '#FFFFFF');
  6495. context.rect(0, 0, opts.width, opts.height);
  6496. context.fill();
  6497. for (var i = 0; i < data.length; i++) {
  6498. context.beginPath();
  6499. context.setLineWidth(mapOption.borderWidth * opts.pixelRatio);
  6500. context.setStrokeStyle(mapOption.borderColor);
  6501. context.setFillStyle(hexToRgb(series[i].color, mapOption.fillOpacity));
  6502. if (opts.tooltip) {
  6503. if (opts.tooltip.index == i) {
  6504. context.setStrokeStyle(mapOption.activeBorderColor);
  6505. context.setFillStyle(hexToRgb(mapOption.activeFillColor, mapOption.activeFillOpacity));
  6506. }
  6507. }
  6508. var coorda = data[i].geometry.coordinates;
  6509. for (var k = 0; k < coorda.length; k++) {
  6510. coords = coorda[k];
  6511. if (coords.length == 1) {
  6512. coords = coords[0];
  6513. }
  6514. for (var j = 0; j < coords.length; j++) {
  6515. point = coordinateToPoint(coords[j][1], coords[j][0], bounds, scale, xoffset, yoffset);
  6516. if (j === 0) {
  6517. context.beginPath();
  6518. context.moveTo(point.x, point.y);
  6519. } else {
  6520. context.lineTo(point.x, point.y);
  6521. }
  6522. }
  6523. context.fill();
  6524. if (mapOption.border == true) {
  6525. context.stroke();
  6526. }
  6527. }
  6528. if (opts.dataLabel == true) {
  6529. var centerPoint = data[i].properties.centroid;
  6530. if (centerPoint) {
  6531. point = coordinateToPoint(centerPoint[1], centerPoint[0], bounds, scale, xoffset, yoffset);
  6532. var fontSize = data[i].textSize || config.fontSize;
  6533. var text = data[i].properties.name;
  6534. context.beginPath();
  6535. context.setFontSize(fontSize);
  6536. context.setFillStyle(data[i].textColor || '#666666');
  6537. context.fillText(text, point.x - measureText(text, fontSize) / 2, point.y + fontSize / 2);
  6538. context.closePath();
  6539. context.stroke();
  6540. }
  6541. }
  6542. }
  6543. opts.chartData.mapData = {
  6544. bounds: bounds,
  6545. scale: scale,
  6546. xoffset: xoffset,
  6547. yoffset: yoffset };
  6548. drawToolTipBridge(opts, config, context, 1);
  6549. context.draw();
  6550. }
  6551. function getWordCloudPoint(opts, type) {
  6552. var points = opts.series.sort(function (a, b) {return parseInt(b.textSize) - parseInt(a.textSize);});
  6553. switch (type) {
  6554. case 'normal':
  6555. for (var i = 0; i < points.length; i++) {
  6556. var text = points[i].name;
  6557. var tHeight = points[i].textSize;
  6558. var tWidth = measureText(text, tHeight);
  6559. var x = void 0,y = void 0;
  6560. var area = void 0;
  6561. var breaknum = 0;
  6562. while (true) {
  6563. breaknum++;
  6564. x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2;
  6565. y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2;
  6566. area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 + opts.height / 2];
  6567. var isCollision = collisionNew(area, points, opts.width, opts.height);
  6568. if (!isCollision) break;
  6569. if (breaknum == 1000) {
  6570. area = [-100, -100, -100, -100];
  6571. break;
  6572. }
  6573. };
  6574. points[i].area = area;
  6575. }
  6576. break;
  6577. case 'vertical':var
  6578. Spin = function Spin() {
  6579. //获取均匀随机值,是否旋转,旋转的概率为(1-0.5)
  6580. if (Math.random() > 0.7) {
  6581. return true;
  6582. } else {return false;};
  6583. };;
  6584. for (var _i22 = 0; _i22 < points.length; _i22++) {
  6585. var _text = points[_i22].name;
  6586. var _tHeight = points[_i22].textSize;
  6587. var _tWidth = measureText(_text, _tHeight);
  6588. var isSpin = Spin();
  6589. var _x = void 0,_y = void 0,_area = void 0,areav = void 0;
  6590. var _breaknum = 0;
  6591. while (true) {
  6592. _breaknum++;
  6593. var _isCollision = void 0;
  6594. if (isSpin) {
  6595. _x = normalInt(-opts.width / 2, opts.width / 2, 5) - _tWidth / 2;
  6596. _y = normalInt(-opts.height / 2, opts.height / 2, 5) + _tHeight / 2;
  6597. _area = [_y - 5 - _tWidth + opts.width / 2, -_x - 5 + opts.height / 2, _y + 5 + opts.width / 2, -_x + _tHeight + 5 + opts.height / 2];
  6598. areav = [opts.width - (opts.width / 2 - opts.height / 2) - (-_x + _tHeight + 5 + opts.height / 2) - 5, opts.height / 2 - opts.width / 2 + (_y - 5 - _tWidth + opts.width / 2) - 5, opts.width - (opts.width / 2 - opts.height / 2) - (-_x + _tHeight + 5 + opts.height / 2) + _tHeight, opts.height / 2 - opts.width / 2 + (_y - 5 - _tWidth + opts.width / 2) + _tWidth + 5];
  6599. _isCollision = collisionNew(areav, points, opts.height, opts.width);
  6600. } else {
  6601. _x = normalInt(-opts.width / 2, opts.width / 2, 5) - _tWidth / 2;
  6602. _y = normalInt(-opts.height / 2, opts.height / 2, 5) + _tHeight / 2;
  6603. _area = [_x - 5 + opts.width / 2, _y - 5 - _tHeight + opts.height / 2, _x + _tWidth + 5 + opts.width / 2, _y + 5 + opts.height / 2];
  6604. _isCollision = collisionNew(_area, points, opts.width, opts.height);
  6605. }
  6606. if (!_isCollision) break;
  6607. if (_breaknum == 1000) {
  6608. _area = [-1000, -1000, -1000, -1000];
  6609. break;
  6610. }
  6611. };
  6612. if (isSpin) {
  6613. points[_i22].area = areav;
  6614. points[_i22].areav = _area;
  6615. } else {
  6616. points[_i22].area = _area;
  6617. }
  6618. points[_i22].rotate = isSpin;
  6619. };
  6620. break;}
  6621. return points;
  6622. }
  6623. function drawWordCloudDataPoints(series, opts, config, context) {
  6624. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  6625. var wordOption = assign({}, {
  6626. type: 'normal',
  6627. autoColors: true },
  6628. opts.extra.word);
  6629. context.beginPath();
  6630. context.setFillStyle(opts.background || '#FFFFFF');
  6631. context.rect(0, 0, opts.width, opts.height);
  6632. context.fill();
  6633. context.save();
  6634. var points = opts.chartData.wordCloudData;
  6635. context.translate(opts.width / 2, opts.height / 2);
  6636. for (var i = 0; i < points.length; i++) {
  6637. context.save();
  6638. if (points[i].rotate) {
  6639. context.rotate(90 * Math.PI / 180);
  6640. }
  6641. var text = points[i].name;
  6642. var tHeight = points[i].textSize;
  6643. var tWidth = measureText(text, tHeight);
  6644. context.beginPath();
  6645. context.setStrokeStyle(points[i].color);
  6646. context.setFillStyle(points[i].color);
  6647. context.setFontSize(tHeight);
  6648. if (points[i].rotate) {
  6649. if (points[i].areav[0] > 0) {
  6650. if (opts.tooltip) {
  6651. if (opts.tooltip.index == i) {
  6652. context.strokeText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
  6653. } else {
  6654. context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
  6655. }
  6656. } else {
  6657. context.fillText(text, (points[i].areav[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].areav[1] + 5 + tHeight - opts.height / 2) * process);
  6658. }
  6659. }
  6660. } else {
  6661. if (points[i].area[0] > 0) {
  6662. if (opts.tooltip) {
  6663. if (opts.tooltip.index == i) {
  6664. context.strokeText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
  6665. } else {
  6666. context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
  6667. }
  6668. } else {
  6669. context.fillText(text, (points[i].area[0] + 5 - opts.width / 2) * process - tWidth * (1 - process) / 2, (points[i].area[1] + 5 + tHeight - opts.height / 2) * process);
  6670. }
  6671. }
  6672. }
  6673. context.stroke();
  6674. context.restore();
  6675. }
  6676. context.restore();
  6677. }
  6678. function drawFunnelDataPoints(series, opts, config, context) {
  6679. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  6680. var funnelOption = assign({}, {
  6681. activeWidth: 10,
  6682. activeOpacity: 0.3,
  6683. border: false,
  6684. borderWidth: 2,
  6685. borderColor: '#FFFFFF',
  6686. fillOpacity: 1,
  6687. labelAlign: 'right' },
  6688. opts.extra.funnel);
  6689. var eachSpacing = (opts.height - opts.area[0] - opts.area[2]) / series.length;
  6690. var centerPosition = {
  6691. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  6692. y: opts.height - opts.area[2] };
  6693. var activeWidth = funnelOption.activeWidth;
  6694. var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth);
  6695. series = getFunnelDataPoints(series, radius, process);
  6696. context.save();
  6697. context.translate(centerPosition.x, centerPosition.y);
  6698. for (var i = 0; i < series.length; i++) {
  6699. if (i == 0) {
  6700. if (opts.tooltip) {
  6701. if (opts.tooltip.index == i) {
  6702. context.beginPath();
  6703. context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
  6704. context.moveTo(-activeWidth, 0);
  6705. context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
  6706. context.lineTo(series[i].radius + activeWidth, -eachSpacing);
  6707. context.lineTo(activeWidth, 0);
  6708. context.lineTo(-activeWidth, 0);
  6709. context.closePath();
  6710. context.fill();
  6711. }
  6712. }
  6713. series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing, centerPosition.x + series[i].radius, centerPosition.y];
  6714. context.beginPath();
  6715. context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio);
  6716. context.setStrokeStyle(funnelOption.borderColor);
  6717. context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity));
  6718. context.moveTo(0, 0);
  6719. context.lineTo(-series[i].radius, -eachSpacing);
  6720. context.lineTo(series[i].radius, -eachSpacing);
  6721. context.lineTo(0, 0);
  6722. context.closePath();
  6723. context.fill();
  6724. if (funnelOption.border == true) {
  6725. context.stroke();
  6726. }
  6727. } else {
  6728. if (opts.tooltip) {
  6729. if (opts.tooltip.index == i) {
  6730. context.beginPath();
  6731. context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
  6732. context.moveTo(0, 0);
  6733. context.lineTo(-series[i - 1].radius - activeWidth, 0);
  6734. context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
  6735. context.lineTo(series[i].radius + activeWidth, -eachSpacing);
  6736. context.lineTo(series[i - 1].radius + activeWidth, 0);
  6737. context.lineTo(0, 0);
  6738. context.closePath();
  6739. context.fill();
  6740. }
  6741. }
  6742. series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + series[i].radius, centerPosition.y - eachSpacing * i];
  6743. context.beginPath();
  6744. context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio);
  6745. context.setStrokeStyle(funnelOption.borderColor);
  6746. context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity));
  6747. context.moveTo(0, 0);
  6748. context.lineTo(-series[i - 1].radius, 0);
  6749. context.lineTo(-series[i].radius, -eachSpacing);
  6750. context.lineTo(series[i].radius, -eachSpacing);
  6751. context.lineTo(series[i - 1].radius, 0);
  6752. context.lineTo(0, 0);
  6753. context.closePath();
  6754. context.fill();
  6755. if (funnelOption.border == true) {
  6756. context.stroke();
  6757. }
  6758. }
  6759. context.translate(0, -eachSpacing);
  6760. }
  6761. context.restore();
  6762. if (opts.dataLabel !== false && process === 1) {
  6763. drawFunnelText(series, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition);
  6764. }
  6765. return {
  6766. center: centerPosition,
  6767. radius: radius,
  6768. series: series };
  6769. }
  6770. function drawFunnelText(series, opts, context, eachSpacing, labelAlign, activeWidth, centerPosition) {
  6771. for (var i = 0; i < series.length; i++) {
  6772. var item = series[i];
  6773. var startX = void 0,endX = void 0,startY = void 0,fontSize = void 0;
  6774. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
  6775. if (labelAlign == 'right') {
  6776. if (i == 0) {
  6777. startX = (item.funnelArea[2] + centerPosition.x) / 2;
  6778. } else {
  6779. startX = (item.funnelArea[2] + series[i - 1].funnelArea[2]) / 2;
  6780. }
  6781. endX = startX + activeWidth * 2;
  6782. startY = item.funnelArea[1] + eachSpacing / 2;
  6783. fontSize = item.textSize || opts.fontSize;
  6784. context.setLineWidth(1 * opts.pixelRatio);
  6785. context.setStrokeStyle(item.color);
  6786. context.setFillStyle(item.color);
  6787. context.beginPath();
  6788. context.moveTo(startX, startY);
  6789. context.lineTo(endX, startY);
  6790. context.stroke();
  6791. context.closePath();
  6792. context.beginPath();
  6793. context.moveTo(endX, startY);
  6794. context.arc(endX, startY, 2, 0, 2 * Math.PI);
  6795. context.closePath();
  6796. context.fill();
  6797. context.beginPath();
  6798. context.setFontSize(fontSize);
  6799. context.setFillStyle(item.textColor || '#666666');
  6800. context.fillText(text, endX + 5, startY + fontSize / 2 - 2);
  6801. context.closePath();
  6802. context.stroke();
  6803. context.closePath();
  6804. } else {
  6805. if (i == 0) {
  6806. startX = (item.funnelArea[0] + centerPosition.x) / 2;
  6807. } else {
  6808. startX = (item.funnelArea[0] + series[i - 1].funnelArea[0]) / 2;
  6809. }
  6810. endX = startX - activeWidth * 2;
  6811. startY = item.funnelArea[1] + eachSpacing / 2;
  6812. fontSize = item.textSize || opts.fontSize;
  6813. context.setLineWidth(1 * opts.pixelRatio);
  6814. context.setStrokeStyle(item.color);
  6815. context.setFillStyle(item.color);
  6816. context.beginPath();
  6817. context.moveTo(startX, startY);
  6818. context.lineTo(endX, startY);
  6819. context.stroke();
  6820. context.closePath();
  6821. context.beginPath();
  6822. context.moveTo(endX, startY);
  6823. context.arc(endX, startY, 2, 0, 2 * Math.PI);
  6824. context.closePath();
  6825. context.fill();
  6826. context.beginPath();
  6827. context.setFontSize(fontSize);
  6828. context.setFillStyle(item.textColor || '#666666');
  6829. context.fillText(text, endX - 5 - measureText(text), startY + fontSize / 2 - 2);
  6830. context.closePath();
  6831. context.stroke();
  6832. context.closePath();
  6833. }
  6834. }
  6835. }
  6836. function drawCanvas(opts, context) {
  6837. context.draw();
  6838. }
  6839. var Timing = {
  6840. easeIn: function easeIn(pos) {
  6841. return Math.pow(pos, 3);
  6842. },
  6843. easeOut: function easeOut(pos) {
  6844. return Math.pow(pos - 1, 3) + 1;
  6845. },
  6846. easeInOut: function easeInOut(pos) {
  6847. if ((pos /= 0.5) < 1) {
  6848. return 0.5 * Math.pow(pos, 3);
  6849. } else {
  6850. return 0.5 * (Math.pow(pos - 2, 3) + 2);
  6851. }
  6852. },
  6853. linear: function linear(pos) {
  6854. return pos;
  6855. } };
  6856. function Animation(opts) {
  6857. this.isStop = false;
  6858. opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration;
  6859. opts.timing = opts.timing || 'linear';
  6860. var delay = 17;
  6861. function createAnimationFrame() {
  6862. if (typeof setTimeout !== 'undefined') {
  6863. return function (step, delay) {
  6864. setTimeout(function () {
  6865. var timeStamp = +new Date();
  6866. step(timeStamp);
  6867. }, delay);
  6868. };
  6869. } else if (typeof requestAnimationFrame !== 'undefined') {
  6870. return requestAnimationFrame;
  6871. } else {
  6872. return function (step) {
  6873. step(null);
  6874. };
  6875. }
  6876. };
  6877. var animationFrame = createAnimationFrame();
  6878. var startTimeStamp = null;
  6879. var _step = function step(timestamp) {
  6880. if (timestamp === null || this.isStop === true) {
  6881. opts.onProcess && opts.onProcess(1);
  6882. opts.onAnimationFinish && opts.onAnimationFinish();
  6883. return;
  6884. }
  6885. if (startTimeStamp === null) {
  6886. startTimeStamp = timestamp;
  6887. }
  6888. if (timestamp - startTimeStamp < opts.duration) {
  6889. var process = (timestamp - startTimeStamp) / opts.duration;
  6890. var timingFunction = Timing[opts.timing];
  6891. process = timingFunction(process);
  6892. opts.onProcess && opts.onProcess(process);
  6893. animationFrame(_step, delay);
  6894. } else {
  6895. opts.onProcess && opts.onProcess(1);
  6896. opts.onAnimationFinish && opts.onAnimationFinish();
  6897. }
  6898. };
  6899. _step = _step.bind(this);
  6900. animationFrame(_step, delay);
  6901. }
  6902. // stop animation immediately
  6903. // and tigger onAnimationFinish
  6904. Animation.prototype.stop = function () {
  6905. this.isStop = true;
  6906. };
  6907. function drawCharts(type, opts, config, context) {
  6908. var _this = this;
  6909. var series = opts.series;
  6910. var categories = opts.categories;
  6911. series = fillSeries(series, opts, config);
  6912. var duration = opts.animation ? opts.duration : 0;
  6913. _this.animationInstance && _this.animationInstance.stop();
  6914. var seriesMA = null;
  6915. if (type == 'candle') {
  6916. var average = assign({}, opts.extra.candle.average);
  6917. if (average.show) {
  6918. seriesMA = calCandleMA(average.day, average.name, average.color, series[0].data);
  6919. seriesMA = fillSeries(seriesMA, opts, config);
  6920. opts.seriesMA = seriesMA;
  6921. } else if (opts.seriesMA) {
  6922. seriesMA = opts.seriesMA = fillSeries(opts.seriesMA, opts, config);
  6923. } else {
  6924. seriesMA = series;
  6925. }
  6926. } else {
  6927. seriesMA = series;
  6928. }
  6929. /* 过滤掉show=false的series */
  6930. opts._series_ = series = filterSeries(series);
  6931. //重新计算图表区域
  6932. opts.area = new Array(4);
  6933. //复位绘图区域
  6934. for (var j = 0; j < 4; j++) {
  6935. opts.area[j] = opts.padding[j];
  6936. }
  6937. //通过计算三大区域:图例、X轴、Y轴的大小,确定绘图区域
  6938. var _calLegendData = calLegendData(seriesMA, opts, config, opts.chartData),
  6939. legendHeight = _calLegendData.area.wholeHeight,
  6940. legendWidth = _calLegendData.area.wholeWidth;
  6941. switch (opts.legend.position) {
  6942. case 'top':
  6943. opts.area[0] += legendHeight;
  6944. break;
  6945. case 'bottom':
  6946. opts.area[2] += legendHeight;
  6947. break;
  6948. case 'left':
  6949. opts.area[3] += legendWidth;
  6950. break;
  6951. case 'right':
  6952. opts.area[1] += legendWidth;
  6953. break;}
  6954. var _calYAxisData = {},yAxisWidth = 0;
  6955. if (opts.type === 'line' || opts.type === 'column' || opts.type === 'area' || opts.type === 'mix' || opts.type === 'candle') {
  6956. _calYAxisData = calYAxisData(series, opts, config);
  6957. yAxisWidth = _calYAxisData.yAxisWidth;
  6958. //如果显示Y轴标题
  6959. if (opts.yAxis.showTitle) {
  6960. var maxTitleHeight = 0;
  6961. for (var i = 0; i < opts.yAxis.data.length; i++) {
  6962. maxTitleHeight = Math.max(maxTitleHeight, opts.yAxis.data[i].titleFontSize ? opts.yAxis.data[i].titleFontSize : config.fontSize);
  6963. }
  6964. opts.area[0] += (maxTitleHeight + 6) * opts.pixelRatio;
  6965. }
  6966. var rightIndex = 0,leftIndex = 0;
  6967. //计算主绘图区域左右位置
  6968. for (var _i23 = 0; _i23 < yAxisWidth.length; _i23++) {
  6969. if (yAxisWidth[_i23].position == 'left') {
  6970. if (leftIndex > 0) {
  6971. opts.area[3] += yAxisWidth[_i23].width + opts.yAxis.padding;
  6972. } else {
  6973. opts.area[3] += yAxisWidth[_i23].width;
  6974. }
  6975. leftIndex += 1;
  6976. } else {
  6977. if (rightIndex > 0) {
  6978. opts.area[1] += yAxisWidth[_i23].width + opts.yAxis.padding;
  6979. } else {
  6980. opts.area[1] += yAxisWidth[_i23].width;
  6981. }
  6982. rightIndex += 1;
  6983. }
  6984. }
  6985. } else {
  6986. config.yAxisWidth = yAxisWidth;
  6987. }
  6988. opts.chartData.yAxisData = _calYAxisData;
  6989. if (opts.categories && opts.categories.length) {
  6990. opts.chartData.xAxisData = getXAxisPoints(opts.categories, opts, config);
  6991. var _calCategoriesData = calCategoriesData(opts.categories, opts, config, opts.chartData.xAxisData.eachSpacing),
  6992. xAxisHeight = _calCategoriesData.xAxisHeight,
  6993. angle = _calCategoriesData.angle;
  6994. config.xAxisHeight = xAxisHeight;
  6995. config._xAxisTextAngle_ = angle;
  6996. opts.area[2] += xAxisHeight;
  6997. opts.chartData.categoriesData = _calCategoriesData;
  6998. } else {
  6999. if (opts.type === 'line' || opts.type === 'area' || opts.type === 'points') {
  7000. opts.chartData.xAxisData = calXAxisData(series, opts, config);
  7001. categories = opts.chartData.xAxisData.rangesFormat;
  7002. var _calCategoriesData2 = calCategoriesData(categories, opts, config, opts.chartData.xAxisData.eachSpacing),
  7003. _xAxisHeight = _calCategoriesData2.xAxisHeight,
  7004. _angle = _calCategoriesData2.angle;
  7005. config.xAxisHeight = _xAxisHeight;
  7006. config._xAxisTextAngle_ = _angle;
  7007. opts.area[2] += _xAxisHeight;
  7008. opts.chartData.categoriesData = _calCategoriesData2;
  7009. } else {
  7010. opts.chartData.xAxisData = {
  7011. xAxisPoints: [] };
  7012. }
  7013. }
  7014. //计算右对齐偏移距离
  7015. if (opts.enableScroll && opts.xAxis.scrollAlign == 'right' && opts._scrollDistance_ === undefined) {
  7016. var offsetLeft = 0,
  7017. xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
  7018. startX = opts.chartData.xAxisData.startX,
  7019. endX = opts.chartData.xAxisData.endX,
  7020. eachSpacing = opts.chartData.xAxisData.eachSpacing;
  7021. var totalWidth = eachSpacing * (xAxisPoints.length - 1);
  7022. var screenWidth = endX - startX;
  7023. offsetLeft = screenWidth - totalWidth;
  7024. _this.scrollOption = {
  7025. currentOffset: offsetLeft,
  7026. startTouchX: offsetLeft,
  7027. distance: 0,
  7028. lastMoveTime: 0 };
  7029. opts._scrollDistance_ = offsetLeft;
  7030. }
  7031. if (type === 'pie' || type === 'ring' || type === 'rose') {
  7032. config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(seriesMA);
  7033. }
  7034. switch (type) {
  7035. case 'word':
  7036. var wordOption = assign({}, {
  7037. type: 'normal',
  7038. autoColors: true },
  7039. opts.extra.word);
  7040. if (opts.updateData == true || opts.updateData == undefined) {
  7041. opts.chartData.wordCloudData = getWordCloudPoint(opts, wordOption.type);
  7042. }
  7043. this.animationInstance = new Animation({
  7044. timing: 'easeInOut',
  7045. duration: duration,
  7046. onProcess: function onProcess(process) {
  7047. context.clearRect(0, 0, opts.width, opts.height);
  7048. if (opts.rotate) {
  7049. contextRotate(context, opts);
  7050. }
  7051. drawWordCloudDataPoints(series, opts, config, context, process);
  7052. drawCanvas(opts, context);
  7053. },
  7054. onAnimationFinish: function onAnimationFinish() {
  7055. _this.event.trigger('renderComplete');
  7056. } });
  7057. break;
  7058. case 'map':
  7059. context.clearRect(0, 0, opts.width, opts.height);
  7060. drawMapDataPoints(series, opts, config, context);
  7061. break;
  7062. case 'funnel':
  7063. this.animationInstance = new Animation({
  7064. timing: 'easeInOut',
  7065. duration: duration,
  7066. onProcess: function onProcess(process) {
  7067. context.clearRect(0, 0, opts.width, opts.height);
  7068. if (opts.rotate) {
  7069. contextRotate(context, opts);
  7070. }
  7071. opts.chartData.funnelData = drawFunnelDataPoints(series, opts, config, context, process);
  7072. drawLegend(opts.series, opts, config, context, opts.chartData);
  7073. drawToolTipBridge(opts, config, context, process);
  7074. drawCanvas(opts, context);
  7075. },
  7076. onAnimationFinish: function onAnimationFinish() {
  7077. _this.event.trigger('renderComplete');
  7078. } });
  7079. break;
  7080. case 'line':
  7081. this.animationInstance = new Animation({
  7082. timing: 'easeIn',
  7083. duration: duration,
  7084. onProcess: function onProcess(process) {
  7085. context.clearRect(0, 0, opts.width, opts.height);
  7086. if (opts.rotate) {
  7087. contextRotate(context, opts);
  7088. }
  7089. drawYAxisGrid(categories, opts, config, context);
  7090. drawXAxis(categories, opts, config, context);
  7091. var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process),
  7092. xAxisPoints = _drawLineDataPoints.xAxisPoints,
  7093. calPoints = _drawLineDataPoints.calPoints,
  7094. eachSpacing = _drawLineDataPoints.eachSpacing;
  7095. opts.chartData.xAxisPoints = xAxisPoints;
  7096. opts.chartData.calPoints = calPoints;
  7097. opts.chartData.eachSpacing = eachSpacing;
  7098. drawYAxis(series, opts, config, context);
  7099. if (opts.enableMarkLine !== false && process === 1) {
  7100. drawMarkLine(opts, config, context);
  7101. }
  7102. drawLegend(opts.series, opts, config, context, opts.chartData);
  7103. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  7104. drawCanvas(opts, context);
  7105. },
  7106. onAnimationFinish: function onAnimationFinish() {
  7107. _this.event.trigger('renderComplete');
  7108. } });
  7109. break;
  7110. case 'mix':
  7111. this.animationInstance = new Animation({
  7112. timing: 'easeIn',
  7113. duration: duration,
  7114. onProcess: function onProcess(process) {
  7115. context.clearRect(0, 0, opts.width, opts.height);
  7116. if (opts.rotate) {
  7117. contextRotate(context, opts);
  7118. }
  7119. drawYAxisGrid(categories, opts, config, context);
  7120. drawXAxis(categories, opts, config, context);
  7121. var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process),
  7122. xAxisPoints = _drawMixDataPoints.xAxisPoints,
  7123. calPoints = _drawMixDataPoints.calPoints,
  7124. eachSpacing = _drawMixDataPoints.eachSpacing;
  7125. opts.chartData.xAxisPoints = xAxisPoints;
  7126. opts.chartData.calPoints = calPoints;
  7127. opts.chartData.eachSpacing = eachSpacing;
  7128. drawYAxis(series, opts, config, context);
  7129. if (opts.enableMarkLine !== false && process === 1) {
  7130. drawMarkLine(opts, config, context);
  7131. }
  7132. drawLegend(opts.series, opts, config, context, opts.chartData);
  7133. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  7134. drawCanvas(opts, context);
  7135. },
  7136. onAnimationFinish: function onAnimationFinish() {
  7137. _this.event.trigger('renderComplete');
  7138. } });
  7139. break;
  7140. case 'column':
  7141. this.animationInstance = new Animation({
  7142. timing: 'easeIn',
  7143. duration: duration,
  7144. onProcess: function onProcess(process) {
  7145. context.clearRect(0, 0, opts.width, opts.height);
  7146. if (opts.rotate) {
  7147. contextRotate(context, opts);
  7148. }
  7149. drawYAxisGrid(categories, opts, config, context);
  7150. drawXAxis(categories, opts, config, context);
  7151. var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process),
  7152. xAxisPoints = _drawColumnDataPoints.xAxisPoints,
  7153. calPoints = _drawColumnDataPoints.calPoints,
  7154. eachSpacing = _drawColumnDataPoints.eachSpacing;
  7155. opts.chartData.xAxisPoints = xAxisPoints;
  7156. opts.chartData.calPoints = calPoints;
  7157. opts.chartData.eachSpacing = eachSpacing;
  7158. drawYAxis(series, opts, config, context);
  7159. if (opts.enableMarkLine !== false && process === 1) {
  7160. drawMarkLine(opts, config, context);
  7161. }
  7162. drawLegend(opts.series, opts, config, context, opts.chartData);
  7163. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  7164. drawCanvas(opts, context);
  7165. },
  7166. onAnimationFinish: function onAnimationFinish() {
  7167. _this.event.trigger('renderComplete');
  7168. } });
  7169. break;
  7170. case 'area':
  7171. this.animationInstance = new Animation({
  7172. timing: 'easeIn',
  7173. duration: duration,
  7174. onProcess: function onProcess(process) {
  7175. context.clearRect(0, 0, opts.width, opts.height);
  7176. if (opts.rotate) {
  7177. contextRotate(context, opts);
  7178. }
  7179. drawYAxisGrid(categories, opts, config, context);
  7180. drawXAxis(categories, opts, config, context);
  7181. var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process),
  7182. xAxisPoints = _drawAreaDataPoints.xAxisPoints,
  7183. calPoints = _drawAreaDataPoints.calPoints,
  7184. eachSpacing = _drawAreaDataPoints.eachSpacing;
  7185. opts.chartData.xAxisPoints = xAxisPoints;
  7186. opts.chartData.calPoints = calPoints;
  7187. opts.chartData.eachSpacing = eachSpacing;
  7188. drawYAxis(series, opts, config, context);
  7189. if (opts.enableMarkLine !== false && process === 1) {
  7190. drawMarkLine(opts, config, context);
  7191. }
  7192. drawLegend(opts.series, opts, config, context, opts.chartData);
  7193. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  7194. drawCanvas(opts, context);
  7195. },
  7196. onAnimationFinish: function onAnimationFinish() {
  7197. _this.event.trigger('renderComplete');
  7198. } });
  7199. break;
  7200. case 'ring':
  7201. case 'pie':
  7202. this.animationInstance = new Animation({
  7203. timing: 'easeInOut',
  7204. duration: duration,
  7205. onProcess: function onProcess(process) {
  7206. context.clearRect(0, 0, opts.width, opts.height);
  7207. if (opts.rotate) {
  7208. contextRotate(context, opts);
  7209. }
  7210. opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process);
  7211. drawLegend(opts.series, opts, config, context, opts.chartData);
  7212. drawToolTipBridge(opts, config, context, process);
  7213. drawCanvas(opts, context);
  7214. },
  7215. onAnimationFinish: function onAnimationFinish() {
  7216. _this.event.trigger('renderComplete');
  7217. } });
  7218. break;
  7219. case 'rose':
  7220. this.animationInstance = new Animation({
  7221. timing: 'easeInOut',
  7222. duration: duration,
  7223. onProcess: function onProcess(process) {
  7224. context.clearRect(0, 0, opts.width, opts.height);
  7225. if (opts.rotate) {
  7226. contextRotate(context, opts);
  7227. }
  7228. opts.chartData.pieData = drawRoseDataPoints(series, opts, config, context, process);
  7229. drawLegend(opts.series, opts, config, context, opts.chartData);
  7230. drawToolTipBridge(opts, config, context, process);
  7231. drawCanvas(opts, context);
  7232. },
  7233. onAnimationFinish: function onAnimationFinish() {
  7234. _this.event.trigger('renderComplete');
  7235. } });
  7236. break;
  7237. case 'radar':
  7238. this.animationInstance = new Animation({
  7239. timing: 'easeInOut',
  7240. duration: duration,
  7241. onProcess: function onProcess(process) {
  7242. context.clearRect(0, 0, opts.width, opts.height);
  7243. if (opts.rotate) {
  7244. contextRotate(context, opts);
  7245. }
  7246. opts.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process);
  7247. drawLegend(opts.series, opts, config, context, opts.chartData);
  7248. drawToolTipBridge(opts, config, context, process);
  7249. drawCanvas(opts, context);
  7250. },
  7251. onAnimationFinish: function onAnimationFinish() {
  7252. _this.event.trigger('renderComplete');
  7253. } });
  7254. break;
  7255. case 'arcbar':
  7256. this.animationInstance = new Animation({
  7257. timing: 'easeInOut',
  7258. duration: duration,
  7259. onProcess: function onProcess(process) {
  7260. context.clearRect(0, 0, opts.width, opts.height);
  7261. if (opts.rotate) {
  7262. contextRotate(context, opts);
  7263. }
  7264. opts.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process);
  7265. drawCanvas(opts, context);
  7266. },
  7267. onAnimationFinish: function onAnimationFinish() {
  7268. _this.event.trigger('renderComplete');
  7269. } });
  7270. break;
  7271. case 'gauge':
  7272. this.animationInstance = new Animation({
  7273. timing: 'easeInOut',
  7274. duration: duration,
  7275. onProcess: function onProcess(process) {
  7276. context.clearRect(0, 0, opts.width, opts.height);
  7277. if (opts.rotate) {
  7278. contextRotate(context, opts);
  7279. }
  7280. opts.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process);
  7281. drawCanvas(opts, context);
  7282. },
  7283. onAnimationFinish: function onAnimationFinish() {
  7284. _this.event.trigger('renderComplete');
  7285. } });
  7286. break;
  7287. case 'candle':
  7288. this.animationInstance = new Animation({
  7289. timing: 'easeIn',
  7290. duration: duration,
  7291. onProcess: function onProcess(process) {
  7292. context.clearRect(0, 0, opts.width, opts.height);
  7293. if (opts.rotate) {
  7294. contextRotate(context, opts);
  7295. }
  7296. drawYAxisGrid(categories, opts, config, context);
  7297. drawXAxis(categories, opts, config, context);
  7298. var _drawCandleDataPoints = drawCandleDataPoints(series, seriesMA, opts, config, context, process),
  7299. xAxisPoints = _drawCandleDataPoints.xAxisPoints,
  7300. calPoints = _drawCandleDataPoints.calPoints,
  7301. eachSpacing = _drawCandleDataPoints.eachSpacing;
  7302. opts.chartData.xAxisPoints = xAxisPoints;
  7303. opts.chartData.calPoints = calPoints;
  7304. opts.chartData.eachSpacing = eachSpacing;
  7305. drawYAxis(series, opts, config, context);
  7306. if (opts.enableMarkLine !== false && process === 1) {
  7307. drawMarkLine(opts, config, context);
  7308. }
  7309. if (seriesMA) {
  7310. drawLegend(seriesMA, opts, config, context, opts.chartData);
  7311. } else {
  7312. drawLegend(opts.series, opts, config, context, opts.chartData);
  7313. }
  7314. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  7315. drawCanvas(opts, context);
  7316. },
  7317. onAnimationFinish: function onAnimationFinish() {
  7318. _this.event.trigger('renderComplete');
  7319. } });
  7320. break;}
  7321. }
  7322. // simple event implement
  7323. function Event() {
  7324. this.events = {};
  7325. }
  7326. Event.prototype.addEventListener = function (type, listener) {
  7327. this.events[type] = this.events[type] || [];
  7328. this.events[type].push(listener);
  7329. };
  7330. Event.prototype.delEventListener = function (type) {
  7331. this.events[type] = [];
  7332. };
  7333. Event.prototype.trigger = function () {
  7334. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  7335. args[_key] = arguments[_key];
  7336. }
  7337. var type = args[0];
  7338. var params = args.slice(1);
  7339. if (!!this.events[type]) {
  7340. this.events[type].forEach(function (listener) {
  7341. try {
  7342. listener.apply(null, params);
  7343. } catch (e) {
  7344. console.error(e);
  7345. }
  7346. });
  7347. }
  7348. };
  7349. var Charts = function Charts(opts) {
  7350. opts.pixelRatio = opts.pixelRatio ? opts.pixelRatio : 1;
  7351. opts.fontSize = opts.fontSize ? opts.fontSize * opts.pixelRatio : 13 * opts.pixelRatio;
  7352. opts.title = assign({}, opts.title);
  7353. opts.subtitle = assign({}, opts.subtitle);
  7354. opts.duration = opts.duration ? opts.duration : 1000;
  7355. opts.yAxis = assign({}, {
  7356. data: [],
  7357. showTitle: false,
  7358. disabled: false,
  7359. disableGrid: false,
  7360. splitNumber: 5,
  7361. gridType: 'solid',
  7362. dashLength: 4 * opts.pixelRatio,
  7363. gridColor: '#cccccc',
  7364. padding: 10,
  7365. fontColor: '#666666' },
  7366. opts.yAxis);
  7367. opts.yAxis.dashLength *= opts.pixelRatio;
  7368. opts.yAxis.padding *= opts.pixelRatio;
  7369. opts.xAxis = assign({}, {
  7370. rotateLabel: false,
  7371. type: 'calibration',
  7372. gridType: 'solid',
  7373. dashLength: 4,
  7374. scrollAlign: 'left',
  7375. boundaryGap: 'center',
  7376. axisLine: true,
  7377. axisLineColor: '#cccccc' },
  7378. opts.xAxis);
  7379. opts.xAxis.dashLength *= opts.pixelRatio;
  7380. opts.legend = assign({}, {
  7381. show: true,
  7382. position: 'bottom',
  7383. float: 'center',
  7384. backgroundColor: 'rgba(0,0,0,0)',
  7385. borderColor: 'rgba(0,0,0,0)',
  7386. borderWidth: 0,
  7387. padding: 5,
  7388. margin: 5,
  7389. itemGap: 10,
  7390. fontSize: opts.fontSize,
  7391. lineHeight: opts.fontSize,
  7392. fontColor: '#333333',
  7393. format: {},
  7394. hiddenColor: '#CECECE' },
  7395. opts.legend);
  7396. opts.legend.borderWidth = opts.legend.borderWidth * opts.pixelRatio;
  7397. opts.legend.itemGap = opts.legend.itemGap * opts.pixelRatio;
  7398. opts.legend.padding = opts.legend.padding * opts.pixelRatio;
  7399. opts.legend.margin = opts.legend.margin * opts.pixelRatio;
  7400. opts.extra = assign({}, opts.extra);
  7401. opts.rotate = opts.rotate ? true : false;
  7402. opts.animation = opts.animation ? true : false;
  7403. opts.rotate = opts.rotate ? true : false;
  7404. opts.canvas2d = opts.canvas2d ? true : false;
  7405. var config$$1 = JSON.parse(JSON.stringify(config));
  7406. config$$1.colors = opts.colors ? opts.colors : config$$1.colors;
  7407. config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0;
  7408. if (opts.type == 'pie' || opts.type == 'ring') {
  7409. config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio;
  7410. }
  7411. if (opts.type == 'rose') {
  7412. config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.rose.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio;
  7413. }
  7414. config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pixelRatio;
  7415. config$$1.yAxisSplit = opts.yAxis.splitNumber ? opts.yAxis.splitNumber : config.yAxisSplit;
  7416. //屏幕旋转
  7417. config$$1.rotate = opts.rotate;
  7418. if (opts.rotate) {
  7419. var tempWidth = opts.width;
  7420. var tempHeight = opts.height;
  7421. opts.width = tempHeight;
  7422. opts.height = tempWidth;
  7423. }
  7424. //适配高分屏
  7425. opts.padding = opts.padding ? opts.padding : config$$1.padding;
  7426. for (var i = 0; i < 4; i++) {
  7427. opts.padding[i] *= opts.pixelRatio;
  7428. }
  7429. config$$1.yAxisWidth = config.yAxisWidth * opts.pixelRatio;
  7430. config$$1.xAxisHeight = config.xAxisHeight * opts.pixelRatio;
  7431. if (opts.enableScroll && opts.xAxis.scrollShow) {
  7432. config$$1.xAxisHeight += 6 * opts.pixelRatio;
  7433. }
  7434. config$$1.xAxisLineHeight = config.xAxisLineHeight * opts.pixelRatio;
  7435. config$$1.fontSize = opts.fontSize;
  7436. config$$1.titleFontSize = config.titleFontSize * opts.pixelRatio;
  7437. config$$1.subtitleFontSize = config.subtitleFontSize * opts.pixelRatio;
  7438. config$$1.toolTipPadding = config.toolTipPadding * opts.pixelRatio;
  7439. config$$1.toolTipLineHeight = config.toolTipLineHeight * opts.pixelRatio;
  7440. config$$1.columePadding = config.columePadding * opts.pixelRatio;
  7441. this.context = opts.context ? opts.context : uni.createCanvasContext(opts.canvasId, opts.$this);
  7442. if (opts.canvas2d) {
  7443. this.context.setStrokeStyle = function (e) {return this.strokeStyle = e;};
  7444. this.context.setLineWidth = function (e) {return this.lineWidth = e;};
  7445. this.context.setLineCap = function (e) {return this.lineCap = e;};
  7446. this.context.setFontSize = function (e) {return this.font = e + "px sans-serif";};
  7447. this.context.setFillStyle = function (e) {return this.fillStyle = e;};
  7448. this.context.draw = function () {};
  7449. }
  7450. /* 兼容原生H5
  7451. this.context = document.getElementById(opts.canvasId).getContext("2d");
  7452. this.context.setStrokeStyle = function(e){ return this.strokeStyle=e; }
  7453. this.context.setLineWidth = function(e){ return this.lineWidth=e; }
  7454. this.context.setLineCap = function(e){ return this.lineCap=e; }
  7455. this.context.setFontSize = function(e){ return this.font=e+"px sans-serif"; }
  7456. this.context.setFillStyle = function(e){ return this.fillStyle=e; }
  7457. this.context.draw = function(){ }
  7458. */
  7459. opts.chartData = {};
  7460. this.event = new Event();
  7461. this.scrollOption = {
  7462. currentOffset: 0,
  7463. startTouchX: 0,
  7464. distance: 0,
  7465. lastMoveTime: 0 };
  7466. this.opts = opts;
  7467. this.config = config$$1;
  7468. drawCharts.call(this, opts.type, opts, config$$1, this.context);
  7469. };
  7470. Charts.prototype.updateData = function () {
  7471. var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  7472. this.opts = assign({}, this.opts, data);
  7473. this.opts.updateData = true;
  7474. var scrollPosition = data.scrollPosition || 'current';
  7475. switch (scrollPosition) {
  7476. case 'current':
  7477. this.opts._scrollDistance_ = this.scrollOption.currentOffset;
  7478. break;
  7479. case 'left':
  7480. this.opts._scrollDistance_ = 0;
  7481. this.scrollOption = {
  7482. currentOffset: 0,
  7483. startTouchX: 0,
  7484. distance: 0,
  7485. lastMoveTime: 0 };
  7486. break;
  7487. case 'right':
  7488. var _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
  7489. yAxisWidth = _calYAxisData.yAxisWidth;
  7490. this.config.yAxisWidth = yAxisWidth;
  7491. var offsetLeft = 0;
  7492. var _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
  7493. xAxisPoints = _getXAxisPoints0.xAxisPoints,
  7494. startX = _getXAxisPoints0.startX,
  7495. endX = _getXAxisPoints0.endX,
  7496. eachSpacing = _getXAxisPoints0.eachSpacing;
  7497. var totalWidth = eachSpacing * (xAxisPoints.length - 1);
  7498. var screenWidth = endX - startX;
  7499. offsetLeft = screenWidth - totalWidth;
  7500. this.scrollOption = {
  7501. currentOffset: offsetLeft,
  7502. startTouchX: offsetLeft,
  7503. distance: 0,
  7504. lastMoveTime: 0 };
  7505. this.opts._scrollDistance_ = offsetLeft;
  7506. break;}
  7507. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  7508. };
  7509. Charts.prototype.zoom = function () {
  7510. var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount;
  7511. if (this.opts.enableScroll !== true) {
  7512. console.log('请启用滚动条后使用!');
  7513. return;
  7514. }
  7515. //当前屏幕中间点
  7516. var centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round(
  7517. this.opts.xAxis.itemCount / 2);
  7518. this.opts.animation = false;
  7519. this.opts.xAxis.itemCount = val.itemCount;
  7520. //重新计算x轴偏移距离
  7521. var _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
  7522. yAxisWidth = _calYAxisData.yAxisWidth;
  7523. this.config.yAxisWidth = yAxisWidth;
  7524. var offsetLeft = 0;
  7525. var _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
  7526. xAxisPoints = _getXAxisPoints0.xAxisPoints,
  7527. startX = _getXAxisPoints0.startX,
  7528. endX = _getXAxisPoints0.endX,
  7529. eachSpacing = _getXAxisPoints0.eachSpacing;
  7530. var centerLeft = eachSpacing * centerPoint;
  7531. var screenWidth = endX - startX;
  7532. var MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1);
  7533. offsetLeft = screenWidth / 2 - centerLeft;
  7534. if (offsetLeft > 0) {
  7535. offsetLeft = 0;
  7536. }
  7537. if (offsetLeft < MaxLeft) {
  7538. offsetLeft = MaxLeft;
  7539. }
  7540. this.scrollOption = {
  7541. currentOffset: offsetLeft,
  7542. startTouchX: offsetLeft,
  7543. distance: 0,
  7544. lastMoveTime: 0 };
  7545. this.opts._scrollDistance_ = offsetLeft;
  7546. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  7547. };
  7548. Charts.prototype.stopAnimation = function () {
  7549. this.animationInstance && this.animationInstance.stop();
  7550. };
  7551. Charts.prototype.addEventListener = function (type, listener) {
  7552. this.event.addEventListener(type, listener);
  7553. };
  7554. Charts.prototype.delEventListener = function (type) {
  7555. this.event.delEventListener(type);
  7556. };
  7557. Charts.prototype.getCurrentDataIndex = function (e) {
  7558. var touches = null;
  7559. if (e.changedTouches) {
  7560. touches = e.changedTouches[0];
  7561. } else {
  7562. touches = e.mp.changedTouches[0];
  7563. }
  7564. if (touches) {
  7565. var _touches$ = getTouches(touches, this.opts, e);
  7566. if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose') {
  7567. return findPieChartCurrentIndex({
  7568. x: _touches$.x,
  7569. y: _touches$.y },
  7570. this.opts.chartData.pieData);
  7571. } else if (this.opts.type === 'radar') {
  7572. return findRadarChartCurrentIndex({
  7573. x: _touches$.x,
  7574. y: _touches$.y },
  7575. this.opts.chartData.radarData, this.opts.categories.length);
  7576. } else if (this.opts.type === 'funnel') {
  7577. return findFunnelChartCurrentIndex({
  7578. x: _touches$.x,
  7579. y: _touches$.y },
  7580. this.opts.chartData.funnelData);
  7581. } else if (this.opts.type === 'map') {
  7582. return findMapChartCurrentIndex({
  7583. x: _touches$.x,
  7584. y: _touches$.y },
  7585. this.opts);
  7586. } else if (this.opts.type === 'word') {
  7587. return findWordChartCurrentIndex({
  7588. x: _touches$.x,
  7589. y: _touches$.y },
  7590. this.opts.chartData.wordCloudData);
  7591. } else {
  7592. return findCurrentIndex({
  7593. x: _touches$.x,
  7594. y: _touches$.y },
  7595. this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
  7596. }
  7597. }
  7598. return -1;
  7599. };
  7600. Charts.prototype.getLegendDataIndex = function (e) {
  7601. var touches = null;
  7602. if (e.changedTouches) {
  7603. touches = e.changedTouches[0];
  7604. } else {
  7605. touches = e.mp.changedTouches[0];
  7606. }
  7607. if (touches) {
  7608. var _touches$ = getTouches(touches, this.opts, e);
  7609. return findLegendIndex({
  7610. x: _touches$.x,
  7611. y: _touches$.y },
  7612. this.opts.chartData.legendData);
  7613. }
  7614. return -1;
  7615. };
  7616. Charts.prototype.touchLegend = function (e) {
  7617. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  7618. var touches = null;
  7619. if (e.changedTouches) {
  7620. touches = e.changedTouches[0];
  7621. } else {
  7622. touches = e.mp.changedTouches[0];
  7623. }
  7624. if (touches) {
  7625. var _touches$ = getTouches(touches, this.opts, e);
  7626. var index = this.getLegendDataIndex(e);
  7627. if (index >= 0) {
  7628. this.opts.series[index].show = !this.opts.series[index].show;
  7629. this.opts.animation = option.animation ? true : false;
  7630. this.opts._scrollDistance_ = this.scrollOption.currentOffset;
  7631. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  7632. }
  7633. }
  7634. };
  7635. Charts.prototype.showToolTip = function (e) {
  7636. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  7637. var touches = null;
  7638. if (e.changedTouches) {
  7639. touches = e.changedTouches[0];
  7640. } else {
  7641. touches = e.mp.changedTouches[0];
  7642. }
  7643. if (!touches) {
  7644. console.log("touchError");
  7645. }
  7646. var _touches$ = getTouches(touches, this.opts, e);
  7647. var currentOffset = this.scrollOption.currentOffset;
  7648. var opts = assign({}, this.opts, {
  7649. _scrollDistance_: currentOffset,
  7650. animation: false });
  7651. if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column') {
  7652. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7653. if (index > -1) {
  7654. var seriesData = getSeriesDataItem(this.opts.series, index);
  7655. if (seriesData.length !== 0) {
  7656. var _getToolTipData = getToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories, option),
  7657. textList = _getToolTipData.textList,
  7658. offset = _getToolTipData.offset;
  7659. offset.y = _touches$.y;
  7660. opts.tooltip = {
  7661. textList: option.textList ? option.textList : textList,
  7662. offset: offset,
  7663. option: option,
  7664. index: index };
  7665. }
  7666. }
  7667. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7668. }
  7669. if (this.opts.type === 'mix') {
  7670. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7671. if (index > -1) {
  7672. var currentOffset = this.scrollOption.currentOffset;
  7673. var opts = assign({}, this.opts, {
  7674. _scrollDistance_: currentOffset,
  7675. animation: false });
  7676. var seriesData = getSeriesDataItem(this.opts.series, index);
  7677. if (seriesData.length !== 0) {
  7678. var _getMixToolTipData = getMixToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories, option),
  7679. textList = _getMixToolTipData.textList,
  7680. offset = _getMixToolTipData.offset;
  7681. offset.y = _touches$.y;
  7682. opts.tooltip = {
  7683. textList: option.textList ? option.textList : textList,
  7684. offset: offset,
  7685. option: option,
  7686. index: index };
  7687. }
  7688. }
  7689. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7690. }
  7691. if (this.opts.type === 'candle') {
  7692. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7693. if (index > -1) {
  7694. var currentOffset = this.scrollOption.currentOffset;
  7695. var opts = assign({}, this.opts, {
  7696. _scrollDistance_: currentOffset,
  7697. animation: false });
  7698. var seriesData = getSeriesDataItem(this.opts.series, index);
  7699. if (seriesData.length !== 0) {
  7700. var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts.chartData.calPoints,
  7701. index, this.opts.categories, this.opts.extra.candle, option),
  7702. textList = _getToolTipData.textList,
  7703. offset = _getToolTipData.offset;
  7704. offset.y = _touches$.y;
  7705. opts.tooltip = {
  7706. textList: option.textList ? option.textList : textList,
  7707. offset: offset,
  7708. option: option,
  7709. index: index };
  7710. }
  7711. }
  7712. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7713. }
  7714. if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose' || this.opts.type === 'funnel') {
  7715. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7716. if (index > -1) {
  7717. var currentOffset = this.scrollOption.currentOffset;
  7718. var opts = assign({}, this.opts, {
  7719. _scrollDistance_: currentOffset,
  7720. animation: false });
  7721. var seriesData = this.opts._series_[index];
  7722. var textList = [{
  7723. text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data,
  7724. color: seriesData.color }];
  7725. var offset = {
  7726. x: _touches$.x,
  7727. y: _touches$.y };
  7728. opts.tooltip = {
  7729. textList: option.textList ? option.textList : textList,
  7730. offset: offset,
  7731. option: option,
  7732. index: index };
  7733. }
  7734. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7735. }
  7736. if (this.opts.type === 'map' || this.opts.type === 'word') {
  7737. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7738. if (index > -1) {
  7739. var currentOffset = this.scrollOption.currentOffset;
  7740. var opts = assign({}, this.opts, {
  7741. _scrollDistance_: currentOffset,
  7742. animation: false });
  7743. var seriesData = this.opts._series_[index];
  7744. var textList = [{
  7745. text: option.format ? option.format(seriesData) : seriesData.properties.name, color: seriesData.color }];
  7746. var offset = {
  7747. x: _touches$.x,
  7748. y: _touches$.y };
  7749. opts.tooltip = {
  7750. textList: option.textList ? option.textList : textList,
  7751. offset: offset,
  7752. option: option,
  7753. index: index };
  7754. }
  7755. opts.updateData = false;
  7756. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7757. }
  7758. if (this.opts.type === 'radar') {
  7759. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  7760. if (index > -1) {
  7761. var currentOffset = this.scrollOption.currentOffset;
  7762. var opts = assign({}, this.opts, {
  7763. _scrollDistance_: currentOffset,
  7764. animation: false });
  7765. var seriesData = getSeriesDataItem(this.opts.series, index);
  7766. if (seriesData.length !== 0) {
  7767. var textList = seriesData.map(function (item) {
  7768. return {
  7769. text: option.format ? option.format(item) : item.name + ': ' + item.data, color: item.color };
  7770. });
  7771. var offset = {
  7772. x: _touches$.x,
  7773. y: _touches$.y };
  7774. opts.tooltip = {
  7775. textList: option.textList ? option.textList : textList,
  7776. offset: offset,
  7777. option: option,
  7778. index: index };
  7779. }
  7780. }
  7781. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7782. }
  7783. };
  7784. Charts.prototype.translate = function (distance) {
  7785. this.scrollOption = {
  7786. currentOffset: distance,
  7787. startTouchX: distance,
  7788. distance: 0,
  7789. lastMoveTime: 0 };
  7790. var opts = assign({}, this.opts, {
  7791. _scrollDistance_: distance,
  7792. animation: false });
  7793. drawCharts.call(this, this.opts.type, opts, this.config, this.context);
  7794. };
  7795. Charts.prototype.scrollStart = function (e) {
  7796. var touches = null;
  7797. if (e.changedTouches) {
  7798. touches = e.changedTouches[0];
  7799. } else {
  7800. touches = e.mp.changedTouches[0];
  7801. }
  7802. var _touches$ = getTouches(touches, this.opts, e);
  7803. if (touches && this.opts.enableScroll === true) {
  7804. this.scrollOption.startTouchX = _touches$.x;
  7805. }
  7806. };
  7807. Charts.prototype.scroll = function (e) {
  7808. if (this.scrollOption.lastMoveTime === 0) {
  7809. this.scrollOption.lastMoveTime = Date.now();
  7810. }
  7811. var Limit = this.opts.extra.touchMoveLimit || 20;
  7812. var currMoveTime = Date.now();
  7813. var duration = currMoveTime - this.scrollOption.lastMoveTime;
  7814. if (duration < Math.floor(1000 / Limit)) return;
  7815. this.scrollOption.lastMoveTime = currMoveTime;
  7816. var touches = null;
  7817. if (e.changedTouches) {
  7818. touches = e.changedTouches[0];
  7819. } else {
  7820. touches = e.mp.changedTouches[0];
  7821. }
  7822. if (touches && this.opts.enableScroll === true) {
  7823. var _touches$ = getTouches(touches, this.opts, e);
  7824. var _distance;
  7825. _distance = _touches$.x - this.scrollOption.startTouchX;
  7826. var currentOffset = this.scrollOption.currentOffset;
  7827. var validDistance = calValidDistance(this, currentOffset + _distance, this.opts.chartData, this.config, this.opts);
  7828. this.scrollOption.distance = _distance = validDistance - currentOffset;
  7829. var opts = assign({}, this.opts, {
  7830. _scrollDistance_: currentOffset + _distance,
  7831. animation: false });
  7832. drawCharts.call(this, opts.type, opts, this.config, this.context);
  7833. return currentOffset + _distance;
  7834. }
  7835. };
  7836. Charts.prototype.scrollEnd = function (e) {
  7837. if (this.opts.enableScroll === true) {
  7838. var _scrollOption = this.scrollOption,
  7839. currentOffset = _scrollOption.currentOffset,
  7840. distance = _scrollOption.distance;
  7841. this.scrollOption.currentOffset = currentOffset + distance;
  7842. this.scrollOption.distance = 0;
  7843. }
  7844. };
  7845. if ( true && typeof module.exports === "object") {
  7846. module.exports = Charts;
  7847. //export default Charts;//建议使用nodejs的module导出方式,如报错请使用export方式导出
  7848. }
  7849. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  7850. /***/ }),
  7851. /***/ 21:
  7852. /*!************************************************************!*\
  7853. !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
  7854. \************************************************************/
  7855. /*! no static exports found */
  7856. /***/ (function(module, exports, __webpack_require__) {
  7857. /**
  7858. * Copyright (c) 2014-present, Facebook, Inc.
  7859. *
  7860. * This source code is licensed under the MIT license found in the
  7861. * LICENSE file in the root directory of this source tree.
  7862. */
  7863. // This method of obtaining a reference to the global object needs to be
  7864. // kept identical to the way it is obtained in runtime.js
  7865. var g = (function() {
  7866. return this || (typeof self === "object" && self);
  7867. })() || Function("return this")();
  7868. // Use `getOwnPropertyNames` because not all browsers support calling
  7869. // `hasOwnProperty` on the global `self` object in a worker. See #183.
  7870. var hadRuntime = g.regeneratorRuntime &&
  7871. Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
  7872. // Save the old regeneratorRuntime in case it needs to be restored later.
  7873. var oldRuntime = hadRuntime && g.regeneratorRuntime;
  7874. // Force reevalutation of runtime.js.
  7875. g.regeneratorRuntime = undefined;
  7876. module.exports = __webpack_require__(/*! ./runtime */ 22);
  7877. if (hadRuntime) {
  7878. // Restore the original runtime.
  7879. g.regeneratorRuntime = oldRuntime;
  7880. } else {
  7881. // Remove the global property added by runtime.js.
  7882. try {
  7883. delete g.regeneratorRuntime;
  7884. } catch(e) {
  7885. g.regeneratorRuntime = undefined;
  7886. }
  7887. }
  7888. /***/ }),
  7889. /***/ 211:
  7890. /*!******************************************************************************!*\
  7891. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/static/data/cbd_pest_library.js ***!
  7892. \******************************************************************************/
  7893. /*! no static exports found */
  7894. /***/ (function(module, exports, __webpack_require__) {
  7895. "use strict";
  7896. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 害虫库
  7897. var insect_dict = { '1': '金龟子',
  7898. '2': '夜蛾',
  7899. '3': '二点委夜蛾',
  7900. '4': '梨剑纹夜蛾',
  7901. '5': '杨扇舟蛾',
  7902. '6': '舟蛾',
  7903. '7': '旋幽夜蛾',
  7904. '8': '蝼蛄',
  7905. '9': '步甲',
  7906. '10': '螟蛾',
  7907. '11': '毛黄鳃金龟',
  7908. '12': '尺蛾',
  7909. '13': '剑纹夜蛾',
  7910. '14': '粉缘钻夜蛾',
  7911. '15': '夜蛾科',
  7912. '16': '七星瓢虫',
  7913. '17': '棉铃虫',
  7914. '18': '蜻蜓',
  7915. '19': '蚊',
  7916. '20': '东方粘虫',
  7917. '21': '叶蝉',
  7918. '22': '春尺蠖',
  7919. '23': '雄性春尺蠖',
  7920. '24': '杨小舟蛾',
  7921. '25': '甘蓝夜蛾',
  7922. '26': '小地老虎',
  7923. '27': '两点尼夜蛾',
  7924. '28': '柳阴翅斑螟',
  7925. '29': '桑褶翅尺蛾',
  7926. '30': '宽胫夜蛾',
  7927. '31': '尺蠖',
  7928. '32': '一点钻夜蛾',
  7929. '33': '天蛾',
  7930. '34': '裳夜蛾',
  7931. '35': '灯蛾',
  7932. '36': '美国白蛾',
  7933. '37': '八字白眉天蛾',
  7934. '38': '陌夜蛾',
  7935. '39': '豆天蛾',
  7936. '40': '麦蛾',
  7937. '41': '围连环夜蛾',
  7938. '42': '亚美尺蛾',
  7939. '43': '梨星毛虫',
  7940. '44': '银锭夜蛾',
  7941. '45': '黄臀灯蛾',
  7942. '46': '大螟',
  7943. '47': '燕尾舟蛾',
  7944. '48': '榆津尺蛾',
  7945. '49': '朽木夜蛾',
  7946. '50': '黄地老虎',
  7947. '51': '白钩粘夜蛾',
  7948. '52': '桃蛀螟',
  7949. '53': '甜菜夜蛾',
  7950. '54': '斜纹夜蛾',
  7951. '55': '蚀夜蛾',
  7952. '56': '淡银锭夜蛾',
  7953. '57': '齿美冬夜蛾',
  7954. '58': '一点金刚钻',
  7955. '59': '胡桃豹夜蛾',
  7956. '60': '桑剑纹夜蛾',
  7957. '61': '蓝目天蛾',
  7958. '62': '黑绒绢金龟',
  7959. '63': '烟青虫',
  7960. '64': '暗黑鳃金龟',
  7961. '65': '中华绒金龟',
  7962. '66': '八字地老虎',
  7963. '67': '榆绿天蛾',
  7964. '68': '红星雪灯蛾',
  7965. '69': '雀纹天蛾',
  7966. '70': '铜绿丽金龟',
  7967. '71': '水龟虫',
  7968. '72': '曲线尼夜蛾',
  7969. '73': '粘虫',
  7970. '74': '瘦银锭夜蛾',
  7971. '75': '红天蛾',
  7972. '76': '鳃金龟',
  7973. '77': '大黑鳃金龟',
  7974. '78': '大地老虎',
  7975. '79': '玉米螟',
  7976. '80': '赤角盲蝽',
  7977. '81': '槐尺蛾',
  7978. '82': '银纹夜蛾',
  7979. '83': '天牛',
  7980. '84': '乏夜蛾',
  7981. '85': '丁香天蛾',
  7982. '86': '构月天蛾',
  7983. '87': '虎甲',
  7984. '88': '劳氏粘虫',
  7985. '89': '白薯天蛾',
  7986. '90': '广鹿蛾',
  7987. '91': '二十八星瓢虫',
  7988. '92': '腮金龟',
  7989. '93': '人纹污夜蛾',
  7990. '94': '叩甲',
  7991. '95': '楸蠹野螟',
  7992. '96': '丝绵木金星尺蛾',
  7993. '97': '红缘灯蛾',
  7994. '98': '黄褐丽金龟',
  7995. '99': '螟蛾科',
  7996. '100': '红棕灰夜蛾',
  7997. '101': '黑绒绢金龟',
  7998. '102': '广鹿灯蛾',
  7999. '103': '蝽',
  8000. '104': '蜂',
  8001. '105': '大造桥虫',
  8002. '106': '童剑纹夜蛾',
  8003. '107': '晃剑纹夜蛾',
  8004. '108': '钩粘虫',
  8005. '109': '直影夜蛾',
  8006. '110': '毛黄绢金龟',
  8007. '111': '乌氏小尾天蚕蛾',
  8008. '112': '褐边绿刺蛾',
  8009. '113': '广鹿舟蛾',
  8010. '114': '颜倾城',
  8011. '115': '龙虱',
  8012. '116': '双带盘瓢虫',
  8013. '117': '槲犹冬夜蛾',
  8014. '118': '洋槐天蛾',
  8015. '119': '弧角散纹夜蛾',
  8016. '120': '黄脉天蛾',
  8017. '121': '葡萄天蛾',
  8018. '122': '桃六点天蛾',
  8019. '123': '异色瓢虫',
  8020. '124': '榆黄足毒蛾',
  8021. '125': '客来夜蛾',
  8022. '126': '桦尺蛾',
  8023. '127': '草地螟',
  8024. '128': '细条纹野螟',
  8025. '129': '污灯蛾属',
  8026. '130': '杨二尾舟蛾',
  8027. '131': '克什杆野螟',
  8028. '132': '筱客来夜蛾',
  8029. '133': '栗六点天蛾',
  8030. '134': '紫光盾天蛾',
  8031. '135': '款冬玉米螟',
  8032. '136': '草蛉',
  8033. '137': '亚麻篱灯蛾',
  8034. '138': '扁连环夜蛾',
  8035. '139': '圣蜣螂',
  8036. '140': '白钩粘虫',
  8037. '141': '苇实夜蛾',
  8038. '142': '姬蜂',
  8039. '143': '秘夜蛾',
  8040. '144': '织网夜蛾',
  8041. '145': '深色白眉天蛾',
  8042. '146': '短扇舟蛾',
  8043. '147': '白须天蛾',
  8044. '148': '歌梦尼夜蛾',
  8045. '149': '海安夜蛾',
  8046. '150': '满丫纹夜蛾',
  8047. '151': '蟋蟀',
  8048. '152': '双斑青步甲',
  8049. '153': '白条夜蛾',
  8050. '154': '蟪蛄',
  8051. '155': '负子蝽',
  8052. '156': '脊青步甲',
  8053. '157': '宽斑青步甲',
  8054. '158': '稻从卷叶螟',
  8055. '159': '淡剑夜蛾',
  8056. '160': '甜菜白带野螟',
  8057. '161': '樗蚕',
  8058. '162': '蒙古寒蝉',
  8059. '163': '中带三角夜蛾',
  8060. '164': '蝗虫',
  8061. '165': '多色异丽金龟',
  8062. '166': '白色小卷蛾',
  8063. '167': '狭边青步甲',
  8064. '168': '棉卷叶野螟',
  8065. '169': '豆荚野螟',
  8066. '170': '麻小食心虫',
  8067. '171': '星斑虎甲',
  8068. '172': '黄缘龙虱',
  8069. '173': '无斑弧丽金龟',
  8070. '174': '白额鹰翅天蛾',
  8071. '175': '日本真龙虱',
  8072. '176': '山东云斑螟',
  8073. '177': '小文夜蛾',
  8074. '178': '三条蛀野螟',
  8075. '179': '榆掌舟蛾',
  8076. '180': '刺槐掌舟蛾',
  8077. '181': '星绒天蛾',
  8078. '182': '杨剑舟蛾',
  8079. '183': '刀夜蛾',
  8080. '184': '红节天蛾',
  8081. '185': '星白雪灯蛾',
  8082. '186': '桃剑纹夜蛾',
  8083. '187': '谐夜蛾',
  8084. '188': '小剑纹夜蛾',
  8085. '189': '鸣鸣蝉',
  8086. '190': '姬夜蛾',
  8087. '191': '落叶松毛虫',
  8088. '192': '苹六点天蛾',
  8089. '193': '四斑绢野螟',
  8090. '194': '甘薯天蛾',
  8091. '195': '小线角木蠹蛾',
  8092. '196': '三斑蕊夜蛾',
  8093. '197': '白雪灯蛾',
  8094. '198': '黄刺蛾',
  8095. '199': '茶翅蝽',
  8096. '200': '杨树枯叶蛾',
  8097. "201": "标瑙夜蛾",
  8098. "202": "瓜绢野螟",
  8099. "203": "稻绿蝽",
  8100. "204": "杨雪毒蛾",
  8101. "205": "榆白边舟蛾",
  8102. "206": "扁刺蛾",
  8103. "207": "绒黏夜蛾",
  8104. "208": "庸肖毛翅夜蛾",
  8105. "209": "中华婪步甲",
  8106. "210": "褐黄前锹甲",
  8107. "211": "旱柳原野螟",
  8108. "212": "巨影夜蛾",
  8109. "213": "食蚜蝇",
  8110. "214": "双斑葬甲",
  8111. "215": "黄毒蛾",
  8112. "216": "婪步甲",
  8113. "217": "土甲",
  8114. "218": "中华真地鳖",
  8115. "219": "紫线夜蛾",
  8116. "220": "小黄鳃金龟",
  8117. "221": "中华真土鳖",
  8118. "222": "云斑虎甲",
  8119. "223": "中华黧尺蛾",
  8120. "224": "中华绿刺蛾",
  8121. "225": "巨豹纹尺蛾",
  8122. "226": "多斑豹蠹蛾",
  8123. "227": "桑尺蛾",
  8124. "228": "灰直纹螟",
  8125. "229": "中国绿刺蛾",
  8126. "230": "云杉梢斑螟",
  8127. "231": "桑绢野螟",
  8128. "232": "黄杨绢野螟",
  8129. "233": "突背斑红蝽",
  8130. "234": "高粱条螟",
  8131. "235": "小麦负泥虫",
  8132. "236": "苹掌舟蛾",
  8133. "237": "绒粘夜蛾",
  8134. "238": "灰白灯蛾",
  8135. "239": "隐丫纹夜蛾",
  8136. "240": "满纹夜蛾",
  8137. "241": "黑剑狼夜蛾",
  8138. "242": "蜣螂",
  8139. "243": "福婆鳃金龟",
  8140. "244": "雨尺蛾",
  8141. "245": "优美苔蛾",
  8142. "246": "黄斑野螟",
  8143. "247": "疆夜蛾",
  8144. "248": "六点天蛾",
  8145. "249": "斜线夜蛾",
  8146. "250": "石榴巾夜蛾",
  8147. "251": "绒星天蛾",
  8148. "252": "霜天蛾",
  8149. "253": "大田鳖",
  8150. "254": "灰双纹螟",
  8151. "255": "青尺蛾",
  8152. "256": "二线绿尺蛾",
  8153. "257": "散纹夜蛾",
  8154. "258": "红双线尺蛾",
  8155. "259": "胞短栉夜蛾",
  8156. "260": "飞虱科",
  8157. "261": "桃多斑野螟",
  8158. "262": "甜菜青野螟",
  8159. "263": "核桃鹰翅天蛾",
  8160. "264": "角顶尺蛾",
  8161. "265": "葡萄缺角天蛾",
  8162. "266": "绿尾大蚕蛾",
  8163. "267": "杨褐枯叶蝶",
  8164. "268": "双云尺蛾",
  8165. "269": "斑拟兜夜蛾",
  8166. "270": "阿莎尺蛾",
  8167. "271": "榄绿岐角螟",
  8168. "272": "青革土蝽",
  8169. "273": "核桃美舟蛾",
  8170. "274": "斑点卷叶螟",
  8171. "275": "黄褐箩纹蛾",
  8172. "276": "白环红天蛾",
  8173. "277": "白腹网丛螟",
  8174. "278": "枯叶蛾",
  8175. "279": "丹日明夜蛾",
  8176. "280": "仿白边舟蛾",
  8177. "281": "槐羽舟蛾",
  8178. "282": "草地贪夜蛾",
  8179. "283": "环夜蛾",
  8180. "284": "尘尺蛾",
  8181. "285": "黄二星舟蛾",
  8182. "286": "榆木蠹蛾",
  8183. "287": "水黾",
  8184. "288": "银装冬夜蛾",
  8185. "289": "饰奇尺蛾",
  8186. "290": "枯叶蝶",
  8187. "291": "步甲",
  8188. "292": "阔胸禾犀金龟",
  8189. "293": "眼斑钩蛾",
  8190. "294": "三开蜣螂",
  8191. "295": "金星步甲",
  8192. "296": "残夜蛾",
  8193. "297": "野蚕蛾",
  8194. "298": "芦苇豹蠹蛾",
  8195. "299": "华晓扁犀金龟",
  8196. "300": "灰胸突鳃金龟",
  8197. "301": "龟纹瓢虫",
  8198. "302": "麻皮蝽",
  8199. "303": "斑须蝽",
  8200. "304": "斜斑虎甲",
  8201. "305": "地鳖",
  8202. "306": "叶甲",
  8203. "307": "燕夜蛾",
  8204. "308": "黑纹北灯蛾",
  8205. "309": "网夜蛾",
  8206. "310": "棘翅夜蛾",
  8207. "311": "规尺蛾",
  8208. "312": "苜蓿银纹夜蛾",
  8209. "313": "拟扇舟蛾",
  8210. "314": "丁目大蚕蛾",
  8211. "315": "金黄蛾",
  8212. "316": "黄星雪灯蛾",
  8213. "317": "暗纹紫褐螟",
  8214. "318": "白眉天蛾",
  8215. "319": "黄板盘瓢虫",
  8216. "320": "玫岐角螟",
  8217. "321": "枯黄贡尺蛾",
  8218. "322": "小豆长喙天蛾",
  8219. "323": "橙拟灯蛾",
  8220. "324": "粉蝶灯蛾",
  8221. "325": "纹散丽灯蛾",
  8222. "326": "雪尾尺蛾",
  8223. "327": "鹰翅天蛾",
  8224. "328": "波纹蛾",
  8225. "329": "黑条灰灯蛾",
  8226. "330": "八点灰灯蛾",
  8227. "331": "间纹弦夜蛾",
  8228. "332": "缤夜蛾" };var _default =
  8229. insect_dict;exports.default = _default;
  8230. /***/ }),
  8231. /***/ 22:
  8232. /*!*****************************************************!*\
  8233. !*** ./node_modules/regenerator-runtime/runtime.js ***!
  8234. \*****************************************************/
  8235. /*! no static exports found */
  8236. /***/ (function(module, exports) {
  8237. /**
  8238. * Copyright (c) 2014-present, Facebook, Inc.
  8239. *
  8240. * This source code is licensed under the MIT license found in the
  8241. * LICENSE file in the root directory of this source tree.
  8242. */
  8243. !(function(global) {
  8244. "use strict";
  8245. var Op = Object.prototype;
  8246. var hasOwn = Op.hasOwnProperty;
  8247. var undefined; // More compressible than void 0.
  8248. var $Symbol = typeof Symbol === "function" ? Symbol : {};
  8249. var iteratorSymbol = $Symbol.iterator || "@@iterator";
  8250. var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  8251. var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  8252. var inModule = typeof module === "object";
  8253. var runtime = global.regeneratorRuntime;
  8254. if (runtime) {
  8255. if (inModule) {
  8256. // If regeneratorRuntime is defined globally and we're in a module,
  8257. // make the exports object identical to regeneratorRuntime.
  8258. module.exports = runtime;
  8259. }
  8260. // Don't bother evaluating the rest of this file if the runtime was
  8261. // already defined globally.
  8262. return;
  8263. }
  8264. // Define the runtime globally (as expected by generated code) as either
  8265. // module.exports (if we're in a module) or a new, empty object.
  8266. runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  8267. function wrap(innerFn, outerFn, self, tryLocsList) {
  8268. // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
  8269. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
  8270. var generator = Object.create(protoGenerator.prototype);
  8271. var context = new Context(tryLocsList || []);
  8272. // The ._invoke method unifies the implementations of the .next,
  8273. // .throw, and .return methods.
  8274. generator._invoke = makeInvokeMethod(innerFn, self, context);
  8275. return generator;
  8276. }
  8277. runtime.wrap = wrap;
  8278. // Try/catch helper to minimize deoptimizations. Returns a completion
  8279. // record like context.tryEntries[i].completion. This interface could
  8280. // have been (and was previously) designed to take a closure to be
  8281. // invoked without arguments, but in all the cases we care about we
  8282. // already have an existing method we want to call, so there's no need
  8283. // to create a new function object. We can even get away with assuming
  8284. // the method takes exactly one argument, since that happens to be true
  8285. // in every case, so we don't have to touch the arguments object. The
  8286. // only additional allocation required is the completion record, which
  8287. // has a stable shape and so hopefully should be cheap to allocate.
  8288. function tryCatch(fn, obj, arg) {
  8289. try {
  8290. return { type: "normal", arg: fn.call(obj, arg) };
  8291. } catch (err) {
  8292. return { type: "throw", arg: err };
  8293. }
  8294. }
  8295. var GenStateSuspendedStart = "suspendedStart";
  8296. var GenStateSuspendedYield = "suspendedYield";
  8297. var GenStateExecuting = "executing";
  8298. var GenStateCompleted = "completed";
  8299. // Returning this object from the innerFn has the same effect as
  8300. // breaking out of the dispatch switch statement.
  8301. var ContinueSentinel = {};
  8302. // Dummy constructor functions that we use as the .constructor and
  8303. // .constructor.prototype properties for functions that return Generator
  8304. // objects. For full spec compliance, you may wish to configure your
  8305. // minifier not to mangle the names of these two functions.
  8306. function Generator() {}
  8307. function GeneratorFunction() {}
  8308. function GeneratorFunctionPrototype() {}
  8309. // This is a polyfill for %IteratorPrototype% for environments that
  8310. // don't natively support it.
  8311. var IteratorPrototype = {};
  8312. IteratorPrototype[iteratorSymbol] = function () {
  8313. return this;
  8314. };
  8315. var getProto = Object.getPrototypeOf;
  8316. var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  8317. if (NativeIteratorPrototype &&
  8318. NativeIteratorPrototype !== Op &&
  8319. hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
  8320. // This environment has a native %IteratorPrototype%; use it instead
  8321. // of the polyfill.
  8322. IteratorPrototype = NativeIteratorPrototype;
  8323. }
  8324. var Gp = GeneratorFunctionPrototype.prototype =
  8325. Generator.prototype = Object.create(IteratorPrototype);
  8326. GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  8327. GeneratorFunctionPrototype.constructor = GeneratorFunction;
  8328. GeneratorFunctionPrototype[toStringTagSymbol] =
  8329. GeneratorFunction.displayName = "GeneratorFunction";
  8330. // Helper for defining the .next, .throw, and .return methods of the
  8331. // Iterator interface in terms of a single ._invoke method.
  8332. function defineIteratorMethods(prototype) {
  8333. ["next", "throw", "return"].forEach(function(method) {
  8334. prototype[method] = function(arg) {
  8335. return this._invoke(method, arg);
  8336. };
  8337. });
  8338. }
  8339. runtime.isGeneratorFunction = function(genFun) {
  8340. var ctor = typeof genFun === "function" && genFun.constructor;
  8341. return ctor
  8342. ? ctor === GeneratorFunction ||
  8343. // For the native GeneratorFunction constructor, the best we can
  8344. // do is to check its .name property.
  8345. (ctor.displayName || ctor.name) === "GeneratorFunction"
  8346. : false;
  8347. };
  8348. runtime.mark = function(genFun) {
  8349. if (Object.setPrototypeOf) {
  8350. Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
  8351. } else {
  8352. genFun.__proto__ = GeneratorFunctionPrototype;
  8353. if (!(toStringTagSymbol in genFun)) {
  8354. genFun[toStringTagSymbol] = "GeneratorFunction";
  8355. }
  8356. }
  8357. genFun.prototype = Object.create(Gp);
  8358. return genFun;
  8359. };
  8360. // Within the body of any async function, `await x` is transformed to
  8361. // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  8362. // `hasOwn.call(value, "__await")` to determine if the yielded value is
  8363. // meant to be awaited.
  8364. runtime.awrap = function(arg) {
  8365. return { __await: arg };
  8366. };
  8367. function AsyncIterator(generator) {
  8368. function invoke(method, arg, resolve, reject) {
  8369. var record = tryCatch(generator[method], generator, arg);
  8370. if (record.type === "throw") {
  8371. reject(record.arg);
  8372. } else {
  8373. var result = record.arg;
  8374. var value = result.value;
  8375. if (value &&
  8376. typeof value === "object" &&
  8377. hasOwn.call(value, "__await")) {
  8378. return Promise.resolve(value.__await).then(function(value) {
  8379. invoke("next", value, resolve, reject);
  8380. }, function(err) {
  8381. invoke("throw", err, resolve, reject);
  8382. });
  8383. }
  8384. return Promise.resolve(value).then(function(unwrapped) {
  8385. // When a yielded Promise is resolved, its final value becomes
  8386. // the .value of the Promise<{value,done}> result for the
  8387. // current iteration.
  8388. result.value = unwrapped;
  8389. resolve(result);
  8390. }, function(error) {
  8391. // If a rejected Promise was yielded, throw the rejection back
  8392. // into the async generator function so it can be handled there.
  8393. return invoke("throw", error, resolve, reject);
  8394. });
  8395. }
  8396. }
  8397. var previousPromise;
  8398. function enqueue(method, arg) {
  8399. function callInvokeWithMethodAndArg() {
  8400. return new Promise(function(resolve, reject) {
  8401. invoke(method, arg, resolve, reject);
  8402. });
  8403. }
  8404. return previousPromise =
  8405. // If enqueue has been called before, then we want to wait until
  8406. // all previous Promises have been resolved before calling invoke,
  8407. // so that results are always delivered in the correct order. If
  8408. // enqueue has not been called before, then it is important to
  8409. // call invoke immediately, without waiting on a callback to fire,
  8410. // so that the async generator function has the opportunity to do
  8411. // any necessary setup in a predictable way. This predictability
  8412. // is why the Promise constructor synchronously invokes its
  8413. // executor callback, and why async functions synchronously
  8414. // execute code before the first await. Since we implement simple
  8415. // async functions in terms of async generators, it is especially
  8416. // important to get this right, even though it requires care.
  8417. previousPromise ? previousPromise.then(
  8418. callInvokeWithMethodAndArg,
  8419. // Avoid propagating failures to Promises returned by later
  8420. // invocations of the iterator.
  8421. callInvokeWithMethodAndArg
  8422. ) : callInvokeWithMethodAndArg();
  8423. }
  8424. // Define the unified helper method that is used to implement .next,
  8425. // .throw, and .return (see defineIteratorMethods).
  8426. this._invoke = enqueue;
  8427. }
  8428. defineIteratorMethods(AsyncIterator.prototype);
  8429. AsyncIterator.prototype[asyncIteratorSymbol] = function () {
  8430. return this;
  8431. };
  8432. runtime.AsyncIterator = AsyncIterator;
  8433. // Note that simple async functions are implemented on top of
  8434. // AsyncIterator objects; they just return a Promise for the value of
  8435. // the final result produced by the iterator.
  8436. runtime.async = function(innerFn, outerFn, self, tryLocsList) {
  8437. var iter = new AsyncIterator(
  8438. wrap(innerFn, outerFn, self, tryLocsList)
  8439. );
  8440. return runtime.isGeneratorFunction(outerFn)
  8441. ? iter // If outerFn is a generator, return the full iterator.
  8442. : iter.next().then(function(result) {
  8443. return result.done ? result.value : iter.next();
  8444. });
  8445. };
  8446. function makeInvokeMethod(innerFn, self, context) {
  8447. var state = GenStateSuspendedStart;
  8448. return function invoke(method, arg) {
  8449. if (state === GenStateExecuting) {
  8450. throw new Error("Generator is already running");
  8451. }
  8452. if (state === GenStateCompleted) {
  8453. if (method === "throw") {
  8454. throw arg;
  8455. }
  8456. // Be forgiving, per 25.3.3.3.3 of the spec:
  8457. // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
  8458. return doneResult();
  8459. }
  8460. context.method = method;
  8461. context.arg = arg;
  8462. while (true) {
  8463. var delegate = context.delegate;
  8464. if (delegate) {
  8465. var delegateResult = maybeInvokeDelegate(delegate, context);
  8466. if (delegateResult) {
  8467. if (delegateResult === ContinueSentinel) continue;
  8468. return delegateResult;
  8469. }
  8470. }
  8471. if (context.method === "next") {
  8472. // Setting context._sent for legacy support of Babel's
  8473. // function.sent implementation.
  8474. context.sent = context._sent = context.arg;
  8475. } else if (context.method === "throw") {
  8476. if (state === GenStateSuspendedStart) {
  8477. state = GenStateCompleted;
  8478. throw context.arg;
  8479. }
  8480. context.dispatchException(context.arg);
  8481. } else if (context.method === "return") {
  8482. context.abrupt("return", context.arg);
  8483. }
  8484. state = GenStateExecuting;
  8485. var record = tryCatch(innerFn, self, context);
  8486. if (record.type === "normal") {
  8487. // If an exception is thrown from innerFn, we leave state ===
  8488. // GenStateExecuting and loop back for another invocation.
  8489. state = context.done
  8490. ? GenStateCompleted
  8491. : GenStateSuspendedYield;
  8492. if (record.arg === ContinueSentinel) {
  8493. continue;
  8494. }
  8495. return {
  8496. value: record.arg,
  8497. done: context.done
  8498. };
  8499. } else if (record.type === "throw") {
  8500. state = GenStateCompleted;
  8501. // Dispatch the exception by looping back around to the
  8502. // context.dispatchException(context.arg) call above.
  8503. context.method = "throw";
  8504. context.arg = record.arg;
  8505. }
  8506. }
  8507. };
  8508. }
  8509. // Call delegate.iterator[context.method](context.arg) and handle the
  8510. // result, either by returning a { value, done } result from the
  8511. // delegate iterator, or by modifying context.method and context.arg,
  8512. // setting context.delegate to null, and returning the ContinueSentinel.
  8513. function maybeInvokeDelegate(delegate, context) {
  8514. var method = delegate.iterator[context.method];
  8515. if (method === undefined) {
  8516. // A .throw or .return when the delegate iterator has no .throw
  8517. // method always terminates the yield* loop.
  8518. context.delegate = null;
  8519. if (context.method === "throw") {
  8520. if (delegate.iterator.return) {
  8521. // If the delegate iterator has a return method, give it a
  8522. // chance to clean up.
  8523. context.method = "return";
  8524. context.arg = undefined;
  8525. maybeInvokeDelegate(delegate, context);
  8526. if (context.method === "throw") {
  8527. // If maybeInvokeDelegate(context) changed context.method from
  8528. // "return" to "throw", let that override the TypeError below.
  8529. return ContinueSentinel;
  8530. }
  8531. }
  8532. context.method = "throw";
  8533. context.arg = new TypeError(
  8534. "The iterator does not provide a 'throw' method");
  8535. }
  8536. return ContinueSentinel;
  8537. }
  8538. var record = tryCatch(method, delegate.iterator, context.arg);
  8539. if (record.type === "throw") {
  8540. context.method = "throw";
  8541. context.arg = record.arg;
  8542. context.delegate = null;
  8543. return ContinueSentinel;
  8544. }
  8545. var info = record.arg;
  8546. if (! info) {
  8547. context.method = "throw";
  8548. context.arg = new TypeError("iterator result is not an object");
  8549. context.delegate = null;
  8550. return ContinueSentinel;
  8551. }
  8552. if (info.done) {
  8553. // Assign the result of the finished delegate to the temporary
  8554. // variable specified by delegate.resultName (see delegateYield).
  8555. context[delegate.resultName] = info.value;
  8556. // Resume execution at the desired location (see delegateYield).
  8557. context.next = delegate.nextLoc;
  8558. // If context.method was "throw" but the delegate handled the
  8559. // exception, let the outer generator proceed normally. If
  8560. // context.method was "next", forget context.arg since it has been
  8561. // "consumed" by the delegate iterator. If context.method was
  8562. // "return", allow the original .return call to continue in the
  8563. // outer generator.
  8564. if (context.method !== "return") {
  8565. context.method = "next";
  8566. context.arg = undefined;
  8567. }
  8568. } else {
  8569. // Re-yield the result returned by the delegate method.
  8570. return info;
  8571. }
  8572. // The delegate iterator is finished, so forget it and continue with
  8573. // the outer generator.
  8574. context.delegate = null;
  8575. return ContinueSentinel;
  8576. }
  8577. // Define Generator.prototype.{next,throw,return} in terms of the
  8578. // unified ._invoke helper method.
  8579. defineIteratorMethods(Gp);
  8580. Gp[toStringTagSymbol] = "Generator";
  8581. // A Generator should always return itself as the iterator object when the
  8582. // @@iterator function is called on it. Some browsers' implementations of the
  8583. // iterator prototype chain incorrectly implement this, causing the Generator
  8584. // object to not be returned from this call. This ensures that doesn't happen.
  8585. // See https://github.com/facebook/regenerator/issues/274 for more details.
  8586. Gp[iteratorSymbol] = function() {
  8587. return this;
  8588. };
  8589. Gp.toString = function() {
  8590. return "[object Generator]";
  8591. };
  8592. function pushTryEntry(locs) {
  8593. var entry = { tryLoc: locs[0] };
  8594. if (1 in locs) {
  8595. entry.catchLoc = locs[1];
  8596. }
  8597. if (2 in locs) {
  8598. entry.finallyLoc = locs[2];
  8599. entry.afterLoc = locs[3];
  8600. }
  8601. this.tryEntries.push(entry);
  8602. }
  8603. function resetTryEntry(entry) {
  8604. var record = entry.completion || {};
  8605. record.type = "normal";
  8606. delete record.arg;
  8607. entry.completion = record;
  8608. }
  8609. function Context(tryLocsList) {
  8610. // The root entry object (effectively a try statement without a catch
  8611. // or a finally block) gives us a place to store values thrown from
  8612. // locations where there is no enclosing try statement.
  8613. this.tryEntries = [{ tryLoc: "root" }];
  8614. tryLocsList.forEach(pushTryEntry, this);
  8615. this.reset(true);
  8616. }
  8617. runtime.keys = function(object) {
  8618. var keys = [];
  8619. for (var key in object) {
  8620. keys.push(key);
  8621. }
  8622. keys.reverse();
  8623. // Rather than returning an object with a next method, we keep
  8624. // things simple and return the next function itself.
  8625. return function next() {
  8626. while (keys.length) {
  8627. var key = keys.pop();
  8628. if (key in object) {
  8629. next.value = key;
  8630. next.done = false;
  8631. return next;
  8632. }
  8633. }
  8634. // To avoid creating an additional object, we just hang the .value
  8635. // and .done properties off the next function object itself. This
  8636. // also ensures that the minifier will not anonymize the function.
  8637. next.done = true;
  8638. return next;
  8639. };
  8640. };
  8641. function values(iterable) {
  8642. if (iterable) {
  8643. var iteratorMethod = iterable[iteratorSymbol];
  8644. if (iteratorMethod) {
  8645. return iteratorMethod.call(iterable);
  8646. }
  8647. if (typeof iterable.next === "function") {
  8648. return iterable;
  8649. }
  8650. if (!isNaN(iterable.length)) {
  8651. var i = -1, next = function next() {
  8652. while (++i < iterable.length) {
  8653. if (hasOwn.call(iterable, i)) {
  8654. next.value = iterable[i];
  8655. next.done = false;
  8656. return next;
  8657. }
  8658. }
  8659. next.value = undefined;
  8660. next.done = true;
  8661. return next;
  8662. };
  8663. return next.next = next;
  8664. }
  8665. }
  8666. // Return an iterator with no values.
  8667. return { next: doneResult };
  8668. }
  8669. runtime.values = values;
  8670. function doneResult() {
  8671. return { value: undefined, done: true };
  8672. }
  8673. Context.prototype = {
  8674. constructor: Context,
  8675. reset: function(skipTempReset) {
  8676. this.prev = 0;
  8677. this.next = 0;
  8678. // Resetting context._sent for legacy support of Babel's
  8679. // function.sent implementation.
  8680. this.sent = this._sent = undefined;
  8681. this.done = false;
  8682. this.delegate = null;
  8683. this.method = "next";
  8684. this.arg = undefined;
  8685. this.tryEntries.forEach(resetTryEntry);
  8686. if (!skipTempReset) {
  8687. for (var name in this) {
  8688. // Not sure about the optimal order of these conditions:
  8689. if (name.charAt(0) === "t" &&
  8690. hasOwn.call(this, name) &&
  8691. !isNaN(+name.slice(1))) {
  8692. this[name] = undefined;
  8693. }
  8694. }
  8695. }
  8696. },
  8697. stop: function() {
  8698. this.done = true;
  8699. var rootEntry = this.tryEntries[0];
  8700. var rootRecord = rootEntry.completion;
  8701. if (rootRecord.type === "throw") {
  8702. throw rootRecord.arg;
  8703. }
  8704. return this.rval;
  8705. },
  8706. dispatchException: function(exception) {
  8707. if (this.done) {
  8708. throw exception;
  8709. }
  8710. var context = this;
  8711. function handle(loc, caught) {
  8712. record.type = "throw";
  8713. record.arg = exception;
  8714. context.next = loc;
  8715. if (caught) {
  8716. // If the dispatched exception was caught by a catch block,
  8717. // then let that catch block handle the exception normally.
  8718. context.method = "next";
  8719. context.arg = undefined;
  8720. }
  8721. return !! caught;
  8722. }
  8723. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8724. var entry = this.tryEntries[i];
  8725. var record = entry.completion;
  8726. if (entry.tryLoc === "root") {
  8727. // Exception thrown outside of any try block that could handle
  8728. // it, so set the completion value of the entire function to
  8729. // throw the exception.
  8730. return handle("end");
  8731. }
  8732. if (entry.tryLoc <= this.prev) {
  8733. var hasCatch = hasOwn.call(entry, "catchLoc");
  8734. var hasFinally = hasOwn.call(entry, "finallyLoc");
  8735. if (hasCatch && hasFinally) {
  8736. if (this.prev < entry.catchLoc) {
  8737. return handle(entry.catchLoc, true);
  8738. } else if (this.prev < entry.finallyLoc) {
  8739. return handle(entry.finallyLoc);
  8740. }
  8741. } else if (hasCatch) {
  8742. if (this.prev < entry.catchLoc) {
  8743. return handle(entry.catchLoc, true);
  8744. }
  8745. } else if (hasFinally) {
  8746. if (this.prev < entry.finallyLoc) {
  8747. return handle(entry.finallyLoc);
  8748. }
  8749. } else {
  8750. throw new Error("try statement without catch or finally");
  8751. }
  8752. }
  8753. }
  8754. },
  8755. abrupt: function(type, arg) {
  8756. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8757. var entry = this.tryEntries[i];
  8758. if (entry.tryLoc <= this.prev &&
  8759. hasOwn.call(entry, "finallyLoc") &&
  8760. this.prev < entry.finallyLoc) {
  8761. var finallyEntry = entry;
  8762. break;
  8763. }
  8764. }
  8765. if (finallyEntry &&
  8766. (type === "break" ||
  8767. type === "continue") &&
  8768. finallyEntry.tryLoc <= arg &&
  8769. arg <= finallyEntry.finallyLoc) {
  8770. // Ignore the finally entry if control is not jumping to a
  8771. // location outside the try/catch block.
  8772. finallyEntry = null;
  8773. }
  8774. var record = finallyEntry ? finallyEntry.completion : {};
  8775. record.type = type;
  8776. record.arg = arg;
  8777. if (finallyEntry) {
  8778. this.method = "next";
  8779. this.next = finallyEntry.finallyLoc;
  8780. return ContinueSentinel;
  8781. }
  8782. return this.complete(record);
  8783. },
  8784. complete: function(record, afterLoc) {
  8785. if (record.type === "throw") {
  8786. throw record.arg;
  8787. }
  8788. if (record.type === "break" ||
  8789. record.type === "continue") {
  8790. this.next = record.arg;
  8791. } else if (record.type === "return") {
  8792. this.rval = this.arg = record.arg;
  8793. this.method = "return";
  8794. this.next = "end";
  8795. } else if (record.type === "normal" && afterLoc) {
  8796. this.next = afterLoc;
  8797. }
  8798. return ContinueSentinel;
  8799. },
  8800. finish: function(finallyLoc) {
  8801. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8802. var entry = this.tryEntries[i];
  8803. if (entry.finallyLoc === finallyLoc) {
  8804. this.complete(entry.completion, entry.afterLoc);
  8805. resetTryEntry(entry);
  8806. return ContinueSentinel;
  8807. }
  8808. }
  8809. },
  8810. "catch": function(tryLoc) {
  8811. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8812. var entry = this.tryEntries[i];
  8813. if (entry.tryLoc === tryLoc) {
  8814. var record = entry.completion;
  8815. if (record.type === "throw") {
  8816. var thrown = record.arg;
  8817. resetTryEntry(entry);
  8818. }
  8819. return thrown;
  8820. }
  8821. }
  8822. // The context.catch method must only be called with a location
  8823. // argument that corresponds to a known catch block.
  8824. throw new Error("illegal catch attempt");
  8825. },
  8826. delegateYield: function(iterable, resultName, nextLoc) {
  8827. this.delegate = {
  8828. iterator: values(iterable),
  8829. resultName: resultName,
  8830. nextLoc: nextLoc
  8831. };
  8832. if (this.method === "next") {
  8833. // Deliberately forget the last sent value so that we don't
  8834. // accidentally pass it on to the delegate.
  8835. this.arg = undefined;
  8836. }
  8837. return ContinueSentinel;
  8838. }
  8839. };
  8840. })(
  8841. // In sloppy mode, unbound `this` refers to the global object, fallback to
  8842. // Function constructor if we're in global strict mode. That is sadly a form
  8843. // of indirect eval which violates Content Security Policy.
  8844. (function() {
  8845. return this || (typeof self === "object" && self);
  8846. })() || Function("return this")()
  8847. );
  8848. /***/ }),
  8849. /***/ 23:
  8850. /*!***********************************************************************************!*\
  8851. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/timeFormat.js ***!
  8852. \***********************************************************************************/
  8853. /*! no static exports found */
  8854. /***/ (function(module, exports, __webpack_require__) {
  8855. "use strict";
  8856. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
  8857. // 所以这里做一个兼容polyfill的兼容处理
  8858. if (!String.prototype.padStart) {
  8859. // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
  8860. String.prototype.padStart = function (maxLength) {var fillString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' ';
  8861. if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError(
  8862. 'fillString must be String');
  8863. var str = this;
  8864. // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
  8865. if (str.length >= maxLength) return String(str);
  8866. var fillLength = maxLength - str.length,
  8867. times = Math.ceil(fillLength / fillString.length);
  8868. while (times >>= 1) {
  8869. fillString += fillString;
  8870. if (times === 1) {
  8871. fillString += fillString;
  8872. }
  8873. }
  8874. return fillString.slice(0, fillLength) + str;
  8875. };
  8876. }
  8877. // 其他更多是格式化有如下:
  8878. // yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合
  8879. function timeFormat() {var dateTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;var fmt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'yyyy-mm-dd';
  8880. // 如果为null,则格式化当前时间
  8881. if (!dateTime) dateTime = Number(new Date());
  8882. // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
  8883. if (dateTime.toString().length == 10) dateTime *= 1000;
  8884. var date = new Date(Number(dateTime));
  8885. var ret;
  8886. var opt = {
  8887. "y+": date.getFullYear().toString(), // 年
  8888. "m+": (date.getMonth() + 1).toString(), // 月
  8889. "d+": date.getDate().toString(), // 日
  8890. "h+": date.getHours().toString(), // 时
  8891. "M+": date.getMinutes().toString(), // 分
  8892. "s+": date.getSeconds().toString() // 秒
  8893. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  8894. };
  8895. for (var k in opt) {
  8896. ret = new RegExp("(" + k + ")").exec(fmt);
  8897. if (ret) {
  8898. fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"));
  8899. };
  8900. };
  8901. return fmt;
  8902. }var _default =
  8903. timeFormat;exports.default = _default;
  8904. /***/ }),
  8905. /***/ 24:
  8906. /*!*********************************************************************************!*\
  8907. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/timeFrom.js ***!
  8908. \*********************************************************************************/
  8909. /*! no static exports found */
  8910. /***/ (function(module, exports, __webpack_require__) {
  8911. "use strict";
  8912. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _timeFormat = _interopRequireDefault(__webpack_require__(/*! ../../libs/function/timeFormat.js */ 23));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  8913. /**
  8914. * 时间戳转为多久之前
  8915. * @param String timestamp 时间戳
  8916. * @param String | Boolean format 如果为时间格式字符串,超出一定时间范围,返回固定的时间格式;
  8917. * 如果为布尔值false,无论什么时间,都返回多久以前的格式
  8918. */
  8919. function timeFrom() {var dateTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;var format = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'yyyy-mm-dd';
  8920. // 如果为null,则格式化当前时间
  8921. if (!dateTime) dateTime = Number(new Date());
  8922. // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
  8923. if (dateTime.toString().length == 10) dateTime *= 1000;
  8924. var timestamp = +new Date(Number(dateTime));
  8925. var timer = (Number(new Date()) - timestamp) / 1000;
  8926. // 如果小于5分钟,则返回"刚刚",其他以此类推
  8927. var tips = '';
  8928. switch (true) {
  8929. case timer < 300:
  8930. tips = '刚刚';
  8931. break;
  8932. case timer >= 300 && timer < 3600:
  8933. tips = parseInt(timer / 60) + '分钟前';
  8934. break;
  8935. case timer >= 3600 && timer < 86400:
  8936. tips = parseInt(timer / 3600) + '小时前';
  8937. break;
  8938. case timer >= 86400 && timer < 2592000:
  8939. tips = parseInt(timer / 86400) + '天前';
  8940. break;
  8941. default:
  8942. // 如果format为false,则无论什么时间戳,都显示xx之前
  8943. if (format === false) {
  8944. if (timer >= 2592000 && timer < 365 * 86400) {
  8945. tips = parseInt(timer / (86400 * 30)) + '个月前';
  8946. } else {
  8947. tips = parseInt(timer / (86400 * 365)) + '年前';
  8948. }
  8949. } else {
  8950. tips = (0, _timeFormat.default)(timestamp, format);
  8951. }}
  8952. return tips;
  8953. }var _default =
  8954. timeFrom;exports.default = _default;
  8955. /***/ }),
  8956. /***/ 25:
  8957. /*!**************************************************************************************!*\
  8958. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/colorGradient.js ***!
  8959. \**************************************************************************************/
  8960. /*! no static exports found */
  8961. /***/ (function(module, exports, __webpack_require__) {
  8962. "use strict";
  8963. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  8964. * 求两个颜色之间的渐变值
  8965. * @param {string} startColor 开始的颜色
  8966. * @param {string} endColor 结束的颜色
  8967. * @param {number} step 颜色等分的份额
  8968. * */
  8969. function colorGradient() {var startColor = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'rgb(0, 0, 0)';var endColor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'rgb(255, 255, 255)';var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
  8970. var startRGB = hexToRgb(startColor, false); //转换为rgb数组模式
  8971. var startR = startRGB[0];
  8972. var startG = startRGB[1];
  8973. var startB = startRGB[2];
  8974. var endRGB = hexToRgb(endColor, false);
  8975. var endR = endRGB[0];
  8976. var endG = endRGB[1];
  8977. var endB = endRGB[2];
  8978. var sR = (endR - startR) / step; //总差值
  8979. var sG = (endG - startG) / step;
  8980. var sB = (endB - startB) / step;
  8981. var colorArr = [];
  8982. for (var i = 0; i < step; i++) {
  8983. //计算每一步的hex值
  8984. var hex = rgbToHex('rgb(' + Math.round(sR * i + startR) + ',' + Math.round(sG * i + startG) + ',' + Math.round(sB *
  8985. i + startB) + ')');
  8986. colorArr.push(hex);
  8987. }
  8988. return colorArr;
  8989. }
  8990. // 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
  8991. function hexToRgb(sColor) {var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  8992. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  8993. sColor = sColor.toLowerCase();
  8994. if (sColor && reg.test(sColor)) {
  8995. if (sColor.length === 4) {
  8996. var sColorNew = "#";
  8997. for (var i = 1; i < 4; i += 1) {
  8998. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  8999. }
  9000. sColor = sColorNew;
  9001. }
  9002. //处理六位的颜色值
  9003. var sColorChange = [];
  9004. for (var _i = 1; _i < 7; _i += 2) {
  9005. sColorChange.push(parseInt("0x" + sColor.slice(_i, _i + 2)));
  9006. }
  9007. if (!str) {
  9008. return sColorChange;
  9009. } else {
  9010. return "rgb(".concat(sColorChange[0], ",").concat(sColorChange[1], ",").concat(sColorChange[2], ")");
  9011. }
  9012. } else if (/^(rgb|RGB)/.test(sColor)) {
  9013. var arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  9014. return arr.map(function (val) {return Number(val);});
  9015. } else {
  9016. return sColor;
  9017. }
  9018. };
  9019. // 将rgb表示方式转换为hex表示方式
  9020. function rgbToHex(rgb) {
  9021. var _this = rgb;
  9022. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  9023. if (/^(rgb|RGB)/.test(_this)) {
  9024. var aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  9025. var strHex = "#";
  9026. for (var i = 0; i < aColor.length; i++) {
  9027. var hex = Number(aColor[i]).toString(16);
  9028. hex = String(hex).length == 1 ? 0 + '' + hex : hex; // 保证每个rgb的值为2位
  9029. if (hex === "0") {
  9030. hex += hex;
  9031. }
  9032. strHex += hex;
  9033. }
  9034. if (strHex.length !== 7) {
  9035. strHex = _this;
  9036. }
  9037. return strHex;
  9038. } else if (reg.test(_this)) {
  9039. var aNum = _this.replace(/#/, "").split("");
  9040. if (aNum.length === 6) {
  9041. return _this;
  9042. } else if (aNum.length === 3) {
  9043. var numHex = "#";
  9044. for (var _i2 = 0; _i2 < aNum.length; _i2 += 1) {
  9045. numHex += aNum[_i2] + aNum[_i2];
  9046. }
  9047. return numHex;
  9048. }
  9049. } else {
  9050. return _this;
  9051. }
  9052. }
  9053. /**
  9054. * JS颜色十六进制转换为rgb或rgba,返回的格式为 rgba(255,255,255,0.5)字符串
  9055. * sHex为传入的十六进制的色值
  9056. * alpha为rgba的透明度
  9057. */
  9058. function colorToRgba(color) {var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.3;
  9059. color = rgbToHex(color);
  9060. // 十六进制颜色值的正则表达式
  9061. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  9062. /* 16进制颜色转为RGB格式 */
  9063. var sColor = color.toLowerCase();
  9064. if (sColor && reg.test(sColor)) {
  9065. if (sColor.length === 4) {
  9066. var sColorNew = '#';
  9067. for (var i = 1; i < 4; i += 1) {
  9068. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  9069. }
  9070. sColor = sColorNew;
  9071. }
  9072. // 处理六位的颜色值
  9073. var sColorChange = [];
  9074. for (var _i3 = 1; _i3 < 7; _i3 += 2) {
  9075. sColorChange.push(parseInt('0x' + sColor.slice(_i3, _i3 + 2)));
  9076. }
  9077. // return sColorChange.join(',')
  9078. return 'rgba(' + sColorChange.join(',') + ',' + alpha + ')';
  9079. } else
  9080. {
  9081. return sColor;
  9082. }
  9083. }var _default =
  9084. {
  9085. colorGradient: colorGradient,
  9086. hexToRgb: hexToRgb,
  9087. rgbToHex: rgbToHex,
  9088. colorToRgba: colorToRgba };exports.default = _default;
  9089. /***/ }),
  9090. /***/ 26:
  9091. /*!*****************************************************************************!*\
  9092. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/guid.js ***!
  9093. \*****************************************************************************/
  9094. /*! no static exports found */
  9095. /***/ (function(module, exports, __webpack_require__) {
  9096. "use strict";
  9097. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  9098. * 本算法来源于简书开源代码,详见:https://www.jianshu.com/p/fdbf293d0a85
  9099. * 全局唯一标识符(uuid,Globally Unique Identifier),也称作 uuid(Universally Unique IDentifier)
  9100. * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题
  9101. * 最可能的情况是左滑删除item或者对某条信息流"不喜欢"并去掉它的时候,会导致组件内的数据可能出现错乱
  9102. * v-for的时候,推荐使用后端返回的id而不是循环的index
  9103. * @param {Number} len uuid的长度
  9104. * @param {Boolean} firstU 将返回的首字母置为"u"
  9105. * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
  9106. */
  9107. function guid() {var len = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 32;var firstU = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;var radix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
  9108. var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  9109. var uuid = [];
  9110. radix = radix || chars.length;
  9111. if (len) {
  9112. // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
  9113. for (var i = 0; i < len; i++) {uuid[i] = chars[0 | Math.random() * radix];}
  9114. } else {
  9115. var r;
  9116. // rfc4122标准要求返回的uuid中,某些位为固定的字符
  9117. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  9118. uuid[14] = '4';
  9119. for (var _i = 0; _i < 36; _i++) {
  9120. if (!uuid[_i]) {
  9121. r = 0 | Math.random() * 16;
  9122. uuid[_i] = chars[_i == 19 ? r & 0x3 | 0x8 : r];
  9123. }
  9124. }
  9125. }
  9126. // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
  9127. if (firstU) {
  9128. uuid.shift();
  9129. return 'u' + uuid.join('');
  9130. } else {
  9131. return uuid.join('');
  9132. }
  9133. }var _default =
  9134. guid;exports.default = _default;
  9135. /***/ }),
  9136. /***/ 27:
  9137. /*!******************************************************************************!*\
  9138. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/color.js ***!
  9139. \******************************************************************************/
  9140. /*! no static exports found */
  9141. /***/ (function(module, exports, __webpack_require__) {
  9142. "use strict";
  9143. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 为了让用户能够自定义主题,会逐步弃用此文件,各颜色通过css提供
  9144. // 为了给某些特殊场景使用和向后兼容,无需删除此文件(2020-06-20)
  9145. var color = {
  9146. primary: "#2979ff",
  9147. primaryDark: "#2b85e4",
  9148. primaryDisabled: "#a0cfff",
  9149. primaryLight: "#ecf5ff",
  9150. bgColor: "#f3f4f6",
  9151. info: "#909399",
  9152. infoDark: "#82848a",
  9153. infoDisabled: "#c8c9cc",
  9154. infoLight: "#f4f4f5",
  9155. warning: "#ff9900",
  9156. warningDark: "#f29100",
  9157. warningDisabled: "#fcbd71",
  9158. warningLight: "#fdf6ec",
  9159. error: "#fa3534",
  9160. errorDark: "#dd6161",
  9161. errorDisabled: "#fab6b6",
  9162. errorLight: "#fef0f0",
  9163. success: "#19be6b",
  9164. successDark: "#18b566",
  9165. successDisabled: "#71d5a1",
  9166. successLight: "#dbf1e1",
  9167. mainColor: "#303133",
  9168. contentColor: "#606266",
  9169. tipsColor: "#909399",
  9170. lightColor: "#c0c4cc",
  9171. borderColor: "#e4e7ed" };var _default =
  9172. color;exports.default = _default;
  9173. /***/ }),
  9174. /***/ 28:
  9175. /*!**********************************************************************************!*\
  9176. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/type2icon.js ***!
  9177. \**********************************************************************************/
  9178. /*! no static exports found */
  9179. /***/ (function(module, exports, __webpack_require__) {
  9180. "use strict";
  9181. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  9182. * 根据主题type值,获取对应的图标
  9183. * @param String type 主题名称,primary|info|error|warning|success
  9184. * @param String fill 是否使用fill填充实体的图标
  9185. */
  9186. function type2icon() {var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'success';var fill = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  9187. // 如果非预置值,默认为success
  9188. if (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success';
  9189. var iconName = '';
  9190. // 目前(2019-12-12),info和primary使用同一个图标
  9191. switch (type) {
  9192. case 'primary':
  9193. iconName = 'info-circle';
  9194. break;
  9195. case 'info':
  9196. iconName = 'info-circle';
  9197. break;
  9198. case 'error':
  9199. iconName = 'close-circle';
  9200. break;
  9201. case 'warning':
  9202. iconName = 'error-circle';
  9203. break;
  9204. case 'success':
  9205. iconName = 'checkmark-circle';
  9206. break;
  9207. default:
  9208. iconName = 'checkmark-circle';}
  9209. // 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的
  9210. if (fill) iconName += '-fill';
  9211. return iconName;
  9212. }var _default =
  9213. type2icon;exports.default = _default;
  9214. /***/ }),
  9215. /***/ 29:
  9216. /*!************************************************************************************!*\
  9217. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/randomArray.js ***!
  9218. \************************************************************************************/
  9219. /*! no static exports found */
  9220. /***/ (function(module, exports, __webpack_require__) {
  9221. "use strict";
  9222. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 打乱数组
  9223. function randomArray() {var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  9224. // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0
  9225. return array.sort(function () {return Math.random() - 0.5;});
  9226. }var _default =
  9227. randomArray;exports.default = _default;
  9228. /***/ }),
  9229. /***/ 3:
  9230. /*!******************************************************************************************!*\
  9231. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
  9232. \******************************************************************************************/
  9233. /*! exports provided: default */
  9234. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  9235. "use strict";
  9236. __webpack_require__.r(__webpack_exports__);
  9237. /* WEBPACK VAR INJECTION */(function(global) {/*!
  9238. * Vue.js v2.6.11
  9239. * (c) 2014-2021 Evan You
  9240. * Released under the MIT License.
  9241. */
  9242. /* */
  9243. var emptyObject = Object.freeze({});
  9244. // These helpers produce better VM code in JS engines due to their
  9245. // explicitness and function inlining.
  9246. function isUndef (v) {
  9247. return v === undefined || v === null
  9248. }
  9249. function isDef (v) {
  9250. return v !== undefined && v !== null
  9251. }
  9252. function isTrue (v) {
  9253. return v === true
  9254. }
  9255. function isFalse (v) {
  9256. return v === false
  9257. }
  9258. /**
  9259. * Check if value is primitive.
  9260. */
  9261. function isPrimitive (value) {
  9262. return (
  9263. typeof value === 'string' ||
  9264. typeof value === 'number' ||
  9265. // $flow-disable-line
  9266. typeof value === 'symbol' ||
  9267. typeof value === 'boolean'
  9268. )
  9269. }
  9270. /**
  9271. * Quick object check - this is primarily used to tell
  9272. * Objects from primitive values when we know the value
  9273. * is a JSON-compliant type.
  9274. */
  9275. function isObject (obj) {
  9276. return obj !== null && typeof obj === 'object'
  9277. }
  9278. /**
  9279. * Get the raw type string of a value, e.g., [object Object].
  9280. */
  9281. var _toString = Object.prototype.toString;
  9282. function toRawType (value) {
  9283. return _toString.call(value).slice(8, -1)
  9284. }
  9285. /**
  9286. * Strict object type check. Only returns true
  9287. * for plain JavaScript objects.
  9288. */
  9289. function isPlainObject (obj) {
  9290. return _toString.call(obj) === '[object Object]'
  9291. }
  9292. function isRegExp (v) {
  9293. return _toString.call(v) === '[object RegExp]'
  9294. }
  9295. /**
  9296. * Check if val is a valid array index.
  9297. */
  9298. function isValidArrayIndex (val) {
  9299. var n = parseFloat(String(val));
  9300. return n >= 0 && Math.floor(n) === n && isFinite(val)
  9301. }
  9302. function isPromise (val) {
  9303. return (
  9304. isDef(val) &&
  9305. typeof val.then === 'function' &&
  9306. typeof val.catch === 'function'
  9307. )
  9308. }
  9309. /**
  9310. * Convert a value to a string that is actually rendered.
  9311. */
  9312. function toString (val) {
  9313. return val == null
  9314. ? ''
  9315. : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
  9316. ? JSON.stringify(val, null, 2)
  9317. : String(val)
  9318. }
  9319. /**
  9320. * Convert an input value to a number for persistence.
  9321. * If the conversion fails, return original string.
  9322. */
  9323. function toNumber (val) {
  9324. var n = parseFloat(val);
  9325. return isNaN(n) ? val : n
  9326. }
  9327. /**
  9328. * Make a map and return a function for checking if a key
  9329. * is in that map.
  9330. */
  9331. function makeMap (
  9332. str,
  9333. expectsLowerCase
  9334. ) {
  9335. var map = Object.create(null);
  9336. var list = str.split(',');
  9337. for (var i = 0; i < list.length; i++) {
  9338. map[list[i]] = true;
  9339. }
  9340. return expectsLowerCase
  9341. ? function (val) { return map[val.toLowerCase()]; }
  9342. : function (val) { return map[val]; }
  9343. }
  9344. /**
  9345. * Check if a tag is a built-in tag.
  9346. */
  9347. var isBuiltInTag = makeMap('slot,component', true);
  9348. /**
  9349. * Check if an attribute is a reserved attribute.
  9350. */
  9351. var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  9352. /**
  9353. * Remove an item from an array.
  9354. */
  9355. function remove (arr, item) {
  9356. if (arr.length) {
  9357. var index = arr.indexOf(item);
  9358. if (index > -1) {
  9359. return arr.splice(index, 1)
  9360. }
  9361. }
  9362. }
  9363. /**
  9364. * Check whether an object has the property.
  9365. */
  9366. var hasOwnProperty = Object.prototype.hasOwnProperty;
  9367. function hasOwn (obj, key) {
  9368. return hasOwnProperty.call(obj, key)
  9369. }
  9370. /**
  9371. * Create a cached version of a pure function.
  9372. */
  9373. function cached (fn) {
  9374. var cache = Object.create(null);
  9375. return (function cachedFn (str) {
  9376. var hit = cache[str];
  9377. return hit || (cache[str] = fn(str))
  9378. })
  9379. }
  9380. /**
  9381. * Camelize a hyphen-delimited string.
  9382. */
  9383. var camelizeRE = /-(\w)/g;
  9384. var camelize = cached(function (str) {
  9385. return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  9386. });
  9387. /**
  9388. * Capitalize a string.
  9389. */
  9390. var capitalize = cached(function (str) {
  9391. return str.charAt(0).toUpperCase() + str.slice(1)
  9392. });
  9393. /**
  9394. * Hyphenate a camelCase string.
  9395. */
  9396. var hyphenateRE = /\B([A-Z])/g;
  9397. var hyphenate = cached(function (str) {
  9398. return str.replace(hyphenateRE, '-$1').toLowerCase()
  9399. });
  9400. /**
  9401. * Simple bind polyfill for environments that do not support it,
  9402. * e.g., PhantomJS 1.x. Technically, we don't need this anymore
  9403. * since native bind is now performant enough in most browsers.
  9404. * But removing it would mean breaking code that was able to run in
  9405. * PhantomJS 1.x, so this must be kept for backward compatibility.
  9406. */
  9407. /* istanbul ignore next */
  9408. function polyfillBind (fn, ctx) {
  9409. function boundFn (a) {
  9410. var l = arguments.length;
  9411. return l
  9412. ? l > 1
  9413. ? fn.apply(ctx, arguments)
  9414. : fn.call(ctx, a)
  9415. : fn.call(ctx)
  9416. }
  9417. boundFn._length = fn.length;
  9418. return boundFn
  9419. }
  9420. function nativeBind (fn, ctx) {
  9421. return fn.bind(ctx)
  9422. }
  9423. var bind = Function.prototype.bind
  9424. ? nativeBind
  9425. : polyfillBind;
  9426. /**
  9427. * Convert an Array-like object to a real Array.
  9428. */
  9429. function toArray (list, start) {
  9430. start = start || 0;
  9431. var i = list.length - start;
  9432. var ret = new Array(i);
  9433. while (i--) {
  9434. ret[i] = list[i + start];
  9435. }
  9436. return ret
  9437. }
  9438. /**
  9439. * Mix properties into target object.
  9440. */
  9441. function extend (to, _from) {
  9442. for (var key in _from) {
  9443. to[key] = _from[key];
  9444. }
  9445. return to
  9446. }
  9447. /**
  9448. * Merge an Array of Objects into a single Object.
  9449. */
  9450. function toObject (arr) {
  9451. var res = {};
  9452. for (var i = 0; i < arr.length; i++) {
  9453. if (arr[i]) {
  9454. extend(res, arr[i]);
  9455. }
  9456. }
  9457. return res
  9458. }
  9459. /* eslint-disable no-unused-vars */
  9460. /**
  9461. * Perform no operation.
  9462. * Stubbing args to make Flow happy without leaving useless transpiled code
  9463. * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
  9464. */
  9465. function noop (a, b, c) {}
  9466. /**
  9467. * Always return false.
  9468. */
  9469. var no = function (a, b, c) { return false; };
  9470. /* eslint-enable no-unused-vars */
  9471. /**
  9472. * Return the same value.
  9473. */
  9474. var identity = function (_) { return _; };
  9475. /**
  9476. * Check if two values are loosely equal - that is,
  9477. * if they are plain objects, do they have the same shape?
  9478. */
  9479. function looseEqual (a, b) {
  9480. if (a === b) { return true }
  9481. var isObjectA = isObject(a);
  9482. var isObjectB = isObject(b);
  9483. if (isObjectA && isObjectB) {
  9484. try {
  9485. var isArrayA = Array.isArray(a);
  9486. var isArrayB = Array.isArray(b);
  9487. if (isArrayA && isArrayB) {
  9488. return a.length === b.length && a.every(function (e, i) {
  9489. return looseEqual(e, b[i])
  9490. })
  9491. } else if (a instanceof Date && b instanceof Date) {
  9492. return a.getTime() === b.getTime()
  9493. } else if (!isArrayA && !isArrayB) {
  9494. var keysA = Object.keys(a);
  9495. var keysB = Object.keys(b);
  9496. return keysA.length === keysB.length && keysA.every(function (key) {
  9497. return looseEqual(a[key], b[key])
  9498. })
  9499. } else {
  9500. /* istanbul ignore next */
  9501. return false
  9502. }
  9503. } catch (e) {
  9504. /* istanbul ignore next */
  9505. return false
  9506. }
  9507. } else if (!isObjectA && !isObjectB) {
  9508. return String(a) === String(b)
  9509. } else {
  9510. return false
  9511. }
  9512. }
  9513. /**
  9514. * Return the first index at which a loosely equal value can be
  9515. * found in the array (if value is a plain object, the array must
  9516. * contain an object of the same shape), or -1 if it is not present.
  9517. */
  9518. function looseIndexOf (arr, val) {
  9519. for (var i = 0; i < arr.length; i++) {
  9520. if (looseEqual(arr[i], val)) { return i }
  9521. }
  9522. return -1
  9523. }
  9524. /**
  9525. * Ensure a function is called only once.
  9526. */
  9527. function once (fn) {
  9528. var called = false;
  9529. return function () {
  9530. if (!called) {
  9531. called = true;
  9532. fn.apply(this, arguments);
  9533. }
  9534. }
  9535. }
  9536. var ASSET_TYPES = [
  9537. 'component',
  9538. 'directive',
  9539. 'filter'
  9540. ];
  9541. var LIFECYCLE_HOOKS = [
  9542. 'beforeCreate',
  9543. 'created',
  9544. 'beforeMount',
  9545. 'mounted',
  9546. 'beforeUpdate',
  9547. 'updated',
  9548. 'beforeDestroy',
  9549. 'destroyed',
  9550. 'activated',
  9551. 'deactivated',
  9552. 'errorCaptured',
  9553. 'serverPrefetch'
  9554. ];
  9555. /* */
  9556. var config = ({
  9557. /**
  9558. * Option merge strategies (used in core/util/options)
  9559. */
  9560. // $flow-disable-line
  9561. optionMergeStrategies: Object.create(null),
  9562. /**
  9563. * Whether to suppress warnings.
  9564. */
  9565. silent: false,
  9566. /**
  9567. * Show production mode tip message on boot?
  9568. */
  9569. productionTip: "development" !== 'production',
  9570. /**
  9571. * Whether to enable devtools
  9572. */
  9573. devtools: "development" !== 'production',
  9574. /**
  9575. * Whether to record perf
  9576. */
  9577. performance: false,
  9578. /**
  9579. * Error handler for watcher errors
  9580. */
  9581. errorHandler: null,
  9582. /**
  9583. * Warn handler for watcher warns
  9584. */
  9585. warnHandler: null,
  9586. /**
  9587. * Ignore certain custom elements
  9588. */
  9589. ignoredElements: [],
  9590. /**
  9591. * Custom user key aliases for v-on
  9592. */
  9593. // $flow-disable-line
  9594. keyCodes: Object.create(null),
  9595. /**
  9596. * Check if a tag is reserved so that it cannot be registered as a
  9597. * component. This is platform-dependent and may be overwritten.
  9598. */
  9599. isReservedTag: no,
  9600. /**
  9601. * Check if an attribute is reserved so that it cannot be used as a component
  9602. * prop. This is platform-dependent and may be overwritten.
  9603. */
  9604. isReservedAttr: no,
  9605. /**
  9606. * Check if a tag is an unknown element.
  9607. * Platform-dependent.
  9608. */
  9609. isUnknownElement: no,
  9610. /**
  9611. * Get the namespace of an element
  9612. */
  9613. getTagNamespace: noop,
  9614. /**
  9615. * Parse the real tag name for the specific platform.
  9616. */
  9617. parsePlatformTagName: identity,
  9618. /**
  9619. * Check if an attribute must be bound using property, e.g. value
  9620. * Platform-dependent.
  9621. */
  9622. mustUseProp: no,
  9623. /**
  9624. * Perform updates asynchronously. Intended to be used by Vue Test Utils
  9625. * This will significantly reduce performance if set to false.
  9626. */
  9627. async: true,
  9628. /**
  9629. * Exposed for legacy reasons
  9630. */
  9631. _lifecycleHooks: LIFECYCLE_HOOKS
  9632. });
  9633. /* */
  9634. /**
  9635. * unicode letters used for parsing html tags, component names and property paths.
  9636. * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
  9637. * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
  9638. */
  9639. var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
  9640. /**
  9641. * Check if a string starts with $ or _
  9642. */
  9643. function isReserved (str) {
  9644. var c = (str + '').charCodeAt(0);
  9645. return c === 0x24 || c === 0x5F
  9646. }
  9647. /**
  9648. * Define a property.
  9649. */
  9650. function def (obj, key, val, enumerable) {
  9651. Object.defineProperty(obj, key, {
  9652. value: val,
  9653. enumerable: !!enumerable,
  9654. writable: true,
  9655. configurable: true
  9656. });
  9657. }
  9658. /**
  9659. * Parse simple path.
  9660. */
  9661. var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
  9662. function parsePath (path) {
  9663. if (bailRE.test(path)) {
  9664. return
  9665. }
  9666. var segments = path.split('.');
  9667. return function (obj) {
  9668. for (var i = 0; i < segments.length; i++) {
  9669. if (!obj) { return }
  9670. obj = obj[segments[i]];
  9671. }
  9672. return obj
  9673. }
  9674. }
  9675. /* */
  9676. // can we use __proto__?
  9677. var hasProto = '__proto__' in {};
  9678. // Browser environment sniffing
  9679. var inBrowser = typeof window !== 'undefined';
  9680. var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
  9681. var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
  9682. var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  9683. var isIE = UA && /msie|trident/.test(UA);
  9684. var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  9685. var isEdge = UA && UA.indexOf('edge/') > 0;
  9686. var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
  9687. var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
  9688. var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
  9689. var isPhantomJS = UA && /phantomjs/.test(UA);
  9690. var isFF = UA && UA.match(/firefox\/(\d+)/);
  9691. // Firefox has a "watch" function on Object.prototype...
  9692. var nativeWatch = ({}).watch;
  9693. if (inBrowser) {
  9694. try {
  9695. var opts = {};
  9696. Object.defineProperty(opts, 'passive', ({
  9697. get: function get () {
  9698. }
  9699. })); // https://github.com/facebook/flow/issues/285
  9700. window.addEventListener('test-passive', null, opts);
  9701. } catch (e) {}
  9702. }
  9703. // this needs to be lazy-evaled because vue may be required before
  9704. // vue-server-renderer can set VUE_ENV
  9705. var _isServer;
  9706. var isServerRendering = function () {
  9707. if (_isServer === undefined) {
  9708. /* istanbul ignore if */
  9709. if (!inBrowser && !inWeex && typeof global !== 'undefined') {
  9710. // detect presence of vue-server-renderer and avoid
  9711. // Webpack shimming the process
  9712. _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
  9713. } else {
  9714. _isServer = false;
  9715. }
  9716. }
  9717. return _isServer
  9718. };
  9719. // detect devtools
  9720. var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  9721. /* istanbul ignore next */
  9722. function isNative (Ctor) {
  9723. return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
  9724. }
  9725. var hasSymbol =
  9726. typeof Symbol !== 'undefined' && isNative(Symbol) &&
  9727. typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
  9728. var _Set;
  9729. /* istanbul ignore if */ // $flow-disable-line
  9730. if (typeof Set !== 'undefined' && isNative(Set)) {
  9731. // use native Set when available.
  9732. _Set = Set;
  9733. } else {
  9734. // a non-standard Set polyfill that only works with primitive keys.
  9735. _Set = /*@__PURE__*/(function () {
  9736. function Set () {
  9737. this.set = Object.create(null);
  9738. }
  9739. Set.prototype.has = function has (key) {
  9740. return this.set[key] === true
  9741. };
  9742. Set.prototype.add = function add (key) {
  9743. this.set[key] = true;
  9744. };
  9745. Set.prototype.clear = function clear () {
  9746. this.set = Object.create(null);
  9747. };
  9748. return Set;
  9749. }());
  9750. }
  9751. /* */
  9752. var warn = noop;
  9753. var tip = noop;
  9754. var generateComponentTrace = (noop); // work around flow check
  9755. var formatComponentName = (noop);
  9756. if (true) {
  9757. var hasConsole = typeof console !== 'undefined';
  9758. var classifyRE = /(?:^|[-_])(\w)/g;
  9759. var classify = function (str) { return str
  9760. .replace(classifyRE, function (c) { return c.toUpperCase(); })
  9761. .replace(/[-_]/g, ''); };
  9762. warn = function (msg, vm) {
  9763. var trace = vm ? generateComponentTrace(vm) : '';
  9764. if (config.warnHandler) {
  9765. config.warnHandler.call(null, msg, vm, trace);
  9766. } else if (hasConsole && (!config.silent)) {
  9767. console.error(("[Vue warn]: " + msg + trace));
  9768. }
  9769. };
  9770. tip = function (msg, vm) {
  9771. if (hasConsole && (!config.silent)) {
  9772. console.warn("[Vue tip]: " + msg + (
  9773. vm ? generateComponentTrace(vm) : ''
  9774. ));
  9775. }
  9776. };
  9777. formatComponentName = function (vm, includeFile) {
  9778. if (vm.$root === vm) {
  9779. if (vm.$options && vm.$options.__file) { // fixed by xxxxxx
  9780. return ('') + vm.$options.__file
  9781. }
  9782. return '<Root>'
  9783. }
  9784. var options = typeof vm === 'function' && vm.cid != null
  9785. ? vm.options
  9786. : vm._isVue
  9787. ? vm.$options || vm.constructor.options
  9788. : vm;
  9789. var name = options.name || options._componentTag;
  9790. var file = options.__file;
  9791. if (!name && file) {
  9792. var match = file.match(/([^/\\]+)\.vue$/);
  9793. name = match && match[1];
  9794. }
  9795. return (
  9796. (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
  9797. (file && includeFile !== false ? (" at " + file) : '')
  9798. )
  9799. };
  9800. var repeat = function (str, n) {
  9801. var res = '';
  9802. while (n) {
  9803. if (n % 2 === 1) { res += str; }
  9804. if (n > 1) { str += str; }
  9805. n >>= 1;
  9806. }
  9807. return res
  9808. };
  9809. generateComponentTrace = function (vm) {
  9810. if (vm._isVue && vm.$parent) {
  9811. var tree = [];
  9812. var currentRecursiveSequence = 0;
  9813. while (vm && vm.$options.name !== 'PageBody') {
  9814. if (tree.length > 0) {
  9815. var last = tree[tree.length - 1];
  9816. if (last.constructor === vm.constructor) {
  9817. currentRecursiveSequence++;
  9818. vm = vm.$parent;
  9819. continue
  9820. } else if (currentRecursiveSequence > 0) {
  9821. tree[tree.length - 1] = [last, currentRecursiveSequence];
  9822. currentRecursiveSequence = 0;
  9823. }
  9824. }
  9825. !vm.$options.isReserved && tree.push(vm);
  9826. vm = vm.$parent;
  9827. }
  9828. return '\n\nfound in\n\n' + tree
  9829. .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
  9830. ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
  9831. : formatComponentName(vm))); })
  9832. .join('\n')
  9833. } else {
  9834. return ("\n\n(found in " + (formatComponentName(vm)) + ")")
  9835. }
  9836. };
  9837. }
  9838. /* */
  9839. var uid = 0;
  9840. /**
  9841. * A dep is an observable that can have multiple
  9842. * directives subscribing to it.
  9843. */
  9844. var Dep = function Dep () {
  9845. this.id = uid++;
  9846. this.subs = [];
  9847. };
  9848. Dep.prototype.addSub = function addSub (sub) {
  9849. this.subs.push(sub);
  9850. };
  9851. Dep.prototype.removeSub = function removeSub (sub) {
  9852. remove(this.subs, sub);
  9853. };
  9854. Dep.prototype.depend = function depend () {
  9855. if (Dep.SharedObject.target) {
  9856. Dep.SharedObject.target.addDep(this);
  9857. }
  9858. };
  9859. Dep.prototype.notify = function notify () {
  9860. // stabilize the subscriber list first
  9861. var subs = this.subs.slice();
  9862. if ( true && !config.async) {
  9863. // subs aren't sorted in scheduler if not running async
  9864. // we need to sort them now to make sure they fire in correct
  9865. // order
  9866. subs.sort(function (a, b) { return a.id - b.id; });
  9867. }
  9868. for (var i = 0, l = subs.length; i < l; i++) {
  9869. subs[i].update();
  9870. }
  9871. };
  9872. // The current target watcher being evaluated.
  9873. // This is globally unique because only one watcher
  9874. // can be evaluated at a time.
  9875. // fixed by xxxxxx (nvue shared vuex)
  9876. /* eslint-disable no-undef */
  9877. Dep.SharedObject = {};
  9878. Dep.SharedObject.target = null;
  9879. Dep.SharedObject.targetStack = [];
  9880. function pushTarget (target) {
  9881. Dep.SharedObject.targetStack.push(target);
  9882. Dep.SharedObject.target = target;
  9883. Dep.target = target;
  9884. }
  9885. function popTarget () {
  9886. Dep.SharedObject.targetStack.pop();
  9887. Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];
  9888. Dep.target = Dep.SharedObject.target;
  9889. }
  9890. /* */
  9891. var VNode = function VNode (
  9892. tag,
  9893. data,
  9894. children,
  9895. text,
  9896. elm,
  9897. context,
  9898. componentOptions,
  9899. asyncFactory
  9900. ) {
  9901. this.tag = tag;
  9902. this.data = data;
  9903. this.children = children;
  9904. this.text = text;
  9905. this.elm = elm;
  9906. this.ns = undefined;
  9907. this.context = context;
  9908. this.fnContext = undefined;
  9909. this.fnOptions = undefined;
  9910. this.fnScopeId = undefined;
  9911. this.key = data && data.key;
  9912. this.componentOptions = componentOptions;
  9913. this.componentInstance = undefined;
  9914. this.parent = undefined;
  9915. this.raw = false;
  9916. this.isStatic = false;
  9917. this.isRootInsert = true;
  9918. this.isComment = false;
  9919. this.isCloned = false;
  9920. this.isOnce = false;
  9921. this.asyncFactory = asyncFactory;
  9922. this.asyncMeta = undefined;
  9923. this.isAsyncPlaceholder = false;
  9924. };
  9925. var prototypeAccessors = { child: { configurable: true } };
  9926. // DEPRECATED: alias for componentInstance for backwards compat.
  9927. /* istanbul ignore next */
  9928. prototypeAccessors.child.get = function () {
  9929. return this.componentInstance
  9930. };
  9931. Object.defineProperties( VNode.prototype, prototypeAccessors );
  9932. var createEmptyVNode = function (text) {
  9933. if ( text === void 0 ) text = '';
  9934. var node = new VNode();
  9935. node.text = text;
  9936. node.isComment = true;
  9937. return node
  9938. };
  9939. function createTextVNode (val) {
  9940. return new VNode(undefined, undefined, undefined, String(val))
  9941. }
  9942. // optimized shallow clone
  9943. // used for static nodes and slot nodes because they may be reused across
  9944. // multiple renders, cloning them avoids errors when DOM manipulations rely
  9945. // on their elm reference.
  9946. function cloneVNode (vnode) {
  9947. var cloned = new VNode(
  9948. vnode.tag,
  9949. vnode.data,
  9950. // #7975
  9951. // clone children array to avoid mutating original in case of cloning
  9952. // a child.
  9953. vnode.children && vnode.children.slice(),
  9954. vnode.text,
  9955. vnode.elm,
  9956. vnode.context,
  9957. vnode.componentOptions,
  9958. vnode.asyncFactory
  9959. );
  9960. cloned.ns = vnode.ns;
  9961. cloned.isStatic = vnode.isStatic;
  9962. cloned.key = vnode.key;
  9963. cloned.isComment = vnode.isComment;
  9964. cloned.fnContext = vnode.fnContext;
  9965. cloned.fnOptions = vnode.fnOptions;
  9966. cloned.fnScopeId = vnode.fnScopeId;
  9967. cloned.asyncMeta = vnode.asyncMeta;
  9968. cloned.isCloned = true;
  9969. return cloned
  9970. }
  9971. /*
  9972. * not type checking this file because flow doesn't play well with
  9973. * dynamically accessing methods on Array prototype
  9974. */
  9975. var arrayProto = Array.prototype;
  9976. var arrayMethods = Object.create(arrayProto);
  9977. var methodsToPatch = [
  9978. 'push',
  9979. 'pop',
  9980. 'shift',
  9981. 'unshift',
  9982. 'splice',
  9983. 'sort',
  9984. 'reverse'
  9985. ];
  9986. /**
  9987. * Intercept mutating methods and emit events
  9988. */
  9989. methodsToPatch.forEach(function (method) {
  9990. // cache original method
  9991. var original = arrayProto[method];
  9992. def(arrayMethods, method, function mutator () {
  9993. var args = [], len = arguments.length;
  9994. while ( len-- ) args[ len ] = arguments[ len ];
  9995. var result = original.apply(this, args);
  9996. var ob = this.__ob__;
  9997. var inserted;
  9998. switch (method) {
  9999. case 'push':
  10000. case 'unshift':
  10001. inserted = args;
  10002. break
  10003. case 'splice':
  10004. inserted = args.slice(2);
  10005. break
  10006. }
  10007. if (inserted) { ob.observeArray(inserted); }
  10008. // notify change
  10009. ob.dep.notify();
  10010. return result
  10011. });
  10012. });
  10013. /* */
  10014. var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  10015. /**
  10016. * In some cases we may want to disable observation inside a component's
  10017. * update computation.
  10018. */
  10019. var shouldObserve = true;
  10020. function toggleObserving (value) {
  10021. shouldObserve = value;
  10022. }
  10023. /**
  10024. * Observer class that is attached to each observed
  10025. * object. Once attached, the observer converts the target
  10026. * object's property keys into getter/setters that
  10027. * collect dependencies and dispatch updates.
  10028. */
  10029. var Observer = function Observer (value) {
  10030. this.value = value;
  10031. this.dep = new Dep();
  10032. this.vmCount = 0;
  10033. def(value, '__ob__', this);
  10034. if (Array.isArray(value)) {
  10035. if (hasProto) {
  10036. {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑
  10037. if(value.push !== value.__proto__.push){
  10038. copyAugment(value, arrayMethods, arrayKeys);
  10039. } else {
  10040. protoAugment(value, arrayMethods);
  10041. }
  10042. }
  10043. } else {
  10044. copyAugment(value, arrayMethods, arrayKeys);
  10045. }
  10046. this.observeArray(value);
  10047. } else {
  10048. this.walk(value);
  10049. }
  10050. };
  10051. /**
  10052. * Walk through all properties and convert them into
  10053. * getter/setters. This method should only be called when
  10054. * value type is Object.
  10055. */
  10056. Observer.prototype.walk = function walk (obj) {
  10057. var keys = Object.keys(obj);
  10058. for (var i = 0; i < keys.length; i++) {
  10059. defineReactive$$1(obj, keys[i]);
  10060. }
  10061. };
  10062. /**
  10063. * Observe a list of Array items.
  10064. */
  10065. Observer.prototype.observeArray = function observeArray (items) {
  10066. for (var i = 0, l = items.length; i < l; i++) {
  10067. observe(items[i]);
  10068. }
  10069. };
  10070. // helpers
  10071. /**
  10072. * Augment a target Object or Array by intercepting
  10073. * the prototype chain using __proto__
  10074. */
  10075. function protoAugment (target, src) {
  10076. /* eslint-disable no-proto */
  10077. target.__proto__ = src;
  10078. /* eslint-enable no-proto */
  10079. }
  10080. /**
  10081. * Augment a target Object or Array by defining
  10082. * hidden properties.
  10083. */
  10084. /* istanbul ignore next */
  10085. function copyAugment (target, src, keys) {
  10086. for (var i = 0, l = keys.length; i < l; i++) {
  10087. var key = keys[i];
  10088. def(target, key, src[key]);
  10089. }
  10090. }
  10091. /**
  10092. * Attempt to create an observer instance for a value,
  10093. * returns the new observer if successfully observed,
  10094. * or the existing observer if the value already has one.
  10095. */
  10096. function observe (value, asRootData) {
  10097. if (!isObject(value) || value instanceof VNode) {
  10098. return
  10099. }
  10100. var ob;
  10101. if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
  10102. ob = value.__ob__;
  10103. } else if (
  10104. shouldObserve &&
  10105. !isServerRendering() &&
  10106. (Array.isArray(value) || isPlainObject(value)) &&
  10107. Object.isExtensible(value) &&
  10108. !value._isVue
  10109. ) {
  10110. ob = new Observer(value);
  10111. }
  10112. if (asRootData && ob) {
  10113. ob.vmCount++;
  10114. }
  10115. return ob
  10116. }
  10117. /**
  10118. * Define a reactive property on an Object.
  10119. */
  10120. function defineReactive$$1 (
  10121. obj,
  10122. key,
  10123. val,
  10124. customSetter,
  10125. shallow
  10126. ) {
  10127. var dep = new Dep();
  10128. var property = Object.getOwnPropertyDescriptor(obj, key);
  10129. if (property && property.configurable === false) {
  10130. return
  10131. }
  10132. // cater for pre-defined getter/setters
  10133. var getter = property && property.get;
  10134. var setter = property && property.set;
  10135. if ((!getter || setter) && arguments.length === 2) {
  10136. val = obj[key];
  10137. }
  10138. var childOb = !shallow && observe(val);
  10139. Object.defineProperty(obj, key, {
  10140. enumerable: true,
  10141. configurable: true,
  10142. get: function reactiveGetter () {
  10143. var value = getter ? getter.call(obj) : val;
  10144. if (Dep.SharedObject.target) { // fixed by xxxxxx
  10145. dep.depend();
  10146. if (childOb) {
  10147. childOb.dep.depend();
  10148. if (Array.isArray(value)) {
  10149. dependArray(value);
  10150. }
  10151. }
  10152. }
  10153. return value
  10154. },
  10155. set: function reactiveSetter (newVal) {
  10156. var value = getter ? getter.call(obj) : val;
  10157. /* eslint-disable no-self-compare */
  10158. if (newVal === value || (newVal !== newVal && value !== value)) {
  10159. return
  10160. }
  10161. /* eslint-enable no-self-compare */
  10162. if ( true && customSetter) {
  10163. customSetter();
  10164. }
  10165. // #7981: for accessor properties without setter
  10166. if (getter && !setter) { return }
  10167. if (setter) {
  10168. setter.call(obj, newVal);
  10169. } else {
  10170. val = newVal;
  10171. }
  10172. childOb = !shallow && observe(newVal);
  10173. dep.notify();
  10174. }
  10175. });
  10176. }
  10177. /**
  10178. * Set a property on an object. Adds the new property and
  10179. * triggers change notification if the property doesn't
  10180. * already exist.
  10181. */
  10182. function set (target, key, val) {
  10183. if ( true &&
  10184. (isUndef(target) || isPrimitive(target))
  10185. ) {
  10186. warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
  10187. }
  10188. if (Array.isArray(target) && isValidArrayIndex(key)) {
  10189. target.length = Math.max(target.length, key);
  10190. target.splice(key, 1, val);
  10191. return val
  10192. }
  10193. if (key in target && !(key in Object.prototype)) {
  10194. target[key] = val;
  10195. return val
  10196. }
  10197. var ob = (target).__ob__;
  10198. if (target._isVue || (ob && ob.vmCount)) {
  10199. true && warn(
  10200. 'Avoid adding reactive properties to a Vue instance or its root $data ' +
  10201. 'at runtime - declare it upfront in the data option.'
  10202. );
  10203. return val
  10204. }
  10205. if (!ob) {
  10206. target[key] = val;
  10207. return val
  10208. }
  10209. defineReactive$$1(ob.value, key, val);
  10210. ob.dep.notify();
  10211. return val
  10212. }
  10213. /**
  10214. * Delete a property and trigger change if necessary.
  10215. */
  10216. function del (target, key) {
  10217. if ( true &&
  10218. (isUndef(target) || isPrimitive(target))
  10219. ) {
  10220. warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
  10221. }
  10222. if (Array.isArray(target) && isValidArrayIndex(key)) {
  10223. target.splice(key, 1);
  10224. return
  10225. }
  10226. var ob = (target).__ob__;
  10227. if (target._isVue || (ob && ob.vmCount)) {
  10228. true && warn(
  10229. 'Avoid deleting properties on a Vue instance or its root $data ' +
  10230. '- just set it to null.'
  10231. );
  10232. return
  10233. }
  10234. if (!hasOwn(target, key)) {
  10235. return
  10236. }
  10237. delete target[key];
  10238. if (!ob) {
  10239. return
  10240. }
  10241. ob.dep.notify();
  10242. }
  10243. /**
  10244. * Collect dependencies on array elements when the array is touched, since
  10245. * we cannot intercept array element access like property getters.
  10246. */
  10247. function dependArray (value) {
  10248. for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
  10249. e = value[i];
  10250. e && e.__ob__ && e.__ob__.dep.depend();
  10251. if (Array.isArray(e)) {
  10252. dependArray(e);
  10253. }
  10254. }
  10255. }
  10256. /* */
  10257. /**
  10258. * Option overwriting strategies are functions that handle
  10259. * how to merge a parent option value and a child option
  10260. * value into the final value.
  10261. */
  10262. var strats = config.optionMergeStrategies;
  10263. /**
  10264. * Options with restrictions
  10265. */
  10266. if (true) {
  10267. strats.el = strats.propsData = function (parent, child, vm, key) {
  10268. if (!vm) {
  10269. warn(
  10270. "option \"" + key + "\" can only be used during instance " +
  10271. 'creation with the `new` keyword.'
  10272. );
  10273. }
  10274. return defaultStrat(parent, child)
  10275. };
  10276. }
  10277. /**
  10278. * Helper that recursively merges two data objects together.
  10279. */
  10280. function mergeData (to, from) {
  10281. if (!from) { return to }
  10282. var key, toVal, fromVal;
  10283. var keys = hasSymbol
  10284. ? Reflect.ownKeys(from)
  10285. : Object.keys(from);
  10286. for (var i = 0; i < keys.length; i++) {
  10287. key = keys[i];
  10288. // in case the object is already observed...
  10289. if (key === '__ob__') { continue }
  10290. toVal = to[key];
  10291. fromVal = from[key];
  10292. if (!hasOwn(to, key)) {
  10293. set(to, key, fromVal);
  10294. } else if (
  10295. toVal !== fromVal &&
  10296. isPlainObject(toVal) &&
  10297. isPlainObject(fromVal)
  10298. ) {
  10299. mergeData(toVal, fromVal);
  10300. }
  10301. }
  10302. return to
  10303. }
  10304. /**
  10305. * Data
  10306. */
  10307. function mergeDataOrFn (
  10308. parentVal,
  10309. childVal,
  10310. vm
  10311. ) {
  10312. if (!vm) {
  10313. // in a Vue.extend merge, both should be functions
  10314. if (!childVal) {
  10315. return parentVal
  10316. }
  10317. if (!parentVal) {
  10318. return childVal
  10319. }
  10320. // when parentVal & childVal are both present,
  10321. // we need to return a function that returns the
  10322. // merged result of both functions... no need to
  10323. // check if parentVal is a function here because
  10324. // it has to be a function to pass previous merges.
  10325. return function mergedDataFn () {
  10326. return mergeData(
  10327. typeof childVal === 'function' ? childVal.call(this, this) : childVal,
  10328. typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
  10329. )
  10330. }
  10331. } else {
  10332. return function mergedInstanceDataFn () {
  10333. // instance merge
  10334. var instanceData = typeof childVal === 'function'
  10335. ? childVal.call(vm, vm)
  10336. : childVal;
  10337. var defaultData = typeof parentVal === 'function'
  10338. ? parentVal.call(vm, vm)
  10339. : parentVal;
  10340. if (instanceData) {
  10341. return mergeData(instanceData, defaultData)
  10342. } else {
  10343. return defaultData
  10344. }
  10345. }
  10346. }
  10347. }
  10348. strats.data = function (
  10349. parentVal,
  10350. childVal,
  10351. vm
  10352. ) {
  10353. if (!vm) {
  10354. if (childVal && typeof childVal !== 'function') {
  10355. true && warn(
  10356. 'The "data" option should be a function ' +
  10357. 'that returns a per-instance value in component ' +
  10358. 'definitions.',
  10359. vm
  10360. );
  10361. return parentVal
  10362. }
  10363. return mergeDataOrFn(parentVal, childVal)
  10364. }
  10365. return mergeDataOrFn(parentVal, childVal, vm)
  10366. };
  10367. /**
  10368. * Hooks and props are merged as arrays.
  10369. */
  10370. function mergeHook (
  10371. parentVal,
  10372. childVal
  10373. ) {
  10374. var res = childVal
  10375. ? parentVal
  10376. ? parentVal.concat(childVal)
  10377. : Array.isArray(childVal)
  10378. ? childVal
  10379. : [childVal]
  10380. : parentVal;
  10381. return res
  10382. ? dedupeHooks(res)
  10383. : res
  10384. }
  10385. function dedupeHooks (hooks) {
  10386. var res = [];
  10387. for (var i = 0; i < hooks.length; i++) {
  10388. if (res.indexOf(hooks[i]) === -1) {
  10389. res.push(hooks[i]);
  10390. }
  10391. }
  10392. return res
  10393. }
  10394. LIFECYCLE_HOOKS.forEach(function (hook) {
  10395. strats[hook] = mergeHook;
  10396. });
  10397. /**
  10398. * Assets
  10399. *
  10400. * When a vm is present (instance creation), we need to do
  10401. * a three-way merge between constructor options, instance
  10402. * options and parent options.
  10403. */
  10404. function mergeAssets (
  10405. parentVal,
  10406. childVal,
  10407. vm,
  10408. key
  10409. ) {
  10410. var res = Object.create(parentVal || null);
  10411. if (childVal) {
  10412. true && assertObjectType(key, childVal, vm);
  10413. return extend(res, childVal)
  10414. } else {
  10415. return res
  10416. }
  10417. }
  10418. ASSET_TYPES.forEach(function (type) {
  10419. strats[type + 's'] = mergeAssets;
  10420. });
  10421. /**
  10422. * Watchers.
  10423. *
  10424. * Watchers hashes should not overwrite one
  10425. * another, so we merge them as arrays.
  10426. */
  10427. strats.watch = function (
  10428. parentVal,
  10429. childVal,
  10430. vm,
  10431. key
  10432. ) {
  10433. // work around Firefox's Object.prototype.watch...
  10434. if (parentVal === nativeWatch) { parentVal = undefined; }
  10435. if (childVal === nativeWatch) { childVal = undefined; }
  10436. /* istanbul ignore if */
  10437. if (!childVal) { return Object.create(parentVal || null) }
  10438. if (true) {
  10439. assertObjectType(key, childVal, vm);
  10440. }
  10441. if (!parentVal) { return childVal }
  10442. var ret = {};
  10443. extend(ret, parentVal);
  10444. for (var key$1 in childVal) {
  10445. var parent = ret[key$1];
  10446. var child = childVal[key$1];
  10447. if (parent && !Array.isArray(parent)) {
  10448. parent = [parent];
  10449. }
  10450. ret[key$1] = parent
  10451. ? parent.concat(child)
  10452. : Array.isArray(child) ? child : [child];
  10453. }
  10454. return ret
  10455. };
  10456. /**
  10457. * Other object hashes.
  10458. */
  10459. strats.props =
  10460. strats.methods =
  10461. strats.inject =
  10462. strats.computed = function (
  10463. parentVal,
  10464. childVal,
  10465. vm,
  10466. key
  10467. ) {
  10468. if (childVal && "development" !== 'production') {
  10469. assertObjectType(key, childVal, vm);
  10470. }
  10471. if (!parentVal) { return childVal }
  10472. var ret = Object.create(null);
  10473. extend(ret, parentVal);
  10474. if (childVal) { extend(ret, childVal); }
  10475. return ret
  10476. };
  10477. strats.provide = mergeDataOrFn;
  10478. /**
  10479. * Default strategy.
  10480. */
  10481. var defaultStrat = function (parentVal, childVal) {
  10482. return childVal === undefined
  10483. ? parentVal
  10484. : childVal
  10485. };
  10486. /**
  10487. * Validate component names
  10488. */
  10489. function checkComponents (options) {
  10490. for (var key in options.components) {
  10491. validateComponentName(key);
  10492. }
  10493. }
  10494. function validateComponentName (name) {
  10495. if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
  10496. warn(
  10497. 'Invalid component name: "' + name + '". Component names ' +
  10498. 'should conform to valid custom element name in html5 specification.'
  10499. );
  10500. }
  10501. if (isBuiltInTag(name) || config.isReservedTag(name)) {
  10502. warn(
  10503. 'Do not use built-in or reserved HTML elements as component ' +
  10504. 'id: ' + name
  10505. );
  10506. }
  10507. }
  10508. /**
  10509. * Ensure all props option syntax are normalized into the
  10510. * Object-based format.
  10511. */
  10512. function normalizeProps (options, vm) {
  10513. var props = options.props;
  10514. if (!props) { return }
  10515. var res = {};
  10516. var i, val, name;
  10517. if (Array.isArray(props)) {
  10518. i = props.length;
  10519. while (i--) {
  10520. val = props[i];
  10521. if (typeof val === 'string') {
  10522. name = camelize(val);
  10523. res[name] = { type: null };
  10524. } else if (true) {
  10525. warn('props must be strings when using array syntax.');
  10526. }
  10527. }
  10528. } else if (isPlainObject(props)) {
  10529. for (var key in props) {
  10530. val = props[key];
  10531. name = camelize(key);
  10532. res[name] = isPlainObject(val)
  10533. ? val
  10534. : { type: val };
  10535. }
  10536. } else if (true) {
  10537. warn(
  10538. "Invalid value for option \"props\": expected an Array or an Object, " +
  10539. "but got " + (toRawType(props)) + ".",
  10540. vm
  10541. );
  10542. }
  10543. options.props = res;
  10544. }
  10545. /**
  10546. * Normalize all injections into Object-based format
  10547. */
  10548. function normalizeInject (options, vm) {
  10549. var inject = options.inject;
  10550. if (!inject) { return }
  10551. var normalized = options.inject = {};
  10552. if (Array.isArray(inject)) {
  10553. for (var i = 0; i < inject.length; i++) {
  10554. normalized[inject[i]] = { from: inject[i] };
  10555. }
  10556. } else if (isPlainObject(inject)) {
  10557. for (var key in inject) {
  10558. var val = inject[key];
  10559. normalized[key] = isPlainObject(val)
  10560. ? extend({ from: key }, val)
  10561. : { from: val };
  10562. }
  10563. } else if (true) {
  10564. warn(
  10565. "Invalid value for option \"inject\": expected an Array or an Object, " +
  10566. "but got " + (toRawType(inject)) + ".",
  10567. vm
  10568. );
  10569. }
  10570. }
  10571. /**
  10572. * Normalize raw function directives into object format.
  10573. */
  10574. function normalizeDirectives (options) {
  10575. var dirs = options.directives;
  10576. if (dirs) {
  10577. for (var key in dirs) {
  10578. var def$$1 = dirs[key];
  10579. if (typeof def$$1 === 'function') {
  10580. dirs[key] = { bind: def$$1, update: def$$1 };
  10581. }
  10582. }
  10583. }
  10584. }
  10585. function assertObjectType (name, value, vm) {
  10586. if (!isPlainObject(value)) {
  10587. warn(
  10588. "Invalid value for option \"" + name + "\": expected an Object, " +
  10589. "but got " + (toRawType(value)) + ".",
  10590. vm
  10591. );
  10592. }
  10593. }
  10594. /**
  10595. * Merge two option objects into a new one.
  10596. * Core utility used in both instantiation and inheritance.
  10597. */
  10598. function mergeOptions (
  10599. parent,
  10600. child,
  10601. vm
  10602. ) {
  10603. if (true) {
  10604. checkComponents(child);
  10605. }
  10606. if (typeof child === 'function') {
  10607. child = child.options;
  10608. }
  10609. normalizeProps(child, vm);
  10610. normalizeInject(child, vm);
  10611. normalizeDirectives(child);
  10612. // Apply extends and mixins on the child options,
  10613. // but only if it is a raw options object that isn't
  10614. // the result of another mergeOptions call.
  10615. // Only merged options has the _base property.
  10616. if (!child._base) {
  10617. if (child.extends) {
  10618. parent = mergeOptions(parent, child.extends, vm);
  10619. }
  10620. if (child.mixins) {
  10621. for (var i = 0, l = child.mixins.length; i < l; i++) {
  10622. parent = mergeOptions(parent, child.mixins[i], vm);
  10623. }
  10624. }
  10625. }
  10626. var options = {};
  10627. var key;
  10628. for (key in parent) {
  10629. mergeField(key);
  10630. }
  10631. for (key in child) {
  10632. if (!hasOwn(parent, key)) {
  10633. mergeField(key);
  10634. }
  10635. }
  10636. function mergeField (key) {
  10637. var strat = strats[key] || defaultStrat;
  10638. options[key] = strat(parent[key], child[key], vm, key);
  10639. }
  10640. return options
  10641. }
  10642. /**
  10643. * Resolve an asset.
  10644. * This function is used because child instances need access
  10645. * to assets defined in its ancestor chain.
  10646. */
  10647. function resolveAsset (
  10648. options,
  10649. type,
  10650. id,
  10651. warnMissing
  10652. ) {
  10653. /* istanbul ignore if */
  10654. if (typeof id !== 'string') {
  10655. return
  10656. }
  10657. var assets = options[type];
  10658. // check local registration variations first
  10659. if (hasOwn(assets, id)) { return assets[id] }
  10660. var camelizedId = camelize(id);
  10661. if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
  10662. var PascalCaseId = capitalize(camelizedId);
  10663. if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
  10664. // fallback to prototype chain
  10665. var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
  10666. if ( true && warnMissing && !res) {
  10667. warn(
  10668. 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
  10669. options
  10670. );
  10671. }
  10672. return res
  10673. }
  10674. /* */
  10675. function validateProp (
  10676. key,
  10677. propOptions,
  10678. propsData,
  10679. vm
  10680. ) {
  10681. var prop = propOptions[key];
  10682. var absent = !hasOwn(propsData, key);
  10683. var value = propsData[key];
  10684. // boolean casting
  10685. var booleanIndex = getTypeIndex(Boolean, prop.type);
  10686. if (booleanIndex > -1) {
  10687. if (absent && !hasOwn(prop, 'default')) {
  10688. value = false;
  10689. } else if (value === '' || value === hyphenate(key)) {
  10690. // only cast empty string / same name to boolean if
  10691. // boolean has higher priority
  10692. var stringIndex = getTypeIndex(String, prop.type);
  10693. if (stringIndex < 0 || booleanIndex < stringIndex) {
  10694. value = true;
  10695. }
  10696. }
  10697. }
  10698. // check default value
  10699. if (value === undefined) {
  10700. value = getPropDefaultValue(vm, prop, key);
  10701. // since the default value is a fresh copy,
  10702. // make sure to observe it.
  10703. var prevShouldObserve = shouldObserve;
  10704. toggleObserving(true);
  10705. observe(value);
  10706. toggleObserving(prevShouldObserve);
  10707. }
  10708. if (
  10709. true
  10710. ) {
  10711. assertProp(prop, key, value, vm, absent);
  10712. }
  10713. return value
  10714. }
  10715. /**
  10716. * Get the default value of a prop.
  10717. */
  10718. function getPropDefaultValue (vm, prop, key) {
  10719. // no default, return undefined
  10720. if (!hasOwn(prop, 'default')) {
  10721. return undefined
  10722. }
  10723. var def = prop.default;
  10724. // warn against non-factory defaults for Object & Array
  10725. if ( true && isObject(def)) {
  10726. warn(
  10727. 'Invalid default value for prop "' + key + '": ' +
  10728. 'Props with type Object/Array must use a factory function ' +
  10729. 'to return the default value.',
  10730. vm
  10731. );
  10732. }
  10733. // the raw prop value was also undefined from previous render,
  10734. // return previous default value to avoid unnecessary watcher trigger
  10735. if (vm && vm.$options.propsData &&
  10736. vm.$options.propsData[key] === undefined &&
  10737. vm._props[key] !== undefined
  10738. ) {
  10739. return vm._props[key]
  10740. }
  10741. // call factory function for non-Function types
  10742. // a value is Function if its prototype is function even across different execution context
  10743. return typeof def === 'function' && getType(prop.type) !== 'Function'
  10744. ? def.call(vm)
  10745. : def
  10746. }
  10747. /**
  10748. * Assert whether a prop is valid.
  10749. */
  10750. function assertProp (
  10751. prop,
  10752. name,
  10753. value,
  10754. vm,
  10755. absent
  10756. ) {
  10757. if (prop.required && absent) {
  10758. warn(
  10759. 'Missing required prop: "' + name + '"',
  10760. vm
  10761. );
  10762. return
  10763. }
  10764. if (value == null && !prop.required) {
  10765. return
  10766. }
  10767. var type = prop.type;
  10768. var valid = !type || type === true;
  10769. var expectedTypes = [];
  10770. if (type) {
  10771. if (!Array.isArray(type)) {
  10772. type = [type];
  10773. }
  10774. for (var i = 0; i < type.length && !valid; i++) {
  10775. var assertedType = assertType(value, type[i]);
  10776. expectedTypes.push(assertedType.expectedType || '');
  10777. valid = assertedType.valid;
  10778. }
  10779. }
  10780. if (!valid) {
  10781. warn(
  10782. getInvalidTypeMessage(name, value, expectedTypes),
  10783. vm
  10784. );
  10785. return
  10786. }
  10787. var validator = prop.validator;
  10788. if (validator) {
  10789. if (!validator(value)) {
  10790. warn(
  10791. 'Invalid prop: custom validator check failed for prop "' + name + '".',
  10792. vm
  10793. );
  10794. }
  10795. }
  10796. }
  10797. var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
  10798. function assertType (value, type) {
  10799. var valid;
  10800. var expectedType = getType(type);
  10801. if (simpleCheckRE.test(expectedType)) {
  10802. var t = typeof value;
  10803. valid = t === expectedType.toLowerCase();
  10804. // for primitive wrapper objects
  10805. if (!valid && t === 'object') {
  10806. valid = value instanceof type;
  10807. }
  10808. } else if (expectedType === 'Object') {
  10809. valid = isPlainObject(value);
  10810. } else if (expectedType === 'Array') {
  10811. valid = Array.isArray(value);
  10812. } else {
  10813. valid = value instanceof type;
  10814. }
  10815. return {
  10816. valid: valid,
  10817. expectedType: expectedType
  10818. }
  10819. }
  10820. /**
  10821. * Use function string name to check built-in types,
  10822. * because a simple equality check will fail when running
  10823. * across different vms / iframes.
  10824. */
  10825. function getType (fn) {
  10826. var match = fn && fn.toString().match(/^\s*function (\w+)/);
  10827. return match ? match[1] : ''
  10828. }
  10829. function isSameType (a, b) {
  10830. return getType(a) === getType(b)
  10831. }
  10832. function getTypeIndex (type, expectedTypes) {
  10833. if (!Array.isArray(expectedTypes)) {
  10834. return isSameType(expectedTypes, type) ? 0 : -1
  10835. }
  10836. for (var i = 0, len = expectedTypes.length; i < len; i++) {
  10837. if (isSameType(expectedTypes[i], type)) {
  10838. return i
  10839. }
  10840. }
  10841. return -1
  10842. }
  10843. function getInvalidTypeMessage (name, value, expectedTypes) {
  10844. var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
  10845. " Expected " + (expectedTypes.map(capitalize).join(', '));
  10846. var expectedType = expectedTypes[0];
  10847. var receivedType = toRawType(value);
  10848. var expectedValue = styleValue(value, expectedType);
  10849. var receivedValue = styleValue(value, receivedType);
  10850. // check if we need to specify expected value
  10851. if (expectedTypes.length === 1 &&
  10852. isExplicable(expectedType) &&
  10853. !isBoolean(expectedType, receivedType)) {
  10854. message += " with value " + expectedValue;
  10855. }
  10856. message += ", got " + receivedType + " ";
  10857. // check if we need to specify received value
  10858. if (isExplicable(receivedType)) {
  10859. message += "with value " + receivedValue + ".";
  10860. }
  10861. return message
  10862. }
  10863. function styleValue (value, type) {
  10864. if (type === 'String') {
  10865. return ("\"" + value + "\"")
  10866. } else if (type === 'Number') {
  10867. return ("" + (Number(value)))
  10868. } else {
  10869. return ("" + value)
  10870. }
  10871. }
  10872. function isExplicable (value) {
  10873. var explicitTypes = ['string', 'number', 'boolean'];
  10874. return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
  10875. }
  10876. function isBoolean () {
  10877. var args = [], len = arguments.length;
  10878. while ( len-- ) args[ len ] = arguments[ len ];
  10879. return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
  10880. }
  10881. /* */
  10882. function handleError (err, vm, info) {
  10883. // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
  10884. // See: https://github.com/vuejs/vuex/issues/1505
  10885. pushTarget();
  10886. try {
  10887. if (vm) {
  10888. var cur = vm;
  10889. while ((cur = cur.$parent)) {
  10890. var hooks = cur.$options.errorCaptured;
  10891. if (hooks) {
  10892. for (var i = 0; i < hooks.length; i++) {
  10893. try {
  10894. var capture = hooks[i].call(cur, err, vm, info) === false;
  10895. if (capture) { return }
  10896. } catch (e) {
  10897. globalHandleError(e, cur, 'errorCaptured hook');
  10898. }
  10899. }
  10900. }
  10901. }
  10902. }
  10903. globalHandleError(err, vm, info);
  10904. } finally {
  10905. popTarget();
  10906. }
  10907. }
  10908. function invokeWithErrorHandling (
  10909. handler,
  10910. context,
  10911. args,
  10912. vm,
  10913. info
  10914. ) {
  10915. var res;
  10916. try {
  10917. res = args ? handler.apply(context, args) : handler.call(context);
  10918. if (res && !res._isVue && isPromise(res) && !res._handled) {
  10919. res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
  10920. // issue #9511
  10921. // avoid catch triggering multiple times when nested calls
  10922. res._handled = true;
  10923. }
  10924. } catch (e) {
  10925. handleError(e, vm, info);
  10926. }
  10927. return res
  10928. }
  10929. function globalHandleError (err, vm, info) {
  10930. if (config.errorHandler) {
  10931. try {
  10932. return config.errorHandler.call(null, err, vm, info)
  10933. } catch (e) {
  10934. // if the user intentionally throws the original error in the handler,
  10935. // do not log it twice
  10936. if (e !== err) {
  10937. logError(e, null, 'config.errorHandler');
  10938. }
  10939. }
  10940. }
  10941. logError(err, vm, info);
  10942. }
  10943. function logError (err, vm, info) {
  10944. if (true) {
  10945. warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  10946. }
  10947. /* istanbul ignore else */
  10948. if ((inBrowser || inWeex) && typeof console !== 'undefined') {
  10949. console.error(err);
  10950. } else {
  10951. throw err
  10952. }
  10953. }
  10954. /* */
  10955. var callbacks = [];
  10956. var pending = false;
  10957. function flushCallbacks () {
  10958. pending = false;
  10959. var copies = callbacks.slice(0);
  10960. callbacks.length = 0;
  10961. for (var i = 0; i < copies.length; i++) {
  10962. copies[i]();
  10963. }
  10964. }
  10965. // Here we have async deferring wrappers using microtasks.
  10966. // In 2.5 we used (macro) tasks (in combination with microtasks).
  10967. // However, it has subtle problems when state is changed right before repaint
  10968. // (e.g. #6813, out-in transitions).
  10969. // Also, using (macro) tasks in event handler would cause some weird behaviors
  10970. // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  10971. // So we now use microtasks everywhere, again.
  10972. // A major drawback of this tradeoff is that there are some scenarios
  10973. // where microtasks have too high a priority and fire in between supposedly
  10974. // sequential events (e.g. #4521, #6690, which have workarounds)
  10975. // or even between bubbling of the same event (#6566).
  10976. var timerFunc;
  10977. // The nextTick behavior leverages the microtask queue, which can be accessed
  10978. // via either native Promise.then or MutationObserver.
  10979. // MutationObserver has wider support, however it is seriously bugged in
  10980. // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  10981. // completely stops working after triggering a few times... so, if native
  10982. // Promise is available, we will use it:
  10983. /* istanbul ignore next, $flow-disable-line */
  10984. if (typeof Promise !== 'undefined' && isNative(Promise)) {
  10985. var p = Promise.resolve();
  10986. timerFunc = function () {
  10987. p.then(flushCallbacks);
  10988. // In problematic UIWebViews, Promise.then doesn't completely break, but
  10989. // it can get stuck in a weird state where callbacks are pushed into the
  10990. // microtask queue but the queue isn't being flushed, until the browser
  10991. // needs to do some other work, e.g. handle a timer. Therefore we can
  10992. // "force" the microtask queue to be flushed by adding an empty timer.
  10993. if (isIOS) { setTimeout(noop); }
  10994. };
  10995. } else if (!isIE && typeof MutationObserver !== 'undefined' && (
  10996. isNative(MutationObserver) ||
  10997. // PhantomJS and iOS 7.x
  10998. MutationObserver.toString() === '[object MutationObserverConstructor]'
  10999. )) {
  11000. // Use MutationObserver where native Promise is not available,
  11001. // e.g. PhantomJS, iOS7, Android 4.4
  11002. // (#6466 MutationObserver is unreliable in IE11)
  11003. var counter = 1;
  11004. var observer = new MutationObserver(flushCallbacks);
  11005. var textNode = document.createTextNode(String(counter));
  11006. observer.observe(textNode, {
  11007. characterData: true
  11008. });
  11009. timerFunc = function () {
  11010. counter = (counter + 1) % 2;
  11011. textNode.data = String(counter);
  11012. };
  11013. } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
  11014. // Fallback to setImmediate.
  11015. // Technically it leverages the (macro) task queue,
  11016. // but it is still a better choice than setTimeout.
  11017. timerFunc = function () {
  11018. setImmediate(flushCallbacks);
  11019. };
  11020. } else {
  11021. // Fallback to setTimeout.
  11022. timerFunc = function () {
  11023. setTimeout(flushCallbacks, 0);
  11024. };
  11025. }
  11026. function nextTick (cb, ctx) {
  11027. var _resolve;
  11028. callbacks.push(function () {
  11029. if (cb) {
  11030. try {
  11031. cb.call(ctx);
  11032. } catch (e) {
  11033. handleError(e, ctx, 'nextTick');
  11034. }
  11035. } else if (_resolve) {
  11036. _resolve(ctx);
  11037. }
  11038. });
  11039. if (!pending) {
  11040. pending = true;
  11041. timerFunc();
  11042. }
  11043. // $flow-disable-line
  11044. if (!cb && typeof Promise !== 'undefined') {
  11045. return new Promise(function (resolve) {
  11046. _resolve = resolve;
  11047. })
  11048. }
  11049. }
  11050. /* */
  11051. /* not type checking this file because flow doesn't play well with Proxy */
  11052. var initProxy;
  11053. if (true) {
  11054. var allowedGlobals = makeMap(
  11055. 'Infinity,undefined,NaN,isFinite,isNaN,' +
  11056. 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
  11057. 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
  11058. 'require' // for Webpack/Browserify
  11059. );
  11060. var warnNonPresent = function (target, key) {
  11061. warn(
  11062. "Property or method \"" + key + "\" is not defined on the instance but " +
  11063. 'referenced during render. Make sure that this property is reactive, ' +
  11064. 'either in the data option, or for class-based components, by ' +
  11065. 'initializing the property. ' +
  11066. 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
  11067. target
  11068. );
  11069. };
  11070. var warnReservedPrefix = function (target, key) {
  11071. warn(
  11072. "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
  11073. 'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
  11074. 'prevent conflicts with Vue internals. ' +
  11075. 'See: https://vuejs.org/v2/api/#data',
  11076. target
  11077. );
  11078. };
  11079. var hasProxy =
  11080. typeof Proxy !== 'undefined' && isNative(Proxy);
  11081. if (hasProxy) {
  11082. var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
  11083. config.keyCodes = new Proxy(config.keyCodes, {
  11084. set: function set (target, key, value) {
  11085. if (isBuiltInModifier(key)) {
  11086. warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
  11087. return false
  11088. } else {
  11089. target[key] = value;
  11090. return true
  11091. }
  11092. }
  11093. });
  11094. }
  11095. var hasHandler = {
  11096. has: function has (target, key) {
  11097. var has = key in target;
  11098. var isAllowed = allowedGlobals(key) ||
  11099. (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
  11100. if (!has && !isAllowed) {
  11101. if (key in target.$data) { warnReservedPrefix(target, key); }
  11102. else { warnNonPresent(target, key); }
  11103. }
  11104. return has || !isAllowed
  11105. }
  11106. };
  11107. var getHandler = {
  11108. get: function get (target, key) {
  11109. if (typeof key === 'string' && !(key in target)) {
  11110. if (key in target.$data) { warnReservedPrefix(target, key); }
  11111. else { warnNonPresent(target, key); }
  11112. }
  11113. return target[key]
  11114. }
  11115. };
  11116. initProxy = function initProxy (vm) {
  11117. if (hasProxy) {
  11118. // determine which proxy handler to use
  11119. var options = vm.$options;
  11120. var handlers = options.render && options.render._withStripped
  11121. ? getHandler
  11122. : hasHandler;
  11123. vm._renderProxy = new Proxy(vm, handlers);
  11124. } else {
  11125. vm._renderProxy = vm;
  11126. }
  11127. };
  11128. }
  11129. /* */
  11130. var seenObjects = new _Set();
  11131. /**
  11132. * Recursively traverse an object to evoke all converted
  11133. * getters, so that every nested property inside the object
  11134. * is collected as a "deep" dependency.
  11135. */
  11136. function traverse (val) {
  11137. _traverse(val, seenObjects);
  11138. seenObjects.clear();
  11139. }
  11140. function _traverse (val, seen) {
  11141. var i, keys;
  11142. var isA = Array.isArray(val);
  11143. if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
  11144. return
  11145. }
  11146. if (val.__ob__) {
  11147. var depId = val.__ob__.dep.id;
  11148. if (seen.has(depId)) {
  11149. return
  11150. }
  11151. seen.add(depId);
  11152. }
  11153. if (isA) {
  11154. i = val.length;
  11155. while (i--) { _traverse(val[i], seen); }
  11156. } else {
  11157. keys = Object.keys(val);
  11158. i = keys.length;
  11159. while (i--) { _traverse(val[keys[i]], seen); }
  11160. }
  11161. }
  11162. var mark;
  11163. var measure;
  11164. if (true) {
  11165. var perf = inBrowser && window.performance;
  11166. /* istanbul ignore if */
  11167. if (
  11168. perf &&
  11169. perf.mark &&
  11170. perf.measure &&
  11171. perf.clearMarks &&
  11172. perf.clearMeasures
  11173. ) {
  11174. mark = function (tag) { return perf.mark(tag); };
  11175. measure = function (name, startTag, endTag) {
  11176. perf.measure(name, startTag, endTag);
  11177. perf.clearMarks(startTag);
  11178. perf.clearMarks(endTag);
  11179. // perf.clearMeasures(name)
  11180. };
  11181. }
  11182. }
  11183. /* */
  11184. var normalizeEvent = cached(function (name) {
  11185. var passive = name.charAt(0) === '&';
  11186. name = passive ? name.slice(1) : name;
  11187. var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
  11188. name = once$$1 ? name.slice(1) : name;
  11189. var capture = name.charAt(0) === '!';
  11190. name = capture ? name.slice(1) : name;
  11191. return {
  11192. name: name,
  11193. once: once$$1,
  11194. capture: capture,
  11195. passive: passive
  11196. }
  11197. });
  11198. function createFnInvoker (fns, vm) {
  11199. function invoker () {
  11200. var arguments$1 = arguments;
  11201. var fns = invoker.fns;
  11202. if (Array.isArray(fns)) {
  11203. var cloned = fns.slice();
  11204. for (var i = 0; i < cloned.length; i++) {
  11205. invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
  11206. }
  11207. } else {
  11208. // return handler return value for single handlers
  11209. return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
  11210. }
  11211. }
  11212. invoker.fns = fns;
  11213. return invoker
  11214. }
  11215. function updateListeners (
  11216. on,
  11217. oldOn,
  11218. add,
  11219. remove$$1,
  11220. createOnceHandler,
  11221. vm
  11222. ) {
  11223. var name, def$$1, cur, old, event;
  11224. for (name in on) {
  11225. def$$1 = cur = on[name];
  11226. old = oldOn[name];
  11227. event = normalizeEvent(name);
  11228. if (isUndef(cur)) {
  11229. true && warn(
  11230. "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
  11231. vm
  11232. );
  11233. } else if (isUndef(old)) {
  11234. if (isUndef(cur.fns)) {
  11235. cur = on[name] = createFnInvoker(cur, vm);
  11236. }
  11237. if (isTrue(event.once)) {
  11238. cur = on[name] = createOnceHandler(event.name, cur, event.capture);
  11239. }
  11240. add(event.name, cur, event.capture, event.passive, event.params);
  11241. } else if (cur !== old) {
  11242. old.fns = cur;
  11243. on[name] = old;
  11244. }
  11245. }
  11246. for (name in oldOn) {
  11247. if (isUndef(on[name])) {
  11248. event = normalizeEvent(name);
  11249. remove$$1(event.name, oldOn[name], event.capture);
  11250. }
  11251. }
  11252. }
  11253. /* */
  11254. /* */
  11255. // fixed by xxxxxx (mp properties)
  11256. function extractPropertiesFromVNodeData(data, Ctor, res, context) {
  11257. var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;
  11258. if (isUndef(propOptions)) {
  11259. return res
  11260. }
  11261. var externalClasses = Ctor.options.mpOptions.externalClasses || [];
  11262. var attrs = data.attrs;
  11263. var props = data.props;
  11264. if (isDef(attrs) || isDef(props)) {
  11265. for (var key in propOptions) {
  11266. var altKey = hyphenate(key);
  11267. var result = checkProp(res, props, key, altKey, true) ||
  11268. checkProp(res, attrs, key, altKey, false);
  11269. // externalClass
  11270. if (
  11271. result &&
  11272. res[key] &&
  11273. externalClasses.indexOf(altKey) !== -1 &&
  11274. context[camelize(res[key])]
  11275. ) {
  11276. // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)
  11277. res[key] = context[camelize(res[key])];
  11278. }
  11279. }
  11280. }
  11281. return res
  11282. }
  11283. function extractPropsFromVNodeData (
  11284. data,
  11285. Ctor,
  11286. tag,
  11287. context// fixed by xxxxxx
  11288. ) {
  11289. // we are only extracting raw values here.
  11290. // validation and default values are handled in the child
  11291. // component itself.
  11292. var propOptions = Ctor.options.props;
  11293. if (isUndef(propOptions)) {
  11294. // fixed by xxxxxx
  11295. return extractPropertiesFromVNodeData(data, Ctor, {}, context)
  11296. }
  11297. var res = {};
  11298. var attrs = data.attrs;
  11299. var props = data.props;
  11300. if (isDef(attrs) || isDef(props)) {
  11301. for (var key in propOptions) {
  11302. var altKey = hyphenate(key);
  11303. if (true) {
  11304. var keyInLowerCase = key.toLowerCase();
  11305. if (
  11306. key !== keyInLowerCase &&
  11307. attrs && hasOwn(attrs, keyInLowerCase)
  11308. ) {
  11309. tip(
  11310. "Prop \"" + keyInLowerCase + "\" is passed to component " +
  11311. (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
  11312. " \"" + key + "\". " +
  11313. "Note that HTML attributes are case-insensitive and camelCased " +
  11314. "props need to use their kebab-case equivalents when using in-DOM " +
  11315. "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
  11316. );
  11317. }
  11318. }
  11319. checkProp(res, props, key, altKey, true) ||
  11320. checkProp(res, attrs, key, altKey, false);
  11321. }
  11322. }
  11323. // fixed by xxxxxx
  11324. return extractPropertiesFromVNodeData(data, Ctor, res, context)
  11325. }
  11326. function checkProp (
  11327. res,
  11328. hash,
  11329. key,
  11330. altKey,
  11331. preserve
  11332. ) {
  11333. if (isDef(hash)) {
  11334. if (hasOwn(hash, key)) {
  11335. res[key] = hash[key];
  11336. if (!preserve) {
  11337. delete hash[key];
  11338. }
  11339. return true
  11340. } else if (hasOwn(hash, altKey)) {
  11341. res[key] = hash[altKey];
  11342. if (!preserve) {
  11343. delete hash[altKey];
  11344. }
  11345. return true
  11346. }
  11347. }
  11348. return false
  11349. }
  11350. /* */
  11351. // The template compiler attempts to minimize the need for normalization by
  11352. // statically analyzing the template at compile time.
  11353. //
  11354. // For plain HTML markup, normalization can be completely skipped because the
  11355. // generated render function is guaranteed to return Array<VNode>. There are
  11356. // two cases where extra normalization is needed:
  11357. // 1. When the children contains components - because a functional component
  11358. // may return an Array instead of a single root. In this case, just a simple
  11359. // normalization is needed - if any child is an Array, we flatten the whole
  11360. // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  11361. // because functional components already normalize their own children.
  11362. function simpleNormalizeChildren (children) {
  11363. for (var i = 0; i < children.length; i++) {
  11364. if (Array.isArray(children[i])) {
  11365. return Array.prototype.concat.apply([], children)
  11366. }
  11367. }
  11368. return children
  11369. }
  11370. // 2. When the children contains constructs that always generated nested Arrays,
  11371. // e.g. <template>, <slot>, v-for, or when the children is provided by user
  11372. // with hand-written render functions / JSX. In such cases a full normalization
  11373. // is needed to cater to all possible types of children values.
  11374. function normalizeChildren (children) {
  11375. return isPrimitive(children)
  11376. ? [createTextVNode(children)]
  11377. : Array.isArray(children)
  11378. ? normalizeArrayChildren(children)
  11379. : undefined
  11380. }
  11381. function isTextNode (node) {
  11382. return isDef(node) && isDef(node.text) && isFalse(node.isComment)
  11383. }
  11384. function normalizeArrayChildren (children, nestedIndex) {
  11385. var res = [];
  11386. var i, c, lastIndex, last;
  11387. for (i = 0; i < children.length; i++) {
  11388. c = children[i];
  11389. if (isUndef(c) || typeof c === 'boolean') { continue }
  11390. lastIndex = res.length - 1;
  11391. last = res[lastIndex];
  11392. // nested
  11393. if (Array.isArray(c)) {
  11394. if (c.length > 0) {
  11395. c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
  11396. // merge adjacent text nodes
  11397. if (isTextNode(c[0]) && isTextNode(last)) {
  11398. res[lastIndex] = createTextVNode(last.text + (c[0]).text);
  11399. c.shift();
  11400. }
  11401. res.push.apply(res, c);
  11402. }
  11403. } else if (isPrimitive(c)) {
  11404. if (isTextNode(last)) {
  11405. // merge adjacent text nodes
  11406. // this is necessary for SSR hydration because text nodes are
  11407. // essentially merged when rendered to HTML strings
  11408. res[lastIndex] = createTextVNode(last.text + c);
  11409. } else if (c !== '') {
  11410. // convert primitive to vnode
  11411. res.push(createTextVNode(c));
  11412. }
  11413. } else {
  11414. if (isTextNode(c) && isTextNode(last)) {
  11415. // merge adjacent text nodes
  11416. res[lastIndex] = createTextVNode(last.text + c.text);
  11417. } else {
  11418. // default key for nested array children (likely generated by v-for)
  11419. if (isTrue(children._isVList) &&
  11420. isDef(c.tag) &&
  11421. isUndef(c.key) &&
  11422. isDef(nestedIndex)) {
  11423. c.key = "__vlist" + nestedIndex + "_" + i + "__";
  11424. }
  11425. res.push(c);
  11426. }
  11427. }
  11428. }
  11429. return res
  11430. }
  11431. /* */
  11432. function initProvide (vm) {
  11433. var provide = vm.$options.provide;
  11434. if (provide) {
  11435. vm._provided = typeof provide === 'function'
  11436. ? provide.call(vm)
  11437. : provide;
  11438. }
  11439. }
  11440. function initInjections (vm) {
  11441. var result = resolveInject(vm.$options.inject, vm);
  11442. if (result) {
  11443. toggleObserving(false);
  11444. Object.keys(result).forEach(function (key) {
  11445. /* istanbul ignore else */
  11446. if (true) {
  11447. defineReactive$$1(vm, key, result[key], function () {
  11448. warn(
  11449. "Avoid mutating an injected value directly since the changes will be " +
  11450. "overwritten whenever the provided component re-renders. " +
  11451. "injection being mutated: \"" + key + "\"",
  11452. vm
  11453. );
  11454. });
  11455. } else {}
  11456. });
  11457. toggleObserving(true);
  11458. }
  11459. }
  11460. function resolveInject (inject, vm) {
  11461. if (inject) {
  11462. // inject is :any because flow is not smart enough to figure out cached
  11463. var result = Object.create(null);
  11464. var keys = hasSymbol
  11465. ? Reflect.ownKeys(inject)
  11466. : Object.keys(inject);
  11467. for (var i = 0; i < keys.length; i++) {
  11468. var key = keys[i];
  11469. // #6574 in case the inject object is observed...
  11470. if (key === '__ob__') { continue }
  11471. var provideKey = inject[key].from;
  11472. var source = vm;
  11473. while (source) {
  11474. if (source._provided && hasOwn(source._provided, provideKey)) {
  11475. result[key] = source._provided[provideKey];
  11476. break
  11477. }
  11478. source = source.$parent;
  11479. }
  11480. if (!source) {
  11481. if ('default' in inject[key]) {
  11482. var provideDefault = inject[key].default;
  11483. result[key] = typeof provideDefault === 'function'
  11484. ? provideDefault.call(vm)
  11485. : provideDefault;
  11486. } else if (true) {
  11487. warn(("Injection \"" + key + "\" not found"), vm);
  11488. }
  11489. }
  11490. }
  11491. return result
  11492. }
  11493. }
  11494. /* */
  11495. /**
  11496. * Runtime helper for resolving raw children VNodes into a slot object.
  11497. */
  11498. function resolveSlots (
  11499. children,
  11500. context
  11501. ) {
  11502. if (!children || !children.length) {
  11503. return {}
  11504. }
  11505. var slots = {};
  11506. for (var i = 0, l = children.length; i < l; i++) {
  11507. var child = children[i];
  11508. var data = child.data;
  11509. // remove slot attribute if the node is resolved as a Vue slot node
  11510. if (data && data.attrs && data.attrs.slot) {
  11511. delete data.attrs.slot;
  11512. }
  11513. // named slots should only be respected if the vnode was rendered in the
  11514. // same context.
  11515. if ((child.context === context || child.fnContext === context) &&
  11516. data && data.slot != null
  11517. ) {
  11518. var name = data.slot;
  11519. var slot = (slots[name] || (slots[name] = []));
  11520. if (child.tag === 'template') {
  11521. slot.push.apply(slot, child.children || []);
  11522. } else {
  11523. slot.push(child);
  11524. }
  11525. } else {
  11526. // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
  11527. if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){
  11528. (slots['page'] || (slots['page'] = [])).push(child);
  11529. }else{
  11530. (slots.default || (slots.default = [])).push(child);
  11531. }
  11532. }
  11533. }
  11534. // ignore slots that contains only whitespace
  11535. for (var name$1 in slots) {
  11536. if (slots[name$1].every(isWhitespace)) {
  11537. delete slots[name$1];
  11538. }
  11539. }
  11540. return slots
  11541. }
  11542. function isWhitespace (node) {
  11543. return (node.isComment && !node.asyncFactory) || node.text === ' '
  11544. }
  11545. /* */
  11546. function normalizeScopedSlots (
  11547. slots,
  11548. normalSlots,
  11549. prevSlots
  11550. ) {
  11551. var res;
  11552. var hasNormalSlots = Object.keys(normalSlots).length > 0;
  11553. var isStable = slots ? !!slots.$stable : !hasNormalSlots;
  11554. var key = slots && slots.$key;
  11555. if (!slots) {
  11556. res = {};
  11557. } else if (slots._normalized) {
  11558. // fast path 1: child component re-render only, parent did not change
  11559. return slots._normalized
  11560. } else if (
  11561. isStable &&
  11562. prevSlots &&
  11563. prevSlots !== emptyObject &&
  11564. key === prevSlots.$key &&
  11565. !hasNormalSlots &&
  11566. !prevSlots.$hasNormal
  11567. ) {
  11568. // fast path 2: stable scoped slots w/ no normal slots to proxy,
  11569. // only need to normalize once
  11570. return prevSlots
  11571. } else {
  11572. res = {};
  11573. for (var key$1 in slots) {
  11574. if (slots[key$1] && key$1[0] !== '$') {
  11575. res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
  11576. }
  11577. }
  11578. }
  11579. // expose normal slots on scopedSlots
  11580. for (var key$2 in normalSlots) {
  11581. if (!(key$2 in res)) {
  11582. res[key$2] = proxyNormalSlot(normalSlots, key$2);
  11583. }
  11584. }
  11585. // avoriaz seems to mock a non-extensible $scopedSlots object
  11586. // and when that is passed down this would cause an error
  11587. if (slots && Object.isExtensible(slots)) {
  11588. (slots)._normalized = res;
  11589. }
  11590. def(res, '$stable', isStable);
  11591. def(res, '$key', key);
  11592. def(res, '$hasNormal', hasNormalSlots);
  11593. return res
  11594. }
  11595. function normalizeScopedSlot(normalSlots, key, fn) {
  11596. var normalized = function () {
  11597. var res = arguments.length ? fn.apply(null, arguments) : fn({});
  11598. res = res && typeof res === 'object' && !Array.isArray(res)
  11599. ? [res] // single vnode
  11600. : normalizeChildren(res);
  11601. return res && (
  11602. res.length === 0 ||
  11603. (res.length === 1 && res[0].isComment) // #9658
  11604. ) ? undefined
  11605. : res
  11606. };
  11607. // this is a slot using the new v-slot syntax without scope. although it is
  11608. // compiled as a scoped slot, render fn users would expect it to be present
  11609. // on this.$slots because the usage is semantically a normal slot.
  11610. if (fn.proxy) {
  11611. Object.defineProperty(normalSlots, key, {
  11612. get: normalized,
  11613. enumerable: true,
  11614. configurable: true
  11615. });
  11616. }
  11617. return normalized
  11618. }
  11619. function proxyNormalSlot(slots, key) {
  11620. return function () { return slots[key]; }
  11621. }
  11622. /* */
  11623. /**
  11624. * Runtime helper for rendering v-for lists.
  11625. */
  11626. function renderList (
  11627. val,
  11628. render
  11629. ) {
  11630. var ret, i, l, keys, key;
  11631. if (Array.isArray(val) || typeof val === 'string') {
  11632. ret = new Array(val.length);
  11633. for (i = 0, l = val.length; i < l; i++) {
  11634. ret[i] = render(val[i], i, i, i); // fixed by xxxxxx
  11635. }
  11636. } else if (typeof val === 'number') {
  11637. ret = new Array(val);
  11638. for (i = 0; i < val; i++) {
  11639. ret[i] = render(i + 1, i, i, i); // fixed by xxxxxx
  11640. }
  11641. } else if (isObject(val)) {
  11642. if (hasSymbol && val[Symbol.iterator]) {
  11643. ret = [];
  11644. var iterator = val[Symbol.iterator]();
  11645. var result = iterator.next();
  11646. while (!result.done) {
  11647. ret.push(render(result.value, ret.length, i, i++)); // fixed by xxxxxx
  11648. result = iterator.next();
  11649. }
  11650. } else {
  11651. keys = Object.keys(val);
  11652. ret = new Array(keys.length);
  11653. for (i = 0, l = keys.length; i < l; i++) {
  11654. key = keys[i];
  11655. ret[i] = render(val[key], key, i, i); // fixed by xxxxxx
  11656. }
  11657. }
  11658. }
  11659. if (!isDef(ret)) {
  11660. ret = [];
  11661. }
  11662. (ret)._isVList = true;
  11663. return ret
  11664. }
  11665. /* */
  11666. /**
  11667. * Runtime helper for rendering <slot>
  11668. */
  11669. function renderSlot (
  11670. name,
  11671. fallback,
  11672. props,
  11673. bindObject
  11674. ) {
  11675. var scopedSlotFn = this.$scopedSlots[name];
  11676. var nodes;
  11677. if (scopedSlotFn) { // scoped slot
  11678. props = props || {};
  11679. if (bindObject) {
  11680. if ( true && !isObject(bindObject)) {
  11681. warn(
  11682. 'slot v-bind without argument expects an Object',
  11683. this
  11684. );
  11685. }
  11686. props = extend(extend({}, bindObject), props);
  11687. }
  11688. // fixed by xxxxxx app-plus scopedSlot
  11689. nodes = scopedSlotFn(props, this, props._i) || fallback;
  11690. } else {
  11691. nodes = this.$slots[name] || fallback;
  11692. }
  11693. var target = props && props.slot;
  11694. if (target) {
  11695. return this.$createElement('template', { slot: target }, nodes)
  11696. } else {
  11697. return nodes
  11698. }
  11699. }
  11700. /* */
  11701. /**
  11702. * Runtime helper for resolving filters
  11703. */
  11704. function resolveFilter (id) {
  11705. return resolveAsset(this.$options, 'filters', id, true) || identity
  11706. }
  11707. /* */
  11708. function isKeyNotMatch (expect, actual) {
  11709. if (Array.isArray(expect)) {
  11710. return expect.indexOf(actual) === -1
  11711. } else {
  11712. return expect !== actual
  11713. }
  11714. }
  11715. /**
  11716. * Runtime helper for checking keyCodes from config.
  11717. * exposed as Vue.prototype._k
  11718. * passing in eventKeyName as last argument separately for backwards compat
  11719. */
  11720. function checkKeyCodes (
  11721. eventKeyCode,
  11722. key,
  11723. builtInKeyCode,
  11724. eventKeyName,
  11725. builtInKeyName
  11726. ) {
  11727. var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
  11728. if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
  11729. return isKeyNotMatch(builtInKeyName, eventKeyName)
  11730. } else if (mappedKeyCode) {
  11731. return isKeyNotMatch(mappedKeyCode, eventKeyCode)
  11732. } else if (eventKeyName) {
  11733. return hyphenate(eventKeyName) !== key
  11734. }
  11735. }
  11736. /* */
  11737. /**
  11738. * Runtime helper for merging v-bind="object" into a VNode's data.
  11739. */
  11740. function bindObjectProps (
  11741. data,
  11742. tag,
  11743. value,
  11744. asProp,
  11745. isSync
  11746. ) {
  11747. if (value) {
  11748. if (!isObject(value)) {
  11749. true && warn(
  11750. 'v-bind without argument expects an Object or Array value',
  11751. this
  11752. );
  11753. } else {
  11754. if (Array.isArray(value)) {
  11755. value = toObject(value);
  11756. }
  11757. var hash;
  11758. var loop = function ( key ) {
  11759. if (
  11760. key === 'class' ||
  11761. key === 'style' ||
  11762. isReservedAttribute(key)
  11763. ) {
  11764. hash = data;
  11765. } else {
  11766. var type = data.attrs && data.attrs.type;
  11767. hash = asProp || config.mustUseProp(tag, type, key)
  11768. ? data.domProps || (data.domProps = {})
  11769. : data.attrs || (data.attrs = {});
  11770. }
  11771. var camelizedKey = camelize(key);
  11772. var hyphenatedKey = hyphenate(key);
  11773. if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
  11774. hash[key] = value[key];
  11775. if (isSync) {
  11776. var on = data.on || (data.on = {});
  11777. on[("update:" + key)] = function ($event) {
  11778. value[key] = $event;
  11779. };
  11780. }
  11781. }
  11782. };
  11783. for (var key in value) loop( key );
  11784. }
  11785. }
  11786. return data
  11787. }
  11788. /* */
  11789. /**
  11790. * Runtime helper for rendering static trees.
  11791. */
  11792. function renderStatic (
  11793. index,
  11794. isInFor
  11795. ) {
  11796. var cached = this._staticTrees || (this._staticTrees = []);
  11797. var tree = cached[index];
  11798. // if has already-rendered static tree and not inside v-for,
  11799. // we can reuse the same tree.
  11800. if (tree && !isInFor) {
  11801. return tree
  11802. }
  11803. // otherwise, render a fresh tree.
  11804. tree = cached[index] = this.$options.staticRenderFns[index].call(
  11805. this._renderProxy,
  11806. null,
  11807. this // for render fns generated for functional component templates
  11808. );
  11809. markStatic(tree, ("__static__" + index), false);
  11810. return tree
  11811. }
  11812. /**
  11813. * Runtime helper for v-once.
  11814. * Effectively it means marking the node as static with a unique key.
  11815. */
  11816. function markOnce (
  11817. tree,
  11818. index,
  11819. key
  11820. ) {
  11821. markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
  11822. return tree
  11823. }
  11824. function markStatic (
  11825. tree,
  11826. key,
  11827. isOnce
  11828. ) {
  11829. if (Array.isArray(tree)) {
  11830. for (var i = 0; i < tree.length; i++) {
  11831. if (tree[i] && typeof tree[i] !== 'string') {
  11832. markStaticNode(tree[i], (key + "_" + i), isOnce);
  11833. }
  11834. }
  11835. } else {
  11836. markStaticNode(tree, key, isOnce);
  11837. }
  11838. }
  11839. function markStaticNode (node, key, isOnce) {
  11840. node.isStatic = true;
  11841. node.key = key;
  11842. node.isOnce = isOnce;
  11843. }
  11844. /* */
  11845. function bindObjectListeners (data, value) {
  11846. if (value) {
  11847. if (!isPlainObject(value)) {
  11848. true && warn(
  11849. 'v-on without argument expects an Object value',
  11850. this
  11851. );
  11852. } else {
  11853. var on = data.on = data.on ? extend({}, data.on) : {};
  11854. for (var key in value) {
  11855. var existing = on[key];
  11856. var ours = value[key];
  11857. on[key] = existing ? [].concat(existing, ours) : ours;
  11858. }
  11859. }
  11860. }
  11861. return data
  11862. }
  11863. /* */
  11864. function resolveScopedSlots (
  11865. fns, // see flow/vnode
  11866. res,
  11867. // the following are added in 2.6
  11868. hasDynamicKeys,
  11869. contentHashKey
  11870. ) {
  11871. res = res || { $stable: !hasDynamicKeys };
  11872. for (var i = 0; i < fns.length; i++) {
  11873. var slot = fns[i];
  11874. if (Array.isArray(slot)) {
  11875. resolveScopedSlots(slot, res, hasDynamicKeys);
  11876. } else if (slot) {
  11877. // marker for reverse proxying v-slot without scope on this.$slots
  11878. if (slot.proxy) {
  11879. slot.fn.proxy = true;
  11880. }
  11881. res[slot.key] = slot.fn;
  11882. }
  11883. }
  11884. if (contentHashKey) {
  11885. (res).$key = contentHashKey;
  11886. }
  11887. return res
  11888. }
  11889. /* */
  11890. function bindDynamicKeys (baseObj, values) {
  11891. for (var i = 0; i < values.length; i += 2) {
  11892. var key = values[i];
  11893. if (typeof key === 'string' && key) {
  11894. baseObj[values[i]] = values[i + 1];
  11895. } else if ( true && key !== '' && key !== null) {
  11896. // null is a special value for explicitly removing a binding
  11897. warn(
  11898. ("Invalid value for dynamic directive argument (expected string or null): " + key),
  11899. this
  11900. );
  11901. }
  11902. }
  11903. return baseObj
  11904. }
  11905. // helper to dynamically append modifier runtime markers to event names.
  11906. // ensure only append when value is already string, otherwise it will be cast
  11907. // to string and cause the type check to miss.
  11908. function prependModifier (value, symbol) {
  11909. return typeof value === 'string' ? symbol + value : value
  11910. }
  11911. /* */
  11912. function installRenderHelpers (target) {
  11913. target._o = markOnce;
  11914. target._n = toNumber;
  11915. target._s = toString;
  11916. target._l = renderList;
  11917. target._t = renderSlot;
  11918. target._q = looseEqual;
  11919. target._i = looseIndexOf;
  11920. target._m = renderStatic;
  11921. target._f = resolveFilter;
  11922. target._k = checkKeyCodes;
  11923. target._b = bindObjectProps;
  11924. target._v = createTextVNode;
  11925. target._e = createEmptyVNode;
  11926. target._u = resolveScopedSlots;
  11927. target._g = bindObjectListeners;
  11928. target._d = bindDynamicKeys;
  11929. target._p = prependModifier;
  11930. }
  11931. /* */
  11932. function FunctionalRenderContext (
  11933. data,
  11934. props,
  11935. children,
  11936. parent,
  11937. Ctor
  11938. ) {
  11939. var this$1 = this;
  11940. var options = Ctor.options;
  11941. // ensure the createElement function in functional components
  11942. // gets a unique context - this is necessary for correct named slot check
  11943. var contextVm;
  11944. if (hasOwn(parent, '_uid')) {
  11945. contextVm = Object.create(parent);
  11946. // $flow-disable-line
  11947. contextVm._original = parent;
  11948. } else {
  11949. // the context vm passed in is a functional context as well.
  11950. // in this case we want to make sure we are able to get a hold to the
  11951. // real context instance.
  11952. contextVm = parent;
  11953. // $flow-disable-line
  11954. parent = parent._original;
  11955. }
  11956. var isCompiled = isTrue(options._compiled);
  11957. var needNormalization = !isCompiled;
  11958. this.data = data;
  11959. this.props = props;
  11960. this.children = children;
  11961. this.parent = parent;
  11962. this.listeners = data.on || emptyObject;
  11963. this.injections = resolveInject(options.inject, parent);
  11964. this.slots = function () {
  11965. if (!this$1.$slots) {
  11966. normalizeScopedSlots(
  11967. data.scopedSlots,
  11968. this$1.$slots = resolveSlots(children, parent)
  11969. );
  11970. }
  11971. return this$1.$slots
  11972. };
  11973. Object.defineProperty(this, 'scopedSlots', ({
  11974. enumerable: true,
  11975. get: function get () {
  11976. return normalizeScopedSlots(data.scopedSlots, this.slots())
  11977. }
  11978. }));
  11979. // support for compiled functional template
  11980. if (isCompiled) {
  11981. // exposing $options for renderStatic()
  11982. this.$options = options;
  11983. // pre-resolve slots for renderSlot()
  11984. this.$slots = this.slots();
  11985. this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
  11986. }
  11987. if (options._scopeId) {
  11988. this._c = function (a, b, c, d) {
  11989. var vnode = createElement(contextVm, a, b, c, d, needNormalization);
  11990. if (vnode && !Array.isArray(vnode)) {
  11991. vnode.fnScopeId = options._scopeId;
  11992. vnode.fnContext = parent;
  11993. }
  11994. return vnode
  11995. };
  11996. } else {
  11997. this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
  11998. }
  11999. }
  12000. installRenderHelpers(FunctionalRenderContext.prototype);
  12001. function createFunctionalComponent (
  12002. Ctor,
  12003. propsData,
  12004. data,
  12005. contextVm,
  12006. children
  12007. ) {
  12008. var options = Ctor.options;
  12009. var props = {};
  12010. var propOptions = options.props;
  12011. if (isDef(propOptions)) {
  12012. for (var key in propOptions) {
  12013. props[key] = validateProp(key, propOptions, propsData || emptyObject);
  12014. }
  12015. } else {
  12016. if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
  12017. if (isDef(data.props)) { mergeProps(props, data.props); }
  12018. }
  12019. var renderContext = new FunctionalRenderContext(
  12020. data,
  12021. props,
  12022. children,
  12023. contextVm,
  12024. Ctor
  12025. );
  12026. var vnode = options.render.call(null, renderContext._c, renderContext);
  12027. if (vnode instanceof VNode) {
  12028. return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
  12029. } else if (Array.isArray(vnode)) {
  12030. var vnodes = normalizeChildren(vnode) || [];
  12031. var res = new Array(vnodes.length);
  12032. for (var i = 0; i < vnodes.length; i++) {
  12033. res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
  12034. }
  12035. return res
  12036. }
  12037. }
  12038. function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
  12039. // #7817 clone node before setting fnContext, otherwise if the node is reused
  12040. // (e.g. it was from a cached normal slot) the fnContext causes named slots
  12041. // that should not be matched to match.
  12042. var clone = cloneVNode(vnode);
  12043. clone.fnContext = contextVm;
  12044. clone.fnOptions = options;
  12045. if (true) {
  12046. (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
  12047. }
  12048. if (data.slot) {
  12049. (clone.data || (clone.data = {})).slot = data.slot;
  12050. }
  12051. return clone
  12052. }
  12053. function mergeProps (to, from) {
  12054. for (var key in from) {
  12055. to[camelize(key)] = from[key];
  12056. }
  12057. }
  12058. /* */
  12059. /* */
  12060. /* */
  12061. /* */
  12062. // inline hooks to be invoked on component VNodes during patch
  12063. var componentVNodeHooks = {
  12064. init: function init (vnode, hydrating) {
  12065. if (
  12066. vnode.componentInstance &&
  12067. !vnode.componentInstance._isDestroyed &&
  12068. vnode.data.keepAlive
  12069. ) {
  12070. // kept-alive components, treat as a patch
  12071. var mountedNode = vnode; // work around flow
  12072. componentVNodeHooks.prepatch(mountedNode, mountedNode);
  12073. } else {
  12074. var child = vnode.componentInstance = createComponentInstanceForVnode(
  12075. vnode,
  12076. activeInstance
  12077. );
  12078. child.$mount(hydrating ? vnode.elm : undefined, hydrating);
  12079. }
  12080. },
  12081. prepatch: function prepatch (oldVnode, vnode) {
  12082. var options = vnode.componentOptions;
  12083. var child = vnode.componentInstance = oldVnode.componentInstance;
  12084. updateChildComponent(
  12085. child,
  12086. options.propsData, // updated props
  12087. options.listeners, // updated listeners
  12088. vnode, // new parent vnode
  12089. options.children // new children
  12090. );
  12091. },
  12092. insert: function insert (vnode) {
  12093. var context = vnode.context;
  12094. var componentInstance = vnode.componentInstance;
  12095. if (!componentInstance._isMounted) {
  12096. callHook(componentInstance, 'onServiceCreated');
  12097. callHook(componentInstance, 'onServiceAttached');
  12098. componentInstance._isMounted = true;
  12099. callHook(componentInstance, 'mounted');
  12100. }
  12101. if (vnode.data.keepAlive) {
  12102. if (context._isMounted) {
  12103. // vue-router#1212
  12104. // During updates, a kept-alive component's child components may
  12105. // change, so directly walking the tree here may call activated hooks
  12106. // on incorrect children. Instead we push them into a queue which will
  12107. // be processed after the whole patch process ended.
  12108. queueActivatedComponent(componentInstance);
  12109. } else {
  12110. activateChildComponent(componentInstance, true /* direct */);
  12111. }
  12112. }
  12113. },
  12114. destroy: function destroy (vnode) {
  12115. var componentInstance = vnode.componentInstance;
  12116. if (!componentInstance._isDestroyed) {
  12117. if (!vnode.data.keepAlive) {
  12118. componentInstance.$destroy();
  12119. } else {
  12120. deactivateChildComponent(componentInstance, true /* direct */);
  12121. }
  12122. }
  12123. }
  12124. };
  12125. var hooksToMerge = Object.keys(componentVNodeHooks);
  12126. function createComponent (
  12127. Ctor,
  12128. data,
  12129. context,
  12130. children,
  12131. tag
  12132. ) {
  12133. if (isUndef(Ctor)) {
  12134. return
  12135. }
  12136. var baseCtor = context.$options._base;
  12137. // plain options object: turn it into a constructor
  12138. if (isObject(Ctor)) {
  12139. Ctor = baseCtor.extend(Ctor);
  12140. }
  12141. // if at this stage it's not a constructor or an async component factory,
  12142. // reject.
  12143. if (typeof Ctor !== 'function') {
  12144. if (true) {
  12145. warn(("Invalid Component definition: " + (String(Ctor))), context);
  12146. }
  12147. return
  12148. }
  12149. // async component
  12150. var asyncFactory;
  12151. if (isUndef(Ctor.cid)) {
  12152. asyncFactory = Ctor;
  12153. Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
  12154. if (Ctor === undefined) {
  12155. // return a placeholder node for async component, which is rendered
  12156. // as a comment node but preserves all the raw information for the node.
  12157. // the information will be used for async server-rendering and hydration.
  12158. return createAsyncPlaceholder(
  12159. asyncFactory,
  12160. data,
  12161. context,
  12162. children,
  12163. tag
  12164. )
  12165. }
  12166. }
  12167. data = data || {};
  12168. // resolve constructor options in case global mixins are applied after
  12169. // component constructor creation
  12170. resolveConstructorOptions(Ctor);
  12171. // transform component v-model data into props & events
  12172. if (isDef(data.model)) {
  12173. transformModel(Ctor.options, data);
  12174. }
  12175. // extract props
  12176. var propsData = extractPropsFromVNodeData(data, Ctor, tag, context); // fixed by xxxxxx
  12177. // functional component
  12178. if (isTrue(Ctor.options.functional)) {
  12179. return createFunctionalComponent(Ctor, propsData, data, context, children)
  12180. }
  12181. // extract listeners, since these needs to be treated as
  12182. // child component listeners instead of DOM listeners
  12183. var listeners = data.on;
  12184. // replace with listeners with .native modifier
  12185. // so it gets processed during parent component patch.
  12186. data.on = data.nativeOn;
  12187. if (isTrue(Ctor.options.abstract)) {
  12188. // abstract components do not keep anything
  12189. // other than props & listeners & slot
  12190. // work around flow
  12191. var slot = data.slot;
  12192. data = {};
  12193. if (slot) {
  12194. data.slot = slot;
  12195. }
  12196. }
  12197. // install component management hooks onto the placeholder node
  12198. installComponentHooks(data);
  12199. // return a placeholder vnode
  12200. var name = Ctor.options.name || tag;
  12201. var vnode = new VNode(
  12202. ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
  12203. data, undefined, undefined, undefined, context,
  12204. { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
  12205. asyncFactory
  12206. );
  12207. return vnode
  12208. }
  12209. function createComponentInstanceForVnode (
  12210. vnode, // we know it's MountedComponentVNode but flow doesn't
  12211. parent // activeInstance in lifecycle state
  12212. ) {
  12213. var options = {
  12214. _isComponent: true,
  12215. _parentVnode: vnode,
  12216. parent: parent
  12217. };
  12218. // check inline-template render functions
  12219. var inlineTemplate = vnode.data.inlineTemplate;
  12220. if (isDef(inlineTemplate)) {
  12221. options.render = inlineTemplate.render;
  12222. options.staticRenderFns = inlineTemplate.staticRenderFns;
  12223. }
  12224. return new vnode.componentOptions.Ctor(options)
  12225. }
  12226. function installComponentHooks (data) {
  12227. var hooks = data.hook || (data.hook = {});
  12228. for (var i = 0; i < hooksToMerge.length; i++) {
  12229. var key = hooksToMerge[i];
  12230. var existing = hooks[key];
  12231. var toMerge = componentVNodeHooks[key];
  12232. if (existing !== toMerge && !(existing && existing._merged)) {
  12233. hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
  12234. }
  12235. }
  12236. }
  12237. function mergeHook$1 (f1, f2) {
  12238. var merged = function (a, b) {
  12239. // flow complains about extra args which is why we use any
  12240. f1(a, b);
  12241. f2(a, b);
  12242. };
  12243. merged._merged = true;
  12244. return merged
  12245. }
  12246. // transform component v-model info (value and callback) into
  12247. // prop and event handler respectively.
  12248. function transformModel (options, data) {
  12249. var prop = (options.model && options.model.prop) || 'value';
  12250. var event = (options.model && options.model.event) || 'input'
  12251. ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
  12252. var on = data.on || (data.on = {});
  12253. var existing = on[event];
  12254. var callback = data.model.callback;
  12255. if (isDef(existing)) {
  12256. if (
  12257. Array.isArray(existing)
  12258. ? existing.indexOf(callback) === -1
  12259. : existing !== callback
  12260. ) {
  12261. on[event] = [callback].concat(existing);
  12262. }
  12263. } else {
  12264. on[event] = callback;
  12265. }
  12266. }
  12267. /* */
  12268. var SIMPLE_NORMALIZE = 1;
  12269. var ALWAYS_NORMALIZE = 2;
  12270. // wrapper function for providing a more flexible interface
  12271. // without getting yelled at by flow
  12272. function createElement (
  12273. context,
  12274. tag,
  12275. data,
  12276. children,
  12277. normalizationType,
  12278. alwaysNormalize
  12279. ) {
  12280. if (Array.isArray(data) || isPrimitive(data)) {
  12281. normalizationType = children;
  12282. children = data;
  12283. data = undefined;
  12284. }
  12285. if (isTrue(alwaysNormalize)) {
  12286. normalizationType = ALWAYS_NORMALIZE;
  12287. }
  12288. return _createElement(context, tag, data, children, normalizationType)
  12289. }
  12290. function _createElement (
  12291. context,
  12292. tag,
  12293. data,
  12294. children,
  12295. normalizationType
  12296. ) {
  12297. if (isDef(data) && isDef((data).__ob__)) {
  12298. true && warn(
  12299. "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
  12300. 'Always create fresh vnode data objects in each render!',
  12301. context
  12302. );
  12303. return createEmptyVNode()
  12304. }
  12305. // object syntax in v-bind
  12306. if (isDef(data) && isDef(data.is)) {
  12307. tag = data.is;
  12308. }
  12309. if (!tag) {
  12310. // in case of component :is set to falsy value
  12311. return createEmptyVNode()
  12312. }
  12313. // warn against non-primitive key
  12314. if ( true &&
  12315. isDef(data) && isDef(data.key) && !isPrimitive(data.key)
  12316. ) {
  12317. {
  12318. warn(
  12319. 'Avoid using non-primitive value as key, ' +
  12320. 'use string/number value instead.',
  12321. context
  12322. );
  12323. }
  12324. }
  12325. // support single function children as default scoped slot
  12326. if (Array.isArray(children) &&
  12327. typeof children[0] === 'function'
  12328. ) {
  12329. data = data || {};
  12330. data.scopedSlots = { default: children[0] };
  12331. children.length = 0;
  12332. }
  12333. if (normalizationType === ALWAYS_NORMALIZE) {
  12334. children = normalizeChildren(children);
  12335. } else if (normalizationType === SIMPLE_NORMALIZE) {
  12336. children = simpleNormalizeChildren(children);
  12337. }
  12338. var vnode, ns;
  12339. if (typeof tag === 'string') {
  12340. var Ctor;
  12341. ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
  12342. if (config.isReservedTag(tag)) {
  12343. // platform built-in elements
  12344. if ( true && isDef(data) && isDef(data.nativeOn)) {
  12345. warn(
  12346. ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."),
  12347. context
  12348. );
  12349. }
  12350. vnode = new VNode(
  12351. config.parsePlatformTagName(tag), data, children,
  12352. undefined, undefined, context
  12353. );
  12354. } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
  12355. // component
  12356. vnode = createComponent(Ctor, data, context, children, tag);
  12357. } else {
  12358. // unknown or unlisted namespaced elements
  12359. // check at runtime because it may get assigned a namespace when its
  12360. // parent normalizes children
  12361. vnode = new VNode(
  12362. tag, data, children,
  12363. undefined, undefined, context
  12364. );
  12365. }
  12366. } else {
  12367. // direct component options / constructor
  12368. vnode = createComponent(tag, data, context, children);
  12369. }
  12370. if (Array.isArray(vnode)) {
  12371. return vnode
  12372. } else if (isDef(vnode)) {
  12373. if (isDef(ns)) { applyNS(vnode, ns); }
  12374. if (isDef(data)) { registerDeepBindings(data); }
  12375. return vnode
  12376. } else {
  12377. return createEmptyVNode()
  12378. }
  12379. }
  12380. function applyNS (vnode, ns, force) {
  12381. vnode.ns = ns;
  12382. if (vnode.tag === 'foreignObject') {
  12383. // use default namespace inside foreignObject
  12384. ns = undefined;
  12385. force = true;
  12386. }
  12387. if (isDef(vnode.children)) {
  12388. for (var i = 0, l = vnode.children.length; i < l; i++) {
  12389. var child = vnode.children[i];
  12390. if (isDef(child.tag) && (
  12391. isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
  12392. applyNS(child, ns, force);
  12393. }
  12394. }
  12395. }
  12396. }
  12397. // ref #5318
  12398. // necessary to ensure parent re-render when deep bindings like :style and
  12399. // :class are used on slot nodes
  12400. function registerDeepBindings (data) {
  12401. if (isObject(data.style)) {
  12402. traverse(data.style);
  12403. }
  12404. if (isObject(data.class)) {
  12405. traverse(data.class);
  12406. }
  12407. }
  12408. /* */
  12409. function initRender (vm) {
  12410. vm._vnode = null; // the root of the child tree
  12411. vm._staticTrees = null; // v-once cached trees
  12412. var options = vm.$options;
  12413. var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
  12414. var renderContext = parentVnode && parentVnode.context;
  12415. vm.$slots = resolveSlots(options._renderChildren, renderContext);
  12416. vm.$scopedSlots = emptyObject;
  12417. // bind the createElement fn to this instance
  12418. // so that we get proper render context inside it.
  12419. // args order: tag, data, children, normalizationType, alwaysNormalize
  12420. // internal version is used by render functions compiled from templates
  12421. vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
  12422. // normalization is always applied for the public version, used in
  12423. // user-written render functions.
  12424. vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
  12425. // $attrs & $listeners are exposed for easier HOC creation.
  12426. // they need to be reactive so that HOCs using them are always updated
  12427. var parentData = parentVnode && parentVnode.data;
  12428. /* istanbul ignore else */
  12429. if (true) {
  12430. defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
  12431. !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
  12432. }, true);
  12433. defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
  12434. !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
  12435. }, true);
  12436. } else {}
  12437. }
  12438. var currentRenderingInstance = null;
  12439. function renderMixin (Vue) {
  12440. // install runtime convenience helpers
  12441. installRenderHelpers(Vue.prototype);
  12442. Vue.prototype.$nextTick = function (fn) {
  12443. return nextTick(fn, this)
  12444. };
  12445. Vue.prototype._render = function () {
  12446. var vm = this;
  12447. var ref = vm.$options;
  12448. var render = ref.render;
  12449. var _parentVnode = ref._parentVnode;
  12450. if (_parentVnode) {
  12451. vm.$scopedSlots = normalizeScopedSlots(
  12452. _parentVnode.data.scopedSlots,
  12453. vm.$slots,
  12454. vm.$scopedSlots
  12455. );
  12456. }
  12457. // set parent vnode. this allows render functions to have access
  12458. // to the data on the placeholder node.
  12459. vm.$vnode = _parentVnode;
  12460. // render self
  12461. var vnode;
  12462. try {
  12463. // There's no need to maintain a stack because all render fns are called
  12464. // separately from one another. Nested component's render fns are called
  12465. // when parent component is patched.
  12466. currentRenderingInstance = vm;
  12467. vnode = render.call(vm._renderProxy, vm.$createElement);
  12468. } catch (e) {
  12469. handleError(e, vm, "render");
  12470. // return error render result,
  12471. // or previous vnode to prevent render error causing blank component
  12472. /* istanbul ignore else */
  12473. if ( true && vm.$options.renderError) {
  12474. try {
  12475. vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
  12476. } catch (e) {
  12477. handleError(e, vm, "renderError");
  12478. vnode = vm._vnode;
  12479. }
  12480. } else {
  12481. vnode = vm._vnode;
  12482. }
  12483. } finally {
  12484. currentRenderingInstance = null;
  12485. }
  12486. // if the returned array contains only a single node, allow it
  12487. if (Array.isArray(vnode) && vnode.length === 1) {
  12488. vnode = vnode[0];
  12489. }
  12490. // return empty vnode in case the render function errored out
  12491. if (!(vnode instanceof VNode)) {
  12492. if ( true && Array.isArray(vnode)) {
  12493. warn(
  12494. 'Multiple root nodes returned from render function. Render function ' +
  12495. 'should return a single root node.',
  12496. vm
  12497. );
  12498. }
  12499. vnode = createEmptyVNode();
  12500. }
  12501. // set parent
  12502. vnode.parent = _parentVnode;
  12503. return vnode
  12504. };
  12505. }
  12506. /* */
  12507. function ensureCtor (comp, base) {
  12508. if (
  12509. comp.__esModule ||
  12510. (hasSymbol && comp[Symbol.toStringTag] === 'Module')
  12511. ) {
  12512. comp = comp.default;
  12513. }
  12514. return isObject(comp)
  12515. ? base.extend(comp)
  12516. : comp
  12517. }
  12518. function createAsyncPlaceholder (
  12519. factory,
  12520. data,
  12521. context,
  12522. children,
  12523. tag
  12524. ) {
  12525. var node = createEmptyVNode();
  12526. node.asyncFactory = factory;
  12527. node.asyncMeta = { data: data, context: context, children: children, tag: tag };
  12528. return node
  12529. }
  12530. function resolveAsyncComponent (
  12531. factory,
  12532. baseCtor
  12533. ) {
  12534. if (isTrue(factory.error) && isDef(factory.errorComp)) {
  12535. return factory.errorComp
  12536. }
  12537. if (isDef(factory.resolved)) {
  12538. return factory.resolved
  12539. }
  12540. var owner = currentRenderingInstance;
  12541. if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
  12542. // already pending
  12543. factory.owners.push(owner);
  12544. }
  12545. if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
  12546. return factory.loadingComp
  12547. }
  12548. if (owner && !isDef(factory.owners)) {
  12549. var owners = factory.owners = [owner];
  12550. var sync = true;
  12551. var timerLoading = null;
  12552. var timerTimeout = null
  12553. ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
  12554. var forceRender = function (renderCompleted) {
  12555. for (var i = 0, l = owners.length; i < l; i++) {
  12556. (owners[i]).$forceUpdate();
  12557. }
  12558. if (renderCompleted) {
  12559. owners.length = 0;
  12560. if (timerLoading !== null) {
  12561. clearTimeout(timerLoading);
  12562. timerLoading = null;
  12563. }
  12564. if (timerTimeout !== null) {
  12565. clearTimeout(timerTimeout);
  12566. timerTimeout = null;
  12567. }
  12568. }
  12569. };
  12570. var resolve = once(function (res) {
  12571. // cache resolved
  12572. factory.resolved = ensureCtor(res, baseCtor);
  12573. // invoke callbacks only if this is not a synchronous resolve
  12574. // (async resolves are shimmed as synchronous during SSR)
  12575. if (!sync) {
  12576. forceRender(true);
  12577. } else {
  12578. owners.length = 0;
  12579. }
  12580. });
  12581. var reject = once(function (reason) {
  12582. true && warn(
  12583. "Failed to resolve async component: " + (String(factory)) +
  12584. (reason ? ("\nReason: " + reason) : '')
  12585. );
  12586. if (isDef(factory.errorComp)) {
  12587. factory.error = true;
  12588. forceRender(true);
  12589. }
  12590. });
  12591. var res = factory(resolve, reject);
  12592. if (isObject(res)) {
  12593. if (isPromise(res)) {
  12594. // () => Promise
  12595. if (isUndef(factory.resolved)) {
  12596. res.then(resolve, reject);
  12597. }
  12598. } else if (isPromise(res.component)) {
  12599. res.component.then(resolve, reject);
  12600. if (isDef(res.error)) {
  12601. factory.errorComp = ensureCtor(res.error, baseCtor);
  12602. }
  12603. if (isDef(res.loading)) {
  12604. factory.loadingComp = ensureCtor(res.loading, baseCtor);
  12605. if (res.delay === 0) {
  12606. factory.loading = true;
  12607. } else {
  12608. timerLoading = setTimeout(function () {
  12609. timerLoading = null;
  12610. if (isUndef(factory.resolved) && isUndef(factory.error)) {
  12611. factory.loading = true;
  12612. forceRender(false);
  12613. }
  12614. }, res.delay || 200);
  12615. }
  12616. }
  12617. if (isDef(res.timeout)) {
  12618. timerTimeout = setTimeout(function () {
  12619. timerTimeout = null;
  12620. if (isUndef(factory.resolved)) {
  12621. reject(
  12622. true
  12623. ? ("timeout (" + (res.timeout) + "ms)")
  12624. : undefined
  12625. );
  12626. }
  12627. }, res.timeout);
  12628. }
  12629. }
  12630. }
  12631. sync = false;
  12632. // return in case resolved synchronously
  12633. return factory.loading
  12634. ? factory.loadingComp
  12635. : factory.resolved
  12636. }
  12637. }
  12638. /* */
  12639. function isAsyncPlaceholder (node) {
  12640. return node.isComment && node.asyncFactory
  12641. }
  12642. /* */
  12643. function getFirstComponentChild (children) {
  12644. if (Array.isArray(children)) {
  12645. for (var i = 0; i < children.length; i++) {
  12646. var c = children[i];
  12647. if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
  12648. return c
  12649. }
  12650. }
  12651. }
  12652. }
  12653. /* */
  12654. /* */
  12655. function initEvents (vm) {
  12656. vm._events = Object.create(null);
  12657. vm._hasHookEvent = false;
  12658. // init parent attached events
  12659. var listeners = vm.$options._parentListeners;
  12660. if (listeners) {
  12661. updateComponentListeners(vm, listeners);
  12662. }
  12663. }
  12664. var target;
  12665. function add (event, fn) {
  12666. target.$on(event, fn);
  12667. }
  12668. function remove$1 (event, fn) {
  12669. target.$off(event, fn);
  12670. }
  12671. function createOnceHandler (event, fn) {
  12672. var _target = target;
  12673. return function onceHandler () {
  12674. var res = fn.apply(null, arguments);
  12675. if (res !== null) {
  12676. _target.$off(event, onceHandler);
  12677. }
  12678. }
  12679. }
  12680. function updateComponentListeners (
  12681. vm,
  12682. listeners,
  12683. oldListeners
  12684. ) {
  12685. target = vm;
  12686. updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
  12687. target = undefined;
  12688. }
  12689. function eventsMixin (Vue) {
  12690. var hookRE = /^hook:/;
  12691. Vue.prototype.$on = function (event, fn) {
  12692. var vm = this;
  12693. if (Array.isArray(event)) {
  12694. for (var i = 0, l = event.length; i < l; i++) {
  12695. vm.$on(event[i], fn);
  12696. }
  12697. } else {
  12698. (vm._events[event] || (vm._events[event] = [])).push(fn);
  12699. // optimize hook:event cost by using a boolean flag marked at registration
  12700. // instead of a hash lookup
  12701. if (hookRE.test(event)) {
  12702. vm._hasHookEvent = true;
  12703. }
  12704. }
  12705. return vm
  12706. };
  12707. Vue.prototype.$once = function (event, fn) {
  12708. var vm = this;
  12709. function on () {
  12710. vm.$off(event, on);
  12711. fn.apply(vm, arguments);
  12712. }
  12713. on.fn = fn;
  12714. vm.$on(event, on);
  12715. return vm
  12716. };
  12717. Vue.prototype.$off = function (event, fn) {
  12718. var vm = this;
  12719. // all
  12720. if (!arguments.length) {
  12721. vm._events = Object.create(null);
  12722. return vm
  12723. }
  12724. // array of events
  12725. if (Array.isArray(event)) {
  12726. for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
  12727. vm.$off(event[i$1], fn);
  12728. }
  12729. return vm
  12730. }
  12731. // specific event
  12732. var cbs = vm._events[event];
  12733. if (!cbs) {
  12734. return vm
  12735. }
  12736. if (!fn) {
  12737. vm._events[event] = null;
  12738. return vm
  12739. }
  12740. // specific handler
  12741. var cb;
  12742. var i = cbs.length;
  12743. while (i--) {
  12744. cb = cbs[i];
  12745. if (cb === fn || cb.fn === fn) {
  12746. cbs.splice(i, 1);
  12747. break
  12748. }
  12749. }
  12750. return vm
  12751. };
  12752. Vue.prototype.$emit = function (event) {
  12753. var vm = this;
  12754. if (true) {
  12755. var lowerCaseEvent = event.toLowerCase();
  12756. if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
  12757. tip(
  12758. "Event \"" + lowerCaseEvent + "\" is emitted in component " +
  12759. (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
  12760. "Note that HTML attributes are case-insensitive and you cannot use " +
  12761. "v-on to listen to camelCase events when using in-DOM templates. " +
  12762. "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
  12763. );
  12764. }
  12765. }
  12766. var cbs = vm._events[event];
  12767. if (cbs) {
  12768. cbs = cbs.length > 1 ? toArray(cbs) : cbs;
  12769. var args = toArray(arguments, 1);
  12770. var info = "event handler for \"" + event + "\"";
  12771. for (var i = 0, l = cbs.length; i < l; i++) {
  12772. invokeWithErrorHandling(cbs[i], vm, args, vm, info);
  12773. }
  12774. }
  12775. return vm
  12776. };
  12777. }
  12778. /* */
  12779. var activeInstance = null;
  12780. var isUpdatingChildComponent = false;
  12781. function setActiveInstance(vm) {
  12782. var prevActiveInstance = activeInstance;
  12783. activeInstance = vm;
  12784. return function () {
  12785. activeInstance = prevActiveInstance;
  12786. }
  12787. }
  12788. function initLifecycle (vm) {
  12789. var options = vm.$options;
  12790. // locate first non-abstract parent
  12791. var parent = options.parent;
  12792. if (parent && !options.abstract) {
  12793. while (parent.$options.abstract && parent.$parent) {
  12794. parent = parent.$parent;
  12795. }
  12796. parent.$children.push(vm);
  12797. }
  12798. vm.$parent = parent;
  12799. vm.$root = parent ? parent.$root : vm;
  12800. vm.$children = [];
  12801. vm.$refs = {};
  12802. vm._watcher = null;
  12803. vm._inactive = null;
  12804. vm._directInactive = false;
  12805. vm._isMounted = false;
  12806. vm._isDestroyed = false;
  12807. vm._isBeingDestroyed = false;
  12808. }
  12809. function lifecycleMixin (Vue) {
  12810. Vue.prototype._update = function (vnode, hydrating) {
  12811. var vm = this;
  12812. var prevEl = vm.$el;
  12813. var prevVnode = vm._vnode;
  12814. var restoreActiveInstance = setActiveInstance(vm);
  12815. vm._vnode = vnode;
  12816. // Vue.prototype.__patch__ is injected in entry points
  12817. // based on the rendering backend used.
  12818. if (!prevVnode) {
  12819. // initial render
  12820. vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
  12821. } else {
  12822. // updates
  12823. vm.$el = vm.__patch__(prevVnode, vnode);
  12824. }
  12825. restoreActiveInstance();
  12826. // update __vue__ reference
  12827. if (prevEl) {
  12828. prevEl.__vue__ = null;
  12829. }
  12830. if (vm.$el) {
  12831. vm.$el.__vue__ = vm;
  12832. }
  12833. // if parent is an HOC, update its $el as well
  12834. if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
  12835. vm.$parent.$el = vm.$el;
  12836. }
  12837. // updated hook is called by the scheduler to ensure that children are
  12838. // updated in a parent's updated hook.
  12839. };
  12840. Vue.prototype.$forceUpdate = function () {
  12841. var vm = this;
  12842. if (vm._watcher) {
  12843. vm._watcher.update();
  12844. }
  12845. };
  12846. Vue.prototype.$destroy = function () {
  12847. var vm = this;
  12848. if (vm._isBeingDestroyed) {
  12849. return
  12850. }
  12851. callHook(vm, 'beforeDestroy');
  12852. vm._isBeingDestroyed = true;
  12853. // remove self from parent
  12854. var parent = vm.$parent;
  12855. if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
  12856. remove(parent.$children, vm);
  12857. }
  12858. // teardown watchers
  12859. if (vm._watcher) {
  12860. vm._watcher.teardown();
  12861. }
  12862. var i = vm._watchers.length;
  12863. while (i--) {
  12864. vm._watchers[i].teardown();
  12865. }
  12866. // remove reference from data ob
  12867. // frozen object may not have observer.
  12868. if (vm._data.__ob__) {
  12869. vm._data.__ob__.vmCount--;
  12870. }
  12871. // call the last hook...
  12872. vm._isDestroyed = true;
  12873. // invoke destroy hooks on current rendered tree
  12874. vm.__patch__(vm._vnode, null);
  12875. // fire destroyed hook
  12876. callHook(vm, 'destroyed');
  12877. // turn off all instance listeners.
  12878. vm.$off();
  12879. // remove __vue__ reference
  12880. if (vm.$el) {
  12881. vm.$el.__vue__ = null;
  12882. }
  12883. // release circular reference (#6759)
  12884. if (vm.$vnode) {
  12885. vm.$vnode.parent = null;
  12886. }
  12887. };
  12888. }
  12889. function updateChildComponent (
  12890. vm,
  12891. propsData,
  12892. listeners,
  12893. parentVnode,
  12894. renderChildren
  12895. ) {
  12896. if (true) {
  12897. isUpdatingChildComponent = true;
  12898. }
  12899. // determine whether component has slot children
  12900. // we need to do this before overwriting $options._renderChildren.
  12901. // check if there are dynamic scopedSlots (hand-written or compiled but with
  12902. // dynamic slot names). Static scoped slots compiled from template has the
  12903. // "$stable" marker.
  12904. var newScopedSlots = parentVnode.data.scopedSlots;
  12905. var oldScopedSlots = vm.$scopedSlots;
  12906. var hasDynamicScopedSlot = !!(
  12907. (newScopedSlots && !newScopedSlots.$stable) ||
  12908. (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
  12909. (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
  12910. );
  12911. // Any static slot children from the parent may have changed during parent's
  12912. // update. Dynamic scoped slots may also have changed. In such cases, a forced
  12913. // update is necessary to ensure correctness.
  12914. var needsForceUpdate = !!(
  12915. renderChildren || // has new static slots
  12916. vm.$options._renderChildren || // has old static slots
  12917. hasDynamicScopedSlot
  12918. );
  12919. vm.$options._parentVnode = parentVnode;
  12920. vm.$vnode = parentVnode; // update vm's placeholder node without re-render
  12921. if (vm._vnode) { // update child tree's parent
  12922. vm._vnode.parent = parentVnode;
  12923. }
  12924. vm.$options._renderChildren = renderChildren;
  12925. // update $attrs and $listeners hash
  12926. // these are also reactive so they may trigger child update if the child
  12927. // used them during render
  12928. vm.$attrs = parentVnode.data.attrs || emptyObject;
  12929. vm.$listeners = listeners || emptyObject;
  12930. // update props
  12931. if (propsData && vm.$options.props) {
  12932. toggleObserving(false);
  12933. var props = vm._props;
  12934. var propKeys = vm.$options._propKeys || [];
  12935. for (var i = 0; i < propKeys.length; i++) {
  12936. var key = propKeys[i];
  12937. var propOptions = vm.$options.props; // wtf flow?
  12938. props[key] = validateProp(key, propOptions, propsData, vm);
  12939. }
  12940. toggleObserving(true);
  12941. // keep a copy of raw propsData
  12942. vm.$options.propsData = propsData;
  12943. }
  12944. // fixed by xxxxxx update properties(mp runtime)
  12945. vm._$updateProperties && vm._$updateProperties(vm);
  12946. // update listeners
  12947. listeners = listeners || emptyObject;
  12948. var oldListeners = vm.$options._parentListeners;
  12949. vm.$options._parentListeners = listeners;
  12950. updateComponentListeners(vm, listeners, oldListeners);
  12951. // resolve slots + force update if has children
  12952. if (needsForceUpdate) {
  12953. vm.$slots = resolveSlots(renderChildren, parentVnode.context);
  12954. vm.$forceUpdate();
  12955. }
  12956. if (true) {
  12957. isUpdatingChildComponent = false;
  12958. }
  12959. }
  12960. function isInInactiveTree (vm) {
  12961. while (vm && (vm = vm.$parent)) {
  12962. if (vm._inactive) { return true }
  12963. }
  12964. return false
  12965. }
  12966. function activateChildComponent (vm, direct) {
  12967. if (direct) {
  12968. vm._directInactive = false;
  12969. if (isInInactiveTree(vm)) {
  12970. return
  12971. }
  12972. } else if (vm._directInactive) {
  12973. return
  12974. }
  12975. if (vm._inactive || vm._inactive === null) {
  12976. vm._inactive = false;
  12977. for (var i = 0; i < vm.$children.length; i++) {
  12978. activateChildComponent(vm.$children[i]);
  12979. }
  12980. callHook(vm, 'activated');
  12981. }
  12982. }
  12983. function deactivateChildComponent (vm, direct) {
  12984. if (direct) {
  12985. vm._directInactive = true;
  12986. if (isInInactiveTree(vm)) {
  12987. return
  12988. }
  12989. }
  12990. if (!vm._inactive) {
  12991. vm._inactive = true;
  12992. for (var i = 0; i < vm.$children.length; i++) {
  12993. deactivateChildComponent(vm.$children[i]);
  12994. }
  12995. callHook(vm, 'deactivated');
  12996. }
  12997. }
  12998. function callHook (vm, hook) {
  12999. // #7573 disable dep collection when invoking lifecycle hooks
  13000. pushTarget();
  13001. var handlers = vm.$options[hook];
  13002. var info = hook + " hook";
  13003. if (handlers) {
  13004. for (var i = 0, j = handlers.length; i < j; i++) {
  13005. invokeWithErrorHandling(handlers[i], vm, null, vm, info);
  13006. }
  13007. }
  13008. if (vm._hasHookEvent) {
  13009. vm.$emit('hook:' + hook);
  13010. }
  13011. popTarget();
  13012. }
  13013. /* */
  13014. var MAX_UPDATE_COUNT = 100;
  13015. var queue = [];
  13016. var activatedChildren = [];
  13017. var has = {};
  13018. var circular = {};
  13019. var waiting = false;
  13020. var flushing = false;
  13021. var index = 0;
  13022. /**
  13023. * Reset the scheduler's state.
  13024. */
  13025. function resetSchedulerState () {
  13026. index = queue.length = activatedChildren.length = 0;
  13027. has = {};
  13028. if (true) {
  13029. circular = {};
  13030. }
  13031. waiting = flushing = false;
  13032. }
  13033. // Async edge case #6566 requires saving the timestamp when event listeners are
  13034. // attached. However, calling performance.now() has a perf overhead especially
  13035. // if the page has thousands of event listeners. Instead, we take a timestamp
  13036. // every time the scheduler flushes and use that for all event listeners
  13037. // attached during that flush.
  13038. var currentFlushTimestamp = 0;
  13039. // Async edge case fix requires storing an event listener's attach timestamp.
  13040. var getNow = Date.now;
  13041. // Determine what event timestamp the browser is using. Annoyingly, the
  13042. // timestamp can either be hi-res (relative to page load) or low-res
  13043. // (relative to UNIX epoch), so in order to compare time we have to use the
  13044. // same timestamp type when saving the flush timestamp.
  13045. // All IE versions use low-res event timestamps, and have problematic clock
  13046. // implementations (#9632)
  13047. if (inBrowser && !isIE) {
  13048. var performance = window.performance;
  13049. if (
  13050. performance &&
  13051. typeof performance.now === 'function' &&
  13052. getNow() > document.createEvent('Event').timeStamp
  13053. ) {
  13054. // if the event timestamp, although evaluated AFTER the Date.now(), is
  13055. // smaller than it, it means the event is using a hi-res timestamp,
  13056. // and we need to use the hi-res version for event listener timestamps as
  13057. // well.
  13058. getNow = function () { return performance.now(); };
  13059. }
  13060. }
  13061. /**
  13062. * Flush both queues and run the watchers.
  13063. */
  13064. function flushSchedulerQueue () {
  13065. currentFlushTimestamp = getNow();
  13066. flushing = true;
  13067. var watcher, id;
  13068. // Sort queue before flush.
  13069. // This ensures that:
  13070. // 1. Components are updated from parent to child. (because parent is always
  13071. // created before the child)
  13072. // 2. A component's user watchers are run before its render watcher (because
  13073. // user watchers are created before the render watcher)
  13074. // 3. If a component is destroyed during a parent component's watcher run,
  13075. // its watchers can be skipped.
  13076. queue.sort(function (a, b) { return a.id - b.id; });
  13077. // do not cache length because more watchers might be pushed
  13078. // as we run existing watchers
  13079. for (index = 0; index < queue.length; index++) {
  13080. watcher = queue[index];
  13081. if (watcher.before) {
  13082. watcher.before();
  13083. }
  13084. id = watcher.id;
  13085. has[id] = null;
  13086. watcher.run();
  13087. // in dev build, check and stop circular updates.
  13088. if ( true && has[id] != null) {
  13089. circular[id] = (circular[id] || 0) + 1;
  13090. if (circular[id] > MAX_UPDATE_COUNT) {
  13091. warn(
  13092. 'You may have an infinite update loop ' + (
  13093. watcher.user
  13094. ? ("in watcher with expression \"" + (watcher.expression) + "\"")
  13095. : "in a component render function."
  13096. ),
  13097. watcher.vm
  13098. );
  13099. break
  13100. }
  13101. }
  13102. }
  13103. // keep copies of post queues before resetting state
  13104. var activatedQueue = activatedChildren.slice();
  13105. var updatedQueue = queue.slice();
  13106. resetSchedulerState();
  13107. // call component updated and activated hooks
  13108. callActivatedHooks(activatedQueue);
  13109. callUpdatedHooks(updatedQueue);
  13110. // devtool hook
  13111. /* istanbul ignore if */
  13112. if (devtools && config.devtools) {
  13113. devtools.emit('flush');
  13114. }
  13115. }
  13116. function callUpdatedHooks (queue) {
  13117. var i = queue.length;
  13118. while (i--) {
  13119. var watcher = queue[i];
  13120. var vm = watcher.vm;
  13121. if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
  13122. callHook(vm, 'updated');
  13123. }
  13124. }
  13125. }
  13126. /**
  13127. * Queue a kept-alive component that was activated during patch.
  13128. * The queue will be processed after the entire tree has been patched.
  13129. */
  13130. function queueActivatedComponent (vm) {
  13131. // setting _inactive to false here so that a render function can
  13132. // rely on checking whether it's in an inactive tree (e.g. router-view)
  13133. vm._inactive = false;
  13134. activatedChildren.push(vm);
  13135. }
  13136. function callActivatedHooks (queue) {
  13137. for (var i = 0; i < queue.length; i++) {
  13138. queue[i]._inactive = true;
  13139. activateChildComponent(queue[i], true /* true */);
  13140. }
  13141. }
  13142. /**
  13143. * Push a watcher into the watcher queue.
  13144. * Jobs with duplicate IDs will be skipped unless it's
  13145. * pushed when the queue is being flushed.
  13146. */
  13147. function queueWatcher (watcher) {
  13148. var id = watcher.id;
  13149. if (has[id] == null) {
  13150. has[id] = true;
  13151. if (!flushing) {
  13152. queue.push(watcher);
  13153. } else {
  13154. // if already flushing, splice the watcher based on its id
  13155. // if already past its id, it will be run next immediately.
  13156. var i = queue.length - 1;
  13157. while (i > index && queue[i].id > watcher.id) {
  13158. i--;
  13159. }
  13160. queue.splice(i + 1, 0, watcher);
  13161. }
  13162. // queue the flush
  13163. if (!waiting) {
  13164. waiting = true;
  13165. if ( true && !config.async) {
  13166. flushSchedulerQueue();
  13167. return
  13168. }
  13169. nextTick(flushSchedulerQueue);
  13170. }
  13171. }
  13172. }
  13173. /* */
  13174. var uid$2 = 0;
  13175. /**
  13176. * A watcher parses an expression, collects dependencies,
  13177. * and fires callback when the expression value changes.
  13178. * This is used for both the $watch() api and directives.
  13179. */
  13180. var Watcher = function Watcher (
  13181. vm,
  13182. expOrFn,
  13183. cb,
  13184. options,
  13185. isRenderWatcher
  13186. ) {
  13187. this.vm = vm;
  13188. if (isRenderWatcher) {
  13189. vm._watcher = this;
  13190. }
  13191. vm._watchers.push(this);
  13192. // options
  13193. if (options) {
  13194. this.deep = !!options.deep;
  13195. this.user = !!options.user;
  13196. this.lazy = !!options.lazy;
  13197. this.sync = !!options.sync;
  13198. this.before = options.before;
  13199. } else {
  13200. this.deep = this.user = this.lazy = this.sync = false;
  13201. }
  13202. this.cb = cb;
  13203. this.id = ++uid$2; // uid for batching
  13204. this.active = true;
  13205. this.dirty = this.lazy; // for lazy watchers
  13206. this.deps = [];
  13207. this.newDeps = [];
  13208. this.depIds = new _Set();
  13209. this.newDepIds = new _Set();
  13210. this.expression = true
  13211. ? expOrFn.toString()
  13212. : undefined;
  13213. // parse expression for getter
  13214. if (typeof expOrFn === 'function') {
  13215. this.getter = expOrFn;
  13216. } else {
  13217. this.getter = parsePath(expOrFn);
  13218. if (!this.getter) {
  13219. this.getter = noop;
  13220. true && warn(
  13221. "Failed watching path: \"" + expOrFn + "\" " +
  13222. 'Watcher only accepts simple dot-delimited paths. ' +
  13223. 'For full control, use a function instead.',
  13224. vm
  13225. );
  13226. }
  13227. }
  13228. this.value = this.lazy
  13229. ? undefined
  13230. : this.get();
  13231. };
  13232. /**
  13233. * Evaluate the getter, and re-collect dependencies.
  13234. */
  13235. Watcher.prototype.get = function get () {
  13236. pushTarget(this);
  13237. var value;
  13238. var vm = this.vm;
  13239. try {
  13240. value = this.getter.call(vm, vm);
  13241. } catch (e) {
  13242. if (this.user) {
  13243. handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
  13244. } else {
  13245. throw e
  13246. }
  13247. } finally {
  13248. // "touch" every property so they are all tracked as
  13249. // dependencies for deep watching
  13250. if (this.deep) {
  13251. traverse(value);
  13252. }
  13253. popTarget();
  13254. this.cleanupDeps();
  13255. }
  13256. return value
  13257. };
  13258. /**
  13259. * Add a dependency to this directive.
  13260. */
  13261. Watcher.prototype.addDep = function addDep (dep) {
  13262. var id = dep.id;
  13263. if (!this.newDepIds.has(id)) {
  13264. this.newDepIds.add(id);
  13265. this.newDeps.push(dep);
  13266. if (!this.depIds.has(id)) {
  13267. dep.addSub(this);
  13268. }
  13269. }
  13270. };
  13271. /**
  13272. * Clean up for dependency collection.
  13273. */
  13274. Watcher.prototype.cleanupDeps = function cleanupDeps () {
  13275. var i = this.deps.length;
  13276. while (i--) {
  13277. var dep = this.deps[i];
  13278. if (!this.newDepIds.has(dep.id)) {
  13279. dep.removeSub(this);
  13280. }
  13281. }
  13282. var tmp = this.depIds;
  13283. this.depIds = this.newDepIds;
  13284. this.newDepIds = tmp;
  13285. this.newDepIds.clear();
  13286. tmp = this.deps;
  13287. this.deps = this.newDeps;
  13288. this.newDeps = tmp;
  13289. this.newDeps.length = 0;
  13290. };
  13291. /**
  13292. * Subscriber interface.
  13293. * Will be called when a dependency changes.
  13294. */
  13295. Watcher.prototype.update = function update () {
  13296. /* istanbul ignore else */
  13297. if (this.lazy) {
  13298. this.dirty = true;
  13299. } else if (this.sync) {
  13300. this.run();
  13301. } else {
  13302. queueWatcher(this);
  13303. }
  13304. };
  13305. /**
  13306. * Scheduler job interface.
  13307. * Will be called by the scheduler.
  13308. */
  13309. Watcher.prototype.run = function run () {
  13310. if (this.active) {
  13311. var value = this.get();
  13312. if (
  13313. value !== this.value ||
  13314. // Deep watchers and watchers on Object/Arrays should fire even
  13315. // when the value is the same, because the value may
  13316. // have mutated.
  13317. isObject(value) ||
  13318. this.deep
  13319. ) {
  13320. // set new value
  13321. var oldValue = this.value;
  13322. this.value = value;
  13323. if (this.user) {
  13324. try {
  13325. this.cb.call(this.vm, value, oldValue);
  13326. } catch (e) {
  13327. handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
  13328. }
  13329. } else {
  13330. this.cb.call(this.vm, value, oldValue);
  13331. }
  13332. }
  13333. }
  13334. };
  13335. /**
  13336. * Evaluate the value of the watcher.
  13337. * This only gets called for lazy watchers.
  13338. */
  13339. Watcher.prototype.evaluate = function evaluate () {
  13340. this.value = this.get();
  13341. this.dirty = false;
  13342. };
  13343. /**
  13344. * Depend on all deps collected by this watcher.
  13345. */
  13346. Watcher.prototype.depend = function depend () {
  13347. var i = this.deps.length;
  13348. while (i--) {
  13349. this.deps[i].depend();
  13350. }
  13351. };
  13352. /**
  13353. * Remove self from all dependencies' subscriber list.
  13354. */
  13355. Watcher.prototype.teardown = function teardown () {
  13356. if (this.active) {
  13357. // remove self from vm's watcher list
  13358. // this is a somewhat expensive operation so we skip it
  13359. // if the vm is being destroyed.
  13360. if (!this.vm._isBeingDestroyed) {
  13361. remove(this.vm._watchers, this);
  13362. }
  13363. var i = this.deps.length;
  13364. while (i--) {
  13365. this.deps[i].removeSub(this);
  13366. }
  13367. this.active = false;
  13368. }
  13369. };
  13370. /* */
  13371. var sharedPropertyDefinition = {
  13372. enumerable: true,
  13373. configurable: true,
  13374. get: noop,
  13375. set: noop
  13376. };
  13377. function proxy (target, sourceKey, key) {
  13378. sharedPropertyDefinition.get = function proxyGetter () {
  13379. return this[sourceKey][key]
  13380. };
  13381. sharedPropertyDefinition.set = function proxySetter (val) {
  13382. this[sourceKey][key] = val;
  13383. };
  13384. Object.defineProperty(target, key, sharedPropertyDefinition);
  13385. }
  13386. function initState (vm) {
  13387. vm._watchers = [];
  13388. var opts = vm.$options;
  13389. if (opts.props) { initProps(vm, opts.props); }
  13390. if (opts.methods) { initMethods(vm, opts.methods); }
  13391. if (opts.data) {
  13392. initData(vm);
  13393. } else {
  13394. observe(vm._data = {}, true /* asRootData */);
  13395. }
  13396. if (opts.computed) { initComputed(vm, opts.computed); }
  13397. if (opts.watch && opts.watch !== nativeWatch) {
  13398. initWatch(vm, opts.watch);
  13399. }
  13400. }
  13401. function initProps (vm, propsOptions) {
  13402. var propsData = vm.$options.propsData || {};
  13403. var props = vm._props = {};
  13404. // cache prop keys so that future props updates can iterate using Array
  13405. // instead of dynamic object key enumeration.
  13406. var keys = vm.$options._propKeys = [];
  13407. var isRoot = !vm.$parent;
  13408. // root instance props should be converted
  13409. if (!isRoot) {
  13410. toggleObserving(false);
  13411. }
  13412. var loop = function ( key ) {
  13413. keys.push(key);
  13414. var value = validateProp(key, propsOptions, propsData, vm);
  13415. /* istanbul ignore else */
  13416. if (true) {
  13417. var hyphenatedKey = hyphenate(key);
  13418. if (isReservedAttribute(hyphenatedKey) ||
  13419. config.isReservedAttr(hyphenatedKey)) {
  13420. warn(
  13421. ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
  13422. vm
  13423. );
  13424. }
  13425. defineReactive$$1(props, key, value, function () {
  13426. if (!isRoot && !isUpdatingChildComponent) {
  13427. {
  13428. if(vm.mpHost === 'mp-baidu' || vm.mpHost === 'mp-kuaishou'){//百度、快手 observer 在 setData callback 之后触发,直接忽略该 warn
  13429. return
  13430. }
  13431. //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
  13432. if(
  13433. key === 'value' &&
  13434. Array.isArray(vm.$options.behaviors) &&
  13435. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  13436. ){
  13437. return
  13438. }
  13439. if(vm._getFormData){
  13440. return
  13441. }
  13442. var $parent = vm.$parent;
  13443. while($parent){
  13444. if($parent.__next_tick_pending){
  13445. return
  13446. }
  13447. $parent = $parent.$parent;
  13448. }
  13449. }
  13450. warn(
  13451. "Avoid mutating a prop directly since the value will be " +
  13452. "overwritten whenever the parent component re-renders. " +
  13453. "Instead, use a data or computed property based on the prop's " +
  13454. "value. Prop being mutated: \"" + key + "\"",
  13455. vm
  13456. );
  13457. }
  13458. });
  13459. } else {}
  13460. // static props are already proxied on the component's prototype
  13461. // during Vue.extend(). We only need to proxy props defined at
  13462. // instantiation here.
  13463. if (!(key in vm)) {
  13464. proxy(vm, "_props", key);
  13465. }
  13466. };
  13467. for (var key in propsOptions) loop( key );
  13468. toggleObserving(true);
  13469. }
  13470. function initData (vm) {
  13471. var data = vm.$options.data;
  13472. data = vm._data = typeof data === 'function'
  13473. ? getData(data, vm)
  13474. : data || {};
  13475. if (!isPlainObject(data)) {
  13476. data = {};
  13477. true && warn(
  13478. 'data functions should return an object:\n' +
  13479. 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
  13480. vm
  13481. );
  13482. }
  13483. // proxy data on instance
  13484. var keys = Object.keys(data);
  13485. var props = vm.$options.props;
  13486. var methods = vm.$options.methods;
  13487. var i = keys.length;
  13488. while (i--) {
  13489. var key = keys[i];
  13490. if (true) {
  13491. if (methods && hasOwn(methods, key)) {
  13492. warn(
  13493. ("Method \"" + key + "\" has already been defined as a data property."),
  13494. vm
  13495. );
  13496. }
  13497. }
  13498. if (props && hasOwn(props, key)) {
  13499. true && warn(
  13500. "The data property \"" + key + "\" is already declared as a prop. " +
  13501. "Use prop default value instead.",
  13502. vm
  13503. );
  13504. } else if (!isReserved(key)) {
  13505. proxy(vm, "_data", key);
  13506. }
  13507. }
  13508. // observe data
  13509. observe(data, true /* asRootData */);
  13510. }
  13511. function getData (data, vm) {
  13512. // #7573 disable dep collection when invoking data getters
  13513. pushTarget();
  13514. try {
  13515. return data.call(vm, vm)
  13516. } catch (e) {
  13517. handleError(e, vm, "data()");
  13518. return {}
  13519. } finally {
  13520. popTarget();
  13521. }
  13522. }
  13523. var computedWatcherOptions = { lazy: true };
  13524. function initComputed (vm, computed) {
  13525. // $flow-disable-line
  13526. var watchers = vm._computedWatchers = Object.create(null);
  13527. // computed properties are just getters during SSR
  13528. var isSSR = isServerRendering();
  13529. for (var key in computed) {
  13530. var userDef = computed[key];
  13531. var getter = typeof userDef === 'function' ? userDef : userDef.get;
  13532. if ( true && getter == null) {
  13533. warn(
  13534. ("Getter is missing for computed property \"" + key + "\"."),
  13535. vm
  13536. );
  13537. }
  13538. if (!isSSR) {
  13539. // create internal watcher for the computed property.
  13540. watchers[key] = new Watcher(
  13541. vm,
  13542. getter || noop,
  13543. noop,
  13544. computedWatcherOptions
  13545. );
  13546. }
  13547. // component-defined computed properties are already defined on the
  13548. // component prototype. We only need to define computed properties defined
  13549. // at instantiation here.
  13550. if (!(key in vm)) {
  13551. defineComputed(vm, key, userDef);
  13552. } else if (true) {
  13553. if (key in vm.$data) {
  13554. warn(("The computed property \"" + key + "\" is already defined in data."), vm);
  13555. } else if (vm.$options.props && key in vm.$options.props) {
  13556. warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
  13557. }
  13558. }
  13559. }
  13560. }
  13561. function defineComputed (
  13562. target,
  13563. key,
  13564. userDef
  13565. ) {
  13566. var shouldCache = !isServerRendering();
  13567. if (typeof userDef === 'function') {
  13568. sharedPropertyDefinition.get = shouldCache
  13569. ? createComputedGetter(key)
  13570. : createGetterInvoker(userDef);
  13571. sharedPropertyDefinition.set = noop;
  13572. } else {
  13573. sharedPropertyDefinition.get = userDef.get
  13574. ? shouldCache && userDef.cache !== false
  13575. ? createComputedGetter(key)
  13576. : createGetterInvoker(userDef.get)
  13577. : noop;
  13578. sharedPropertyDefinition.set = userDef.set || noop;
  13579. }
  13580. if ( true &&
  13581. sharedPropertyDefinition.set === noop) {
  13582. sharedPropertyDefinition.set = function () {
  13583. warn(
  13584. ("Computed property \"" + key + "\" was assigned to but it has no setter."),
  13585. this
  13586. );
  13587. };
  13588. }
  13589. Object.defineProperty(target, key, sharedPropertyDefinition);
  13590. }
  13591. function createComputedGetter (key) {
  13592. return function computedGetter () {
  13593. var watcher = this._computedWatchers && this._computedWatchers[key];
  13594. if (watcher) {
  13595. if (watcher.dirty) {
  13596. watcher.evaluate();
  13597. }
  13598. if (Dep.SharedObject.target) {// fixed by xxxxxx
  13599. watcher.depend();
  13600. }
  13601. return watcher.value
  13602. }
  13603. }
  13604. }
  13605. function createGetterInvoker(fn) {
  13606. return function computedGetter () {
  13607. return fn.call(this, this)
  13608. }
  13609. }
  13610. function initMethods (vm, methods) {
  13611. var props = vm.$options.props;
  13612. for (var key in methods) {
  13613. if (true) {
  13614. if (typeof methods[key] !== 'function') {
  13615. warn(
  13616. "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
  13617. "Did you reference the function correctly?",
  13618. vm
  13619. );
  13620. }
  13621. if (props && hasOwn(props, key)) {
  13622. warn(
  13623. ("Method \"" + key + "\" has already been defined as a prop."),
  13624. vm
  13625. );
  13626. }
  13627. if ((key in vm) && isReserved(key)) {
  13628. warn(
  13629. "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
  13630. "Avoid defining component methods that start with _ or $."
  13631. );
  13632. }
  13633. }
  13634. vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
  13635. }
  13636. }
  13637. function initWatch (vm, watch) {
  13638. for (var key in watch) {
  13639. var handler = watch[key];
  13640. if (Array.isArray(handler)) {
  13641. for (var i = 0; i < handler.length; i++) {
  13642. createWatcher(vm, key, handler[i]);
  13643. }
  13644. } else {
  13645. createWatcher(vm, key, handler);
  13646. }
  13647. }
  13648. }
  13649. function createWatcher (
  13650. vm,
  13651. expOrFn,
  13652. handler,
  13653. options
  13654. ) {
  13655. if (isPlainObject(handler)) {
  13656. options = handler;
  13657. handler = handler.handler;
  13658. }
  13659. if (typeof handler === 'string') {
  13660. handler = vm[handler];
  13661. }
  13662. return vm.$watch(expOrFn, handler, options)
  13663. }
  13664. function stateMixin (Vue) {
  13665. // flow somehow has problems with directly declared definition object
  13666. // when using Object.defineProperty, so we have to procedurally build up
  13667. // the object here.
  13668. var dataDef = {};
  13669. dataDef.get = function () { return this._data };
  13670. var propsDef = {};
  13671. propsDef.get = function () { return this._props };
  13672. if (true) {
  13673. dataDef.set = function () {
  13674. warn(
  13675. 'Avoid replacing instance root $data. ' +
  13676. 'Use nested data properties instead.',
  13677. this
  13678. );
  13679. };
  13680. propsDef.set = function () {
  13681. warn("$props is readonly.", this);
  13682. };
  13683. }
  13684. Object.defineProperty(Vue.prototype, '$data', dataDef);
  13685. Object.defineProperty(Vue.prototype, '$props', propsDef);
  13686. Vue.prototype.$set = set;
  13687. Vue.prototype.$delete = del;
  13688. Vue.prototype.$watch = function (
  13689. expOrFn,
  13690. cb,
  13691. options
  13692. ) {
  13693. var vm = this;
  13694. if (isPlainObject(cb)) {
  13695. return createWatcher(vm, expOrFn, cb, options)
  13696. }
  13697. options = options || {};
  13698. options.user = true;
  13699. var watcher = new Watcher(vm, expOrFn, cb, options);
  13700. if (options.immediate) {
  13701. try {
  13702. cb.call(vm, watcher.value);
  13703. } catch (error) {
  13704. handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
  13705. }
  13706. }
  13707. return function unwatchFn () {
  13708. watcher.teardown();
  13709. }
  13710. };
  13711. }
  13712. /* */
  13713. var uid$3 = 0;
  13714. function initMixin (Vue) {
  13715. Vue.prototype._init = function (options) {
  13716. var vm = this;
  13717. // a uid
  13718. vm._uid = uid$3++;
  13719. var startTag, endTag;
  13720. /* istanbul ignore if */
  13721. if ( true && config.performance && mark) {
  13722. startTag = "vue-perf-start:" + (vm._uid);
  13723. endTag = "vue-perf-end:" + (vm._uid);
  13724. mark(startTag);
  13725. }
  13726. // a flag to avoid this being observed
  13727. vm._isVue = true;
  13728. // merge options
  13729. if (options && options._isComponent) {
  13730. // optimize internal component instantiation
  13731. // since dynamic options merging is pretty slow, and none of the
  13732. // internal component options needs special treatment.
  13733. initInternalComponent(vm, options);
  13734. } else {
  13735. vm.$options = mergeOptions(
  13736. resolveConstructorOptions(vm.constructor),
  13737. options || {},
  13738. vm
  13739. );
  13740. }
  13741. /* istanbul ignore else */
  13742. if (true) {
  13743. initProxy(vm);
  13744. } else {}
  13745. // expose real self
  13746. vm._self = vm;
  13747. initLifecycle(vm);
  13748. initEvents(vm);
  13749. initRender(vm);
  13750. callHook(vm, 'beforeCreate');
  13751. !vm._$fallback && initInjections(vm); // resolve injections before data/props
  13752. initState(vm);
  13753. !vm._$fallback && initProvide(vm); // resolve provide after data/props
  13754. !vm._$fallback && callHook(vm, 'created');
  13755. /* istanbul ignore if */
  13756. if ( true && config.performance && mark) {
  13757. vm._name = formatComponentName(vm, false);
  13758. mark(endTag);
  13759. measure(("vue " + (vm._name) + " init"), startTag, endTag);
  13760. }
  13761. if (vm.$options.el) {
  13762. vm.$mount(vm.$options.el);
  13763. }
  13764. };
  13765. }
  13766. function initInternalComponent (vm, options) {
  13767. var opts = vm.$options = Object.create(vm.constructor.options);
  13768. // doing this because it's faster than dynamic enumeration.
  13769. var parentVnode = options._parentVnode;
  13770. opts.parent = options.parent;
  13771. opts._parentVnode = parentVnode;
  13772. var vnodeComponentOptions = parentVnode.componentOptions;
  13773. opts.propsData = vnodeComponentOptions.propsData;
  13774. opts._parentListeners = vnodeComponentOptions.listeners;
  13775. opts._renderChildren = vnodeComponentOptions.children;
  13776. opts._componentTag = vnodeComponentOptions.tag;
  13777. if (options.render) {
  13778. opts.render = options.render;
  13779. opts.staticRenderFns = options.staticRenderFns;
  13780. }
  13781. }
  13782. function resolveConstructorOptions (Ctor) {
  13783. var options = Ctor.options;
  13784. if (Ctor.super) {
  13785. var superOptions = resolveConstructorOptions(Ctor.super);
  13786. var cachedSuperOptions = Ctor.superOptions;
  13787. if (superOptions !== cachedSuperOptions) {
  13788. // super option changed,
  13789. // need to resolve new options.
  13790. Ctor.superOptions = superOptions;
  13791. // check if there are any late-modified/attached options (#4976)
  13792. var modifiedOptions = resolveModifiedOptions(Ctor);
  13793. // update base extend options
  13794. if (modifiedOptions) {
  13795. extend(Ctor.extendOptions, modifiedOptions);
  13796. }
  13797. options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
  13798. if (options.name) {
  13799. options.components[options.name] = Ctor;
  13800. }
  13801. }
  13802. }
  13803. return options
  13804. }
  13805. function resolveModifiedOptions (Ctor) {
  13806. var modified;
  13807. var latest = Ctor.options;
  13808. var sealed = Ctor.sealedOptions;
  13809. for (var key in latest) {
  13810. if (latest[key] !== sealed[key]) {
  13811. if (!modified) { modified = {}; }
  13812. modified[key] = latest[key];
  13813. }
  13814. }
  13815. return modified
  13816. }
  13817. function Vue (options) {
  13818. if ( true &&
  13819. !(this instanceof Vue)
  13820. ) {
  13821. warn('Vue is a constructor and should be called with the `new` keyword');
  13822. }
  13823. this._init(options);
  13824. }
  13825. initMixin(Vue);
  13826. stateMixin(Vue);
  13827. eventsMixin(Vue);
  13828. lifecycleMixin(Vue);
  13829. renderMixin(Vue);
  13830. /* */
  13831. function initUse (Vue) {
  13832. Vue.use = function (plugin) {
  13833. var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
  13834. if (installedPlugins.indexOf(plugin) > -1) {
  13835. return this
  13836. }
  13837. // additional parameters
  13838. var args = toArray(arguments, 1);
  13839. args.unshift(this);
  13840. if (typeof plugin.install === 'function') {
  13841. plugin.install.apply(plugin, args);
  13842. } else if (typeof plugin === 'function') {
  13843. plugin.apply(null, args);
  13844. }
  13845. installedPlugins.push(plugin);
  13846. return this
  13847. };
  13848. }
  13849. /* */
  13850. function initMixin$1 (Vue) {
  13851. Vue.mixin = function (mixin) {
  13852. this.options = mergeOptions(this.options, mixin);
  13853. return this
  13854. };
  13855. }
  13856. /* */
  13857. function initExtend (Vue) {
  13858. /**
  13859. * Each instance constructor, including Vue, has a unique
  13860. * cid. This enables us to create wrapped "child
  13861. * constructors" for prototypal inheritance and cache them.
  13862. */
  13863. Vue.cid = 0;
  13864. var cid = 1;
  13865. /**
  13866. * Class inheritance
  13867. */
  13868. Vue.extend = function (extendOptions) {
  13869. extendOptions = extendOptions || {};
  13870. var Super = this;
  13871. var SuperId = Super.cid;
  13872. var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
  13873. if (cachedCtors[SuperId]) {
  13874. return cachedCtors[SuperId]
  13875. }
  13876. var name = extendOptions.name || Super.options.name;
  13877. if ( true && name) {
  13878. validateComponentName(name);
  13879. }
  13880. var Sub = function VueComponent (options) {
  13881. this._init(options);
  13882. };
  13883. Sub.prototype = Object.create(Super.prototype);
  13884. Sub.prototype.constructor = Sub;
  13885. Sub.cid = cid++;
  13886. Sub.options = mergeOptions(
  13887. Super.options,
  13888. extendOptions
  13889. );
  13890. Sub['super'] = Super;
  13891. // For props and computed properties, we define the proxy getters on
  13892. // the Vue instances at extension time, on the extended prototype. This
  13893. // avoids Object.defineProperty calls for each instance created.
  13894. if (Sub.options.props) {
  13895. initProps$1(Sub);
  13896. }
  13897. if (Sub.options.computed) {
  13898. initComputed$1(Sub);
  13899. }
  13900. // allow further extension/mixin/plugin usage
  13901. Sub.extend = Super.extend;
  13902. Sub.mixin = Super.mixin;
  13903. Sub.use = Super.use;
  13904. // create asset registers, so extended classes
  13905. // can have their private assets too.
  13906. ASSET_TYPES.forEach(function (type) {
  13907. Sub[type] = Super[type];
  13908. });
  13909. // enable recursive self-lookup
  13910. if (name) {
  13911. Sub.options.components[name] = Sub;
  13912. }
  13913. // keep a reference to the super options at extension time.
  13914. // later at instantiation we can check if Super's options have
  13915. // been updated.
  13916. Sub.superOptions = Super.options;
  13917. Sub.extendOptions = extendOptions;
  13918. Sub.sealedOptions = extend({}, Sub.options);
  13919. // cache constructor
  13920. cachedCtors[SuperId] = Sub;
  13921. return Sub
  13922. };
  13923. }
  13924. function initProps$1 (Comp) {
  13925. var props = Comp.options.props;
  13926. for (var key in props) {
  13927. proxy(Comp.prototype, "_props", key);
  13928. }
  13929. }
  13930. function initComputed$1 (Comp) {
  13931. var computed = Comp.options.computed;
  13932. for (var key in computed) {
  13933. defineComputed(Comp.prototype, key, computed[key]);
  13934. }
  13935. }
  13936. /* */
  13937. function initAssetRegisters (Vue) {
  13938. /**
  13939. * Create asset registration methods.
  13940. */
  13941. ASSET_TYPES.forEach(function (type) {
  13942. Vue[type] = function (
  13943. id,
  13944. definition
  13945. ) {
  13946. if (!definition) {
  13947. return this.options[type + 's'][id]
  13948. } else {
  13949. /* istanbul ignore if */
  13950. if ( true && type === 'component') {
  13951. validateComponentName(id);
  13952. }
  13953. if (type === 'component' && isPlainObject(definition)) {
  13954. definition.name = definition.name || id;
  13955. definition = this.options._base.extend(definition);
  13956. }
  13957. if (type === 'directive' && typeof definition === 'function') {
  13958. definition = { bind: definition, update: definition };
  13959. }
  13960. this.options[type + 's'][id] = definition;
  13961. return definition
  13962. }
  13963. };
  13964. });
  13965. }
  13966. /* */
  13967. function getComponentName (opts) {
  13968. return opts && (opts.Ctor.options.name || opts.tag)
  13969. }
  13970. function matches (pattern, name) {
  13971. if (Array.isArray(pattern)) {
  13972. return pattern.indexOf(name) > -1
  13973. } else if (typeof pattern === 'string') {
  13974. return pattern.split(',').indexOf(name) > -1
  13975. } else if (isRegExp(pattern)) {
  13976. return pattern.test(name)
  13977. }
  13978. /* istanbul ignore next */
  13979. return false
  13980. }
  13981. function pruneCache (keepAliveInstance, filter) {
  13982. var cache = keepAliveInstance.cache;
  13983. var keys = keepAliveInstance.keys;
  13984. var _vnode = keepAliveInstance._vnode;
  13985. for (var key in cache) {
  13986. var cachedNode = cache[key];
  13987. if (cachedNode) {
  13988. var name = getComponentName(cachedNode.componentOptions);
  13989. if (name && !filter(name)) {
  13990. pruneCacheEntry(cache, key, keys, _vnode);
  13991. }
  13992. }
  13993. }
  13994. }
  13995. function pruneCacheEntry (
  13996. cache,
  13997. key,
  13998. keys,
  13999. current
  14000. ) {
  14001. var cached$$1 = cache[key];
  14002. if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
  14003. cached$$1.componentInstance.$destroy();
  14004. }
  14005. cache[key] = null;
  14006. remove(keys, key);
  14007. }
  14008. var patternTypes = [String, RegExp, Array];
  14009. var KeepAlive = {
  14010. name: 'keep-alive',
  14011. abstract: true,
  14012. props: {
  14013. include: patternTypes,
  14014. exclude: patternTypes,
  14015. max: [String, Number]
  14016. },
  14017. created: function created () {
  14018. this.cache = Object.create(null);
  14019. this.keys = [];
  14020. },
  14021. destroyed: function destroyed () {
  14022. for (var key in this.cache) {
  14023. pruneCacheEntry(this.cache, key, this.keys);
  14024. }
  14025. },
  14026. mounted: function mounted () {
  14027. var this$1 = this;
  14028. this.$watch('include', function (val) {
  14029. pruneCache(this$1, function (name) { return matches(val, name); });
  14030. });
  14031. this.$watch('exclude', function (val) {
  14032. pruneCache(this$1, function (name) { return !matches(val, name); });
  14033. });
  14034. },
  14035. render: function render () {
  14036. var slot = this.$slots.default;
  14037. var vnode = getFirstComponentChild(slot);
  14038. var componentOptions = vnode && vnode.componentOptions;
  14039. if (componentOptions) {
  14040. // check pattern
  14041. var name = getComponentName(componentOptions);
  14042. var ref = this;
  14043. var include = ref.include;
  14044. var exclude = ref.exclude;
  14045. if (
  14046. // not included
  14047. (include && (!name || !matches(include, name))) ||
  14048. // excluded
  14049. (exclude && name && matches(exclude, name))
  14050. ) {
  14051. return vnode
  14052. }
  14053. var ref$1 = this;
  14054. var cache = ref$1.cache;
  14055. var keys = ref$1.keys;
  14056. var key = vnode.key == null
  14057. // same constructor may get registered as different local components
  14058. // so cid alone is not enough (#3269)
  14059. ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
  14060. : vnode.key;
  14061. if (cache[key]) {
  14062. vnode.componentInstance = cache[key].componentInstance;
  14063. // make current key freshest
  14064. remove(keys, key);
  14065. keys.push(key);
  14066. } else {
  14067. cache[key] = vnode;
  14068. keys.push(key);
  14069. // prune oldest entry
  14070. if (this.max && keys.length > parseInt(this.max)) {
  14071. pruneCacheEntry(cache, keys[0], keys, this._vnode);
  14072. }
  14073. }
  14074. vnode.data.keepAlive = true;
  14075. }
  14076. return vnode || (slot && slot[0])
  14077. }
  14078. };
  14079. var builtInComponents = {
  14080. KeepAlive: KeepAlive
  14081. };
  14082. /* */
  14083. function initGlobalAPI (Vue) {
  14084. // config
  14085. var configDef = {};
  14086. configDef.get = function () { return config; };
  14087. if (true) {
  14088. configDef.set = function () {
  14089. warn(
  14090. 'Do not replace the Vue.config object, set individual fields instead.'
  14091. );
  14092. };
  14093. }
  14094. Object.defineProperty(Vue, 'config', configDef);
  14095. // exposed util methods.
  14096. // NOTE: these are not considered part of the public API - avoid relying on
  14097. // them unless you are aware of the risk.
  14098. Vue.util = {
  14099. warn: warn,
  14100. extend: extend,
  14101. mergeOptions: mergeOptions,
  14102. defineReactive: defineReactive$$1
  14103. };
  14104. Vue.set = set;
  14105. Vue.delete = del;
  14106. Vue.nextTick = nextTick;
  14107. // 2.6 explicit observable API
  14108. Vue.observable = function (obj) {
  14109. observe(obj);
  14110. return obj
  14111. };
  14112. Vue.options = Object.create(null);
  14113. ASSET_TYPES.forEach(function (type) {
  14114. Vue.options[type + 's'] = Object.create(null);
  14115. });
  14116. // this is used to identify the "base" constructor to extend all plain-object
  14117. // components with in Weex's multi-instance scenarios.
  14118. Vue.options._base = Vue;
  14119. extend(Vue.options.components, builtInComponents);
  14120. initUse(Vue);
  14121. initMixin$1(Vue);
  14122. initExtend(Vue);
  14123. initAssetRegisters(Vue);
  14124. }
  14125. initGlobalAPI(Vue);
  14126. Object.defineProperty(Vue.prototype, '$isServer', {
  14127. get: isServerRendering
  14128. });
  14129. Object.defineProperty(Vue.prototype, '$ssrContext', {
  14130. get: function get () {
  14131. /* istanbul ignore next */
  14132. return this.$vnode && this.$vnode.ssrContext
  14133. }
  14134. });
  14135. // expose FunctionalRenderContext for ssr runtime helper installation
  14136. Object.defineProperty(Vue, 'FunctionalRenderContext', {
  14137. value: FunctionalRenderContext
  14138. });
  14139. Vue.version = '2.6.11';
  14140. /**
  14141. * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
  14142. */
  14143. var ARRAYTYPE = '[object Array]';
  14144. var OBJECTTYPE = '[object Object]';
  14145. // const FUNCTIONTYPE = '[object Function]'
  14146. function diff(current, pre) {
  14147. var result = {};
  14148. syncKeys(current, pre);
  14149. _diff(current, pre, '', result);
  14150. return result
  14151. }
  14152. function syncKeys(current, pre) {
  14153. if (current === pre) { return }
  14154. var rootCurrentType = type(current);
  14155. var rootPreType = type(pre);
  14156. if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
  14157. if(Object.keys(current).length >= Object.keys(pre).length){
  14158. for (var key in pre) {
  14159. var currentValue = current[key];
  14160. if (currentValue === undefined) {
  14161. current[key] = null;
  14162. } else {
  14163. syncKeys(currentValue, pre[key]);
  14164. }
  14165. }
  14166. }
  14167. } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
  14168. if (current.length >= pre.length) {
  14169. pre.forEach(function (item, index) {
  14170. syncKeys(current[index], item);
  14171. });
  14172. }
  14173. }
  14174. }
  14175. function _diff(current, pre, path, result) {
  14176. if (current === pre) { return }
  14177. var rootCurrentType = type(current);
  14178. var rootPreType = type(pre);
  14179. if (rootCurrentType == OBJECTTYPE) {
  14180. if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
  14181. setResult(result, path, current);
  14182. } else {
  14183. var loop = function ( key ) {
  14184. var currentValue = current[key];
  14185. var preValue = pre[key];
  14186. var currentType = type(currentValue);
  14187. var preType = type(preValue);
  14188. if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
  14189. // NOTE 此处将 != 修改为 !==。涉及地方太多恐怕测试不到,如果出现数据对比问题,将其修改回来。
  14190. if (currentValue !== pre[key]) {
  14191. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  14192. }
  14193. } else if (currentType == ARRAYTYPE) {
  14194. if (preType != ARRAYTYPE) {
  14195. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  14196. } else {
  14197. if (currentValue.length < preValue.length) {
  14198. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  14199. } else {
  14200. currentValue.forEach(function (item, index) {
  14201. _diff(item, preValue[index], (path == '' ? '' : path + ".") + key + '[' + index + ']', result);
  14202. });
  14203. }
  14204. }
  14205. } else if (currentType == OBJECTTYPE) {
  14206. if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
  14207. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  14208. } else {
  14209. for (var subKey in currentValue) {
  14210. _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + ".") + key + '.' + subKey, result);
  14211. }
  14212. }
  14213. }
  14214. };
  14215. for (var key in current) loop( key );
  14216. }
  14217. } else if (rootCurrentType == ARRAYTYPE) {
  14218. if (rootPreType != ARRAYTYPE) {
  14219. setResult(result, path, current);
  14220. } else {
  14221. if (current.length < pre.length) {
  14222. setResult(result, path, current);
  14223. } else {
  14224. current.forEach(function (item, index) {
  14225. _diff(item, pre[index], path + '[' + index + ']', result);
  14226. });
  14227. }
  14228. }
  14229. } else {
  14230. setResult(result, path, current);
  14231. }
  14232. }
  14233. function setResult(result, k, v) {
  14234. // if (type(v) != FUNCTIONTYPE) {
  14235. result[k] = v;
  14236. // }
  14237. }
  14238. function type(obj) {
  14239. return Object.prototype.toString.call(obj)
  14240. }
  14241. /* */
  14242. function flushCallbacks$1(vm) {
  14243. if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {
  14244. if (Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  14245. var mpInstance = vm.$scope;
  14246. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  14247. ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');
  14248. }
  14249. var copies = vm.__next_tick_callbacks.slice(0);
  14250. vm.__next_tick_callbacks.length = 0;
  14251. for (var i = 0; i < copies.length; i++) {
  14252. copies[i]();
  14253. }
  14254. }
  14255. }
  14256. function hasRenderWatcher(vm) {
  14257. return queue.find(function (watcher) { return vm._watcher === watcher; })
  14258. }
  14259. function nextTick$1(vm, cb) {
  14260. //1.nextTick 之前 已 setData 且 setData 还未回调完成
  14261. //2.nextTick 之前存在 render watcher
  14262. if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {
  14263. if(Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
  14264. var mpInstance = vm.$scope;
  14265. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  14266. ']:nextVueTick');
  14267. }
  14268. return nextTick(cb, vm)
  14269. }else{
  14270. if(Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
  14271. var mpInstance$1 = vm.$scope;
  14272. console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +
  14273. ']:nextMPTick');
  14274. }
  14275. }
  14276. var _resolve;
  14277. if (!vm.__next_tick_callbacks) {
  14278. vm.__next_tick_callbacks = [];
  14279. }
  14280. vm.__next_tick_callbacks.push(function () {
  14281. if (cb) {
  14282. try {
  14283. cb.call(vm);
  14284. } catch (e) {
  14285. handleError(e, vm, 'nextTick');
  14286. }
  14287. } else if (_resolve) {
  14288. _resolve(vm);
  14289. }
  14290. });
  14291. // $flow-disable-line
  14292. if (!cb && typeof Promise !== 'undefined') {
  14293. return new Promise(function (resolve) {
  14294. _resolve = resolve;
  14295. })
  14296. }
  14297. }
  14298. /* */
  14299. function cloneWithData(vm) {
  14300. // 确保当前 vm 所有数据被同步
  14301. var ret = Object.create(null);
  14302. var dataKeys = [].concat(
  14303. Object.keys(vm._data || {}),
  14304. Object.keys(vm._computedWatchers || {}));
  14305. dataKeys.reduce(function(ret, key) {
  14306. ret[key] = vm[key];
  14307. return ret
  14308. }, ret);
  14309. // vue-composition-api
  14310. var compositionApiState = vm.__composition_api_state__ || vm.__secret_vfa_state__;
  14311. var rawBindings = compositionApiState && compositionApiState.rawBindings;
  14312. if (rawBindings) {
  14313. Object.keys(rawBindings).forEach(function (key) {
  14314. ret[key] = vm[key];
  14315. });
  14316. }
  14317. //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据
  14318. Object.assign(ret, vm.$mp.data || {});
  14319. if (
  14320. Array.isArray(vm.$options.behaviors) &&
  14321. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  14322. ) { //form-field
  14323. ret['name'] = vm.name;
  14324. ret['value'] = vm.value;
  14325. }
  14326. return JSON.parse(JSON.stringify(ret))
  14327. }
  14328. var patch = function(oldVnode, vnode) {
  14329. var this$1 = this;
  14330. if (vnode === null) { //destroy
  14331. return
  14332. }
  14333. if (this.mpType === 'page' || this.mpType === 'component') {
  14334. var mpInstance = this.$scope;
  14335. var data = Object.create(null);
  14336. try {
  14337. data = cloneWithData(this);
  14338. } catch (err) {
  14339. console.error(err);
  14340. }
  14341. data.__webviewId__ = mpInstance.data.__webviewId__;
  14342. var mpData = Object.create(null);
  14343. Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据
  14344. mpData[key] = mpInstance.data[key];
  14345. });
  14346. var diffData = this.$shouldDiffData === false ? data : diff(data, mpData);
  14347. if (Object.keys(diffData).length) {
  14348. if (Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  14349. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +
  14350. ']差量更新',
  14351. JSON.stringify(diffData));
  14352. }
  14353. this.__next_tick_pending = true;
  14354. mpInstance.setData(diffData, function () {
  14355. this$1.__next_tick_pending = false;
  14356. flushCallbacks$1(this$1);
  14357. });
  14358. } else {
  14359. flushCallbacks$1(this);
  14360. }
  14361. }
  14362. };
  14363. /* */
  14364. function createEmptyRender() {
  14365. }
  14366. function mountComponent$1(
  14367. vm,
  14368. el,
  14369. hydrating
  14370. ) {
  14371. if (!vm.mpType) {//main.js 中的 new Vue
  14372. return vm
  14373. }
  14374. if (vm.mpType === 'app') {
  14375. vm.$options.render = createEmptyRender;
  14376. }
  14377. if (!vm.$options.render) {
  14378. vm.$options.render = createEmptyRender;
  14379. if (true) {
  14380. /* istanbul ignore if */
  14381. if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
  14382. vm.$options.el || el) {
  14383. warn(
  14384. 'You are using the runtime-only build of Vue where the template ' +
  14385. 'compiler is not available. Either pre-compile the templates into ' +
  14386. 'render functions, or use the compiler-included build.',
  14387. vm
  14388. );
  14389. } else {
  14390. warn(
  14391. 'Failed to mount component: template or render function not defined.',
  14392. vm
  14393. );
  14394. }
  14395. }
  14396. }
  14397. !vm._$fallback && callHook(vm, 'beforeMount');
  14398. var updateComponent = function () {
  14399. vm._update(vm._render(), hydrating);
  14400. };
  14401. // we set this to vm._watcher inside the watcher's constructor
  14402. // since the watcher's initial patch may call $forceUpdate (e.g. inside child
  14403. // component's mounted hook), which relies on vm._watcher being already defined
  14404. new Watcher(vm, updateComponent, noop, {
  14405. before: function before() {
  14406. if (vm._isMounted && !vm._isDestroyed) {
  14407. callHook(vm, 'beforeUpdate');
  14408. }
  14409. }
  14410. }, true /* isRenderWatcher */);
  14411. hydrating = false;
  14412. return vm
  14413. }
  14414. /* */
  14415. function renderClass (
  14416. staticClass,
  14417. dynamicClass
  14418. ) {
  14419. if (isDef(staticClass) || isDef(dynamicClass)) {
  14420. return concat(staticClass, stringifyClass(dynamicClass))
  14421. }
  14422. /* istanbul ignore next */
  14423. return ''
  14424. }
  14425. function concat (a, b) {
  14426. return a ? b ? (a + ' ' + b) : a : (b || '')
  14427. }
  14428. function stringifyClass (value) {
  14429. if (Array.isArray(value)) {
  14430. return stringifyArray(value)
  14431. }
  14432. if (isObject(value)) {
  14433. return stringifyObject(value)
  14434. }
  14435. if (typeof value === 'string') {
  14436. return value
  14437. }
  14438. /* istanbul ignore next */
  14439. return ''
  14440. }
  14441. function stringifyArray (value) {
  14442. var res = '';
  14443. var stringified;
  14444. for (var i = 0, l = value.length; i < l; i++) {
  14445. if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
  14446. if (res) { res += ' '; }
  14447. res += stringified;
  14448. }
  14449. }
  14450. return res
  14451. }
  14452. function stringifyObject (value) {
  14453. var res = '';
  14454. for (var key in value) {
  14455. if (value[key]) {
  14456. if (res) { res += ' '; }
  14457. res += key;
  14458. }
  14459. }
  14460. return res
  14461. }
  14462. /* */
  14463. var parseStyleText = cached(function (cssText) {
  14464. var res = {};
  14465. var listDelimiter = /;(?![^(]*\))/g;
  14466. var propertyDelimiter = /:(.+)/;
  14467. cssText.split(listDelimiter).forEach(function (item) {
  14468. if (item) {
  14469. var tmp = item.split(propertyDelimiter);
  14470. tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
  14471. }
  14472. });
  14473. return res
  14474. });
  14475. // normalize possible array / string values into Object
  14476. function normalizeStyleBinding (bindingStyle) {
  14477. if (Array.isArray(bindingStyle)) {
  14478. return toObject(bindingStyle)
  14479. }
  14480. if (typeof bindingStyle === 'string') {
  14481. return parseStyleText(bindingStyle)
  14482. }
  14483. return bindingStyle
  14484. }
  14485. /* */
  14486. var MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];
  14487. function getTarget(obj, path) {
  14488. var parts = path.split('.');
  14489. var key = parts[0];
  14490. if (key.indexOf('__$n') === 0) { //number index
  14491. key = parseInt(key.replace('__$n', ''));
  14492. }
  14493. if (parts.length === 1) {
  14494. return obj[key]
  14495. }
  14496. return getTarget(obj[key], parts.slice(1).join('.'))
  14497. }
  14498. function internalMixin(Vue) {
  14499. Vue.config.errorHandler = function(err, vm, info) {
  14500. Vue.util.warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  14501. console.error(err);
  14502. /* eslint-disable no-undef */
  14503. var app = typeof getApp === 'function' && getApp();
  14504. if (app && app.onError) {
  14505. app.onError(err);
  14506. }
  14507. };
  14508. var oldEmit = Vue.prototype.$emit;
  14509. Vue.prototype.$emit = function(event) {
  14510. if (this.$scope && event) {
  14511. (this.$scope['_triggerEvent'] || this.$scope['triggerEvent'])
  14512. .call(this.$scope, event, {
  14513. __args__: toArray(arguments, 1)
  14514. })
  14515. }
  14516. return oldEmit.apply(this, arguments)
  14517. };
  14518. Vue.prototype.$nextTick = function(fn) {
  14519. return nextTick$1(this, fn)
  14520. };
  14521. MP_METHODS.forEach(function (method) {
  14522. Vue.prototype[method] = function(args) {
  14523. if (this.$scope && this.$scope[method]) {
  14524. return this.$scope[method](args)
  14525. }
  14526. // mp-alipay
  14527. if (typeof my === 'undefined') {
  14528. return
  14529. }
  14530. if (method === 'createSelectorQuery') {
  14531. /* eslint-disable no-undef */
  14532. return my.createSelectorQuery(args)
  14533. } else if (method === 'createIntersectionObserver') {
  14534. /* eslint-disable no-undef */
  14535. return my.createIntersectionObserver(args)
  14536. }
  14537. // TODO mp-alipay 暂不支持 selectAllComponents,selectComponent
  14538. };
  14539. });
  14540. Vue.prototype.__init_provide = initProvide;
  14541. Vue.prototype.__init_injections = initInjections;
  14542. Vue.prototype.__call_hook = function(hook, args) {
  14543. var vm = this;
  14544. // #7573 disable dep collection when invoking lifecycle hooks
  14545. pushTarget();
  14546. var handlers = vm.$options[hook];
  14547. var info = hook + " hook";
  14548. var ret;
  14549. if (handlers) {
  14550. for (var i = 0, j = handlers.length; i < j; i++) {
  14551. ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);
  14552. }
  14553. }
  14554. if (vm._hasHookEvent) {
  14555. vm.$emit('hook:' + hook, args);
  14556. }
  14557. popTarget();
  14558. return ret
  14559. };
  14560. Vue.prototype.__set_model = function(target, key, value, modifiers) {
  14561. if (Array.isArray(modifiers)) {
  14562. if (modifiers.indexOf('trim') !== -1) {
  14563. value = value.trim();
  14564. }
  14565. if (modifiers.indexOf('number') !== -1) {
  14566. value = this._n(value);
  14567. }
  14568. }
  14569. if (!target) {
  14570. target = this;
  14571. }
  14572. // 解决动态属性添加
  14573. Vue.set(target, key, value)
  14574. };
  14575. Vue.prototype.__set_sync = function(target, key, value) {
  14576. if (!target) {
  14577. target = this;
  14578. }
  14579. // 解决动态属性添加
  14580. Vue.set(target, key, value)
  14581. };
  14582. Vue.prototype.__get_orig = function(item) {
  14583. if (isPlainObject(item)) {
  14584. return item['$orig'] || item
  14585. }
  14586. return item
  14587. };
  14588. Vue.prototype.__get_value = function(dataPath, target) {
  14589. return getTarget(target || this, dataPath)
  14590. };
  14591. Vue.prototype.__get_class = function(dynamicClass, staticClass) {
  14592. return renderClass(staticClass, dynamicClass)
  14593. };
  14594. Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {
  14595. if (!dynamicStyle && !staticStyle) {
  14596. return ''
  14597. }
  14598. var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);
  14599. var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;
  14600. return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + ":" + (styleObj[name])); }).join(';')
  14601. };
  14602. Vue.prototype.__map = function(val, iteratee) {
  14603. //TODO 暂不考虑 string
  14604. var ret, i, l, keys, key;
  14605. if (Array.isArray(val)) {
  14606. ret = new Array(val.length);
  14607. for (i = 0, l = val.length; i < l; i++) {
  14608. ret[i] = iteratee(val[i], i);
  14609. }
  14610. return ret
  14611. } else if (isObject(val)) {
  14612. keys = Object.keys(val);
  14613. ret = Object.create(null);
  14614. for (i = 0, l = keys.length; i < l; i++) {
  14615. key = keys[i];
  14616. ret[key] = iteratee(val[key], key, i);
  14617. }
  14618. return ret
  14619. } else if (typeof val === 'number') {
  14620. ret = new Array(val);
  14621. for (i = 0, l = val; i < l; i++) {
  14622. // 第一个参数暂时仍和小程序一致
  14623. ret[i] = iteratee(i, i);
  14624. }
  14625. return ret
  14626. }
  14627. return []
  14628. };
  14629. }
  14630. /* */
  14631. var LIFECYCLE_HOOKS$1 = [
  14632. //App
  14633. 'onLaunch',
  14634. 'onShow',
  14635. 'onHide',
  14636. 'onUniNViewMessage',
  14637. 'onPageNotFound',
  14638. 'onThemeChange',
  14639. 'onError',
  14640. 'onUnhandledRejection',
  14641. //Page
  14642. 'onInit',
  14643. 'onLoad',
  14644. // 'onShow',
  14645. 'onReady',
  14646. // 'onHide',
  14647. 'onUnload',
  14648. 'onPullDownRefresh',
  14649. 'onReachBottom',
  14650. 'onTabItemTap',
  14651. 'onAddToFavorites',
  14652. 'onShareTimeline',
  14653. 'onShareAppMessage',
  14654. 'onResize',
  14655. 'onPageScroll',
  14656. 'onNavigationBarButtonTap',
  14657. 'onBackPress',
  14658. 'onNavigationBarSearchInputChanged',
  14659. 'onNavigationBarSearchInputConfirmed',
  14660. 'onNavigationBarSearchInputClicked',
  14661. //Component
  14662. // 'onReady', // 兼容旧版本,应该移除该事件
  14663. 'onPageShow',
  14664. 'onPageHide',
  14665. 'onPageResize'
  14666. ];
  14667. function lifecycleMixin$1(Vue) {
  14668. //fixed vue-class-component
  14669. var oldExtend = Vue.extend;
  14670. Vue.extend = function(extendOptions) {
  14671. extendOptions = extendOptions || {};
  14672. var methods = extendOptions.methods;
  14673. if (methods) {
  14674. Object.keys(methods).forEach(function (methodName) {
  14675. if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {
  14676. extendOptions[methodName] = methods[methodName];
  14677. delete methods[methodName];
  14678. }
  14679. });
  14680. }
  14681. return oldExtend.call(this, extendOptions)
  14682. };
  14683. var strategies = Vue.config.optionMergeStrategies;
  14684. var mergeHook = strategies.created;
  14685. LIFECYCLE_HOOKS$1.forEach(function (hook) {
  14686. strategies[hook] = mergeHook;
  14687. });
  14688. Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;
  14689. }
  14690. /* */
  14691. // install platform patch function
  14692. Vue.prototype.__patch__ = patch;
  14693. // public mount method
  14694. Vue.prototype.$mount = function(
  14695. el ,
  14696. hydrating
  14697. ) {
  14698. return mountComponent$1(this, el, hydrating)
  14699. };
  14700. lifecycleMixin$1(Vue);
  14701. internalMixin(Vue);
  14702. /* */
  14703. /* harmony default export */ __webpack_exports__["default"] = (Vue);
  14704. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 2)))
  14705. /***/ }),
  14706. /***/ 30:
  14707. /*!********************************************************************************!*\
  14708. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/addUnit.js ***!
  14709. \********************************************************************************/
  14710. /*! no static exports found */
  14711. /***/ (function(module, exports, __webpack_require__) {
  14712. "use strict";
  14713. Object.defineProperty(exports, "__esModule", { value: true });exports.default = addUnit;var _test = _interopRequireDefault(__webpack_require__(/*! ./test.js */ 17));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  14714. // 添加单位,如果有rpx,%,px等单位结尾或者值为auto,直接返回,否则加上rpx单位结尾
  14715. function addUnit() {var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'auto';var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'rpx';
  14716. value = String(value);
  14717. // 用uView内置验证规则中的number判断是否为数值
  14718. return _test.default.number(value) ? "".concat(value).concat(unit) : value;
  14719. }
  14720. /***/ }),
  14721. /***/ 31:
  14722. /*!*******************************************************************************!*\
  14723. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/random.js ***!
  14724. \*******************************************************************************/
  14725. /*! no static exports found */
  14726. /***/ (function(module, exports, __webpack_require__) {
  14727. "use strict";
  14728. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function random(min, max) {
  14729. if (min >= 0 && max > 0 && max >= min) {
  14730. var gab = max - min + 1;
  14731. return Math.floor(Math.random() * gab + min);
  14732. } else {
  14733. return 0;
  14734. }
  14735. }var _default =
  14736. random;exports.default = _default;
  14737. /***/ }),
  14738. /***/ 32:
  14739. /*!*****************************************************************************!*\
  14740. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/trim.js ***!
  14741. \*****************************************************************************/
  14742. /*! no static exports found */
  14743. /***/ (function(module, exports, __webpack_require__) {
  14744. "use strict";
  14745. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function trim(str) {var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'both';
  14746. if (pos == 'both') {
  14747. return str.replace(/^\s+|\s+$/g, "");
  14748. } else if (pos == "left") {
  14749. return str.replace(/^\s*/, '');
  14750. } else if (pos == 'right') {
  14751. return str.replace(/(\s*$)/g, "");
  14752. } else if (pos == 'all') {
  14753. return str.replace(/\s+/g, "");
  14754. } else {
  14755. return str;
  14756. }
  14757. }var _default =
  14758. trim;exports.default = _default;
  14759. /***/ }),
  14760. /***/ 33:
  14761. /*!******************************************************************************!*\
  14762. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/toast.js ***!
  14763. \******************************************************************************/
  14764. /*! no static exports found */
  14765. /***/ (function(module, exports, __webpack_require__) {
  14766. "use strict";
  14767. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function toast(title) {var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1500;
  14768. uni.showToast({
  14769. title: title,
  14770. icon: 'none',
  14771. duration: duration });
  14772. }var _default =
  14773. toast;exports.default = _default;
  14774. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  14775. /***/ }),
  14776. /***/ 34:
  14777. /*!**********************************************************************************!*\
  14778. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/getParent.js ***!
  14779. \**********************************************************************************/
  14780. /*! no static exports found */
  14781. /***/ (function(module, exports, __webpack_require__) {
  14782. "use strict";
  14783. Object.defineProperty(exports, "__esModule", { value: true });exports.default = getParent; // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
  14784. // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
  14785. function getParent(name, keys) {
  14786. var parent = this.$parent;
  14787. // 通过while历遍,这里主要是为了H5需要多层解析的问题
  14788. while (parent) {
  14789. // 父组件
  14790. if (parent.$options.name !== name) {
  14791. // 如果组件的name不相等,继续上一级寻找
  14792. parent = parent.$parent;
  14793. } else {var _ret = function () {
  14794. var data = {};
  14795. // 判断keys是否数组,如果传过来的是一个数组,那么直接使用数组元素值当做键值去父组件寻找
  14796. if (Array.isArray(keys)) {
  14797. keys.map(function (val) {
  14798. data[val] = parent[val] ? parent[val] : '';
  14799. });
  14800. } else {
  14801. // 历遍传过来的对象参数
  14802. for (var i in keys) {
  14803. // 如果子组件有此值则用,无此值则用父组件的值
  14804. // 判断是否空数组,如果是,则用父组件的值,否则用子组件的值
  14805. if (Array.isArray(keys[i])) {
  14806. if (keys[i].length) {
  14807. data[i] = keys[i];
  14808. } else {
  14809. data[i] = parent[i];
  14810. }
  14811. } else if (keys[i].constructor === Object) {
  14812. // 判断是否对象,如果是对象,且有属性,那么使用子组件的值,否则使用父组件的值
  14813. if (Object.keys(keys[i]).length) {
  14814. data[i] = keys[i];
  14815. } else {
  14816. data[i] = parent[i];
  14817. }
  14818. } else {
  14819. // 只要子组件有传值,即使是false值,也是“传值”了,也需要覆盖父组件的同名参数
  14820. data[i] = keys[i] || keys[i] === false ? keys[i] : parent[i];
  14821. }
  14822. }
  14823. }
  14824. return { v: data };}();if (typeof _ret === "object") return _ret.v;
  14825. }
  14826. }
  14827. return {};
  14828. }
  14829. /***/ }),
  14830. /***/ 35:
  14831. /*!********************************************************************************!*\
  14832. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/$parent.js ***!
  14833. \********************************************************************************/
  14834. /*! no static exports found */
  14835. /***/ (function(module, exports, __webpack_require__) {
  14836. "use strict";
  14837. Object.defineProperty(exports, "__esModule", { value: true });exports.default = $parent; // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
  14838. // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
  14839. // 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
  14840. // 值(默认为undefined),就是查找最顶层的$parent
  14841. function $parent() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
  14842. var parent = this.$parent;
  14843. // 通过while历遍,这里主要是为了H5需要多层解析的问题
  14844. while (parent) {
  14845. // 父组件
  14846. if (parent.$options && parent.$options.name !== name) {
  14847. // 如果组件的name不相等,继续上一级寻找
  14848. parent = parent.$parent;
  14849. } else {
  14850. return parent;
  14851. }
  14852. }
  14853. return false;
  14854. }
  14855. /***/ }),
  14856. /***/ 36:
  14857. /*!****************************************************************************!*\
  14858. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/sys.js ***!
  14859. \****************************************************************************/
  14860. /*! no static exports found */
  14861. /***/ (function(module, exports, __webpack_require__) {
  14862. "use strict";
  14863. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.os = os;exports.sys = sys;function os() {
  14864. return uni.getSystemInfoSync().platform;
  14865. };
  14866. function sys() {
  14867. return uni.getSystemInfoSync();
  14868. }
  14869. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  14870. /***/ }),
  14871. /***/ 37:
  14872. /*!*********************************************************************************!*\
  14873. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/debounce.js ***!
  14874. \*********************************************************************************/
  14875. /*! no static exports found */
  14876. /***/ (function(module, exports, __webpack_require__) {
  14877. "use strict";
  14878. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var timeout = null;
  14879. /**
  14880. * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数
  14881. *
  14882. * @param {Function} func 要执行的回调函数
  14883. * @param {Number} wait 延时的时间
  14884. * @param {Boolean} immediate 是否立即执行
  14885. * @return null
  14886. */
  14887. function debounce(func) {var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  14888. // 清除定时器
  14889. if (timeout !== null) clearTimeout(timeout);
  14890. // 立即执行,此类情况一般用不到
  14891. if (immediate) {
  14892. var callNow = !timeout;
  14893. timeout = setTimeout(function () {
  14894. timeout = null;
  14895. }, wait);
  14896. if (callNow) typeof func === 'function' && func();
  14897. } else {
  14898. // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法
  14899. timeout = setTimeout(function () {
  14900. typeof func === 'function' && func();
  14901. }, wait);
  14902. }
  14903. }var _default =
  14904. debounce;exports.default = _default;
  14905. /***/ }),
  14906. /***/ 38:
  14907. /*!*********************************************************************************!*\
  14908. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/function/throttle.js ***!
  14909. \*********************************************************************************/
  14910. /*! no static exports found */
  14911. /***/ (function(module, exports, __webpack_require__) {
  14912. "use strict";
  14913. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var timer, flag;
  14914. /**
  14915. * 节流原理:在一定时间内,只能触发一次
  14916. *
  14917. * @param {Function} func 要执行的回调函数
  14918. * @param {Number} wait 延时的时间
  14919. * @param {Boolean} immediate 是否立即执行
  14920. * @return null
  14921. */
  14922. function throttle(func) {var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  14923. if (immediate) {
  14924. if (!flag) {
  14925. flag = true;
  14926. // 如果是立即执行,则在wait毫秒内开始时执行
  14927. typeof func === 'function' && func();
  14928. timer = setTimeout(function () {
  14929. flag = false;
  14930. }, wait);
  14931. }
  14932. } else {
  14933. if (!flag) {
  14934. flag = true;
  14935. // 如果是非立即执行,则在wait毫秒内的结束处执行
  14936. timer = setTimeout(function () {
  14937. flag = false;
  14938. typeof func === 'function' && func();
  14939. }, wait);
  14940. }
  14941. }
  14942. };var _default =
  14943. throttle;exports.default = _default;
  14944. /***/ }),
  14945. /***/ 39:
  14946. /*!*****************************************************************************!*\
  14947. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/config/config.js ***!
  14948. \*****************************************************************************/
  14949. /*! no static exports found */
  14950. /***/ (function(module, exports, __webpack_require__) {
  14951. "use strict";
  14952. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 此版本发布于2020-11-16
  14953. var version = '1.8.1';var _default =
  14954. {
  14955. v: version,
  14956. version: version,
  14957. // 主题名称
  14958. type: [
  14959. 'primary',
  14960. 'success',
  14961. 'info',
  14962. 'error',
  14963. 'warning'] };exports.default = _default;
  14964. /***/ }),
  14965. /***/ 4:
  14966. /*!*************************************************************!*\
  14967. !*** ./node_modules/@dcloudio/uni-i18n/dist/uni-i18n.es.js ***!
  14968. \*************************************************************/
  14969. /*! no static exports found */
  14970. /***/ (function(module, exports, __webpack_require__) {
  14971. "use strict";
  14972. /* WEBPACK VAR INJECTION */(function(uni, global) {Object.defineProperty(exports, "__esModule", { value: true });exports.compileI18nJsonStr = compileI18nJsonStr;exports.hasI18nJson = hasI18nJson;exports.initVueI18n = initVueI18n;exports.isI18nStr = isI18nStr;exports.normalizeLocale = normalizeLocale;exports.parseI18nJson = parseI18nJson;exports.resolveLocale = resolveLocale;exports.isString = exports.LOCALE_ZH_HANT = exports.LOCALE_ZH_HANS = exports.LOCALE_FR = exports.LOCALE_ES = exports.LOCALE_EN = exports.I18n = exports.Formatter = void 0;function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o, minLen) {if (!o) return;if (typeof o === "string") return _arrayLikeToArray(o, minLen);var n = Object.prototype.toString.call(o).slice(8, -1);if (n === "Object" && o.constructor) n = o.constructor.name;if (n === "Map" || n === "Set") return Array.from(o);if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);}function _arrayLikeToArray(arr, len) {if (len == null || len > arr.length) len = arr.length;for (var i = 0, arr2 = new Array(len); i < len; i++) {arr2[i] = arr[i];}return arr2;}function _iterableToArrayLimit(arr, i) {if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"] != null) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}var isArray = Array.isArray;
  14973. var isObject = function isObject(val) {return val !== null && typeof val === 'object';};
  14974. var defaultDelimiters = ['{', '}'];var
  14975. BaseFormatter = /*#__PURE__*/function () {
  14976. function BaseFormatter() {_classCallCheck(this, BaseFormatter);
  14977. this._caches = Object.create(null);
  14978. }_createClass(BaseFormatter, [{ key: "interpolate", value: function interpolate(
  14979. message, values) {var delimiters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultDelimiters;
  14980. if (!values) {
  14981. return [message];
  14982. }
  14983. var tokens = this._caches[message];
  14984. if (!tokens) {
  14985. tokens = parse(message, delimiters);
  14986. this._caches[message] = tokens;
  14987. }
  14988. return compile(tokens, values);
  14989. } }]);return BaseFormatter;}();exports.Formatter = BaseFormatter;
  14990. var RE_TOKEN_LIST_VALUE = /^(?:\d)+/;
  14991. var RE_TOKEN_NAMED_VALUE = /^(?:\w)+/;
  14992. function parse(format, _ref) {var _ref2 = _slicedToArray(_ref, 2),startDelimiter = _ref2[0],endDelimiter = _ref2[1];
  14993. var tokens = [];
  14994. var position = 0;
  14995. var text = '';
  14996. while (position < format.length) {
  14997. var char = format[position++];
  14998. if (char === startDelimiter) {
  14999. if (text) {
  15000. tokens.push({ type: 'text', value: text });
  15001. }
  15002. text = '';
  15003. var sub = '';
  15004. char = format[position++];
  15005. while (char !== undefined && char !== endDelimiter) {
  15006. sub += char;
  15007. char = format[position++];
  15008. }
  15009. var isClosed = char === endDelimiter;
  15010. var type = RE_TOKEN_LIST_VALUE.test(sub) ?
  15011. 'list' :
  15012. isClosed && RE_TOKEN_NAMED_VALUE.test(sub) ?
  15013. 'named' :
  15014. 'unknown';
  15015. tokens.push({ value: sub, type: type });
  15016. }
  15017. // else if (char === '%') {
  15018. // // when found rails i18n syntax, skip text capture
  15019. // if (format[position] !== '{') {
  15020. // text += char
  15021. // }
  15022. // }
  15023. else {
  15024. text += char;
  15025. }
  15026. }
  15027. text && tokens.push({ type: 'text', value: text });
  15028. return tokens;
  15029. }
  15030. function compile(tokens, values) {
  15031. var compiled = [];
  15032. var index = 0;
  15033. var mode = isArray(values) ?
  15034. 'list' :
  15035. isObject(values) ?
  15036. 'named' :
  15037. 'unknown';
  15038. if (mode === 'unknown') {
  15039. return compiled;
  15040. }
  15041. while (index < tokens.length) {
  15042. var token = tokens[index];
  15043. switch (token.type) {
  15044. case 'text':
  15045. compiled.push(token.value);
  15046. break;
  15047. case 'list':
  15048. compiled.push(values[parseInt(token.value, 10)]);
  15049. break;
  15050. case 'named':
  15051. if (mode === 'named') {
  15052. compiled.push(values[token.value]);
  15053. } else
  15054. {
  15055. if (true) {
  15056. console.warn("Type of token '".concat(token.type, "' and format of value '").concat(mode, "' don't match!"));
  15057. }
  15058. }
  15059. break;
  15060. case 'unknown':
  15061. if (true) {
  15062. console.warn("Detect 'unknown' type of token!");
  15063. }
  15064. break;}
  15065. index++;
  15066. }
  15067. return compiled;
  15068. }
  15069. var LOCALE_ZH_HANS = 'zh-Hans';exports.LOCALE_ZH_HANS = LOCALE_ZH_HANS;
  15070. var LOCALE_ZH_HANT = 'zh-Hant';exports.LOCALE_ZH_HANT = LOCALE_ZH_HANT;
  15071. var LOCALE_EN = 'en';exports.LOCALE_EN = LOCALE_EN;
  15072. var LOCALE_FR = 'fr';exports.LOCALE_FR = LOCALE_FR;
  15073. var LOCALE_ES = 'es';exports.LOCALE_ES = LOCALE_ES;
  15074. var hasOwnProperty = Object.prototype.hasOwnProperty;
  15075. var hasOwn = function hasOwn(val, key) {return hasOwnProperty.call(val, key);};
  15076. var defaultFormatter = new BaseFormatter();
  15077. function include(str, parts) {
  15078. return !!parts.find(function (part) {return str.indexOf(part) !== -1;});
  15079. }
  15080. function startsWith(str, parts) {
  15081. return parts.find(function (part) {return str.indexOf(part) === 0;});
  15082. }
  15083. function normalizeLocale(locale, messages) {
  15084. if (!locale) {
  15085. return;
  15086. }
  15087. locale = locale.trim().replace(/_/g, '-');
  15088. if (messages && messages[locale]) {
  15089. return locale;
  15090. }
  15091. locale = locale.toLowerCase();
  15092. if (locale.indexOf('zh') === 0) {
  15093. if (locale.indexOf('-hans') > -1) {
  15094. return LOCALE_ZH_HANS;
  15095. }
  15096. if (locale.indexOf('-hant') > -1) {
  15097. return LOCALE_ZH_HANT;
  15098. }
  15099. if (include(locale, ['-tw', '-hk', '-mo', '-cht'])) {
  15100. return LOCALE_ZH_HANT;
  15101. }
  15102. return LOCALE_ZH_HANS;
  15103. }
  15104. var lang = startsWith(locale, [LOCALE_EN, LOCALE_FR, LOCALE_ES]);
  15105. if (lang) {
  15106. return lang;
  15107. }
  15108. }var
  15109. I18n = /*#__PURE__*/function () {
  15110. function I18n(_ref3) {var locale = _ref3.locale,fallbackLocale = _ref3.fallbackLocale,messages = _ref3.messages,watcher = _ref3.watcher,formater = _ref3.formater;_classCallCheck(this, I18n);
  15111. this.locale = LOCALE_EN;
  15112. this.fallbackLocale = LOCALE_EN;
  15113. this.message = {};
  15114. this.messages = {};
  15115. this.watchers = [];
  15116. if (fallbackLocale) {
  15117. this.fallbackLocale = fallbackLocale;
  15118. }
  15119. this.formater = formater || defaultFormatter;
  15120. this.messages = messages || {};
  15121. this.setLocale(locale || LOCALE_EN);
  15122. if (watcher) {
  15123. this.watchLocale(watcher);
  15124. }
  15125. }_createClass(I18n, [{ key: "setLocale", value: function setLocale(
  15126. locale) {var _this = this;
  15127. var oldLocale = this.locale;
  15128. this.locale = normalizeLocale(locale, this.messages) || this.fallbackLocale;
  15129. if (!this.messages[this.locale]) {
  15130. // 可能初始化时不存在
  15131. this.messages[this.locale] = {};
  15132. }
  15133. this.message = this.messages[this.locale];
  15134. // 仅发生变化时,通知
  15135. if (oldLocale !== this.locale) {
  15136. this.watchers.forEach(function (watcher) {
  15137. watcher(_this.locale, oldLocale);
  15138. });
  15139. }
  15140. } }, { key: "getLocale", value: function getLocale()
  15141. {
  15142. return this.locale;
  15143. } }, { key: "watchLocale", value: function watchLocale(
  15144. fn) {var _this2 = this;
  15145. var index = this.watchers.push(fn) - 1;
  15146. return function () {
  15147. _this2.watchers.splice(index, 1);
  15148. };
  15149. } }, { key: "add", value: function add(
  15150. locale, message) {var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  15151. var curMessages = this.messages[locale];
  15152. if (curMessages) {
  15153. if (override) {
  15154. Object.assign(curMessages, message);
  15155. } else
  15156. {
  15157. Object.keys(message).forEach(function (key) {
  15158. if (!hasOwn(curMessages, key)) {
  15159. curMessages[key] = message[key];
  15160. }
  15161. });
  15162. }
  15163. } else
  15164. {
  15165. this.messages[locale] = message;
  15166. }
  15167. } }, { key: "f", value: function f(
  15168. message, values, delimiters) {
  15169. return this.formater.interpolate(message, values, delimiters).join('');
  15170. } }, { key: "t", value: function t(
  15171. key, locale, values) {
  15172. var message = this.message;
  15173. if (typeof locale === 'string') {
  15174. locale = normalizeLocale(locale, this.messages);
  15175. locale && (message = this.messages[locale]);
  15176. } else
  15177. {
  15178. values = locale;
  15179. }
  15180. if (!hasOwn(message, key)) {
  15181. console.warn("Cannot translate the value of keypath ".concat(key, ". Use the value of keypath as default."));
  15182. return key;
  15183. }
  15184. return this.formater.interpolate(message[key], values).join('');
  15185. } }]);return I18n;}();exports.I18n = I18n;
  15186. function watchAppLocale(appVm, i18n) {
  15187. // 需要保证 watch 的触发在组件渲染之前
  15188. if (appVm.$watchLocale) {
  15189. // vue2
  15190. appVm.$watchLocale(function (newLocale) {
  15191. i18n.setLocale(newLocale);
  15192. });
  15193. } else
  15194. {
  15195. appVm.$watch(function () {return appVm.$locale;}, function (newLocale) {
  15196. i18n.setLocale(newLocale);
  15197. });
  15198. }
  15199. }
  15200. function getDefaultLocale() {
  15201. if (typeof uni !== 'undefined' && uni.getLocale) {
  15202. return uni.getLocale();
  15203. }
  15204. // 小程序平台,uni 和 uni-i18n 互相引用,导致访问不到 uni,故在 global 上挂了 getLocale
  15205. if (typeof global !== 'undefined' && global.getLocale) {
  15206. return global.getLocale();
  15207. }
  15208. return LOCALE_EN;
  15209. }
  15210. function initVueI18n(locale) {var messages = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var fallbackLocale = arguments.length > 2 ? arguments[2] : undefined;var watcher = arguments.length > 3 ? arguments[3] : undefined;
  15211. // 兼容旧版本入参
  15212. if (typeof locale !== 'string') {var _ref4 =
  15213. [
  15214. messages,
  15215. locale];locale = _ref4[0];messages = _ref4[1];
  15216. }
  15217. if (typeof locale !== 'string') {
  15218. // 因为小程序平台,uni-i18n 和 uni 互相引用,导致此时访问 uni 时,为 undefined
  15219. locale = getDefaultLocale();
  15220. }
  15221. if (typeof fallbackLocale !== 'string') {
  15222. fallbackLocale =
  15223. typeof __uniConfig !== 'undefined' && __uniConfig.fallbackLocale ||
  15224. LOCALE_EN;
  15225. }
  15226. var i18n = new I18n({
  15227. locale: locale,
  15228. fallbackLocale: fallbackLocale,
  15229. messages: messages,
  15230. watcher: watcher });
  15231. var _t = function t(key, values) {
  15232. if (typeof getApp !== 'function') {
  15233. // app view
  15234. /* eslint-disable no-func-assign */
  15235. _t = function t(key, values) {
  15236. return i18n.t(key, values);
  15237. };
  15238. } else
  15239. {
  15240. var isWatchedAppLocale = false;
  15241. _t = function t(key, values) {
  15242. var appVm = getApp().$vm;
  15243. // 可能$vm还不存在,比如在支付宝小程序中,组件定义较早,在props的default里使用了t()函数(如uni-goods-nav),此时app还未初始化
  15244. // options: {
  15245. // type: Array,
  15246. // default () {
  15247. // return [{
  15248. // icon: 'shop',
  15249. // text: t("uni-goods-nav.options.shop"),
  15250. // }, {
  15251. // icon: 'cart',
  15252. // text: t("uni-goods-nav.options.cart")
  15253. // }]
  15254. // }
  15255. // },
  15256. if (appVm) {
  15257. // 触发响应式
  15258. appVm.$locale;
  15259. if (!isWatchedAppLocale) {
  15260. isWatchedAppLocale = true;
  15261. watchAppLocale(appVm, i18n);
  15262. }
  15263. }
  15264. return i18n.t(key, values);
  15265. };
  15266. }
  15267. return _t(key, values);
  15268. };
  15269. return {
  15270. i18n: i18n,
  15271. f: function f(message, values, delimiters) {
  15272. return i18n.f(message, values, delimiters);
  15273. },
  15274. t: function t(key, values) {
  15275. return _t(key, values);
  15276. },
  15277. add: function add(locale, message) {var override = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
  15278. return i18n.add(locale, message, override);
  15279. },
  15280. watch: function watch(fn) {
  15281. return i18n.watchLocale(fn);
  15282. },
  15283. getLocale: function getLocale() {
  15284. return i18n.getLocale();
  15285. },
  15286. setLocale: function setLocale(newLocale) {
  15287. return i18n.setLocale(newLocale);
  15288. } };
  15289. }
  15290. var isString = function isString(val) {return typeof val === 'string';};exports.isString = isString;
  15291. var formater;
  15292. function hasI18nJson(jsonObj, delimiters) {
  15293. if (!formater) {
  15294. formater = new BaseFormatter();
  15295. }
  15296. return walkJsonObj(jsonObj, function (jsonObj, key) {
  15297. var value = jsonObj[key];
  15298. if (isString(value)) {
  15299. if (isI18nStr(value, delimiters)) {
  15300. return true;
  15301. }
  15302. } else
  15303. {
  15304. return hasI18nJson(value, delimiters);
  15305. }
  15306. });
  15307. }
  15308. function parseI18nJson(jsonObj, values, delimiters) {
  15309. if (!formater) {
  15310. formater = new BaseFormatter();
  15311. }
  15312. walkJsonObj(jsonObj, function (jsonObj, key) {
  15313. var value = jsonObj[key];
  15314. if (isString(value)) {
  15315. if (isI18nStr(value, delimiters)) {
  15316. jsonObj[key] = compileStr(value, values, delimiters);
  15317. }
  15318. } else
  15319. {
  15320. parseI18nJson(value, values, delimiters);
  15321. }
  15322. });
  15323. return jsonObj;
  15324. }
  15325. function compileI18nJsonStr(jsonStr, _ref5) {var locale = _ref5.locale,locales = _ref5.locales,delimiters = _ref5.delimiters;
  15326. if (!isI18nStr(jsonStr, delimiters)) {
  15327. return jsonStr;
  15328. }
  15329. if (!formater) {
  15330. formater = new BaseFormatter();
  15331. }
  15332. var localeValues = [];
  15333. Object.keys(locales).forEach(function (name) {
  15334. if (name !== locale) {
  15335. localeValues.push({
  15336. locale: name,
  15337. values: locales[name] });
  15338. }
  15339. });
  15340. localeValues.unshift({ locale: locale, values: locales[locale] });
  15341. try {
  15342. return JSON.stringify(compileJsonObj(JSON.parse(jsonStr), localeValues, delimiters), null, 2);
  15343. }
  15344. catch (e) {}
  15345. return jsonStr;
  15346. }
  15347. function isI18nStr(value, delimiters) {
  15348. return value.indexOf(delimiters[0]) > -1;
  15349. }
  15350. function compileStr(value, values, delimiters) {
  15351. return formater.interpolate(value, values, delimiters).join('');
  15352. }
  15353. function compileValue(jsonObj, key, localeValues, delimiters) {
  15354. var value = jsonObj[key];
  15355. if (isString(value)) {
  15356. // 存在国际化
  15357. if (isI18nStr(value, delimiters)) {
  15358. jsonObj[key] = compileStr(value, localeValues[0].values, delimiters);
  15359. if (localeValues.length > 1) {
  15360. // 格式化国际化语言
  15361. var valueLocales = jsonObj[key + 'Locales'] = {};
  15362. localeValues.forEach(function (localValue) {
  15363. valueLocales[localValue.locale] = compileStr(value, localValue.values, delimiters);
  15364. });
  15365. }
  15366. }
  15367. } else
  15368. {
  15369. compileJsonObj(value, localeValues, delimiters);
  15370. }
  15371. }
  15372. function compileJsonObj(jsonObj, localeValues, delimiters) {
  15373. walkJsonObj(jsonObj, function (jsonObj, key) {
  15374. compileValue(jsonObj, key, localeValues, delimiters);
  15375. });
  15376. return jsonObj;
  15377. }
  15378. function walkJsonObj(jsonObj, walk) {
  15379. if (isArray(jsonObj)) {
  15380. for (var i = 0; i < jsonObj.length; i++) {
  15381. if (walk(jsonObj, i)) {
  15382. return true;
  15383. }
  15384. }
  15385. } else
  15386. if (isObject(jsonObj)) {
  15387. for (var key in jsonObj) {
  15388. if (walk(jsonObj, key)) {
  15389. return true;
  15390. }
  15391. }
  15392. }
  15393. return false;
  15394. }
  15395. function resolveLocale(locales) {
  15396. return function (locale) {
  15397. if (!locale) {
  15398. return locale;
  15399. }
  15400. locale = normalizeLocale(locale) || locale;
  15401. return resolveLocaleChain(locale).find(function (locale) {return locales.indexOf(locale) > -1;});
  15402. };
  15403. }
  15404. function resolveLocaleChain(locale) {
  15405. var chain = [];
  15406. var tokens = locale.split('-');
  15407. while (tokens.length) {
  15408. chain.push(tokens.join('-'));
  15409. tokens.pop();
  15410. }
  15411. return chain;
  15412. }
  15413. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"], __webpack_require__(/*! ./../../../webpack/buildin/global.js */ 2)))
  15414. /***/ }),
  15415. /***/ 40:
  15416. /*!*****************************************************************************!*\
  15417. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/config/zIndex.js ***!
  15418. \*****************************************************************************/
  15419. /*! no static exports found */
  15420. /***/ (function(module, exports, __webpack_require__) {
  15421. "use strict";
  15422. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // uniapp在H5中各API的z-index值如下:
  15423. /**
  15424. * actionsheet: 999
  15425. * modal: 999
  15426. * navigate: 998
  15427. * tabbar: 998
  15428. * toast: 999
  15429. */var _default =
  15430. {
  15431. toast: 10090,
  15432. noNetwork: 10080,
  15433. // popup包含popup,actionsheet,keyboard,picker的值
  15434. popup: 10075,
  15435. mask: 10070,
  15436. navbar: 980,
  15437. topTips: 975,
  15438. sticky: 970,
  15439. indexListSticky: 965 };exports.default = _default;
  15440. /***/ }),
  15441. /***/ 41:
  15442. /*!**********************************************************!*\
  15443. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/util/api.js ***!
  15444. \**********************************************************/
  15445. /*! no static exports found */
  15446. /***/ (function(module, exports, __webpack_require__) {
  15447. "use strict";
  15448. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.myRequest = void 0; // const BASE_URL='http://8.136.98.49:8002'
  15449. var BASE_URL = 'https://wx.hnyfwlw.com';
  15450. var myRequest = function myRequest(options) {
  15451. // BASE_URL=uni.getStorageSync('http')
  15452. // if(BASE_URL==''){
  15453. // BASE_URL = 'https://wx.hnyfwlw.com/'
  15454. // }
  15455. // console.log(BASE_URL)
  15456. var session_key = "";
  15457. session_key = uni.getStorageSync('session_key');
  15458. var url = options.url;
  15459. var data = options.data || {};
  15460. if (url != 'user.login.login_user' && url != 'pest.pests.insect_discern' &&
  15461. url != 'pest.pests.plant_discern' &&
  15462. url != 'pest.pests.pests_contrast' && url != 'pest.pests.pests_expert_img' &&
  15463. url != 'pest.pests.pests_img' && url != 'recognizationSys' &&
  15464. url != 'base.bases.base_photo' && url != 'pest.warning_record.rolemanage_img' &&
  15465. url != 'home.homes.personal_photo' && url != 'ascend.ascend_manage.product_info' &&
  15466. url != 'ascend.ascend_manage.quality_info' && url != 'ascend.ascend_manage.grow_info' &&
  15467. url != 'ascend.ascend_manage.all_ascend' && url != 'after_sale.after_sale_manage.device_check' &&
  15468. url != 'after_sale.after_sale_manage.aftersale_apply') {
  15469. data.token = session_key;
  15470. }
  15471. return new Promise(function (resolve, reject) {
  15472. uni.request({
  15473. url: BASE_URL + options.url,
  15474. method: options.method || 'POST',
  15475. header: {
  15476. "Content-Type": "application/x-www-form-urlencoded" },
  15477. data: data,
  15478. success: function success(res) {
  15479. if (res.data.message != "") {
  15480. if (res.data.message !== "识别无结果") {
  15481. return uni.showToast({
  15482. title: res.data.message,
  15483. icon: "none" });
  15484. } else {
  15485. resolve(res.data.data);
  15486. }
  15487. }
  15488. resolve(res.data.data);
  15489. },
  15490. fail: function fail(err) {
  15491. uni.showToast({
  15492. title: '请求接口失败' });
  15493. reject(err);
  15494. } });
  15495. });
  15496. };exports.myRequest = myRequest;
  15497. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  15498. /***/ }),
  15499. /***/ 5:
  15500. /*!*********************************************************!*\
  15501. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/pages.json ***!
  15502. \*********************************************************/
  15503. /*! no static exports found */
  15504. /***/ (function(module, exports) {
  15505. /***/ }),
  15506. /***/ 578:
  15507. /*!****************************************************************************!*\
  15508. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/util/emitter.js ***!
  15509. \****************************************************************************/
  15510. /*! no static exports found */
  15511. /***/ (function(module, exports, __webpack_require__) {
  15512. "use strict";
  15513. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  15514. * 递归使用 call 方式this指向
  15515. * @param componentName // 需要找的组件的名称
  15516. * @param eventName // 事件名称
  15517. * @param params // 需要传递的参数
  15518. */
  15519. function _broadcast(componentName, eventName, params) {
  15520. // 循环子节点找到名称一样的子节点 否则 递归 当前子节点
  15521. this.$children.map(function (child) {
  15522. if (componentName === child.$options.name) {
  15523. child.$emit.apply(child, [eventName].concat(params));
  15524. } else {
  15525. _broadcast.apply(child, [componentName, eventName].concat(params));
  15526. }
  15527. });
  15528. }var _default =
  15529. {
  15530. methods: {
  15531. /**
  15532. * 派发 (向上查找) (一个)
  15533. * @param componentName // 需要找的组件的名称
  15534. * @param eventName // 事件名称
  15535. * @param params // 需要传递的参数
  15536. */
  15537. dispatch: function dispatch(componentName, eventName, params) {
  15538. var parent = this.$parent || this.$root; //$parent 找到最近的父节点 $root 根节点
  15539. var name = parent.$options.name; // 获取当前组件实例的name
  15540. // 如果当前有节点 && 当前没名称 且 当前名称等于需要传进来的名称的时候就去查找当前的节点
  15541. // 循环出当前名称的一样的组件实例
  15542. while (parent && (!name || name !== componentName)) {
  15543. parent = parent.$parent;
  15544. if (parent) {
  15545. name = parent.$options.name;
  15546. }
  15547. }
  15548. // 有节点表示当前找到了name一样的实例
  15549. if (parent) {
  15550. parent.$emit.apply(parent, [eventName].concat(params));
  15551. }
  15552. },
  15553. /**
  15554. * 广播 (向下查找) (广播多个)
  15555. * @param componentName // 需要找的组件的名称
  15556. * @param eventName // 事件名称
  15557. * @param params // 需要传递的参数
  15558. */
  15559. broadcast: function broadcast(componentName, eventName, params) {
  15560. _broadcast.call(this, componentName, eventName, params);
  15561. } } };exports.default = _default;
  15562. /***/ }),
  15563. /***/ 649:
  15564. /*!****************************************************************************!*\
  15565. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/components/uni-icons/icons.js ***!
  15566. \****************************************************************************/
  15567. /*! no static exports found */
  15568. /***/ (function(module, exports, __webpack_require__) {
  15569. "use strict";
  15570. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
  15571. 'contact': "\uE100",
  15572. 'person': "\uE101",
  15573. 'personadd': "\uE102",
  15574. 'contact-filled': "\uE130",
  15575. 'person-filled': "\uE131",
  15576. 'personadd-filled': "\uE132",
  15577. 'phone': "\uE200",
  15578. 'email': "\uE201",
  15579. 'chatbubble': "\uE202",
  15580. 'chatboxes': "\uE203",
  15581. 'phone-filled': "\uE230",
  15582. 'email-filled': "\uE231",
  15583. 'chatbubble-filled': "\uE232",
  15584. 'chatboxes-filled': "\uE233",
  15585. 'weibo': "\uE260",
  15586. 'weixin': "\uE261",
  15587. 'pengyouquan': "\uE262",
  15588. 'chat': "\uE263",
  15589. 'qq': "\uE264",
  15590. 'videocam': "\uE300",
  15591. 'camera': "\uE301",
  15592. 'mic': "\uE302",
  15593. 'location': "\uE303",
  15594. 'mic-filled': "\uE332",
  15595. 'speech': "\uE332",
  15596. 'location-filled': "\uE333",
  15597. 'micoff': "\uE360",
  15598. 'image': "\uE363",
  15599. 'map': "\uE364",
  15600. 'compose': "\uE400",
  15601. 'trash': "\uE401",
  15602. 'upload': "\uE402",
  15603. 'download': "\uE403",
  15604. 'close': "\uE404",
  15605. 'redo': "\uE405",
  15606. 'undo': "\uE406",
  15607. 'refresh': "\uE407",
  15608. 'star': "\uE408",
  15609. 'plus': "\uE409",
  15610. 'minus': "\uE410",
  15611. 'circle': "\uE411",
  15612. 'checkbox': "\uE411",
  15613. 'close-filled': "\uE434",
  15614. 'clear': "\uE434",
  15615. 'refresh-filled': "\uE437",
  15616. 'star-filled': "\uE438",
  15617. 'plus-filled': "\uE439",
  15618. 'minus-filled': "\uE440",
  15619. 'circle-filled': "\uE441",
  15620. 'checkbox-filled': "\uE442",
  15621. 'closeempty': "\uE460",
  15622. 'refreshempty': "\uE461",
  15623. 'reload': "\uE462",
  15624. 'starhalf': "\uE463",
  15625. 'spinner': "\uE464",
  15626. 'spinner-cycle': "\uE465",
  15627. 'search': "\uE466",
  15628. 'plusempty': "\uE468",
  15629. 'forward': "\uE470",
  15630. 'back': "\uE471",
  15631. 'left-nav': "\uE471",
  15632. 'checkmarkempty': "\uE472",
  15633. 'home': "\uE500",
  15634. 'navigate': "\uE501",
  15635. 'gear': "\uE502",
  15636. 'paperplane': "\uE503",
  15637. 'info': "\uE504",
  15638. 'help': "\uE505",
  15639. 'locked': "\uE506",
  15640. 'more': "\uE507",
  15641. 'flag': "\uE508",
  15642. 'home-filled': "\uE530",
  15643. 'gear-filled': "\uE532",
  15644. 'info-filled': "\uE534",
  15645. 'help-filled': "\uE535",
  15646. 'more-filled': "\uE537",
  15647. 'settings': "\uE560",
  15648. 'list': "\uE562",
  15649. 'bars': "\uE563",
  15650. 'loop': "\uE565",
  15651. 'paperclip': "\uE567",
  15652. 'eye': "\uE568",
  15653. 'arrowup': "\uE580",
  15654. 'arrowdown': "\uE581",
  15655. 'arrowleft': "\uE582",
  15656. 'arrowright': "\uE583",
  15657. 'arrowthinup': "\uE584",
  15658. 'arrowthindown': "\uE585",
  15659. 'arrowthinleft': "\uE586",
  15660. 'arrowthinright': "\uE587",
  15661. 'pulldown': "\uE588",
  15662. 'closefill': "\uE589",
  15663. 'sound': "\uE590",
  15664. 'scan': "\uE612" };exports.default = _default;
  15665. /***/ }),
  15666. /***/ 664:
  15667. /*!************************************************************************************!*\
  15668. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/util/async-validator.js ***!
  15669. \************************************************************************************/
  15670. /*! no static exports found */
  15671. /***/ (function(module, exports, __webpack_require__) {
  15672. "use strict";
  15673. /* WEBPACK VAR INJECTION */(function(process) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function _extends() {
  15674. _extends = Object.assign || function (target) {
  15675. for (var i = 1; i < arguments.length; i++) {
  15676. var source = arguments[i];
  15677. for (var key in source) {
  15678. if (Object.prototype.hasOwnProperty.call(source, key)) {
  15679. target[key] = source[key];
  15680. }
  15681. }
  15682. }
  15683. return target;
  15684. };
  15685. return _extends.apply(this, arguments);
  15686. }
  15687. /* eslint no-console:0 */
  15688. var formatRegExp = /%[sdj%]/g;
  15689. var warning = function warning() {}; // don't print warning message when in production env or node runtime
  15690. if (typeof process !== 'undefined' && Object({"VUE_APP_NAME":"云飞智控","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}) && "development" !== 'production' && typeof window !==
  15691. 'undefined' && typeof document !== 'undefined') {
  15692. warning = function warning(type, errors) {
  15693. if (typeof console !== 'undefined' && console.warn) {
  15694. if (errors.every(function (e) {
  15695. return typeof e === 'string';
  15696. })) {
  15697. console.warn(type, errors);
  15698. }
  15699. }
  15700. };
  15701. }
  15702. function convertFieldsError(errors) {
  15703. if (!errors || !errors.length) return null;
  15704. var fields = {};
  15705. errors.forEach(function (error) {
  15706. var field = error.field;
  15707. fields[field] = fields[field] || [];
  15708. fields[field].push(error);
  15709. });
  15710. return fields;
  15711. }
  15712. function format() {
  15713. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  15714. args[_key] = arguments[_key];
  15715. }
  15716. var i = 1;
  15717. var f = args[0];
  15718. var len = args.length;
  15719. if (typeof f === 'function') {
  15720. return f.apply(null, args.slice(1));
  15721. }
  15722. if (typeof f === 'string') {
  15723. var str = String(f).replace(formatRegExp, function (x) {
  15724. if (x === '%%') {
  15725. return '%';
  15726. }
  15727. if (i >= len) {
  15728. return x;
  15729. }
  15730. switch (x) {
  15731. case '%s':
  15732. return String(args[i++]);
  15733. case '%d':
  15734. return Number(args[i++]);
  15735. case '%j':
  15736. try {
  15737. return JSON.stringify(args[i++]);
  15738. } catch (_) {
  15739. return '[Circular]';
  15740. }
  15741. break;
  15742. default:
  15743. return x;}
  15744. });
  15745. for (var arg = args[i]; i < len; arg = args[++i]) {
  15746. str += " " + arg;
  15747. }
  15748. return str;
  15749. }
  15750. return f;
  15751. }
  15752. function isNativeStringType(type) {
  15753. return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
  15754. }
  15755. function isEmptyValue(value, type) {
  15756. if (value === undefined || value === null) {
  15757. return true;
  15758. }
  15759. if (type === 'array' && Array.isArray(value) && !value.length) {
  15760. return true;
  15761. }
  15762. if (isNativeStringType(type) && typeof value === 'string' && !value) {
  15763. return true;
  15764. }
  15765. return false;
  15766. }
  15767. function asyncParallelArray(arr, func, callback) {
  15768. var results = [];
  15769. var total = 0;
  15770. var arrLength = arr.length;
  15771. function count(errors) {
  15772. results.push.apply(results, errors);
  15773. total++;
  15774. if (total === arrLength) {
  15775. callback(results);
  15776. }
  15777. }
  15778. arr.forEach(function (a) {
  15779. func(a, count);
  15780. });
  15781. }
  15782. function asyncSerialArray(arr, func, callback) {
  15783. var index = 0;
  15784. var arrLength = arr.length;
  15785. function next(errors) {
  15786. if (errors && errors.length) {
  15787. callback(errors);
  15788. return;
  15789. }
  15790. var original = index;
  15791. index = index + 1;
  15792. if (original < arrLength) {
  15793. func(arr[original], next);
  15794. } else {
  15795. callback([]);
  15796. }
  15797. }
  15798. next([]);
  15799. }
  15800. function flattenObjArr(objArr) {
  15801. var ret = [];
  15802. Object.keys(objArr).forEach(function (k) {
  15803. ret.push.apply(ret, objArr[k]);
  15804. });
  15805. return ret;
  15806. }
  15807. function asyncMap(objArr, option, func, callback) {
  15808. if (option.first) {
  15809. var _pending = new Promise(function (resolve, reject) {
  15810. var next = function next(errors) {
  15811. callback(errors);
  15812. return errors.length ? reject({
  15813. errors: errors,
  15814. fields: convertFieldsError(errors) }) :
  15815. resolve();
  15816. };
  15817. var flattenArr = flattenObjArr(objArr);
  15818. asyncSerialArray(flattenArr, func, next);
  15819. });
  15820. _pending["catch"](function (e) {
  15821. return e;
  15822. });
  15823. return _pending;
  15824. }
  15825. var firstFields = option.firstFields || [];
  15826. if (firstFields === true) {
  15827. firstFields = Object.keys(objArr);
  15828. }
  15829. var objArrKeys = Object.keys(objArr);
  15830. var objArrLength = objArrKeys.length;
  15831. var total = 0;
  15832. var results = [];
  15833. var pending = new Promise(function (resolve, reject) {
  15834. var next = function next(errors) {
  15835. results.push.apply(results, errors);
  15836. total++;
  15837. if (total === objArrLength) {
  15838. callback(results);
  15839. return results.length ? reject({
  15840. errors: results,
  15841. fields: convertFieldsError(results) }) :
  15842. resolve();
  15843. }
  15844. };
  15845. if (!objArrKeys.length) {
  15846. callback(results);
  15847. resolve();
  15848. }
  15849. objArrKeys.forEach(function (key) {
  15850. var arr = objArr[key];
  15851. if (firstFields.indexOf(key) !== -1) {
  15852. asyncSerialArray(arr, func, next);
  15853. } else {
  15854. asyncParallelArray(arr, func, next);
  15855. }
  15856. });
  15857. });
  15858. pending["catch"](function (e) {
  15859. return e;
  15860. });
  15861. return pending;
  15862. }
  15863. function complementError(rule) {
  15864. return function (oe) {
  15865. if (oe && oe.message) {
  15866. oe.field = oe.field || rule.fullField;
  15867. return oe;
  15868. }
  15869. return {
  15870. message: typeof oe === 'function' ? oe() : oe,
  15871. field: oe.field || rule.fullField };
  15872. };
  15873. }
  15874. function deepMerge(target, source) {
  15875. if (source) {
  15876. for (var s in source) {
  15877. if (source.hasOwnProperty(s)) {
  15878. var value = source[s];
  15879. if (typeof value === 'object' && typeof target[s] === 'object') {
  15880. target[s] = _extends({}, target[s], {}, value);
  15881. } else {
  15882. target[s] = value;
  15883. }
  15884. }
  15885. }
  15886. }
  15887. return target;
  15888. }
  15889. /**
  15890. * Rule for validating required fields.
  15891. *
  15892. * @param rule The validation rule.
  15893. * @param value The value of the field on the source object.
  15894. * @param source The source object being validated.
  15895. * @param errors An array of errors that this rule may add
  15896. * validation errors to.
  15897. * @param options The validation options.
  15898. * @param options.messages The validation messages.
  15899. */
  15900. function required(rule, value, source, errors, options, type) {
  15901. if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
  15902. errors.push(format(options.messages.required, rule.fullField));
  15903. }
  15904. }
  15905. /**
  15906. * Rule for validating whitespace.
  15907. *
  15908. * @param rule The validation rule.
  15909. * @param value The value of the field on the source object.
  15910. * @param source The source object being validated.
  15911. * @param errors An array of errors that this rule may add
  15912. * validation errors to.
  15913. * @param options The validation options.
  15914. * @param options.messages The validation messages.
  15915. */
  15916. function whitespace(rule, value, source, errors, options) {
  15917. if (/^\s+$/.test(value) || value === '') {
  15918. errors.push(format(options.messages.whitespace, rule.fullField));
  15919. }
  15920. }
  15921. /* eslint max-len:0 */
  15922. var pattern = {
  15923. // http://emailregex.com/
  15924. email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
  15925. url: new RegExp(
  15926. "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
  15927. 'i'),
  15928. hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i };
  15929. var types = {
  15930. integer: function integer(value) {
  15931. return types.number(value) && parseInt(value, 10) === value;
  15932. },
  15933. "float": function float(value) {
  15934. return types.number(value) && !types.integer(value);
  15935. },
  15936. array: function array(value) {
  15937. return Array.isArray(value);
  15938. },
  15939. regexp: function regexp(value) {
  15940. if (value instanceof RegExp) {
  15941. return true;
  15942. }
  15943. try {
  15944. return !!new RegExp(value);
  15945. } catch (e) {
  15946. return false;
  15947. }
  15948. },
  15949. date: function date(value) {
  15950. return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear ===
  15951. 'function';
  15952. },
  15953. number: function number(value) {
  15954. if (isNaN(value)) {
  15955. return false;
  15956. }
  15957. // 修改源码,将字符串数值先转为数值
  15958. return typeof +value === 'number';
  15959. },
  15960. object: function object(value) {
  15961. return typeof value === 'object' && !types.array(value);
  15962. },
  15963. method: function method(value) {
  15964. return typeof value === 'function';
  15965. },
  15966. email: function email(value) {
  15967. return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
  15968. },
  15969. url: function url(value) {
  15970. return typeof value === 'string' && !!value.match(pattern.url);
  15971. },
  15972. hex: function hex(value) {
  15973. return typeof value === 'string' && !!value.match(pattern.hex);
  15974. } };
  15975. /**
  15976. * Rule for validating the type of a value.
  15977. *
  15978. * @param rule The validation rule.
  15979. * @param value The value of the field on the source object.
  15980. * @param source The source object being validated.
  15981. * @param errors An array of errors that this rule may add
  15982. * validation errors to.
  15983. * @param options The validation options.
  15984. * @param options.messages The validation messages.
  15985. */
  15986. function type(rule, value, source, errors, options) {
  15987. if (rule.required && value === undefined) {
  15988. required(rule, value, source, errors, options);
  15989. return;
  15990. }
  15991. var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
  15992. var ruleType = rule.type;
  15993. if (custom.indexOf(ruleType) > -1) {
  15994. if (!types[ruleType](value)) {
  15995. errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  15996. } // straight typeof check
  15997. } else if (ruleType && typeof value !== rule.type) {
  15998. errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  15999. }
  16000. }
  16001. /**
  16002. * Rule for validating minimum and maximum allowed values.
  16003. *
  16004. * @param rule The validation rule.
  16005. * @param value The value of the field on the source object.
  16006. * @param source The source object being validated.
  16007. * @param errors An array of errors that this rule may add
  16008. * validation errors to.
  16009. * @param options The validation options.
  16010. * @param options.messages The validation messages.
  16011. */
  16012. function range(rule, value, source, errors, options) {
  16013. var len = typeof rule.len === 'number';
  16014. var min = typeof rule.min === 'number';
  16015. var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
  16016. var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
  16017. var val = value;
  16018. var key = null;
  16019. var num = typeof value === 'number';
  16020. var str = typeof value === 'string';
  16021. var arr = Array.isArray(value);
  16022. if (num) {
  16023. key = 'number';
  16024. } else if (str) {
  16025. key = 'string';
  16026. } else if (arr) {
  16027. key = 'array';
  16028. } // if the value is not of a supported type for range validation
  16029. // the validation rule rule should use the
  16030. // type property to also test for a particular type
  16031. if (!key) {
  16032. return false;
  16033. }
  16034. if (arr) {
  16035. val = value.length;
  16036. }
  16037. if (str) {
  16038. // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
  16039. val = value.replace(spRegexp, '_').length;
  16040. }
  16041. if (len) {
  16042. if (val !== rule.len) {
  16043. errors.push(format(options.messages[key].len, rule.fullField, rule.len));
  16044. }
  16045. } else if (min && !max && val < rule.min) {
  16046. errors.push(format(options.messages[key].min, rule.fullField, rule.min));
  16047. } else if (max && !min && val > rule.max) {
  16048. errors.push(format(options.messages[key].max, rule.fullField, rule.max));
  16049. } else if (min && max && (val < rule.min || val > rule.max)) {
  16050. errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
  16051. }
  16052. }
  16053. var ENUM = 'enum';
  16054. /**
  16055. * Rule for validating a value exists in an enumerable list.
  16056. *
  16057. * @param rule The validation rule.
  16058. * @param value The value of the field on the source object.
  16059. * @param source The source object being validated.
  16060. * @param errors An array of errors that this rule may add
  16061. * validation errors to.
  16062. * @param options The validation options.
  16063. * @param options.messages The validation messages.
  16064. */
  16065. function enumerable(rule, value, source, errors, options) {
  16066. rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
  16067. if (rule[ENUM].indexOf(value) === -1) {
  16068. errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
  16069. }
  16070. }
  16071. /**
  16072. * Rule for validating a regular expression pattern.
  16073. *
  16074. * @param rule The validation rule.
  16075. * @param value The value of the field on the source object.
  16076. * @param source The source object being validated.
  16077. * @param errors An array of errors that this rule may add
  16078. * validation errors to.
  16079. * @param options The validation options.
  16080. * @param options.messages The validation messages.
  16081. */
  16082. function pattern$1(rule, value, source, errors, options) {
  16083. if (rule.pattern) {
  16084. if (rule.pattern instanceof RegExp) {
  16085. // if a RegExp instance is passed, reset `lastIndex` in case its `global`
  16086. // flag is accidentally set to `true`, which in a validation scenario
  16087. // is not necessary and the result might be misleading
  16088. rule.pattern.lastIndex = 0;
  16089. if (!rule.pattern.test(value)) {
  16090. errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  16091. }
  16092. } else if (typeof rule.pattern === 'string') {
  16093. var _pattern = new RegExp(rule.pattern);
  16094. if (!_pattern.test(value)) {
  16095. errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  16096. }
  16097. }
  16098. }
  16099. }
  16100. var rules = {
  16101. required: required,
  16102. whitespace: whitespace,
  16103. type: type,
  16104. range: range,
  16105. "enum": enumerable,
  16106. pattern: pattern$1 };
  16107. /**
  16108. * Performs validation for string types.
  16109. *
  16110. * @param rule The validation rule.
  16111. * @param value The value of the field on the source object.
  16112. * @param callback The callback function.
  16113. * @param source The source object being validated.
  16114. * @param options The validation options.
  16115. * @param options.messages The validation messages.
  16116. */
  16117. function string(rule, value, callback, source, options) {
  16118. var errors = [];
  16119. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16120. if (validate) {
  16121. if (isEmptyValue(value, 'string') && !rule.required) {
  16122. return callback();
  16123. }
  16124. rules.required(rule, value, source, errors, options, 'string');
  16125. if (!isEmptyValue(value, 'string')) {
  16126. rules.type(rule, value, source, errors, options);
  16127. rules.range(rule, value, source, errors, options);
  16128. rules.pattern(rule, value, source, errors, options);
  16129. if (rule.whitespace === true) {
  16130. rules.whitespace(rule, value, source, errors, options);
  16131. }
  16132. }
  16133. }
  16134. callback(errors);
  16135. }
  16136. /**
  16137. * Validates a function.
  16138. *
  16139. * @param rule The validation rule.
  16140. * @param value The value of the field on the source object.
  16141. * @param callback The callback function.
  16142. * @param source The source object being validated.
  16143. * @param options The validation options.
  16144. * @param options.messages The validation messages.
  16145. */
  16146. function method(rule, value, callback, source, options) {
  16147. var errors = [];
  16148. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16149. if (validate) {
  16150. if (isEmptyValue(value) && !rule.required) {
  16151. return callback();
  16152. }
  16153. rules.required(rule, value, source, errors, options);
  16154. if (value !== undefined) {
  16155. rules.type(rule, value, source, errors, options);
  16156. }
  16157. }
  16158. callback(errors);
  16159. }
  16160. /**
  16161. * Validates a number.
  16162. *
  16163. * @param rule The validation rule.
  16164. * @param value The value of the field on the source object.
  16165. * @param callback The callback function.
  16166. * @param source The source object being validated.
  16167. * @param options The validation options.
  16168. * @param options.messages The validation messages.
  16169. */
  16170. function number(rule, value, callback, source, options) {
  16171. var errors = [];
  16172. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16173. if (validate) {
  16174. if (value === '') {
  16175. value = undefined;
  16176. }
  16177. if (isEmptyValue(value) && !rule.required) {
  16178. return callback();
  16179. }
  16180. rules.required(rule, value, source, errors, options);
  16181. if (value !== undefined) {
  16182. rules.type(rule, value, source, errors, options);
  16183. rules.range(rule, value, source, errors, options);
  16184. }
  16185. }
  16186. callback(errors);
  16187. }
  16188. /**
  16189. * Validates a boolean.
  16190. *
  16191. * @param rule The validation rule.
  16192. * @param value The value of the field on the source object.
  16193. * @param callback The callback function.
  16194. * @param source The source object being validated.
  16195. * @param options The validation options.
  16196. * @param options.messages The validation messages.
  16197. */
  16198. function _boolean(rule, value, callback, source, options) {
  16199. var errors = [];
  16200. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16201. if (validate) {
  16202. if (isEmptyValue(value) && !rule.required) {
  16203. return callback();
  16204. }
  16205. rules.required(rule, value, source, errors, options);
  16206. if (value !== undefined) {
  16207. rules.type(rule, value, source, errors, options);
  16208. }
  16209. }
  16210. callback(errors);
  16211. }
  16212. /**
  16213. * Validates the regular expression type.
  16214. *
  16215. * @param rule The validation rule.
  16216. * @param value The value of the field on the source object.
  16217. * @param callback The callback function.
  16218. * @param source The source object being validated.
  16219. * @param options The validation options.
  16220. * @param options.messages The validation messages.
  16221. */
  16222. function regexp(rule, value, callback, source, options) {
  16223. var errors = [];
  16224. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16225. if (validate) {
  16226. if (isEmptyValue(value) && !rule.required) {
  16227. return callback();
  16228. }
  16229. rules.required(rule, value, source, errors, options);
  16230. if (!isEmptyValue(value)) {
  16231. rules.type(rule, value, source, errors, options);
  16232. }
  16233. }
  16234. callback(errors);
  16235. }
  16236. /**
  16237. * Validates a number is an integer.
  16238. *
  16239. * @param rule The validation rule.
  16240. * @param value The value of the field on the source object.
  16241. * @param callback The callback function.
  16242. * @param source The source object being validated.
  16243. * @param options The validation options.
  16244. * @param options.messages The validation messages.
  16245. */
  16246. function integer(rule, value, callback, source, options) {
  16247. var errors = [];
  16248. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16249. if (validate) {
  16250. if (isEmptyValue(value) && !rule.required) {
  16251. return callback();
  16252. }
  16253. rules.required(rule, value, source, errors, options);
  16254. if (value !== undefined) {
  16255. rules.type(rule, value, source, errors, options);
  16256. rules.range(rule, value, source, errors, options);
  16257. }
  16258. }
  16259. callback(errors);
  16260. }
  16261. /**
  16262. * Validates a number is a floating point number.
  16263. *
  16264. * @param rule The validation rule.
  16265. * @param value The value of the field on the source object.
  16266. * @param callback The callback function.
  16267. * @param source The source object being validated.
  16268. * @param options The validation options.
  16269. * @param options.messages The validation messages.
  16270. */
  16271. function floatFn(rule, value, callback, source, options) {
  16272. var errors = [];
  16273. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16274. if (validate) {
  16275. if (isEmptyValue(value) && !rule.required) {
  16276. return callback();
  16277. }
  16278. rules.required(rule, value, source, errors, options);
  16279. if (value !== undefined) {
  16280. rules.type(rule, value, source, errors, options);
  16281. rules.range(rule, value, source, errors, options);
  16282. }
  16283. }
  16284. callback(errors);
  16285. }
  16286. /**
  16287. * Validates an array.
  16288. *
  16289. * @param rule The validation rule.
  16290. * @param value The value of the field on the source object.
  16291. * @param callback The callback function.
  16292. * @param source The source object being validated.
  16293. * @param options The validation options.
  16294. * @param options.messages The validation messages.
  16295. */
  16296. function array(rule, value, callback, source, options) {
  16297. var errors = [];
  16298. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16299. if (validate) {
  16300. if (isEmptyValue(value, 'array') && !rule.required) {
  16301. return callback();
  16302. }
  16303. rules.required(rule, value, source, errors, options, 'array');
  16304. if (!isEmptyValue(value, 'array')) {
  16305. rules.type(rule, value, source, errors, options);
  16306. rules.range(rule, value, source, errors, options);
  16307. }
  16308. }
  16309. callback(errors);
  16310. }
  16311. /**
  16312. * Validates an object.
  16313. *
  16314. * @param rule The validation rule.
  16315. * @param value The value of the field on the source object.
  16316. * @param callback The callback function.
  16317. * @param source The source object being validated.
  16318. * @param options The validation options.
  16319. * @param options.messages The validation messages.
  16320. */
  16321. function object(rule, value, callback, source, options) {
  16322. var errors = [];
  16323. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16324. if (validate) {
  16325. if (isEmptyValue(value) && !rule.required) {
  16326. return callback();
  16327. }
  16328. rules.required(rule, value, source, errors, options);
  16329. if (value !== undefined) {
  16330. rules.type(rule, value, source, errors, options);
  16331. }
  16332. }
  16333. callback(errors);
  16334. }
  16335. var ENUM$1 = 'enum';
  16336. /**
  16337. * Validates an enumerable list.
  16338. *
  16339. * @param rule The validation rule.
  16340. * @param value The value of the field on the source object.
  16341. * @param callback The callback function.
  16342. * @param source The source object being validated.
  16343. * @param options The validation options.
  16344. * @param options.messages The validation messages.
  16345. */
  16346. function enumerable$1(rule, value, callback, source, options) {
  16347. var errors = [];
  16348. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16349. if (validate) {
  16350. if (isEmptyValue(value) && !rule.required) {
  16351. return callback();
  16352. }
  16353. rules.required(rule, value, source, errors, options);
  16354. if (value !== undefined) {
  16355. rules[ENUM$1](rule, value, source, errors, options);
  16356. }
  16357. }
  16358. callback(errors);
  16359. }
  16360. /**
  16361. * Validates a regular expression pattern.
  16362. *
  16363. * Performs validation when a rule only contains
  16364. * a pattern property but is not declared as a string type.
  16365. *
  16366. * @param rule The validation rule.
  16367. * @param value The value of the field on the source object.
  16368. * @param callback The callback function.
  16369. * @param source The source object being validated.
  16370. * @param options The validation options.
  16371. * @param options.messages The validation messages.
  16372. */
  16373. function pattern$2(rule, value, callback, source, options) {
  16374. var errors = [];
  16375. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16376. if (validate) {
  16377. if (isEmptyValue(value, 'string') && !rule.required) {
  16378. return callback();
  16379. }
  16380. rules.required(rule, value, source, errors, options);
  16381. if (!isEmptyValue(value, 'string')) {
  16382. rules.pattern(rule, value, source, errors, options);
  16383. }
  16384. }
  16385. callback(errors);
  16386. }
  16387. function date(rule, value, callback, source, options) {
  16388. var errors = [];
  16389. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16390. if (validate) {
  16391. if (isEmptyValue(value) && !rule.required) {
  16392. return callback();
  16393. }
  16394. rules.required(rule, value, source, errors, options);
  16395. if (!isEmptyValue(value)) {
  16396. var dateObject;
  16397. if (typeof value === 'number') {
  16398. dateObject = new Date(value);
  16399. } else {
  16400. dateObject = value;
  16401. }
  16402. rules.type(rule, dateObject, source, errors, options);
  16403. if (dateObject) {
  16404. rules.range(rule, dateObject.getTime(), source, errors, options);
  16405. }
  16406. }
  16407. }
  16408. callback(errors);
  16409. }
  16410. function required$1(rule, value, callback, source, options) {
  16411. var errors = [];
  16412. var type = Array.isArray(value) ? 'array' : typeof value;
  16413. rules.required(rule, value, source, errors, options, type);
  16414. callback(errors);
  16415. }
  16416. function type$1(rule, value, callback, source, options) {
  16417. var ruleType = rule.type;
  16418. var errors = [];
  16419. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16420. if (validate) {
  16421. if (isEmptyValue(value, ruleType) && !rule.required) {
  16422. return callback();
  16423. }
  16424. rules.required(rule, value, source, errors, options, ruleType);
  16425. if (!isEmptyValue(value, ruleType)) {
  16426. rules.type(rule, value, source, errors, options);
  16427. }
  16428. }
  16429. callback(errors);
  16430. }
  16431. /**
  16432. * Performs validation for any type.
  16433. *
  16434. * @param rule The validation rule.
  16435. * @param value The value of the field on the source object.
  16436. * @param callback The callback function.
  16437. * @param source The source object being validated.
  16438. * @param options The validation options.
  16439. * @param options.messages The validation messages.
  16440. */
  16441. function any(rule, value, callback, source, options) {
  16442. var errors = [];
  16443. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  16444. if (validate) {
  16445. if (isEmptyValue(value) && !rule.required) {
  16446. return callback();
  16447. }
  16448. rules.required(rule, value, source, errors, options);
  16449. }
  16450. callback(errors);
  16451. }
  16452. var validators = {
  16453. string: string,
  16454. method: method,
  16455. number: number,
  16456. "boolean": _boolean,
  16457. regexp: regexp,
  16458. integer: integer,
  16459. "float": floatFn,
  16460. array: array,
  16461. object: object,
  16462. "enum": enumerable$1,
  16463. pattern: pattern$2,
  16464. date: date,
  16465. url: type$1,
  16466. hex: type$1,
  16467. email: type$1,
  16468. required: required$1,
  16469. any: any };
  16470. function newMessages() {
  16471. return {
  16472. "default": 'Validation error on field %s',
  16473. required: '%s is required',
  16474. "enum": '%s must be one of %s',
  16475. whitespace: '%s cannot be empty',
  16476. date: {
  16477. format: '%s date %s is invalid for format %s',
  16478. parse: '%s date could not be parsed, %s is invalid ',
  16479. invalid: '%s date %s is invalid' },
  16480. types: {
  16481. string: '%s is not a %s',
  16482. method: '%s is not a %s (function)',
  16483. array: '%s is not an %s',
  16484. object: '%s is not an %s',
  16485. number: '%s is not a %s',
  16486. date: '%s is not a %s',
  16487. "boolean": '%s is not a %s',
  16488. integer: '%s is not an %s',
  16489. "float": '%s is not a %s',
  16490. regexp: '%s is not a valid %s',
  16491. email: '%s is not a valid %s',
  16492. url: '%s is not a valid %s',
  16493. hex: '%s is not a valid %s' },
  16494. string: {
  16495. len: '%s must be exactly %s characters',
  16496. min: '%s must be at least %s characters',
  16497. max: '%s cannot be longer than %s characters',
  16498. range: '%s must be between %s and %s characters' },
  16499. number: {
  16500. len: '%s must equal %s',
  16501. min: '%s cannot be less than %s',
  16502. max: '%s cannot be greater than %s',
  16503. range: '%s must be between %s and %s' },
  16504. array: {
  16505. len: '%s must be exactly %s in length',
  16506. min: '%s cannot be less than %s in length',
  16507. max: '%s cannot be greater than %s in length',
  16508. range: '%s must be between %s and %s in length' },
  16509. pattern: {
  16510. mismatch: '%s value %s does not match pattern %s' },
  16511. clone: function clone() {
  16512. var cloned = JSON.parse(JSON.stringify(this));
  16513. cloned.clone = this.clone;
  16514. return cloned;
  16515. } };
  16516. }
  16517. var messages = newMessages();
  16518. /**
  16519. * Encapsulates a validation schema.
  16520. *
  16521. * @param descriptor An object declaring validation rules
  16522. * for this schema.
  16523. */
  16524. function Schema(descriptor) {
  16525. this.rules = null;
  16526. this._messages = messages;
  16527. this.define(descriptor);
  16528. }
  16529. Schema.prototype = {
  16530. messages: function messages(_messages) {
  16531. if (_messages) {
  16532. this._messages = deepMerge(newMessages(), _messages);
  16533. }
  16534. return this._messages;
  16535. },
  16536. define: function define(rules) {
  16537. if (!rules) {
  16538. throw new Error('Cannot configure a schema with no rules');
  16539. }
  16540. if (typeof rules !== 'object' || Array.isArray(rules)) {
  16541. throw new Error('Rules must be an object');
  16542. }
  16543. this.rules = {};
  16544. var z;
  16545. var item;
  16546. for (z in rules) {
  16547. if (rules.hasOwnProperty(z)) {
  16548. item = rules[z];
  16549. this.rules[z] = Array.isArray(item) ? item : [item];
  16550. }
  16551. }
  16552. },
  16553. validate: function validate(source_, o, oc) {
  16554. var _this = this;
  16555. if (o === void 0) {
  16556. o = {};
  16557. }
  16558. if (oc === void 0) {
  16559. oc = function oc() {};
  16560. }
  16561. var source = source_;
  16562. var options = o;
  16563. var callback = oc;
  16564. if (typeof options === 'function') {
  16565. callback = options;
  16566. options = {};
  16567. }
  16568. if (!this.rules || Object.keys(this.rules).length === 0) {
  16569. if (callback) {
  16570. callback();
  16571. }
  16572. return Promise.resolve();
  16573. }
  16574. function complete(results) {
  16575. var i;
  16576. var errors = [];
  16577. var fields = {};
  16578. function add(e) {
  16579. if (Array.isArray(e)) {
  16580. var _errors;
  16581. errors = (_errors = errors).concat.apply(_errors, e);
  16582. } else {
  16583. errors.push(e);
  16584. }
  16585. }
  16586. for (i = 0; i < results.length; i++) {
  16587. add(results[i]);
  16588. }
  16589. if (!errors.length) {
  16590. errors = null;
  16591. fields = null;
  16592. } else {
  16593. fields = convertFieldsError(errors);
  16594. }
  16595. callback(errors, fields);
  16596. }
  16597. if (options.messages) {
  16598. var messages$1 = this.messages();
  16599. if (messages$1 === messages) {
  16600. messages$1 = newMessages();
  16601. }
  16602. deepMerge(messages$1, options.messages);
  16603. options.messages = messages$1;
  16604. } else {
  16605. options.messages = this.messages();
  16606. }
  16607. var arr;
  16608. var value;
  16609. var series = {};
  16610. var keys = options.keys || Object.keys(this.rules);
  16611. keys.forEach(function (z) {
  16612. arr = _this.rules[z];
  16613. value = source[z];
  16614. arr.forEach(function (r) {
  16615. var rule = r;
  16616. if (typeof rule.transform === 'function') {
  16617. if (source === source_) {
  16618. source = _extends({}, source);
  16619. }
  16620. value = source[z] = rule.transform(value);
  16621. }
  16622. if (typeof rule === 'function') {
  16623. rule = {
  16624. validator: rule };
  16625. } else {
  16626. rule = _extends({}, rule);
  16627. }
  16628. rule.validator = _this.getValidationMethod(rule);
  16629. rule.field = z;
  16630. rule.fullField = rule.fullField || z;
  16631. rule.type = _this.getType(rule);
  16632. if (!rule.validator) {
  16633. return;
  16634. }
  16635. series[z] = series[z] || [];
  16636. series[z].push({
  16637. rule: rule,
  16638. value: value,
  16639. source: source,
  16640. field: z });
  16641. });
  16642. });
  16643. var errorFields = {};
  16644. return asyncMap(series, options, function (data, doIt) {
  16645. var rule = data.rule;
  16646. var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField ===
  16647. 'object');
  16648. deep = deep && (rule.required || !rule.required && data.value);
  16649. rule.field = data.field;
  16650. function addFullfield(key, schema) {
  16651. return _extends({}, schema, {
  16652. fullField: rule.fullField + "." + key });
  16653. }
  16654. function cb(e) {
  16655. if (e === void 0) {
  16656. e = [];
  16657. }
  16658. var errors = e;
  16659. if (!Array.isArray(errors)) {
  16660. errors = [errors];
  16661. }
  16662. if (!options.suppressWarning && errors.length) {
  16663. Schema.warning('async-validator:', errors);
  16664. }
  16665. if (errors.length && rule.message) {
  16666. errors = [].concat(rule.message);
  16667. }
  16668. errors = errors.map(complementError(rule));
  16669. if (options.first && errors.length) {
  16670. errorFields[rule.field] = 1;
  16671. return doIt(errors);
  16672. }
  16673. if (!deep) {
  16674. doIt(errors);
  16675. } else {
  16676. // if rule is required but the target object
  16677. // does not exist fail at the rule level and don't
  16678. // go deeper
  16679. if (rule.required && !data.value) {
  16680. if (rule.message) {
  16681. errors = [].concat(rule.message).map(complementError(rule));
  16682. } else if (options.error) {
  16683. errors = [options.error(rule, format(options.messages.required, rule.field))];
  16684. } else {
  16685. errors = [];
  16686. }
  16687. return doIt(errors);
  16688. }
  16689. var fieldsSchema = {};
  16690. if (rule.defaultField) {
  16691. for (var k in data.value) {
  16692. if (data.value.hasOwnProperty(k)) {
  16693. fieldsSchema[k] = rule.defaultField;
  16694. }
  16695. }
  16696. }
  16697. fieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);
  16698. for (var f in fieldsSchema) {
  16699. if (fieldsSchema.hasOwnProperty(f)) {
  16700. var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
  16701. fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
  16702. }
  16703. }
  16704. var schema = new Schema(fieldsSchema);
  16705. schema.messages(options.messages);
  16706. if (data.rule.options) {
  16707. data.rule.options.messages = options.messages;
  16708. data.rule.options.error = options.error;
  16709. }
  16710. schema.validate(data.value, data.rule.options || options, function (errs) {
  16711. var finalErrors = [];
  16712. if (errors && errors.length) {
  16713. finalErrors.push.apply(finalErrors, errors);
  16714. }
  16715. if (errs && errs.length) {
  16716. finalErrors.push.apply(finalErrors, errs);
  16717. }
  16718. doIt(finalErrors.length ? finalErrors : null);
  16719. });
  16720. }
  16721. }
  16722. var res;
  16723. if (rule.asyncValidator) {
  16724. res = rule.asyncValidator(rule, data.value, cb, data.source, options);
  16725. } else if (rule.validator) {
  16726. res = rule.validator(rule, data.value, cb, data.source, options);
  16727. if (res === true) {
  16728. cb();
  16729. } else if (res === false) {
  16730. cb(rule.message || rule.field + " fails");
  16731. } else if (res instanceof Array) {
  16732. cb(res);
  16733. } else if (res instanceof Error) {
  16734. cb(res.message);
  16735. }
  16736. }
  16737. if (res && res.then) {
  16738. res.then(function () {
  16739. return cb();
  16740. }, function (e) {
  16741. return cb(e);
  16742. });
  16743. }
  16744. }, function (results) {
  16745. complete(results);
  16746. });
  16747. },
  16748. getType: function getType(rule) {
  16749. if (rule.type === undefined && rule.pattern instanceof RegExp) {
  16750. rule.type = 'pattern';
  16751. }
  16752. if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
  16753. throw new Error(format('Unknown rule type %s', rule.type));
  16754. }
  16755. return rule.type || 'string';
  16756. },
  16757. getValidationMethod: function getValidationMethod(rule) {
  16758. if (typeof rule.validator === 'function') {
  16759. return rule.validator;
  16760. }
  16761. var keys = Object.keys(rule);
  16762. var messageIndex = keys.indexOf('message');
  16763. if (messageIndex !== -1) {
  16764. keys.splice(messageIndex, 1);
  16765. }
  16766. if (keys.length === 1 && keys[0] === 'required') {
  16767. return validators.required;
  16768. }
  16769. return validators[this.getType(rule)] || false;
  16770. } };
  16771. Schema.register = function register(type, validator) {
  16772. if (typeof validator !== 'function') {
  16773. throw new Error('Cannot register a validator by type, validator is not a function');
  16774. }
  16775. validators[type] = validator;
  16776. };
  16777. Schema.warning = warning;
  16778. Schema.messages = messages;var _default =
  16779. Schema;exports.default = _default;
  16780. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/node-libs-browser/mock/process.js */ 665)))
  16781. /***/ }),
  16782. /***/ 665:
  16783. /*!********************************************************!*\
  16784. !*** ./node_modules/node-libs-browser/mock/process.js ***!
  16785. \********************************************************/
  16786. /*! no static exports found */
  16787. /***/ (function(module, exports, __webpack_require__) {
  16788. exports.nextTick = function nextTick(fn) {
  16789. var args = Array.prototype.slice.call(arguments);
  16790. args.shift();
  16791. setTimeout(function () {
  16792. fn.apply(null, args);
  16793. }, 0);
  16794. };
  16795. exports.platform = exports.arch =
  16796. exports.execPath = exports.title = 'browser';
  16797. exports.pid = 1;
  16798. exports.browser = true;
  16799. exports.env = {};
  16800. exports.argv = [];
  16801. exports.binding = function (name) {
  16802. throw new Error('No such module. (Possibly not yet loaded)')
  16803. };
  16804. (function () {
  16805. var cwd = '/';
  16806. var path;
  16807. exports.cwd = function () { return cwd };
  16808. exports.chdir = function (dir) {
  16809. if (!path) path = __webpack_require__(/*! path */ 666);
  16810. cwd = path.resolve(dir, cwd);
  16811. };
  16812. })();
  16813. exports.exit = exports.kill =
  16814. exports.umask = exports.dlopen =
  16815. exports.uptime = exports.memoryUsage =
  16816. exports.uvCounters = function() {};
  16817. exports.features = {};
  16818. /***/ }),
  16819. /***/ 666:
  16820. /*!***********************************************!*\
  16821. !*** ./node_modules/path-browserify/index.js ***!
  16822. \***********************************************/
  16823. /*! no static exports found */
  16824. /***/ (function(module, exports, __webpack_require__) {
  16825. /* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
  16826. // backported and transplited with Babel, with backwards-compat fixes
  16827. // Copyright Joyent, Inc. and other Node contributors.
  16828. //
  16829. // Permission is hereby granted, free of charge, to any person obtaining a
  16830. // copy of this software and associated documentation files (the
  16831. // "Software"), to deal in the Software without restriction, including
  16832. // without limitation the rights to use, copy, modify, merge, publish,
  16833. // distribute, sublicense, and/or sell copies of the Software, and to permit
  16834. // persons to whom the Software is furnished to do so, subject to the
  16835. // following conditions:
  16836. //
  16837. // The above copyright notice and this permission notice shall be included
  16838. // in all copies or substantial portions of the Software.
  16839. //
  16840. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  16841. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16842. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  16843. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  16844. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  16845. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  16846. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  16847. // resolves . and .. elements in a path array with directory names there
  16848. // must be no slashes, empty elements, or device names (c:\) in the array
  16849. // (so also no leading and trailing slashes - it does not distinguish
  16850. // relative and absolute paths)
  16851. function normalizeArray(parts, allowAboveRoot) {
  16852. // if the path tries to go above the root, `up` ends up > 0
  16853. var up = 0;
  16854. for (var i = parts.length - 1; i >= 0; i--) {
  16855. var last = parts[i];
  16856. if (last === '.') {
  16857. parts.splice(i, 1);
  16858. } else if (last === '..') {
  16859. parts.splice(i, 1);
  16860. up++;
  16861. } else if (up) {
  16862. parts.splice(i, 1);
  16863. up--;
  16864. }
  16865. }
  16866. // if the path is allowed to go above the root, restore leading ..s
  16867. if (allowAboveRoot) {
  16868. for (; up--; up) {
  16869. parts.unshift('..');
  16870. }
  16871. }
  16872. return parts;
  16873. }
  16874. // path.resolve([from ...], to)
  16875. // posix version
  16876. exports.resolve = function() {
  16877. var resolvedPath = '',
  16878. resolvedAbsolute = false;
  16879. for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
  16880. var path = (i >= 0) ? arguments[i] : process.cwd();
  16881. // Skip empty and invalid entries
  16882. if (typeof path !== 'string') {
  16883. throw new TypeError('Arguments to path.resolve must be strings');
  16884. } else if (!path) {
  16885. continue;
  16886. }
  16887. resolvedPath = path + '/' + resolvedPath;
  16888. resolvedAbsolute = path.charAt(0) === '/';
  16889. }
  16890. // At this point the path should be resolved to a full absolute path, but
  16891. // handle relative paths to be safe (might happen when process.cwd() fails)
  16892. // Normalize the path
  16893. resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
  16894. return !!p;
  16895. }), !resolvedAbsolute).join('/');
  16896. return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
  16897. };
  16898. // path.normalize(path)
  16899. // posix version
  16900. exports.normalize = function(path) {
  16901. var isAbsolute = exports.isAbsolute(path),
  16902. trailingSlash = substr(path, -1) === '/';
  16903. // Normalize the path
  16904. path = normalizeArray(filter(path.split('/'), function(p) {
  16905. return !!p;
  16906. }), !isAbsolute).join('/');
  16907. if (!path && !isAbsolute) {
  16908. path = '.';
  16909. }
  16910. if (path && trailingSlash) {
  16911. path += '/';
  16912. }
  16913. return (isAbsolute ? '/' : '') + path;
  16914. };
  16915. // posix version
  16916. exports.isAbsolute = function(path) {
  16917. return path.charAt(0) === '/';
  16918. };
  16919. // posix version
  16920. exports.join = function() {
  16921. var paths = Array.prototype.slice.call(arguments, 0);
  16922. return exports.normalize(filter(paths, function(p, index) {
  16923. if (typeof p !== 'string') {
  16924. throw new TypeError('Arguments to path.join must be strings');
  16925. }
  16926. return p;
  16927. }).join('/'));
  16928. };
  16929. // path.relative(from, to)
  16930. // posix version
  16931. exports.relative = function(from, to) {
  16932. from = exports.resolve(from).substr(1);
  16933. to = exports.resolve(to).substr(1);
  16934. function trim(arr) {
  16935. var start = 0;
  16936. for (; start < arr.length; start++) {
  16937. if (arr[start] !== '') break;
  16938. }
  16939. var end = arr.length - 1;
  16940. for (; end >= 0; end--) {
  16941. if (arr[end] !== '') break;
  16942. }
  16943. if (start > end) return [];
  16944. return arr.slice(start, end - start + 1);
  16945. }
  16946. var fromParts = trim(from.split('/'));
  16947. var toParts = trim(to.split('/'));
  16948. var length = Math.min(fromParts.length, toParts.length);
  16949. var samePartsLength = length;
  16950. for (var i = 0; i < length; i++) {
  16951. if (fromParts[i] !== toParts[i]) {
  16952. samePartsLength = i;
  16953. break;
  16954. }
  16955. }
  16956. var outputParts = [];
  16957. for (var i = samePartsLength; i < fromParts.length; i++) {
  16958. outputParts.push('..');
  16959. }
  16960. outputParts = outputParts.concat(toParts.slice(samePartsLength));
  16961. return outputParts.join('/');
  16962. };
  16963. exports.sep = '/';
  16964. exports.delimiter = ':';
  16965. exports.dirname = function (path) {
  16966. if (typeof path !== 'string') path = path + '';
  16967. if (path.length === 0) return '.';
  16968. var code = path.charCodeAt(0);
  16969. var hasRoot = code === 47 /*/*/;
  16970. var end = -1;
  16971. var matchedSlash = true;
  16972. for (var i = path.length - 1; i >= 1; --i) {
  16973. code = path.charCodeAt(i);
  16974. if (code === 47 /*/*/) {
  16975. if (!matchedSlash) {
  16976. end = i;
  16977. break;
  16978. }
  16979. } else {
  16980. // We saw the first non-path separator
  16981. matchedSlash = false;
  16982. }
  16983. }
  16984. if (end === -1) return hasRoot ? '/' : '.';
  16985. if (hasRoot && end === 1) {
  16986. // return '//';
  16987. // Backwards-compat fix:
  16988. return '/';
  16989. }
  16990. return path.slice(0, end);
  16991. };
  16992. function basename(path) {
  16993. if (typeof path !== 'string') path = path + '';
  16994. var start = 0;
  16995. var end = -1;
  16996. var matchedSlash = true;
  16997. var i;
  16998. for (i = path.length - 1; i >= 0; --i) {
  16999. if (path.charCodeAt(i) === 47 /*/*/) {
  17000. // If we reached a path separator that was not part of a set of path
  17001. // separators at the end of the string, stop now
  17002. if (!matchedSlash) {
  17003. start = i + 1;
  17004. break;
  17005. }
  17006. } else if (end === -1) {
  17007. // We saw the first non-path separator, mark this as the end of our
  17008. // path component
  17009. matchedSlash = false;
  17010. end = i + 1;
  17011. }
  17012. }
  17013. if (end === -1) return '';
  17014. return path.slice(start, end);
  17015. }
  17016. // Uses a mixed approach for backwards-compatibility, as ext behavior changed
  17017. // in new Node.js versions, so only basename() above is backported here
  17018. exports.basename = function (path, ext) {
  17019. var f = basename(path);
  17020. if (ext && f.substr(-1 * ext.length) === ext) {
  17021. f = f.substr(0, f.length - ext.length);
  17022. }
  17023. return f;
  17024. };
  17025. exports.extname = function (path) {
  17026. if (typeof path !== 'string') path = path + '';
  17027. var startDot = -1;
  17028. var startPart = 0;
  17029. var end = -1;
  17030. var matchedSlash = true;
  17031. // Track the state of characters (if any) we see before our first dot and
  17032. // after any path separator we find
  17033. var preDotState = 0;
  17034. for (var i = path.length - 1; i >= 0; --i) {
  17035. var code = path.charCodeAt(i);
  17036. if (code === 47 /*/*/) {
  17037. // If we reached a path separator that was not part of a set of path
  17038. // separators at the end of the string, stop now
  17039. if (!matchedSlash) {
  17040. startPart = i + 1;
  17041. break;
  17042. }
  17043. continue;
  17044. }
  17045. if (end === -1) {
  17046. // We saw the first non-path separator, mark this as the end of our
  17047. // extension
  17048. matchedSlash = false;
  17049. end = i + 1;
  17050. }
  17051. if (code === 46 /*.*/) {
  17052. // If this is our first dot, mark it as the start of our extension
  17053. if (startDot === -1)
  17054. startDot = i;
  17055. else if (preDotState !== 1)
  17056. preDotState = 1;
  17057. } else if (startDot !== -1) {
  17058. // We saw a non-dot and non-path separator before our dot, so we should
  17059. // have a good chance at having a non-empty extension
  17060. preDotState = -1;
  17061. }
  17062. }
  17063. if (startDot === -1 || end === -1 ||
  17064. // We saw a non-dot character immediately before the dot
  17065. preDotState === 0 ||
  17066. // The (right-most) trimmed path component is exactly '..'
  17067. preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
  17068. return '';
  17069. }
  17070. return path.slice(startDot, end);
  17071. };
  17072. function filter (xs, f) {
  17073. if (xs.filter) return xs.filter(f);
  17074. var res = [];
  17075. for (var i = 0; i < xs.length; i++) {
  17076. if (f(xs[i], i, xs)) res.push(xs[i]);
  17077. }
  17078. return res;
  17079. }
  17080. // String.prototype.substr - negative index don't work in IE8
  17081. var substr = 'ab'.substr(-1) === 'b'
  17082. ? function (str, start, len) { return str.substr(start, len) }
  17083. : function (str, start, len) {
  17084. if (start < 0) start = str.length + start;
  17085. return str.substr(start, len);
  17086. }
  17087. ;
  17088. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 665)))
  17089. /***/ }),
  17090. /***/ 737:
  17091. /*!*****************************************************************************!*\
  17092. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/util/province.js ***!
  17093. \*****************************************************************************/
  17094. /*! no static exports found */
  17095. /***/ (function(module, exports, __webpack_require__) {
  17096. "use strict";
  17097. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var provinceData = [{ "label": "北京市", "value": "11" }, { "label": "天津市", "value": "12" }, { "label": "河北省", "value": "13" }, { "label": "山西省", "value": "14" }, { "label": "内蒙古自治区", "value": "15" }, { "label": "辽宁省", "value": "21" }, { "label": "吉林省", "value": "22" }, { "label": "黑龙江省", "value": "23" }, { "label": "上海市", "value": "31" }, { "label": "江苏省", "value": "32" }, { "label": "浙江省", "value": "33" }, { "label": "安徽省", "value": "34" }, { "label": "福建省", "value": "35" }, { "label": "江西省", "value": "36" }, { "label": "山东省", "value": "37" }, { "label": "河南省", "value": "41" }, { "label": "湖北省", "value": "42" }, { "label": "湖南省", "value": "43" }, { "label": "广东省", "value": "44" }, { "label": "广西壮族自治区", "value": "45" }, { "label": "海南省", "value": "46" }, { "label": "重庆市", "value": "50" }, { "label": "四川省", "value": "51" }, { "label": "贵州省", "value": "52" }, { "label": "云南省", "value": "53" }, { "label": "西藏自治区", "value": "54" }, { "label": "陕西省", "value": "61" }, { "label": "甘肃省", "value": "62" }, { "label": "青海省", "value": "63" }, { "label": "宁夏回族自治区", "value": "64" }, { "label": "新疆维吾尔自治区", "value": "65" }, { "label": "台湾", "value": "66" }, { "label": "香港", "value": "67" }, { "label": "澳门", "value": "68" }];var _default = provinceData;exports.default = _default;
  17098. /***/ }),
  17099. /***/ 738:
  17100. /*!*************************************************************************!*\
  17101. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/util/city.js ***!
  17102. \*************************************************************************/
  17103. /*! no static exports found */
  17104. /***/ (function(module, exports, __webpack_require__) {
  17105. "use strict";
  17106. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var cityData = [[{ "label": "市辖区", "value": "1101" }], [{ "label": "市辖区", "value": "1201" }], [{ "label": "石家庄市", "value": "1301" }, { "label": "唐山市", "value": "1302" }, { "label": "秦皇岛市", "value": "1303" }, { "label": "邯郸市", "value": "1304" }, { "label": "邢台市", "value": "1305" }, { "label": "保定市", "value": "1306" }, { "label": "张家口市", "value": "1307" }, { "label": "承德市", "value": "1308" }, { "label": "沧州市", "value": "1309" }, { "label": "廊坊市", "value": "1310" }, { "label": "衡水市", "value": "1311" }], [{ "label": "太原市", "value": "1401" }, { "label": "大同市", "value": "1402" }, { "label": "阳泉市", "value": "1403" }, { "label": "长治市", "value": "1404" }, { "label": "晋城市", "value": "1405" }, { "label": "朔州市", "value": "1406" }, { "label": "晋中市", "value": "1407" }, { "label": "运城市", "value": "1408" }, { "label": "忻州市", "value": "1409" }, { "label": "临汾市", "value": "1410" }, { "label": "吕梁市", "value": "1411" }], [{ "label": "呼和浩特市", "value": "1501" }, { "label": "包头市", "value": "1502" }, { "label": "乌海市", "value": "1503" }, { "label": "赤峰市", "value": "1504" }, { "label": "通辽市", "value": "1505" }, { "label": "鄂尔多斯市", "value": "1506" }, { "label": "呼伦贝尔市", "value": "1507" }, { "label": "巴彦淖尔市", "value": "1508" }, { "label": "乌兰察布市", "value": "1509" }, { "label": "兴安盟", "value": "1522" }, { "label": "锡林郭勒盟", "value": "1525" }, { "label": "阿拉善盟", "value": "1529" }], [{ "label": "沈阳市", "value": "2101" }, { "label": "大连市", "value": "2102" }, { "label": "鞍山市", "value": "2103" }, { "label": "抚顺市", "value": "2104" }, { "label": "本溪市", "value": "2105" }, { "label": "丹东市", "value": "2106" }, { "label": "锦州市", "value": "2107" }, { "label": "营口市", "value": "2108" }, { "label": "阜新市", "value": "2109" }, { "label": "辽阳市", "value": "2110" }, { "label": "盘锦市", "value": "2111" }, { "label": "铁岭市", "value": "2112" }, { "label": "朝阳市", "value": "2113" }, { "label": "葫芦岛市", "value": "2114" }], [{ "label": "长春市", "value": "2201" }, { "label": "吉林市", "value": "2202" }, { "label": "四平市", "value": "2203" }, { "label": "辽源市", "value": "2204" }, { "label": "通化市", "value": "2205" }, { "label": "白山市", "value": "2206" }, { "label": "松原市", "value": "2207" }, { "label": "白城市", "value": "2208" }, { "label": "延边朝鲜族自治州", "value": "2224" }], [{ "label": "哈尔滨市", "value": "2301" }, { "label": "齐齐哈尔市", "value": "2302" }, { "label": "鸡西市", "value": "2303" }, { "label": "鹤岗市", "value": "2304" }, { "label": "双鸭山市", "value": "2305" }, { "label": "大庆市", "value": "2306" }, { "label": "伊春市", "value": "2307" }, { "label": "佳木斯市", "value": "2308" }, { "label": "七台河市", "value": "2309" }, { "label": "牡丹江市", "value": "2310" }, { "label": "黑河市", "value": "2311" }, { "label": "绥化市", "value": "2312" }, { "label": "大兴安岭地区", "value": "2327" }], [{ "label": "市辖区", "value": "3101" }], [{ "label": "南京市", "value": "3201" }, { "label": "无锡市", "value": "3202" }, { "label": "徐州市", "value": "3203" }, { "label": "常州市", "value": "3204" }, { "label": "苏州市", "value": "3205" }, { "label": "南通市", "value": "3206" }, { "label": "连云港市", "value": "3207" }, { "label": "淮安市", "value": "3208" }, { "label": "盐城市", "value": "3209" }, { "label": "扬州市", "value": "3210" }, { "label": "镇江市", "value": "3211" }, { "label": "泰州市", "value": "3212" }, { "label": "宿迁市", "value": "3213" }], [{ "label": "杭州市", "value": "3301" }, { "label": "宁波市", "value": "3302" }, { "label": "温州市", "value": "3303" }, { "label": "嘉兴市", "value": "3304" }, { "label": "湖州市", "value": "3305" }, { "label": "绍兴市", "value": "3306" }, { "label": "金华市", "value": "3307" }, { "label": "衢州市", "value": "3308" }, { "label": "舟山市", "value": "3309" }, { "label": "台州市", "value": "3310" }, { "label": "丽水市", "value": "3311" }], [{ "label": "合肥市", "value": "3401" }, { "label": "芜湖市", "value": "3402" }, { "label": "蚌埠市", "value": "3403" }, { "label": "淮南市", "value": "3404" }, { "label": "马鞍山市", "value": "3405" }, { "label": "淮北市", "value": "3406" }, { "label": "铜陵市", "value": "3407" }, { "label": "安庆市", "value": "3408" }, { "label": "黄山市", "value": "3410" }, { "label": "滁州市", "value": "3411" }, { "label": "阜阳市", "value": "3412" }, { "label": "宿州市", "value": "3413" }, { "label": "六安市", "value": "3415" }, { "label": "亳州市", "value": "3416" }, { "label": "池州市", "value": "3417" }, { "label": "宣城市", "value": "3418" }], [{ "label": "福州市", "value": "3501" }, { "label": "厦门市", "value": "3502" }, { "label": "莆田市", "value": "3503" }, { "label": "三明市", "value": "3504" }, { "label": "泉州市", "value": "3505" }, { "label": "漳州市", "value": "3506" }, { "label": "南平市", "value": "3507" }, { "label": "龙岩市", "value": "3508" }, { "label": "宁德市", "value": "3509" }], [{ "label": "南昌市", "value": "3601" }, { "label": "景德镇市", "value": "3602" }, { "label": "萍乡市", "value": "3603" }, { "label": "九江市", "value": "3604" }, { "label": "新余市", "value": "3605" }, { "label": "鹰潭市", "value": "3606" }, { "label": "赣州市", "value": "3607" }, { "label": "吉安市", "value": "3608" }, { "label": "宜春市", "value": "3609" }, { "label": "抚州市", "value": "3610" }, { "label": "上饶市", "value": "3611" }], [{ "label": "济南市", "value": "3701" }, { "label": "青岛市", "value": "3702" }, { "label": "淄博市", "value": "3703" }, { "label": "枣庄市", "value": "3704" }, { "label": "东营市", "value": "3705" }, { "label": "烟台市", "value": "3706" }, { "label": "潍坊市", "value": "3707" }, { "label": "济宁市", "value": "3708" }, { "label": "泰安市", "value": "3709" }, { "label": "威海市", "value": "3710" }, { "label": "日照市", "value": "3711" }, { "label": "莱芜市", "value": "3712" }, { "label": "临沂市", "value": "3713" }, { "label": "德州市", "value": "3714" }, { "label": "聊城市", "value": "3715" }, { "label": "滨州市", "value": "3716" }, { "label": "菏泽市", "value": "3717" }], [{ "label": "郑州市", "value": "4101" }, { "label": "开封市", "value": "4102" }, { "label": "洛阳市", "value": "4103" }, { "label": "平顶山市", "value": "4104" }, { "label": "安阳市", "value": "4105" }, { "label": "鹤壁市", "value": "4106" }, { "label": "新乡市", "value": "4107" }, { "label": "焦作市", "value": "4108" }, { "label": "濮阳市", "value": "4109" }, { "label": "许昌市", "value": "4110" }, { "label": "漯河市", "value": "4111" }, { "label": "三门峡市", "value": "4112" }, { "label": "南阳市", "value": "4113" }, { "label": "商丘市", "value": "4114" }, { "label": "信阳市", "value": "4115" }, { "label": "周口市", "value": "4116" }, { "label": "驻马店市", "value": "4117" }, { "label": "省直辖县级行政区划", "value": "4190" }], [{ "label": "武汉市", "value": "4201" }, { "label": "黄石市", "value": "4202" }, { "label": "十堰市", "value": "4203" }, { "label": "宜昌市", "value": "4205" }, { "label": "襄阳市", "value": "4206" }, { "label": "鄂州市", "value": "4207" }, { "label": "荆门市", "value": "4208" }, { "label": "孝感市", "value": "4209" }, { "label": "荆州市", "value": "4210" }, { "label": "黄冈市", "value": "4211" }, { "label": "咸宁市", "value": "4212" }, { "label": "随州市", "value": "4213" }, { "label": "恩施土家族苗族自治州", "value": "4228" }, { "label": "省直辖县级行政区划", "value": "4290" }], [{ "label": "长沙市", "value": "4301" }, { "label": "株洲市", "value": "4302" }, { "label": "湘潭市", "value": "4303" }, { "label": "衡阳市", "value": "4304" }, { "label": "邵阳市", "value": "4305" }, { "label": "岳阳市", "value": "4306" }, { "label": "常德市", "value": "4307" }, { "label": "张家界市", "value": "4308" }, { "label": "益阳市", "value": "4309" }, { "label": "郴州市", "value": "4310" }, { "label": "永州市", "value": "4311" }, { "label": "怀化市", "value": "4312" }, { "label": "娄底市", "value": "4313" }, { "label": "湘西土家族苗族自治州", "value": "4331" }], [{ "label": "广州市", "value": "4401" }, { "label": "韶关市", "value": "4402" }, { "label": "深圳市", "value": "4403" }, { "label": "珠海市", "value": "4404" }, { "label": "汕头市", "value": "4405" }, { "label": "佛山市", "value": "4406" }, { "label": "江门市", "value": "4407" }, { "label": "湛江市", "value": "4408" }, { "label": "茂名市", "value": "4409" }, { "label": "肇庆市", "value": "4412" }, { "label": "惠州市", "value": "4413" }, { "label": "梅州市", "value": "4414" }, { "label": "汕尾市", "value": "4415" }, { "label": "河源市", "value": "4416" }, { "label": "阳江市", "value": "4417" }, { "label": "清远市", "value": "4418" }, { "label": "东莞市", "value": "4419" }, { "label": "中山市", "value": "4420" }, { "label": "潮州市", "value": "4451" }, { "label": "揭阳市", "value": "4452" }, { "label": "云浮市", "value": "4453" }], [{ "label": "南宁市", "value": "4501" }, { "label": "柳州市", "value": "4502" }, { "label": "桂林市", "value": "4503" }, { "label": "梧州市", "value": "4504" }, { "label": "北海市", "value": "4505" }, { "label": "防城港市", "value": "4506" }, { "label": "钦州市", "value": "4507" }, { "label": "贵港市", "value": "4508" }, { "label": "玉林市", "value": "4509" }, { "label": "百色市", "value": "4510" }, { "label": "贺州市", "value": "4511" }, { "label": "河池市", "value": "4512" }, { "label": "来宾市", "value": "4513" }, { "label": "崇左市", "value": "4514" }], [{ "label": "海口市", "value": "4601" }, { "label": "三亚市", "value": "4602" }, { "label": "三沙市", "value": "4603" }, { "label": "儋州市", "value": "4604" }, { "label": "省直辖县级行政区划", "value": "4690" }], [{ "label": "市辖区", "value": "5001" }, { "label": "县", "value": "5002" }], [{ "label": "成都市", "value": "5101" }, { "label": "自贡市", "value": "5103" }, { "label": "攀枝花市", "value": "5104" }, { "label": "泸州市", "value": "5105" }, { "label": "德阳市", "value": "5106" }, { "label": "绵阳市", "value": "5107" }, { "label": "广元市", "value": "5108" }, { "label": "遂宁市", "value": "5109" }, { "label": "内江市", "value": "5110" }, { "label": "乐山市", "value": "5111" }, { "label": "南充市", "value": "5113" }, { "label": "眉山市", "value": "5114" }, { "label": "宜宾市", "value": "5115" }, { "label": "广安市", "value": "5116" }, { "label": "达州市", "value": "5117" }, { "label": "雅安市", "value": "5118" }, { "label": "巴中市", "value": "5119" }, { "label": "资阳市", "value": "5120" }, { "label": "阿坝藏族羌族自治州", "value": "5132" }, { "label": "甘孜藏族自治州", "value": "5133" }, { "label": "凉山彝族自治州", "value": "5134" }], [{ "label": "贵阳市", "value": "5201" }, { "label": "六盘水市", "value": "5202" }, { "label": "遵义市", "value": "5203" }, { "label": "安顺市", "value": "5204" }, { "label": "毕节市", "value": "5205" }, { "label": "铜仁市", "value": "5206" }, { "label": "黔西南布依族苗族自治州", "value": "5223" }, { "label": "黔东南苗族侗族自治州", "value": "5226" }, { "label": "黔南布依族苗族自治州", "value": "5227" }], [{ "label": "昆明市", "value": "5301" }, { "label": "曲靖市", "value": "5303" }, { "label": "玉溪市", "value": "5304" }, { "label": "保山市", "value": "5305" }, { "label": "昭通市", "value": "5306" }, { "label": "丽江市", "value": "5307" }, { "label": "普洱市", "value": "5308" }, { "label": "临沧市", "value": "5309" }, { "label": "楚雄彝族自治州", "value": "5323" }, { "label": "红河哈尼族彝族自治州", "value": "5325" }, { "label": "文山壮族苗族自治州", "value": "5326" }, { "label": "西双版纳傣族自治州", "value": "5328" }, { "label": "大理白族自治州", "value": "5329" }, { "label": "德宏傣族景颇族自治州", "value": "5331" }, { "label": "怒江傈僳族自治州", "value": "5333" }, { "label": "迪庆藏族自治州", "value": "5334" }], [{ "label": "拉萨市", "value": "5401" }, { "label": "日喀则市", "value": "5402" }, { "label": "昌都市", "value": "5403" }, { "label": "林芝市", "value": "5404" }, { "label": "山南市", "value": "5405" }, { "label": "那曲地区", "value": "5424" }, { "label": "阿里地区", "value": "5425" }], [{ "label": "西安市", "value": "6101" }, { "label": "铜川市", "value": "6102" }, { "label": "宝鸡市", "value": "6103" }, { "label": "咸阳市", "value": "6104" }, { "label": "渭南市", "value": "6105" }, { "label": "延安市", "value": "6106" }, { "label": "汉中市", "value": "6107" }, { "label": "榆林市", "value": "6108" }, { "label": "安康市", "value": "6109" }, { "label": "商洛市", "value": "6110" }], [{ "label": "兰州市", "value": "6201" }, { "label": "嘉峪关市", "value": "6202" }, { "label": "金昌市", "value": "6203" }, { "label": "白银市", "value": "6204" }, { "label": "天水市", "value": "6205" }, { "label": "武威市", "value": "6206" }, { "label": "张掖市", "value": "6207" }, { "label": "平凉市", "value": "6208" }, { "label": "酒泉市", "value": "6209" }, { "label": "庆阳市", "value": "6210" }, { "label": "定西市", "value": "6211" }, { "label": "陇南市", "value": "6212" }, { "label": "临夏回族自治州", "value": "6229" }, { "label": "甘南藏族自治州", "value": "6230" }], [{ "label": "西宁市", "value": "6301" }, { "label": "海东市", "value": "6302" }, { "label": "海北藏族自治州", "value": "6322" }, { "label": "黄南藏族自治州", "value": "6323" }, { "label": "海南藏族自治州", "value": "6325" }, { "label": "果洛藏族自治州", "value": "6326" }, { "label": "玉树藏族自治州", "value": "6327" }, { "label": "海西蒙古族藏族自治州", "value": "6328" }], [{ "label": "银川市", "value": "6401" }, { "label": "石嘴山市", "value": "6402" }, { "label": "吴忠市", "value": "6403" }, { "label": "固原市", "value": "6404" }, { "label": "中卫市", "value": "6405" }], [{ "label": "乌鲁木齐市", "value": "6501" }, { "label": "克拉玛依市", "value": "6502" }, { "label": "吐鲁番市", "value": "6504" }, { "label": "哈密市", "value": "6505" }, { "label": "昌吉回族自治州", "value": "6523" }, { "label": "博尔塔拉蒙古自治州", "value": "6527" }, { "label": "巴音郭楞蒙古自治州", "value": "6528" }, { "label": "阿克苏地区", "value": "6529" }, { "label": "克孜勒苏柯尔克孜自治州", "value": "6530" }, { "label": "喀什地区", "value": "6531" }, { "label": "和田地区", "value": "6532" }, { "label": "伊犁哈萨克自治州", "value": "6540" }, { "label": "塔城地区", "value": "6542" }, { "label": "阿勒泰地区", "value": "6543" }, { "label": "自治区直辖县级行政区划", "value": "6590" }], [{ "label": "台北", "value": "6601" }, { "label": "高雄", "value": "6602" }, { "label": "基隆", "value": "6603" }, { "label": "台中", "value": "6604" }, { "label": "台南", "value": "6605" }, { "label": "新竹", "value": "6606" }, { "label": "嘉义", "value": "6607" }, { "label": "宜兰", "value": "6608" }, { "label": "桃园", "value": "6609" }, { "label": "苗栗", "value": "6610" }, { "label": "彰化", "value": "6611" }, { "label": "南投", "value": "6612" }, { "label": "云林", "value": "6613" }, { "label": "屏东", "value": "6614" }, { "label": "台东", "value": "6615" }, { "label": "花莲", "value": "6616" }, { "label": "澎湖", "value": "6617" }], [{ "label": "香港岛", "value": "6701" }, { "label": "九龙", "value": "6702" }, { "label": "新界", "value": "6703" }], [{ "label": "澳门半岛", "value": "6801" }, { "label": "氹仔岛", "value": "6802" }, { "label": "路环岛", "value": "6803" }, { "label": "路氹城", "value": "6804" }]];var _default = cityData;exports.default = _default;
  17107. /***/ }),
  17108. /***/ 739:
  17109. /*!*************************************************************************!*\
  17110. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/uview-ui/libs/util/area.js ***!
  17111. \*************************************************************************/
  17112. /*! no static exports found */
  17113. /***/ (function(module, exports, __webpack_require__) {
  17114. "use strict";
  17115. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var areaData = [[[{ "label": "东城区", "value": "110101" }, { "label": "西城区", "value": "110102" }, { "label": "朝阳区", "value": "110105" }, { "label": "丰台区", "value": "110106" }, { "label": "石景山区", "value": "110107" }, { "label": "海淀区", "value": "110108" }, { "label": "门头沟区", "value": "110109" }, { "label": "房山区", "value": "110111" }, { "label": "通州区", "value": "110112" }, { "label": "顺义区", "value": "110113" }, { "label": "昌平区", "value": "110114" }, { "label": "大兴区", "value": "110115" }, { "label": "怀柔区", "value": "110116" }, { "label": "平谷区", "value": "110117" }, { "label": "密云区", "value": "110118" }, { "label": "延庆区", "value": "110119" }]], [[{ "label": "和平区", "value": "120101" }, { "label": "河东区", "value": "120102" }, { "label": "河西区", "value": "120103" }, { "label": "南开区", "value": "120104" }, { "label": "河北区", "value": "120105" }, { "label": "红桥区", "value": "120106" }, { "label": "东丽区", "value": "120110" }, { "label": "西青区", "value": "120111" }, { "label": "津南区", "value": "120112" }, { "label": "北辰区", "value": "120113" }, { "label": "武清区", "value": "120114" }, { "label": "宝坻区", "value": "120115" }, { "label": "滨海新区", "value": "120116" }, { "label": "宁河区", "value": "120117" }, { "label": "静海区", "value": "120118" }, { "label": "蓟州区", "value": "120119" }]], [[{ "label": "长安区", "value": "130102" }, { "label": "桥西区", "value": "130104" }, { "label": "新华区", "value": "130105" }, { "label": "井陉矿区", "value": "130107" }, { "label": "裕华区", "value": "130108" }, { "label": "藁城区", "value": "130109" }, { "label": "鹿泉区", "value": "130110" }, { "label": "栾城区", "value": "130111" }, { "label": "井陉县", "value": "130121" }, { "label": "正定县", "value": "130123" }, { "label": "行唐县", "value": "130125" }, { "label": "灵寿县", "value": "130126" }, { "label": "高邑县", "value": "130127" }, { "label": "深泽县", "value": "130128" }, { "label": "赞皇县", "value": "130129" }, { "label": "无极县", "value": "130130" }, { "label": "平山县", "value": "130131" }, { "label": "元氏县", "value": "130132" }, { "label": "赵县", "value": "130133" }, { "label": "石家庄高新技术产业开发区", "value": "130171" }, { "label": "石家庄循环化工园区", "value": "130172" }, { "label": "辛集市", "value": "130181" }, { "label": "晋州市", "value": "130183" }, { "label": "新乐市", "value": "130184" }], [{ "label": "路南区", "value": "130202" }, { "label": "路北区", "value": "130203" }, { "label": "古冶区", "value": "130204" }, { "label": "开平区", "value": "130205" }, { "label": "丰南区", "value": "130207" }, { "label": "丰润区", "value": "130208" }, { "label": "曹妃甸区", "value": "130209" }, { "label": "滦县", "value": "130223" }, { "label": "滦南县", "value": "130224" }, { "label": "乐亭县", "value": "130225" }, { "label": "迁西县", "value": "130227" }, { "label": "玉田县", "value": "130229" }, { "label": "唐山市芦台经济技术开发区", "value": "130271" }, { "label": "唐山市汉沽管理区", "value": "130272" }, { "label": "唐山高新技术产业开发区", "value": "130273" }, { "label": "河北唐山海港经济开发区", "value": "130274" }, { "label": "遵化市", "value": "130281" }, { "label": "迁安市", "value": "130283" }], [{ "label": "海港区", "value": "130302" }, { "label": "山海关区", "value": "130303" }, { "label": "北戴河区", "value": "130304" }, { "label": "抚宁区", "value": "130306" }, { "label": "青龙满族自治县", "value": "130321" }, { "label": "昌黎县", "value": "130322" }, { "label": "卢龙县", "value": "130324" }, { "label": "秦皇岛市经济技术开发区", "value": "130371" }, { "label": "北戴河新区", "value": "130372" }], [{ "label": "邯山区", "value": "130402" }, { "label": "丛台区", "value": "130403" }, { "label": "复兴区", "value": "130404" }, { "label": "峰峰矿区", "value": "130406" }, { "label": "肥乡区", "value": "130407" }, { "label": "永年区", "value": "130408" }, { "label": "临漳县", "value": "130423" }, { "label": "成安县", "value": "130424" }, { "label": "大名县", "value": "130425" }, { "label": "涉县", "value": "130426" }, { "label": "磁县", "value": "130427" }, { "label": "邱县", "value": "130430" }, { "label": "鸡泽县", "value": "130431" }, { "label": "广平县", "value": "130432" }, { "label": "馆陶县", "value": "130433" }, { "label": "魏县", "value": "130434" }, { "label": "曲周县", "value": "130435" }, { "label": "邯郸经济技术开发区", "value": "130471" }, { "label": "邯郸冀南新区", "value": "130473" }, { "label": "武安市", "value": "130481" }], [{ "label": "桥东区", "value": "130502" }, { "label": "桥西区", "value": "130503" }, { "label": "邢台县", "value": "130521" }, { "label": "临城县", "value": "130522" }, { "label": "内丘县", "value": "130523" }, { "label": "柏乡县", "value": "130524" }, { "label": "隆尧县", "value": "130525" }, { "label": "任县", "value": "130526" }, { "label": "南和县", "value": "130527" }, { "label": "宁晋县", "value": "130528" }, { "label": "巨鹿县", "value": "130529" }, { "label": "新河县", "value": "130530" }, { "label": "广宗县", "value": "130531" }, { "label": "平乡县", "value": "130532" }, { "label": "威县", "value": "130533" }, { "label": "清河县", "value": "130534" }, { "label": "临西县", "value": "130535" }, { "label": "河北邢台经济开发区", "value": "130571" }, { "label": "南宫市", "value": "130581" }, { "label": "沙河市", "value": "130582" }], [{ "label": "竞秀区", "value": "130602" }, { "label": "莲池区", "value": "130606" }, { "label": "满城区", "value": "130607" }, { "label": "清苑区", "value": "130608" }, { "label": "徐水区", "value": "130609" }, { "label": "涞水县", "value": "130623" }, { "label": "阜平县", "value": "130624" }, { "label": "定兴县", "value": "130626" }, { "label": "唐县", "value": "130627" }, { "label": "高阳县", "value": "130628" }, { "label": "容城县", "value": "130629" }, { "label": "涞源县", "value": "130630" }, { "label": "望都县", "value": "130631" }, { "label": "安新县", "value": "130632" }, { "label": "易县", "value": "130633" }, { "label": "曲阳县", "value": "130634" }, { "label": "蠡县", "value": "130635" }, { "label": "顺平县", "value": "130636" }, { "label": "博野县", "value": "130637" }, { "label": "雄县", "value": "130638" }, { "label": "保定高新技术产业开发区", "value": "130671" }, { "label": "保定白沟新城", "value": "130672" }, { "label": "涿州市", "value": "130681" }, { "label": "定州市", "value": "130682" }, { "label": "安国市", "value": "130683" }, { "label": "高碑店市", "value": "130684" }], [{ "label": "桥东区", "value": "130702" }, { "label": "桥西区", "value": "130703" }, { "label": "宣化区", "value": "130705" }, { "label": "下花园区", "value": "130706" }, { "label": "万全区", "value": "130708" }, { "label": "崇礼区", "value": "130709" }, { "label": "张北县", "value": "130722" }, { "label": "康保县", "value": "130723" }, { "label": "沽源县", "value": "130724" }, { "label": "尚义县", "value": "130725" }, { "label": "蔚县", "value": "130726" }, { "label": "阳原县", "value": "130727" }, { "label": "怀安县", "value": "130728" }, { "label": "怀来县", "value": "130730" }, { "label": "涿鹿县", "value": "130731" }, { "label": "赤城县", "value": "130732" }, { "label": "张家口市高新技术产业开发区", "value": "130771" }, { "label": "张家口市察北管理区", "value": "130772" }, { "label": "张家口市塞北管理区", "value": "130773" }], [{ "label": "双桥区", "value": "130802" }, { "label": "双滦区", "value": "130803" }, { "label": "鹰手营子矿区", "value": "130804" }, { "label": "承德县", "value": "130821" }, { "label": "兴隆县", "value": "130822" }, { "label": "滦平县", "value": "130824" }, { "label": "隆化县", "value": "130825" }, { "label": "丰宁满族自治县", "value": "130826" }, { "label": "宽城满族自治县", "value": "130827" }, { "label": "围场满族蒙古族自治县", "value": "130828" }, { "label": "承德高新技术产业开发区", "value": "130871" }, { "label": "平泉市", "value": "130881" }], [{ "label": "新华区", "value": "130902" }, { "label": "运河区", "value": "130903" }, { "label": "沧县", "value": "130921" }, { "label": "青县", "value": "130922" }, { "label": "东光县", "value": "130923" }, { "label": "海兴县", "value": "130924" }, { "label": "盐山县", "value": "130925" }, { "label": "肃宁县", "value": "130926" }, { "label": "南皮县", "value": "130927" }, { "label": "吴桥县", "value": "130928" }, { "label": "献县", "value": "130929" }, { "label": "孟村回族自治县", "value": "130930" }, { "label": "河北沧州经济开发区", "value": "130971" }, { "label": "沧州高新技术产业开发区", "value": "130972" }, { "label": "沧州渤海新区", "value": "130973" }, { "label": "泊头市", "value": "130981" }, { "label": "任丘市", "value": "130982" }, { "label": "黄骅市", "value": "130983" }, { "label": "河间市", "value": "130984" }], [{ "label": "安次区", "value": "131002" }, { "label": "广阳区", "value": "131003" }, { "label": "固安县", "value": "131022" }, { "label": "永清县", "value": "131023" }, { "label": "香河县", "value": "131024" }, { "label": "大城县", "value": "131025" }, { "label": "文安县", "value": "131026" }, { "label": "大厂回族自治县", "value": "131028" }, { "label": "廊坊经济技术开发区", "value": "131071" }, { "label": "霸州市", "value": "131081" }, { "label": "三河市", "value": "131082" }], [{ "label": "桃城区", "value": "131102" }, { "label": "冀州区", "value": "131103" }, { "label": "枣强县", "value": "131121" }, { "label": "武邑县", "value": "131122" }, { "label": "武强县", "value": "131123" }, { "label": "饶阳县", "value": "131124" }, { "label": "安平县", "value": "131125" }, { "label": "故城县", "value": "131126" }, { "label": "景县", "value": "131127" }, { "label": "阜城县", "value": "131128" }, { "label": "河北衡水经济开发区", "value": "131171" }, { "label": "衡水滨湖新区", "value": "131172" }, { "label": "深州市", "value": "131182" }]], [[{ "label": "小店区", "value": "140105" }, { "label": "迎泽区", "value": "140106" }, { "label": "杏花岭区", "value": "140107" }, { "label": "尖草坪区", "value": "140108" }, { "label": "万柏林区", "value": "140109" }, { "label": "晋源区", "value": "140110" }, { "label": "清徐县", "value": "140121" }, { "label": "阳曲县", "value": "140122" }, { "label": "娄烦县", "value": "140123" }, { "label": "山西转型综合改革示范区", "value": "140171" }, { "label": "古交市", "value": "140181" }], [{ "label": "城区", "value": "140202" }, { "label": "矿区", "value": "140203" }, { "label": "南郊区", "value": "140211" }, { "label": "新荣区", "value": "140212" }, { "label": "阳高县", "value": "140221" }, { "label": "天镇县", "value": "140222" }, { "label": "广灵县", "value": "140223" }, { "label": "灵丘县", "value": "140224" }, { "label": "浑源县", "value": "140225" }, { "label": "左云县", "value": "140226" }, { "label": "大同县", "value": "140227" }, { "label": "山西大同经济开发区", "value": "140271" }], [{ "label": "城区", "value": "140302" }, { "label": "矿区", "value": "140303" }, { "label": "郊区", "value": "140311" }, { "label": "平定县", "value": "140321" }, { "label": "盂县", "value": "140322" }, { "label": "山西阳泉经济开发区", "value": "140371" }], [{ "label": "城区", "value": "140402" }, { "label": "郊区", "value": "140411" }, { "label": "长治县", "value": "140421" }, { "label": "襄垣县", "value": "140423" }, { "label": "屯留县", "value": "140424" }, { "label": "平顺县", "value": "140425" }, { "label": "黎城县", "value": "140426" }, { "label": "壶关县", "value": "140427" }, { "label": "长子县", "value": "140428" }, { "label": "武乡县", "value": "140429" }, { "label": "沁县", "value": "140430" }, { "label": "沁源县", "value": "140431" }, { "label": "山西长治高新技术产业园区", "value": "140471" }, { "label": "潞城市", "value": "140481" }], [{ "label": "城区", "value": "140502" }, { "label": "沁水县", "value": "140521" }, { "label": "阳城县", "value": "140522" }, { "label": "陵川县", "value": "140524" }, { "label": "泽州县", "value": "140525" }, { "label": "高平市", "value": "140581" }], [{ "label": "朔城区", "value": "140602" }, { "label": "平鲁区", "value": "140603" }, { "label": "山阴县", "value": "140621" }, { "label": "应县", "value": "140622" }, { "label": "右玉县", "value": "140623" }, { "label": "怀仁县", "value": "140624" }, { "label": "山西朔州经济开发区", "value": "140671" }], [{ "label": "榆次区", "value": "140702" }, { "label": "榆社县", "value": "140721" }, { "label": "左权县", "value": "140722" }, { "label": "和顺县", "value": "140723" }, { "label": "昔阳县", "value": "140724" }, { "label": "寿阳县", "value": "140725" }, { "label": "太谷县", "value": "140726" }, { "label": "祁县", "value": "140727" }, { "label": "平遥县", "value": "140728" }, { "label": "灵石县", "value": "140729" }, { "label": "介休市", "value": "140781" }], [{ "label": "盐湖区", "value": "140802" }, { "label": "临猗县", "value": "140821" }, { "label": "万荣县", "value": "140822" }, { "label": "闻喜县", "value": "140823" }, { "label": "稷山县", "value": "140824" }, { "label": "新绛县", "value": "140825" }, { "label": "绛县", "value": "140826" }, { "label": "垣曲县", "value": "140827" }, { "label": "夏县", "value": "140828" }, { "label": "平陆县", "value": "140829" }, { "label": "芮城县", "value": "140830" }, { "label": "永济市", "value": "140881" }, { "label": "河津市", "value": "140882" }], [{ "label": "忻府区", "value": "140902" }, { "label": "定襄县", "value": "140921" }, { "label": "五台县", "value": "140922" }, { "label": "代县", "value": "140923" }, { "label": "繁峙县", "value": "140924" }, { "label": "宁武县", "value": "140925" }, { "label": "静乐县", "value": "140926" }, { "label": "神池县", "value": "140927" }, { "label": "五寨县", "value": "140928" }, { "label": "岢岚县", "value": "140929" }, { "label": "河曲县", "value": "140930" }, { "label": "保德县", "value": "140931" }, { "label": "偏关县", "value": "140932" }, { "label": "五台山风景名胜区", "value": "140971" }, { "label": "原平市", "value": "140981" }], [{ "label": "尧都区", "value": "141002" }, { "label": "曲沃县", "value": "141021" }, { "label": "翼城县", "value": "141022" }, { "label": "襄汾县", "value": "141023" }, { "label": "洪洞县", "value": "141024" }, { "label": "古县", "value": "141025" }, { "label": "安泽县", "value": "141026" }, { "label": "浮山县", "value": "141027" }, { "label": "吉县", "value": "141028" }, { "label": "乡宁县", "value": "141029" }, { "label": "大宁县", "value": "141030" }, { "label": "隰县", "value": "141031" }, { "label": "永和县", "value": "141032" }, { "label": "蒲县", "value": "141033" }, { "label": "汾西县", "value": "141034" }, { "label": "侯马市", "value": "141081" }, { "label": "霍州市", "value": "141082" }], [{ "label": "离石区", "value": "141102" }, { "label": "文水县", "value": "141121" }, { "label": "交城县", "value": "141122" }, { "label": "兴县", "value": "141123" }, { "label": "临县", "value": "141124" }, { "label": "柳林县", "value": "141125" }, { "label": "石楼县", "value": "141126" }, { "label": "岚县", "value": "141127" }, { "label": "方山县", "value": "141128" }, { "label": "中阳县", "value": "141129" }, { "label": "交口县", "value": "141130" }, { "label": "孝义市", "value": "141181" }, { "label": "汾阳市", "value": "141182" }]], [[{ "label": "新城区", "value": "150102" }, { "label": "回民区", "value": "150103" }, { "label": "玉泉区", "value": "150104" }, { "label": "赛罕区", "value": "150105" }, { "label": "土默特左旗", "value": "150121" }, { "label": "托克托县", "value": "150122" }, { "label": "和林格尔县", "value": "150123" }, { "label": "清水河县", "value": "150124" }, { "label": "武川县", "value": "150125" }, { "label": "呼和浩特金海工业园区", "value": "150171" }, { "label": "呼和浩特经济技术开发区", "value": "150172" }], [{ "label": "东河区", "value": "150202" }, { "label": "昆都仑区", "value": "150203" }, { "label": "青山区", "value": "150204" }, { "label": "石拐区", "value": "150205" }, { "label": "白云鄂博矿区", "value": "150206" }, { "label": "九原区", "value": "150207" }, { "label": "土默特右旗", "value": "150221" }, { "label": "固阳县", "value": "150222" }, { "label": "达尔罕茂明安联合旗", "value": "150223" }, { "label": "包头稀土高新技术产业开发区", "value": "150271" }], [{ "label": "海勃湾区", "value": "150302" }, { "label": "海南区", "value": "150303" }, { "label": "乌达区", "value": "150304" }], [{ "label": "红山区", "value": "150402" }, { "label": "元宝山区", "value": "150403" }, { "label": "松山区", "value": "150404" }, { "label": "阿鲁科尔沁旗", "value": "150421" }, { "label": "巴林左旗", "value": "150422" }, { "label": "巴林右旗", "value": "150423" }, { "label": "林西县", "value": "150424" }, { "label": "克什克腾旗", "value": "150425" }, { "label": "翁牛特旗", "value": "150426" }, { "label": "喀喇沁旗", "value": "150428" }, { "label": "宁城县", "value": "150429" }, { "label": "敖汉旗", "value": "150430" }], [{ "label": "科尔沁区", "value": "150502" }, { "label": "科尔沁左翼中旗", "value": "150521" }, { "label": "科尔沁左翼后旗", "value": "150522" }, { "label": "开鲁县", "value": "150523" }, { "label": "库伦旗", "value": "150524" }, { "label": "奈曼旗", "value": "150525" }, { "label": "扎鲁特旗", "value": "150526" }, { "label": "通辽经济技术开发区", "value": "150571" }, { "label": "霍林郭勒市", "value": "150581" }], [{ "label": "东胜区", "value": "150602" }, { "label": "康巴什区", "value": "150603" }, { "label": "达拉特旗", "value": "150621" }, { "label": "准格尔旗", "value": "150622" }, { "label": "鄂托克前旗", "value": "150623" }, { "label": "鄂托克旗", "value": "150624" }, { "label": "杭锦旗", "value": "150625" }, { "label": "乌审旗", "value": "150626" }, { "label": "伊金霍洛旗", "value": "150627" }], [{ "label": "海拉尔区", "value": "150702" }, { "label": "扎赉诺尔区", "value": "150703" }, { "label": "阿荣旗", "value": "150721" }, { "label": "莫力达瓦达斡尔族自治旗", "value": "150722" }, { "label": "鄂伦春自治旗", "value": "150723" }, { "label": "鄂温克族自治旗", "value": "150724" }, { "label": "陈巴尔虎旗", "value": "150725" }, { "label": "新巴尔虎左旗", "value": "150726" }, { "label": "新巴尔虎右旗", "value": "150727" }, { "label": "满洲里市", "value": "150781" }, { "label": "牙克石市", "value": "150782" }, { "label": "扎兰屯市", "value": "150783" }, { "label": "额尔古纳市", "value": "150784" }, { "label": "根河市", "value": "150785" }], [{ "label": "临河区", "value": "150802" }, { "label": "五原县", "value": "150821" }, { "label": "磴口县", "value": "150822" }, { "label": "乌拉特前旗", "value": "150823" }, { "label": "乌拉特中旗", "value": "150824" }, { "label": "乌拉特后旗", "value": "150825" }, { "label": "杭锦后旗", "value": "150826" }], [{ "label": "集宁区", "value": "150902" }, { "label": "卓资县", "value": "150921" }, { "label": "化德县", "value": "150922" }, { "label": "商都县", "value": "150923" }, { "label": "兴和县", "value": "150924" }, { "label": "凉城县", "value": "150925" }, { "label": "察哈尔右翼前旗", "value": "150926" }, { "label": "察哈尔右翼中旗", "value": "150927" }, { "label": "察哈尔右翼后旗", "value": "150928" }, { "label": "四子王旗", "value": "150929" }, { "label": "丰镇市", "value": "150981" }], [{ "label": "乌兰浩特市", "value": "152201" }, { "label": "阿尔山市", "value": "152202" }, { "label": "科尔沁右翼前旗", "value": "152221" }, { "label": "科尔沁右翼中旗", "value": "152222" }, { "label": "扎赉特旗", "value": "152223" }, { "label": "突泉县", "value": "152224" }], [{ "label": "二连浩特市", "value": "152501" }, { "label": "锡林浩特市", "value": "152502" }, { "label": "阿巴嘎旗", "value": "152522" }, { "label": "苏尼特左旗", "value": "152523" }, { "label": "苏尼特右旗", "value": "152524" }, { "label": "东乌珠穆沁旗", "value": "152525" }, { "label": "西乌珠穆沁旗", "value": "152526" }, { "label": "太仆寺旗", "value": "152527" }, { "label": "镶黄旗", "value": "152528" }, { "label": "正镶白旗", "value": "152529" }, { "label": "正蓝旗", "value": "152530" }, { "label": "多伦县", "value": "152531" }, { "label": "乌拉盖管委会", "value": "152571" }], [{ "label": "阿拉善左旗", "value": "152921" }, { "label": "阿拉善右旗", "value": "152922" }, { "label": "额济纳旗", "value": "152923" }, { "label": "内蒙古阿拉善经济开发区", "value": "152971" }]], [[{ "label": "和平区", "value": "210102" }, { "label": "沈河区", "value": "210103" }, { "label": "大东区", "value": "210104" }, { "label": "皇姑区", "value": "210105" }, { "label": "铁西区", "value": "210106" }, { "label": "苏家屯区", "value": "210111" }, { "label": "浑南区", "value": "210112" }, { "label": "沈北新区", "value": "210113" }, { "label": "于洪区", "value": "210114" }, { "label": "辽中区", "value": "210115" }, { "label": "康平县", "value": "210123" }, { "label": "法库县", "value": "210124" }, { "label": "新民市", "value": "210181" }], [{ "label": "中山区", "value": "210202" }, { "label": "西岗区", "value": "210203" }, { "label": "沙河口区", "value": "210204" }, { "label": "甘井子区", "value": "210211" }, { "label": "旅顺口区", "value": "210212" }, { "label": "金州区", "value": "210213" }, { "label": "普兰店区", "value": "210214" }, { "label": "长海县", "value": "210224" }, { "label": "瓦房店市", "value": "210281" }, { "label": "庄河市", "value": "210283" }], [{ "label": "铁东区", "value": "210302" }, { "label": "铁西区", "value": "210303" }, { "label": "立山区", "value": "210304" }, { "label": "千山区", "value": "210311" }, { "label": "台安县", "value": "210321" }, { "label": "岫岩满族自治县", "value": "210323" }, { "label": "海城市", "value": "210381" }], [{ "label": "新抚区", "value": "210402" }, { "label": "东洲区", "value": "210403" }, { "label": "望花区", "value": "210404" }, { "label": "顺城区", "value": "210411" }, { "label": "抚顺县", "value": "210421" }, { "label": "新宾满族自治县", "value": "210422" }, { "label": "清原满族自治县", "value": "210423" }], [{ "label": "平山区", "value": "210502" }, { "label": "溪湖区", "value": "210503" }, { "label": "明山区", "value": "210504" }, { "label": "南芬区", "value": "210505" }, { "label": "本溪满族自治县", "value": "210521" }, { "label": "桓仁满族自治县", "value": "210522" }], [{ "label": "元宝区", "value": "210602" }, { "label": "振兴区", "value": "210603" }, { "label": "振安区", "value": "210604" }, { "label": "宽甸满族自治县", "value": "210624" }, { "label": "东港市", "value": "210681" }, { "label": "凤城市", "value": "210682" }], [{ "label": "古塔区", "value": "210702" }, { "label": "凌河区", "value": "210703" }, { "label": "太和区", "value": "210711" }, { "label": "黑山县", "value": "210726" }, { "label": "义县", "value": "210727" }, { "label": "凌海市", "value": "210781" }, { "label": "北镇市", "value": "210782" }], [{ "label": "站前区", "value": "210802" }, { "label": "西市区", "value": "210803" }, { "label": "鲅鱼圈区", "value": "210804" }, { "label": "老边区", "value": "210811" }, { "label": "盖州市", "value": "210881" }, { "label": "大石桥市", "value": "210882" }], [{ "label": "海州区", "value": "210902" }, { "label": "新邱区", "value": "210903" }, { "label": "太平区", "value": "210904" }, { "label": "清河门区", "value": "210905" }, { "label": "细河区", "value": "210911" }, { "label": "阜新蒙古族自治县", "value": "210921" }, { "label": "彰武县", "value": "210922" }], [{ "label": "白塔区", "value": "211002" }, { "label": "文圣区", "value": "211003" }, { "label": "宏伟区", "value": "211004" }, { "label": "弓长岭区", "value": "211005" }, { "label": "太子河区", "value": "211011" }, { "label": "辽阳县", "value": "211021" }, { "label": "灯塔市", "value": "211081" }], [{ "label": "双台子区", "value": "211102" }, { "label": "兴隆台区", "value": "211103" }, { "label": "大洼区", "value": "211104" }, { "label": "盘山县", "value": "211122" }], [{ "label": "银州区", "value": "211202" }, { "label": "清河区", "value": "211204" }, { "label": "铁岭县", "value": "211221" }, { "label": "西丰县", "value": "211223" }, { "label": "昌图县", "value": "211224" }, { "label": "调兵山市", "value": "211281" }, { "label": "开原市", "value": "211282" }], [{ "label": "双塔区", "value": "211302" }, { "label": "龙城区", "value": "211303" }, { "label": "朝阳县", "value": "211321" }, { "label": "建平县", "value": "211322" }, { "label": "喀喇沁左翼蒙古族自治县", "value": "211324" }, { "label": "北票市", "value": "211381" }, { "label": "凌源市", "value": "211382" }], [{ "label": "连山区", "value": "211402" }, { "label": "龙港区", "value": "211403" }, { "label": "南票区", "value": "211404" }, { "label": "绥中县", "value": "211421" }, { "label": "建昌县", "value": "211422" }, { "label": "兴城市", "value": "211481" }]], [[{ "label": "南关区", "value": "220102" }, { "label": "宽城区", "value": "220103" }, { "label": "朝阳区", "value": "220104" }, { "label": "二道区", "value": "220105" }, { "label": "绿园区", "value": "220106" }, { "label": "双阳区", "value": "220112" }, { "label": "九台区", "value": "220113" }, { "label": "农安县", "value": "220122" }, { "label": "长春经济技术开发区", "value": "220171" }, { "label": "长春净月高新技术产业开发区", "value": "220172" }, { "label": "长春高新技术产业开发区", "value": "220173" }, { "label": "长春汽车经济技术开发区", "value": "220174" }, { "label": "榆树市", "value": "220182" }, { "label": "德惠市", "value": "220183" }], [{ "label": "昌邑区", "value": "220202" }, { "label": "龙潭区", "value": "220203" }, { "label": "船营区", "value": "220204" }, { "label": "丰满区", "value": "220211" }, { "label": "永吉县", "value": "220221" }, { "label": "吉林经济开发区", "value": "220271" }, { "label": "吉林高新技术产业开发区", "value": "220272" }, { "label": "吉林中国新加坡食品区", "value": "220273" }, { "label": "蛟河市", "value": "220281" }, { "label": "桦甸市", "value": "220282" }, { "label": "舒兰市", "value": "220283" }, { "label": "磐石市", "value": "220284" }], [{ "label": "铁西区", "value": "220302" }, { "label": "铁东区", "value": "220303" }, { "label": "梨树县", "value": "220322" }, { "label": "伊通满族自治县", "value": "220323" }, { "label": "公主岭市", "value": "220381" }, { "label": "双辽市", "value": "220382" }], [{ "label": "龙山区", "value": "220402" }, { "label": "西安区", "value": "220403" }, { "label": "东丰县", "value": "220421" }, { "label": "东辽县", "value": "220422" }], [{ "label": "东昌区", "value": "220502" }, { "label": "二道江区", "value": "220503" }, { "label": "通化县", "value": "220521" }, { "label": "辉南县", "value": "220523" }, { "label": "柳河县", "value": "220524" }, { "label": "梅河口市", "value": "220581" }, { "label": "集安市", "value": "220582" }], [{ "label": "浑江区", "value": "220602" }, { "label": "江源区", "value": "220605" }, { "label": "抚松县", "value": "220621" }, { "label": "靖宇县", "value": "220622" }, { "label": "长白朝鲜族自治县", "value": "220623" }, { "label": "临江市", "value": "220681" }], [{ "label": "宁江区", "value": "220702" }, { "label": "前郭尔罗斯蒙古族自治县", "value": "220721" }, { "label": "长岭县", "value": "220722" }, { "label": "乾安县", "value": "220723" }, { "label": "吉林松原经济开发区", "value": "220771" }, { "label": "扶余市", "value": "220781" }], [{ "label": "洮北区", "value": "220802" }, { "label": "镇赉县", "value": "220821" }, { "label": "通榆县", "value": "220822" }, { "label": "吉林白城经济开发区", "value": "220871" }, { "label": "洮南市", "value": "220881" }, { "label": "大安市", "value": "220882" }], [{ "label": "延吉市", "value": "222401" }, { "label": "图们市", "value": "222402" }, { "label": "敦化市", "value": "222403" }, { "label": "珲春市", "value": "222404" }, { "label": "龙井市", "value": "222405" }, { "label": "和龙市", "value": "222406" }, { "label": "汪清县", "value": "222424" }, { "label": "安图县", "value": "222426" }]], [[{ "label": "道里区", "value": "230102" }, { "label": "南岗区", "value": "230103" }, { "label": "道外区", "value": "230104" }, { "label": "平房区", "value": "230108" }, { "label": "松北区", "value": "230109" }, { "label": "香坊区", "value": "230110" }, { "label": "呼兰区", "value": "230111" }, { "label": "阿城区", "value": "230112" }, { "label": "双城区", "value": "230113" }, { "label": "依兰县", "value": "230123" }, { "label": "方正县", "value": "230124" }, { "label": "宾县", "value": "230125" }, { "label": "巴彦县", "value": "230126" }, { "label": "木兰县", "value": "230127" }, { "label": "通河县", "value": "230128" }, { "label": "延寿县", "value": "230129" }, { "label": "尚志市", "value": "230183" }, { "label": "五常市", "value": "230184" }], [{ "label": "龙沙区", "value": "230202" }, { "label": "建华区", "value": "230203" }, { "label": "铁锋区", "value": "230204" }, { "label": "昂昂溪区", "value": "230205" }, { "label": "富拉尔基区", "value": "230206" }, { "label": "碾子山区", "value": "230207" }, { "label": "梅里斯达斡尔族区", "value": "230208" }, { "label": "龙江县", "value": "230221" }, { "label": "依安县", "value": "230223" }, { "label": "泰来县", "value": "230224" }, { "label": "甘南县", "value": "230225" }, { "label": "富裕县", "value": "230227" }, { "label": "克山县", "value": "230229" }, { "label": "克东县", "value": "230230" }, { "label": "拜泉县", "value": "230231" }, { "label": "讷河市", "value": "230281" }], [{ "label": "鸡冠区", "value": "230302" }, { "label": "恒山区", "value": "230303" }, { "label": "滴道区", "value": "230304" }, { "label": "梨树区", "value": "230305" }, { "label": "城子河区", "value": "230306" }, { "label": "麻山区", "value": "230307" }, { "label": "鸡东县", "value": "230321" }, { "label": "虎林市", "value": "230381" }, { "label": "密山市", "value": "230382" }], [{ "label": "向阳区", "value": "230402" }, { "label": "工农区", "value": "230403" }, { "label": "南山区", "value": "230404" }, { "label": "兴安区", "value": "230405" }, { "label": "东山区", "value": "230406" }, { "label": "兴山区", "value": "230407" }, { "label": "萝北县", "value": "230421" }, { "label": "绥滨县", "value": "230422" }], [{ "label": "尖山区", "value": "230502" }, { "label": "岭东区", "value": "230503" }, { "label": "四方台区", "value": "230505" }, { "label": "宝山区", "value": "230506" }, { "label": "集贤县", "value": "230521" }, { "label": "友谊县", "value": "230522" }, { "label": "宝清县", "value": "230523" }, { "label": "饶河县", "value": "230524" }], [{ "label": "萨尔图区", "value": "230602" }, { "label": "龙凤区", "value": "230603" }, { "label": "让胡路区", "value": "230604" }, { "label": "红岗区", "value": "230605" }, { "label": "大同区", "value": "230606" }, { "label": "肇州县", "value": "230621" }, { "label": "肇源县", "value": "230622" }, { "label": "林甸县", "value": "230623" }, { "label": "杜尔伯特蒙古族自治县", "value": "230624" }, { "label": "大庆高新技术产业开发区", "value": "230671" }], [{ "label": "伊春区", "value": "230702" }, { "label": "南岔区", "value": "230703" }, { "label": "友好区", "value": "230704" }, { "label": "西林区", "value": "230705" }, { "label": "翠峦区", "value": "230706" }, { "label": "新青区", "value": "230707" }, { "label": "美溪区", "value": "230708" }, { "label": "金山屯区", "value": "230709" }, { "label": "五营区", "value": "230710" }, { "label": "乌马河区", "value": "230711" }, { "label": "汤旺河区", "value": "230712" }, { "label": "带岭区", "value": "230713" }, { "label": "乌伊岭区", "value": "230714" }, { "label": "红星区", "value": "230715" }, { "label": "上甘岭区", "value": "230716" }, { "label": "嘉荫县", "value": "230722" }, { "label": "铁力市", "value": "230781" }], [{ "label": "向阳区", "value": "230803" }, { "label": "前进区", "value": "230804" }, { "label": "东风区", "value": "230805" }, { "label": "郊区", "value": "230811" }, { "label": "桦南县", "value": "230822" }, { "label": "桦川县", "value": "230826" }, { "label": "汤原县", "value": "230828" }, { "label": "同江市", "value": "230881" }, { "label": "富锦市", "value": "230882" }, { "label": "抚远市", "value": "230883" }], [{ "label": "新兴区", "value": "230902" }, { "label": "桃山区", "value": "230903" }, { "label": "茄子河区", "value": "230904" }, { "label": "勃利县", "value": "230921" }], [{ "label": "东安区", "value": "231002" }, { "label": "阳明区", "value": "231003" }, { "label": "爱民区", "value": "231004" }, { "label": "西安区", "value": "231005" }, { "label": "林口县", "value": "231025" }, { "label": "牡丹江经济技术开发区", "value": "231071" }, { "label": "绥芬河市", "value": "231081" }, { "label": "海林市", "value": "231083" }, { "label": "宁安市", "value": "231084" }, { "label": "穆棱市", "value": "231085" }, { "label": "东宁市", "value": "231086" }], [{ "label": "爱辉区", "value": "231102" }, { "label": "嫩江县", "value": "231121" }, { "label": "逊克县", "value": "231123" }, { "label": "孙吴县", "value": "231124" }, { "label": "北安市", "value": "231181" }, { "label": "五大连池市", "value": "231182" }], [{ "label": "北林区", "value": "231202" }, { "label": "望奎县", "value": "231221" }, { "label": "兰西县", "value": "231222" }, { "label": "青冈县", "value": "231223" }, { "label": "庆安县", "value": "231224" }, { "label": "明水县", "value": "231225" }, { "label": "绥棱县", "value": "231226" }, { "label": "安达市", "value": "231281" }, { "label": "肇东市", "value": "231282" }, { "label": "海伦市", "value": "231283" }], [{ "label": "加格达奇区", "value": "232701" }, { "label": "松岭区", "value": "232702" }, { "label": "新林区", "value": "232703" }, { "label": "呼中区", "value": "232704" }, { "label": "呼玛县", "value": "232721" }, { "label": "塔河县", "value": "232722" }, { "label": "漠河县", "value": "232723" }]], [[{ "label": "黄浦区", "value": "310101" }, { "label": "徐汇区", "value": "310104" }, { "label": "长宁区", "value": "310105" }, { "label": "静安区", "value": "310106" }, { "label": "普陀区", "value": "310107" }, { "label": "虹口区", "value": "310109" }, { "label": "杨浦区", "value": "310110" }, { "label": "闵行区", "value": "310112" }, { "label": "宝山区", "value": "310113" }, { "label": "嘉定区", "value": "310114" }, { "label": "浦东新区", "value": "310115" }, { "label": "金山区", "value": "310116" }, { "label": "松江区", "value": "310117" }, { "label": "青浦区", "value": "310118" }, { "label": "奉贤区", "value": "310120" }, { "label": "崇明区", "value": "310151" }]], [[{ "label": "玄武区", "value": "320102" }, { "label": "秦淮区", "value": "320104" }, { "label": "建邺区", "value": "320105" }, { "label": "鼓楼区", "value": "320106" }, { "label": "浦口区", "value": "320111" }, { "label": "栖霞区", "value": "320113" }, { "label": "雨花台区", "value": "320114" }, { "label": "江宁区", "value": "320115" }, { "label": "六合区", "value": "320116" }, { "label": "溧水区", "value": "320117" }, { "label": "高淳区", "value": "320118" }], [{ "label": "锡山区", "value": "320205" }, { "label": "惠山区", "value": "320206" }, { "label": "滨湖区", "value": "320211" }, { "label": "梁溪区", "value": "320213" }, { "label": "新吴区", "value": "320214" }, { "label": "江阴市", "value": "320281" }, { "label": "宜兴市", "value": "320282" }], [{ "label": "鼓楼区", "value": "320302" }, { "label": "云龙区", "value": "320303" }, { "label": "贾汪区", "value": "320305" }, { "label": "泉山区", "value": "320311" }, { "label": "铜山区", "value": "320312" }, { "label": "丰县", "value": "320321" }, { "label": "沛县", "value": "320322" }, { "label": "睢宁县", "value": "320324" }, { "label": "徐州经济技术开发区", "value": "320371" }, { "label": "新沂市", "value": "320381" }, { "label": "邳州市", "value": "320382" }], [{ "label": "天宁区", "value": "320402" }, { "label": "钟楼区", "value": "320404" }, { "label": "新北区", "value": "320411" }, { "label": "武进区", "value": "320412" }, { "label": "金坛区", "value": "320413" }, { "label": "溧阳市", "value": "320481" }], [{ "label": "虎丘区", "value": "320505" }, { "label": "吴中区", "value": "320506" }, { "label": "相城区", "value": "320507" }, { "label": "姑苏区", "value": "320508" }, { "label": "吴江区", "value": "320509" }, { "label": "苏州工业园区", "value": "320571" }, { "label": "常熟市", "value": "320581" }, { "label": "张家港市", "value": "320582" }, { "label": "昆山市", "value": "320583" }, { "label": "太仓市", "value": "320585" }], [{ "label": "崇川区", "value": "320602" }, { "label": "港闸区", "value": "320611" }, { "label": "通州区", "value": "320612" }, { "label": "海安县", "value": "320621" }, { "label": "如东县", "value": "320623" }, { "label": "南通经济技术开发区", "value": "320671" }, { "label": "启东市", "value": "320681" }, { "label": "如皋市", "value": "320682" }, { "label": "海门市", "value": "320684" }], [{ "label": "连云区", "value": "320703" }, { "label": "海州区", "value": "320706" }, { "label": "赣榆区", "value": "320707" }, { "label": "东海县", "value": "320722" }, { "label": "灌云县", "value": "320723" }, { "label": "灌南县", "value": "320724" }, { "label": "连云港经济技术开发区", "value": "320771" }, { "label": "连云港高新技术产业开发区", "value": "320772" }], [{ "label": "淮安区", "value": "320803" }, { "label": "淮阴区", "value": "320804" }, { "label": "清江浦区", "value": "320812" }, { "label": "洪泽区", "value": "320813" }, { "label": "涟水县", "value": "320826" }, { "label": "盱眙县", "value": "320830" }, { "label": "金湖县", "value": "320831" }, { "label": "淮安经济技术开发区", "value": "320871" }], [{ "label": "亭湖区", "value": "320902" }, { "label": "盐都区", "value": "320903" }, { "label": "大丰区", "value": "320904" }, { "label": "响水县", "value": "320921" }, { "label": "滨海县", "value": "320922" }, { "label": "阜宁县", "value": "320923" }, { "label": "射阳县", "value": "320924" }, { "label": "建湖县", "value": "320925" }, { "label": "盐城经济技术开发区", "value": "320971" }, { "label": "东台市", "value": "320981" }], [{ "label": "广陵区", "value": "321002" }, { "label": "邗江区", "value": "321003" }, { "label": "江都区", "value": "321012" }, { "label": "宝应县", "value": "321023" }, { "label": "扬州经济技术开发区", "value": "321071" }, { "label": "仪征市", "value": "321081" }, { "label": "高邮市", "value": "321084" }], [{ "label": "京口区", "value": "321102" }, { "label": "润州区", "value": "321111" }, { "label": "丹徒区", "value": "321112" }, { "label": "镇江新区", "value": "321171" }, { "label": "丹阳市", "value": "321181" }, { "label": "扬中市", "value": "321182" }, { "label": "句容市", "value": "321183" }], [{ "label": "海陵区", "value": "321202" }, { "label": "高港区", "value": "321203" }, { "label": "姜堰区", "value": "321204" }, { "label": "泰州医药高新技术产业开发区", "value": "321271" }, { "label": "兴化市", "value": "321281" }, { "label": "靖江市", "value": "321282" }, { "label": "泰兴市", "value": "321283" }], [{ "label": "宿城区", "value": "321302" }, { "label": "宿豫区", "value": "321311" }, { "label": "沭阳县", "value": "321322" }, { "label": "泗阳县", "value": "321323" }, { "label": "泗洪县", "value": "321324" }, { "label": "宿迁经济技术开发区", "value": "321371" }]], [[{ "label": "上城区", "value": "330102" }, { "label": "下城区", "value": "330103" }, { "label": "江干区", "value": "330104" }, { "label": "拱墅区", "value": "330105" }, { "label": "西湖区", "value": "330106" }, { "label": "滨江区", "value": "330108" }, { "label": "萧山区", "value": "330109" }, { "label": "余杭区", "value": "330110" }, { "label": "富阳区", "value": "330111" }, { "label": "临安区", "value": "330112" }, { "label": "桐庐县", "value": "330122" }, { "label": "淳安县", "value": "330127" }, { "label": "建德市", "value": "330182" }], [{ "label": "海曙区", "value": "330203" }, { "label": "江北区", "value": "330205" }, { "label": "北仑区", "value": "330206" }, { "label": "镇海区", "value": "330211" }, { "label": "鄞州区", "value": "330212" }, { "label": "奉化区", "value": "330213" }, { "label": "象山县", "value": "330225" }, { "label": "宁海县", "value": "330226" }, { "label": "余姚市", "value": "330281" }, { "label": "慈溪市", "value": "330282" }], [{ "label": "鹿城区", "value": "330302" }, { "label": "龙湾区", "value": "330303" }, { "label": "瓯海区", "value": "330304" }, { "label": "洞头区", "value": "330305" }, { "label": "永嘉县", "value": "330324" }, { "label": "平阳县", "value": "330326" }, { "label": "苍南县", "value": "330327" }, { "label": "文成县", "value": "330328" }, { "label": "泰顺县", "value": "330329" }, { "label": "温州经济技术开发区", "value": "330371" }, { "label": "瑞安市", "value": "330381" }, { "label": "乐清市", "value": "330382" }], [{ "label": "南湖区", "value": "330402" }, { "label": "秀洲区", "value": "330411" }, { "label": "嘉善县", "value": "330421" }, { "label": "海盐县", "value": "330424" }, { "label": "海宁市", "value": "330481" }, { "label": "平湖市", "value": "330482" }, { "label": "桐乡市", "value": "330483" }], [{ "label": "吴兴区", "value": "330502" }, { "label": "南浔区", "value": "330503" }, { "label": "德清县", "value": "330521" }, { "label": "长兴县", "value": "330522" }, { "label": "安吉县", "value": "330523" }], [{ "label": "越城区", "value": "330602" }, { "label": "柯桥区", "value": "330603" }, { "label": "上虞区", "value": "330604" }, { "label": "新昌县", "value": "330624" }, { "label": "诸暨市", "value": "330681" }, { "label": "嵊州市", "value": "330683" }], [{ "label": "婺城区", "value": "330702" }, { "label": "金东区", "value": "330703" }, { "label": "武义县", "value": "330723" }, { "label": "浦江县", "value": "330726" }, { "label": "磐安县", "value": "330727" }, { "label": "兰溪市", "value": "330781" }, { "label": "义乌市", "value": "330782" }, { "label": "东阳市", "value": "330783" }, { "label": "永康市", "value": "330784" }], [{ "label": "柯城区", "value": "330802" }, { "label": "衢江区", "value": "330803" }, { "label": "常山县", "value": "330822" }, { "label": "开化县", "value": "330824" }, { "label": "龙游县", "value": "330825" }, { "label": "江山市", "value": "330881" }], [{ "label": "定海区", "value": "330902" }, { "label": "普陀区", "value": "330903" }, { "label": "岱山县", "value": "330921" }, { "label": "嵊泗县", "value": "330922" }], [{ "label": "椒江区", "value": "331002" }, { "label": "黄岩区", "value": "331003" }, { "label": "路桥区", "value": "331004" }, { "label": "三门县", "value": "331022" }, { "label": "天台县", "value": "331023" }, { "label": "仙居县", "value": "331024" }, { "label": "温岭市", "value": "331081" }, { "label": "临海市", "value": "331082" }, { "label": "玉环市", "value": "331083" }], [{ "label": "莲都区", "value": "331102" }, { "label": "青田县", "value": "331121" }, { "label": "缙云县", "value": "331122" }, { "label": "遂昌县", "value": "331123" }, { "label": "松阳县", "value": "331124" }, { "label": "云和县", "value": "331125" }, { "label": "庆元县", "value": "331126" }, { "label": "景宁畲族自治县", "value": "331127" }, { "label": "龙泉市", "value": "331181" }]], [[{ "label": "瑶海区", "value": "340102" }, { "label": "庐阳区", "value": "340103" }, { "label": "蜀山区", "value": "340104" }, { "label": "包河区", "value": "340111" }, { "label": "长丰县", "value": "340121" }, { "label": "肥东县", "value": "340122" }, { "label": "肥西县", "value": "340123" }, { "label": "庐江县", "value": "340124" }, { "label": "合肥高新技术产业开发区", "value": "340171" }, { "label": "合肥经济技术开发区", "value": "340172" }, { "label": "合肥新站高新技术产业开发区", "value": "340173" }, { "label": "巢湖市", "value": "340181" }], [{ "label": "镜湖区", "value": "340202" }, { "label": "弋江区", "value": "340203" }, { "label": "鸠江区", "value": "340207" }, { "label": "三山区", "value": "340208" }, { "label": "芜湖县", "value": "340221" }, { "label": "繁昌县", "value": "340222" }, { "label": "南陵县", "value": "340223" }, { "label": "无为县", "value": "340225" }, { "label": "芜湖经济技术开发区", "value": "340271" }, { "label": "安徽芜湖长江大桥经济开发区", "value": "340272" }], [{ "label": "龙子湖区", "value": "340302" }, { "label": "蚌山区", "value": "340303" }, { "label": "禹会区", "value": "340304" }, { "label": "淮上区", "value": "340311" }, { "label": "怀远县", "value": "340321" }, { "label": "五河县", "value": "340322" }, { "label": "固镇县", "value": "340323" }, { "label": "蚌埠市高新技术开发区", "value": "340371" }, { "label": "蚌埠市经济开发区", "value": "340372" }], [{ "label": "大通区", "value": "340402" }, { "label": "田家庵区", "value": "340403" }, { "label": "谢家集区", "value": "340404" }, { "label": "八公山区", "value": "340405" }, { "label": "潘集区", "value": "340406" }, { "label": "凤台县", "value": "340421" }, { "label": "寿县", "value": "340422" }], [{ "label": "花山区", "value": "340503" }, { "label": "雨山区", "value": "340504" }, { "label": "博望区", "value": "340506" }, { "label": "当涂县", "value": "340521" }, { "label": "含山县", "value": "340522" }, { "label": "和县", "value": "340523" }], [{ "label": "杜集区", "value": "340602" }, { "label": "相山区", "value": "340603" }, { "label": "烈山区", "value": "340604" }, { "label": "濉溪县", "value": "340621" }], [{ "label": "铜官区", "value": "340705" }, { "label": "义安区", "value": "340706" }, { "label": "郊区", "value": "340711" }, { "label": "枞阳县", "value": "340722" }], [{ "label": "迎江区", "value": "340802" }, { "label": "大观区", "value": "340803" }, { "label": "宜秀区", "value": "340811" }, { "label": "怀宁县", "value": "340822" }, { "label": "潜山县", "value": "340824" }, { "label": "太湖县", "value": "340825" }, { "label": "宿松县", "value": "340826" }, { "label": "望江县", "value": "340827" }, { "label": "岳西县", "value": "340828" }, { "label": "安徽安庆经济开发区", "value": "340871" }, { "label": "桐城市", "value": "340881" }], [{ "label": "屯溪区", "value": "341002" }, { "label": "黄山区", "value": "341003" }, { "label": "徽州区", "value": "341004" }, { "label": "歙县", "value": "341021" }, { "label": "休宁县", "value": "341022" }, { "label": "黟县", "value": "341023" }, { "label": "祁门县", "value": "341024" }], [{ "label": "琅琊区", "value": "341102" }, { "label": "南谯区", "value": "341103" }, { "label": "来安县", "value": "341122" }, { "label": "全椒县", "value": "341124" }, { "label": "定远县", "value": "341125" }, { "label": "凤阳县", "value": "341126" }, { "label": "苏滁现代产业园", "value": "341171" }, { "label": "滁州经济技术开发区", "value": "341172" }, { "label": "天长市", "value": "341181" }, { "label": "明光市", "value": "341182" }], [{ "label": "颍州区", "value": "341202" }, { "label": "颍东区", "value": "341203" }, { "label": "颍泉区", "value": "341204" }, { "label": "临泉县", "value": "341221" }, { "label": "太和县", "value": "341222" }, { "label": "阜南县", "value": "341225" }, { "label": "颍上县", "value": "341226" }, { "label": "阜阳合肥现代产业园区", "value": "341271" }, { "label": "阜阳经济技术开发区", "value": "341272" }, { "label": "界首市", "value": "341282" }], [{ "label": "埇桥区", "value": "341302" }, { "label": "砀山县", "value": "341321" }, { "label": "萧县", "value": "341322" }, { "label": "灵璧县", "value": "341323" }, { "label": "泗县", "value": "341324" }, { "label": "宿州马鞍山现代产业园区", "value": "341371" }, { "label": "宿州经济技术开发区", "value": "341372" }], [{ "label": "金安区", "value": "341502" }, { "label": "裕安区", "value": "341503" }, { "label": "叶集区", "value": "341504" }, { "label": "霍邱县", "value": "341522" }, { "label": "舒城县", "value": "341523" }, { "label": "金寨县", "value": "341524" }, { "label": "霍山县", "value": "341525" }], [{ "label": "谯城区", "value": "341602" }, { "label": "涡阳县", "value": "341621" }, { "label": "蒙城县", "value": "341622" }, { "label": "利辛县", "value": "341623" }], [{ "label": "贵池区", "value": "341702" }, { "label": "东至县", "value": "341721" }, { "label": "石台县", "value": "341722" }, { "label": "青阳县", "value": "341723" }], [{ "label": "宣州区", "value": "341802" }, { "label": "郎溪县", "value": "341821" }, { "label": "广德县", "value": "341822" }, { "label": "泾县", "value": "341823" }, { "label": "绩溪县", "value": "341824" }, { "label": "旌德县", "value": "341825" }, { "label": "宣城市经济开发区", "value": "341871" }, { "label": "宁国市", "value": "341881" }]], [[{ "label": "鼓楼区", "value": "350102" }, { "label": "台江区", "value": "350103" }, { "label": "仓山区", "value": "350104" }, { "label": "马尾区", "value": "350105" }, { "label": "晋安区", "value": "350111" }, { "label": "闽侯县", "value": "350121" }, { "label": "连江县", "value": "350122" }, { "label": "罗源县", "value": "350123" }, { "label": "闽清县", "value": "350124" }, { "label": "永泰县", "value": "350125" }, { "label": "平潭县", "value": "350128" }, { "label": "福清市", "value": "350181" }, { "label": "长乐市", "value": "350182" }], [{ "label": "思明区", "value": "350203" }, { "label": "海沧区", "value": "350205" }, { "label": "湖里区", "value": "350206" }, { "label": "集美区", "value": "350211" }, { "label": "同安区", "value": "350212" }, { "label": "翔安区", "value": "350213" }], [{ "label": "城厢区", "value": "350302" }, { "label": "涵江区", "value": "350303" }, { "label": "荔城区", "value": "350304" }, { "label": "秀屿区", "value": "350305" }, { "label": "仙游县", "value": "350322" }], [{ "label": "梅列区", "value": "350402" }, { "label": "三元区", "value": "350403" }, { "label": "明溪县", "value": "350421" }, { "label": "清流县", "value": "350423" }, { "label": "宁化县", "value": "350424" }, { "label": "大田县", "value": "350425" }, { "label": "尤溪县", "value": "350426" }, { "label": "沙县", "value": "350427" }, { "label": "将乐县", "value": "350428" }, { "label": "泰宁县", "value": "350429" }, { "label": "建宁县", "value": "350430" }, { "label": "永安市", "value": "350481" }], [{ "label": "鲤城区", "value": "350502" }, { "label": "丰泽区", "value": "350503" }, { "label": "洛江区", "value": "350504" }, { "label": "泉港区", "value": "350505" }, { "label": "惠安县", "value": "350521" }, { "label": "安溪县", "value": "350524" }, { "label": "永春县", "value": "350525" }, { "label": "德化县", "value": "350526" }, { "label": "金门县", "value": "350527" }, { "label": "石狮市", "value": "350581" }, { "label": "晋江市", "value": "350582" }, { "label": "南安市", "value": "350583" }], [{ "label": "芗城区", "value": "350602" }, { "label": "龙文区", "value": "350603" }, { "label": "云霄县", "value": "350622" }, { "label": "漳浦县", "value": "350623" }, { "label": "诏安县", "value": "350624" }, { "label": "长泰县", "value": "350625" }, { "label": "东山县", "value": "350626" }, { "label": "南靖县", "value": "350627" }, { "label": "平和县", "value": "350628" }, { "label": "华安县", "value": "350629" }, { "label": "龙海市", "value": "350681" }], [{ "label": "延平区", "value": "350702" }, { "label": "建阳区", "value": "350703" }, { "label": "顺昌县", "value": "350721" }, { "label": "浦城县", "value": "350722" }, { "label": "光泽县", "value": "350723" }, { "label": "松溪县", "value": "350724" }, { "label": "政和县", "value": "350725" }, { "label": "邵武市", "value": "350781" }, { "label": "武夷山市", "value": "350782" }, { "label": "建瓯市", "value": "350783" }], [{ "label": "新罗区", "value": "350802" }, { "label": "永定区", "value": "350803" }, { "label": "长汀县", "value": "350821" }, { "label": "上杭县", "value": "350823" }, { "label": "武平县", "value": "350824" }, { "label": "连城县", "value": "350825" }, { "label": "漳平市", "value": "350881" }], [{ "label": "蕉城区", "value": "350902" }, { "label": "霞浦县", "value": "350921" }, { "label": "古田县", "value": "350922" }, { "label": "屏南县", "value": "350923" }, { "label": "寿宁县", "value": "350924" }, { "label": "周宁县", "value": "350925" }, { "label": "柘荣县", "value": "350926" }, { "label": "福安市", "value": "350981" }, { "label": "福鼎市", "value": "350982" }]], [[{ "label": "东湖区", "value": "360102" }, { "label": "西湖区", "value": "360103" }, { "label": "青云谱区", "value": "360104" }, { "label": "湾里区", "value": "360105" }, { "label": "青山湖区", "value": "360111" }, { "label": "新建区", "value": "360112" }, { "label": "南昌县", "value": "360121" }, { "label": "安义县", "value": "360123" }, { "label": "进贤县", "value": "360124" }], [{ "label": "昌江区", "value": "360202" }, { "label": "珠山区", "value": "360203" }, { "label": "浮梁县", "value": "360222" }, { "label": "乐平市", "value": "360281" }], [{ "label": "安源区", "value": "360302" }, { "label": "湘东区", "value": "360313" }, { "label": "莲花县", "value": "360321" }, { "label": "上栗县", "value": "360322" }, { "label": "芦溪县", "value": "360323" }], [{ "label": "濂溪区", "value": "360402" }, { "label": "浔阳区", "value": "360403" }, { "label": "柴桑区", "value": "360404" }, { "label": "武宁县", "value": "360423" }, { "label": "修水县", "value": "360424" }, { "label": "永修县", "value": "360425" }, { "label": "德安县", "value": "360426" }, { "label": "都昌县", "value": "360428" }, { "label": "湖口县", "value": "360429" }, { "label": "彭泽县", "value": "360430" }, { "label": "瑞昌市", "value": "360481" }, { "label": "共青城市", "value": "360482" }, { "label": "庐山市", "value": "360483" }], [{ "label": "渝水区", "value": "360502" }, { "label": "分宜县", "value": "360521" }], [{ "label": "月湖区", "value": "360602" }, { "label": "余江县", "value": "360622" }, { "label": "贵溪市", "value": "360681" }], [{ "label": "章贡区", "value": "360702" }, { "label": "南康区", "value": "360703" }, { "label": "赣县区", "value": "360704" }, { "label": "信丰县", "value": "360722" }, { "label": "大余县", "value": "360723" }, { "label": "上犹县", "value": "360724" }, { "label": "崇义县", "value": "360725" }, { "label": "安远县", "value": "360726" }, { "label": "龙南县", "value": "360727" }, { "label": "定南县", "value": "360728" }, { "label": "全南县", "value": "360729" }, { "label": "宁都县", "value": "360730" }, { "label": "于都县", "value": "360731" }, { "label": "兴国县", "value": "360732" }, { "label": "会昌县", "value": "360733" }, { "label": "寻乌县", "value": "360734" }, { "label": "石城县", "value": "360735" }, { "label": "瑞金市", "value": "360781" }], [{ "label": "吉州区", "value": "360802" }, { "label": "青原区", "value": "360803" }, { "label": "吉安县", "value": "360821" }, { "label": "吉水县", "value": "360822" }, { "label": "峡江县", "value": "360823" }, { "label": "新干县", "value": "360824" }, { "label": "永丰县", "value": "360825" }, { "label": "泰和县", "value": "360826" }, { "label": "遂川县", "value": "360827" }, { "label": "万安县", "value": "360828" }, { "label": "安福县", "value": "360829" }, { "label": "永新县", "value": "360830" }, { "label": "井冈山市", "value": "360881" }], [{ "label": "袁州区", "value": "360902" }, { "label": "奉新县", "value": "360921" }, { "label": "万载县", "value": "360922" }, { "label": "上高县", "value": "360923" }, { "label": "宜丰县", "value": "360924" }, { "label": "靖安县", "value": "360925" }, { "label": "铜鼓县", "value": "360926" }, { "label": "丰城市", "value": "360981" }, { "label": "樟树市", "value": "360982" }, { "label": "高安市", "value": "360983" }], [{ "label": "临川区", "value": "361002" }, { "label": "东乡区", "value": "361003" }, { "label": "南城县", "value": "361021" }, { "label": "黎川县", "value": "361022" }, { "label": "南丰县", "value": "361023" }, { "label": "崇仁县", "value": "361024" }, { "label": "乐安县", "value": "361025" }, { "label": "宜黄县", "value": "361026" }, { "label": "金溪县", "value": "361027" }, { "label": "资溪县", "value": "361028" }, { "label": "广昌县", "value": "361030" }], [{ "label": "信州区", "value": "361102" }, { "label": "广丰区", "value": "361103" }, { "label": "上饶县", "value": "361121" }, { "label": "玉山县", "value": "361123" }, { "label": "铅山县", "value": "361124" }, { "label": "横峰县", "value": "361125" }, { "label": "弋阳县", "value": "361126" }, { "label": "余干县", "value": "361127" }, { "label": "鄱阳县", "value": "361128" }, { "label": "万年县", "value": "361129" }, { "label": "婺源县", "value": "361130" }, { "label": "德兴市", "value": "361181" }]], [[{ "label": "历下区", "value": "370102" }, { "label": "市中区", "value": "370103" }, { "label": "槐荫区", "value": "370104" }, { "label": "天桥区", "value": "370105" }, { "label": "历城区", "value": "370112" }, { "label": "长清区", "value": "370113" }, { "label": "章丘区", "value": "370114" }, { "label": "平阴县", "value": "370124" }, { "label": "济阳县", "value": "370125" }, { "label": "商河县", "value": "370126" }, { "label": "济南高新技术产业开发区", "value": "370171" }], [{ "label": "市南区", "value": "370202" }, { "label": "市北区", "value": "370203" }, { "label": "黄岛区", "value": "370211" }, { "label": "崂山区", "value": "370212" }, { "label": "李沧区", "value": "370213" }, { "label": "城阳区", "value": "370214" }, { "label": "即墨区", "value": "370215" }, { "label": "青岛高新技术产业开发区", "value": "370271" }, { "label": "胶州市", "value": "370281" }, { "label": "平度市", "value": "370283" }, { "label": "莱西市", "value": "370285" }], [{ "label": "淄川区", "value": "370302" }, { "label": "张店区", "value": "370303" }, { "label": "博山区", "value": "370304" }, { "label": "临淄区", "value": "370305" }, { "label": "周村区", "value": "370306" }, { "label": "桓台县", "value": "370321" }, { "label": "高青县", "value": "370322" }, { "label": "沂源县", "value": "370323" }], [{ "label": "市中区", "value": "370402" }, { "label": "薛城区", "value": "370403" }, { "label": "峄城区", "value": "370404" }, { "label": "台儿庄区", "value": "370405" }, { "label": "山亭区", "value": "370406" }, { "label": "滕州市", "value": "370481" }], [{ "label": "东营区", "value": "370502" }, { "label": "河口区", "value": "370503" }, { "label": "垦利区", "value": "370505" }, { "label": "利津县", "value": "370522" }, { "label": "广饶县", "value": "370523" }, { "label": "东营经济技术开发区", "value": "370571" }, { "label": "东营港经济开发区", "value": "370572" }], [{ "label": "芝罘区", "value": "370602" }, { "label": "福山区", "value": "370611" }, { "label": "牟平区", "value": "370612" }, { "label": "莱山区", "value": "370613" }, { "label": "长岛县", "value": "370634" }, { "label": "烟台高新技术产业开发区", "value": "370671" }, { "label": "烟台经济技术开发区", "value": "370672" }, { "label": "龙口市", "value": "370681" }, { "label": "莱阳市", "value": "370682" }, { "label": "莱州市", "value": "370683" }, { "label": "蓬莱市", "value": "370684" }, { "label": "招远市", "value": "370685" }, { "label": "栖霞市", "value": "370686" }, { "label": "海阳市", "value": "370687" }], [{ "label": "潍城区", "value": "370702" }, { "label": "寒亭区", "value": "370703" }, { "label": "坊子区", "value": "370704" }, { "label": "奎文区", "value": "370705" }, { "label": "临朐县", "value": "370724" }, { "label": "昌乐县", "value": "370725" }, { "label": "潍坊滨海经济技术开发区", "value": "370772" }, { "label": "青州市", "value": "370781" }, { "label": "诸城市", "value": "370782" }, { "label": "寿光市", "value": "370783" }, { "label": "安丘市", "value": "370784" }, { "label": "高密市", "value": "370785" }, { "label": "昌邑市", "value": "370786" }], [{ "label": "任城区", "value": "370811" }, { "label": "兖州区", "value": "370812" }, { "label": "微山县", "value": "370826" }, { "label": "鱼台县", "value": "370827" }, { "label": "金乡县", "value": "370828" }, { "label": "嘉祥县", "value": "370829" }, { "label": "汶上县", "value": "370830" }, { "label": "泗水县", "value": "370831" }, { "label": "梁山县", "value": "370832" }, { "label": "济宁高新技术产业开发区", "value": "370871" }, { "label": "曲阜市", "value": "370881" }, { "label": "邹城市", "value": "370883" }], [{ "label": "泰山区", "value": "370902" }, { "label": "岱岳区", "value": "370911" }, { "label": "宁阳县", "value": "370921" }, { "label": "东平县", "value": "370923" }, { "label": "新泰市", "value": "370982" }, { "label": "肥城市", "value": "370983" }], [{ "label": "环翠区", "value": "371002" }, { "label": "文登区", "value": "371003" }, { "label": "威海火炬高技术产业开发区", "value": "371071" }, { "label": "威海经济技术开发区", "value": "371072" }, { "label": "威海临港经济技术开发区", "value": "371073" }, { "label": "荣成市", "value": "371082" }, { "label": "乳山市", "value": "371083" }], [{ "label": "东港区", "value": "371102" }, { "label": "岚山区", "value": "371103" }, { "label": "五莲县", "value": "371121" }, { "label": "莒县", "value": "371122" }, { "label": "日照经济技术开发区", "value": "371171" }, { "label": "日照国际海洋城", "value": "371172" }], [{ "label": "莱城区", "value": "371202" }, { "label": "钢城区", "value": "371203" }], [{ "label": "兰山区", "value": "371302" }, { "label": "罗庄区", "value": "371311" }, { "label": "河东区", "value": "371312" }, { "label": "沂南县", "value": "371321" }, { "label": "郯城县", "value": "371322" }, { "label": "沂水县", "value": "371323" }, { "label": "兰陵县", "value": "371324" }, { "label": "费县", "value": "371325" }, { "label": "平邑县", "value": "371326" }, { "label": "莒南县", "value": "371327" }, { "label": "蒙阴县", "value": "371328" }, { "label": "临沭县", "value": "371329" }, { "label": "临沂高新技术产业开发区", "value": "371371" }, { "label": "临沂经济技术开发区", "value": "371372" }, { "label": "临沂临港经济开发区", "value": "371373" }], [{ "label": "德城区", "value": "371402" }, { "label": "陵城区", "value": "371403" }, { "label": "宁津县", "value": "371422" }, { "label": "庆云县", "value": "371423" }, { "label": "临邑县", "value": "371424" }, { "label": "齐河县", "value": "371425" }, { "label": "平原县", "value": "371426" }, { "label": "夏津县", "value": "371427" }, { "label": "武城县", "value": "371428" }, { "label": "德州经济技术开发区", "value": "371471" }, { "label": "德州运河经济开发区", "value": "371472" }, { "label": "乐陵市", "value": "371481" }, { "label": "禹城市", "value": "371482" }], [{ "label": "东昌府区", "value": "371502" }, { "label": "阳谷县", "value": "371521" }, { "label": "莘县", "value": "371522" }, { "label": "茌平县", "value": "371523" }, { "label": "东阿县", "value": "371524" }, { "label": "冠县", "value": "371525" }, { "label": "高唐县", "value": "371526" }, { "label": "临清市", "value": "371581" }], [{ "label": "滨城区", "value": "371602" }, { "label": "沾化区", "value": "371603" }, { "label": "惠民县", "value": "371621" }, { "label": "阳信县", "value": "371622" }, { "label": "无棣县", "value": "371623" }, { "label": "博兴县", "value": "371625" }, { "label": "邹平县", "value": "371626" }], [{ "label": "牡丹区", "value": "371702" }, { "label": "定陶区", "value": "371703" }, { "label": "曹县", "value": "371721" }, { "label": "单县", "value": "371722" }, { "label": "成武县", "value": "371723" }, { "label": "巨野县", "value": "371724" }, { "label": "郓城县", "value": "371725" }, { "label": "鄄城县", "value": "371726" }, { "label": "东明县", "value": "371728" }, { "label": "菏泽经济技术开发区", "value": "371771" }, { "label": "菏泽高新技术开发区", "value": "371772" }]], [[{ "label": "中原区", "value": "410102" }, { "label": "二七区", "value": "410103" }, { "label": "管城回族区", "value": "410104" }, { "label": "金水区", "value": "410105" }, { "label": "上街区", "value": "410106" }, { "label": "惠济区", "value": "410108" }, { "label": "中牟县", "value": "410122" }, { "label": "郑州经济技术开发区", "value": "410171" }, { "label": "郑州高新技术产业开发区", "value": "410172" }, { "label": "郑州航空港经济综合实验区", "value": "410173" }, { "label": "巩义市", "value": "410181" }, { "label": "荥阳市", "value": "410182" }, { "label": "新密市", "value": "410183" }, { "label": "新郑市", "value": "410184" }, { "label": "登封市", "value": "410185" }], [{ "label": "龙亭区", "value": "410202" }, { "label": "顺河回族区", "value": "410203" }, { "label": "鼓楼区", "value": "410204" }, { "label": "禹王台区", "value": "410205" }, { "label": "祥符区", "value": "410212" }, { "label": "杞县", "value": "410221" }, { "label": "通许县", "value": "410222" }, { "label": "尉氏县", "value": "410223" }, { "label": "兰考县", "value": "410225" }], [{ "label": "老城区", "value": "410302" }, { "label": "西工区", "value": "410303" }, { "label": "瀍河回族区", "value": "410304" }, { "label": "涧西区", "value": "410305" }, { "label": "吉利区", "value": "410306" }, { "label": "洛龙区", "value": "410311" }, { "label": "孟津县", "value": "410322" }, { "label": "新安县", "value": "410323" }, { "label": "栾川县", "value": "410324" }, { "label": "嵩县", "value": "410325" }, { "label": "汝阳县", "value": "410326" }, { "label": "宜阳县", "value": "410327" }, { "label": "洛宁县", "value": "410328" }, { "label": "伊川县", "value": "410329" }, { "label": "洛阳高新技术产业开发区", "value": "410371" }, { "label": "偃师市", "value": "410381" }], [{ "label": "新华区", "value": "410402" }, { "label": "卫东区", "value": "410403" }, { "label": "石龙区", "value": "410404" }, { "label": "湛河区", "value": "410411" }, { "label": "宝丰县", "value": "410421" }, { "label": "叶县", "value": "410422" }, { "label": "鲁山县", "value": "410423" }, { "label": "郏县", "value": "410425" }, { "label": "平顶山高新技术产业开发区", "value": "410471" }, { "label": "平顶山市新城区", "value": "410472" }, { "label": "舞钢市", "value": "410481" }, { "label": "汝州市", "value": "410482" }], [{ "label": "文峰区", "value": "410502" }, { "label": "北关区", "value": "410503" }, { "label": "殷都区", "value": "410505" }, { "label": "龙安区", "value": "410506" }, { "label": "安阳县", "value": "410522" }, { "label": "汤阴县", "value": "410523" }, { "label": "滑县", "value": "410526" }, { "label": "内黄县", "value": "410527" }, { "label": "安阳高新技术产业开发区", "value": "410571" }, { "label": "林州市", "value": "410581" }], [{ "label": "鹤山区", "value": "410602" }, { "label": "山城区", "value": "410603" }, { "label": "淇滨区", "value": "410611" }, { "label": "浚县", "value": "410621" }, { "label": "淇县", "value": "410622" }, { "label": "鹤壁经济技术开发区", "value": "410671" }], [{ "label": "红旗区", "value": "410702" }, { "label": "卫滨区", "value": "410703" }, { "label": "凤泉区", "value": "410704" }, { "label": "牧野区", "value": "410711" }, { "label": "新乡县", "value": "410721" }, { "label": "获嘉县", "value": "410724" }, { "label": "原阳县", "value": "410725" }, { "label": "延津县", "value": "410726" }, { "label": "封丘县", "value": "410727" }, { "label": "长垣县", "value": "410728" }, { "label": "新乡高新技术产业开发区", "value": "410771" }, { "label": "新乡经济技术开发区", "value": "410772" }, { "label": "新乡市平原城乡一体化示范区", "value": "410773" }, { "label": "卫辉市", "value": "410781" }, { "label": "辉县市", "value": "410782" }], [{ "label": "解放区", "value": "410802" }, { "label": "中站区", "value": "410803" }, { "label": "马村区", "value": "410804" }, { "label": "山阳区", "value": "410811" }, { "label": "修武县", "value": "410821" }, { "label": "博爱县", "value": "410822" }, { "label": "武陟县", "value": "410823" }, { "label": "温县", "value": "410825" }, { "label": "焦作城乡一体化示范区", "value": "410871" }, { "label": "沁阳市", "value": "410882" }, { "label": "孟州市", "value": "410883" }], [{ "label": "华龙区", "value": "410902" }, { "label": "清丰县", "value": "410922" }, { "label": "南乐县", "value": "410923" }, { "label": "范县", "value": "410926" }, { "label": "台前县", "value": "410927" }, { "label": "濮阳县", "value": "410928" }, { "label": "河南濮阳工业园区", "value": "410971" }, { "label": "濮阳经济技术开发区", "value": "410972" }], [{ "label": "魏都区", "value": "411002" }, { "label": "建安区", "value": "411003" }, { "label": "鄢陵县", "value": "411024" }, { "label": "襄城县", "value": "411025" }, { "label": "许昌经济技术开发区", "value": "411071" }, { "label": "禹州市", "value": "411081" }, { "label": "长葛市", "value": "411082" }], [{ "label": "源汇区", "value": "411102" }, { "label": "郾城区", "value": "411103" }, { "label": "召陵区", "value": "411104" }, { "label": "舞阳县", "value": "411121" }, { "label": "临颍县", "value": "411122" }, { "label": "漯河经济技术开发区", "value": "411171" }], [{ "label": "湖滨区", "value": "411202" }, { "label": "陕州区", "value": "411203" }, { "label": "渑池县", "value": "411221" }, { "label": "卢氏县", "value": "411224" }, { "label": "河南三门峡经济开发区", "value": "411271" }, { "label": "义马市", "value": "411281" }, { "label": "灵宝市", "value": "411282" }], [{ "label": "宛城区", "value": "411302" }, { "label": "卧龙区", "value": "411303" }, { "label": "南召县", "value": "411321" }, { "label": "方城县", "value": "411322" }, { "label": "西峡县", "value": "411323" }, { "label": "镇平县", "value": "411324" }, { "label": "内乡县", "value": "411325" }, { "label": "淅川县", "value": "411326" }, { "label": "社旗县", "value": "411327" }, { "label": "唐河县", "value": "411328" }, { "label": "新野县", "value": "411329" }, { "label": "桐柏县", "value": "411330" }, { "label": "南阳高新技术产业开发区", "value": "411371" }, { "label": "南阳市城乡一体化示范区", "value": "411372" }, { "label": "邓州市", "value": "411381" }], [{ "label": "梁园区", "value": "411402" }, { "label": "睢阳区", "value": "411403" }, { "label": "民权县", "value": "411421" }, { "label": "睢县", "value": "411422" }, { "label": "宁陵县", "value": "411423" }, { "label": "柘城县", "value": "411424" }, { "label": "虞城县", "value": "411425" }, { "label": "夏邑县", "value": "411426" }, { "label": "豫东综合物流产业聚集区", "value": "411471" }, { "label": "河南商丘经济开发区", "value": "411472" }, { "label": "永城市", "value": "411481" }], [{ "label": "浉河区", "value": "411502" }, { "label": "平桥区", "value": "411503" }, { "label": "罗山县", "value": "411521" }, { "label": "光山县", "value": "411522" }, { "label": "新县", "value": "411523" }, { "label": "商城县", "value": "411524" }, { "label": "固始县", "value": "411525" }, { "label": "潢川县", "value": "411526" }, { "label": "淮滨县", "value": "411527" }, { "label": "息县", "value": "411528" }, { "label": "信阳高新技术产业开发区", "value": "411571" }], [{ "label": "川汇区", "value": "411602" }, { "label": "扶沟县", "value": "411621" }, { "label": "西华县", "value": "411622" }, { "label": "商水县", "value": "411623" }, { "label": "沈丘县", "value": "411624" }, { "label": "郸城县", "value": "411625" }, { "label": "淮阳县", "value": "411626" }, { "label": "太康县", "value": "411627" }, { "label": "鹿邑县", "value": "411628" }, { "label": "河南周口经济开发区", "value": "411671" }, { "label": "项城市", "value": "411681" }], [{ "label": "驿城区", "value": "411702" }, { "label": "西平县", "value": "411721" }, { "label": "上蔡县", "value": "411722" }, { "label": "平舆县", "value": "411723" }, { "label": "正阳县", "value": "411724" }, { "label": "确山县", "value": "411725" }, { "label": "泌阳县", "value": "411726" }, { "label": "汝南县", "value": "411727" }, { "label": "遂平县", "value": "411728" }, { "label": "新蔡县", "value": "411729" }, { "label": "河南驻马店经济开发区", "value": "411771" }], [{ "label": "济源市", "value": "419001" }]], [[{ "label": "江岸区", "value": "420102" }, { "label": "江汉区", "value": "420103" }, { "label": "硚口区", "value": "420104" }, { "label": "汉阳区", "value": "420105" }, { "label": "武昌区", "value": "420106" }, { "label": "青山区", "value": "420107" }, { "label": "洪山区", "value": "420111" }, { "label": "东西湖区", "value": "420112" }, { "label": "汉南区", "value": "420113" }, { "label": "蔡甸区", "value": "420114" }, { "label": "江夏区", "value": "420115" }, { "label": "黄陂区", "value": "420116" }, { "label": "新洲区", "value": "420117" }], [{ "label": "黄石港区", "value": "420202" }, { "label": "西塞山区", "value": "420203" }, { "label": "下陆区", "value": "420204" }, { "label": "铁山区", "value": "420205" }, { "label": "阳新县", "value": "420222" }, { "label": "大冶市", "value": "420281" }], [{ "label": "茅箭区", "value": "420302" }, { "label": "张湾区", "value": "420303" }, { "label": "郧阳区", "value": "420304" }, { "label": "郧西县", "value": "420322" }, { "label": "竹山县", "value": "420323" }, { "label": "竹溪县", "value": "420324" }, { "label": "房县", "value": "420325" }, { "label": "丹江口市", "value": "420381" }], [{ "label": "西陵区", "value": "420502" }, { "label": "伍家岗区", "value": "420503" }, { "label": "点军区", "value": "420504" }, { "label": "猇亭区", "value": "420505" }, { "label": "夷陵区", "value": "420506" }, { "label": "远安县", "value": "420525" }, { "label": "兴山县", "value": "420526" }, { "label": "秭归县", "value": "420527" }, { "label": "长阳土家族自治县", "value": "420528" }, { "label": "五峰土家族自治县", "value": "420529" }, { "label": "宜都市", "value": "420581" }, { "label": "当阳市", "value": "420582" }, { "label": "枝江市", "value": "420583" }], [{ "label": "襄城区", "value": "420602" }, { "label": "樊城区", "value": "420606" }, { "label": "襄州区", "value": "420607" }, { "label": "南漳县", "value": "420624" }, { "label": "谷城县", "value": "420625" }, { "label": "保康县", "value": "420626" }, { "label": "老河口市", "value": "420682" }, { "label": "枣阳市", "value": "420683" }, { "label": "宜城市", "value": "420684" }], [{ "label": "梁子湖区", "value": "420702" }, { "label": "华容区", "value": "420703" }, { "label": "鄂城区", "value": "420704" }], [{ "label": "东宝区", "value": "420802" }, { "label": "掇刀区", "value": "420804" }, { "label": "京山县", "value": "420821" }, { "label": "沙洋县", "value": "420822" }, { "label": "钟祥市", "value": "420881" }], [{ "label": "孝南区", "value": "420902" }, { "label": "孝昌县", "value": "420921" }, { "label": "大悟县", "value": "420922" }, { "label": "云梦县", "value": "420923" }, { "label": "应城市", "value": "420981" }, { "label": "安陆市", "value": "420982" }, { "label": "汉川市", "value": "420984" }], [{ "label": "沙市区", "value": "421002" }, { "label": "荆州区", "value": "421003" }, { "label": "公安县", "value": "421022" }, { "label": "监利县", "value": "421023" }, { "label": "江陵县", "value": "421024" }, { "label": "荆州经济技术开发区", "value": "421071" }, { "label": "石首市", "value": "421081" }, { "label": "洪湖市", "value": "421083" }, { "label": "松滋市", "value": "421087" }], [{ "label": "黄州区", "value": "421102" }, { "label": "团风县", "value": "421121" }, { "label": "红安县", "value": "421122" }, { "label": "罗田县", "value": "421123" }, { "label": "英山县", "value": "421124" }, { "label": "浠水县", "value": "421125" }, { "label": "蕲春县", "value": "421126" }, { "label": "黄梅县", "value": "421127" }, { "label": "龙感湖管理区", "value": "421171" }, { "label": "麻城市", "value": "421181" }, { "label": "武穴市", "value": "421182" }], [{ "label": "咸安区", "value": "421202" }, { "label": "嘉鱼县", "value": "421221" }, { "label": "通城县", "value": "421222" }, { "label": "崇阳县", "value": "421223" }, { "label": "通山县", "value": "421224" }, { "label": "赤壁市", "value": "421281" }], [{ "label": "曾都区", "value": "421303" }, { "label": "随县", "value": "421321" }, { "label": "广水市", "value": "421381" }], [{ "label": "恩施市", "value": "422801" }, { "label": "利川市", "value": "422802" }, { "label": "建始县", "value": "422822" }, { "label": "巴东县", "value": "422823" }, { "label": "宣恩县", "value": "422825" }, { "label": "咸丰县", "value": "422826" }, { "label": "来凤县", "value": "422827" }, { "label": "鹤峰县", "value": "422828" }], [{ "label": "仙桃市", "value": "429004" }, { "label": "潜江市", "value": "429005" }, { "label": "天门市", "value": "429006" }, { "label": "神农架林区", "value": "429021" }]], [[{ "label": "芙蓉区", "value": "430102" }, { "label": "天心区", "value": "430103" }, { "label": "岳麓区", "value": "430104" }, { "label": "开福区", "value": "430105" }, { "label": "雨花区", "value": "430111" }, { "label": "望城区", "value": "430112" }, { "label": "长沙县", "value": "430121" }, { "label": "浏阳市", "value": "430181" }, { "label": "宁乡市", "value": "430182" }], [{ "label": "荷塘区", "value": "430202" }, { "label": "芦淞区", "value": "430203" }, { "label": "石峰区", "value": "430204" }, { "label": "天元区", "value": "430211" }, { "label": "株洲县", "value": "430221" }, { "label": "攸县", "value": "430223" }, { "label": "茶陵县", "value": "430224" }, { "label": "炎陵县", "value": "430225" }, { "label": "云龙示范区", "value": "430271" }, { "label": "醴陵市", "value": "430281" }], [{ "label": "雨湖区", "value": "430302" }, { "label": "岳塘区", "value": "430304" }, { "label": "湘潭县", "value": "430321" }, { "label": "湖南湘潭高新技术产业园区", "value": "430371" }, { "label": "湘潭昭山示范区", "value": "430372" }, { "label": "湘潭九华示范区", "value": "430373" }, { "label": "湘乡市", "value": "430381" }, { "label": "韶山市", "value": "430382" }], [{ "label": "珠晖区", "value": "430405" }, { "label": "雁峰区", "value": "430406" }, { "label": "石鼓区", "value": "430407" }, { "label": "蒸湘区", "value": "430408" }, { "label": "南岳区", "value": "430412" }, { "label": "衡阳县", "value": "430421" }, { "label": "衡南县", "value": "430422" }, { "label": "衡山县", "value": "430423" }, { "label": "衡东县", "value": "430424" }, { "label": "祁东县", "value": "430426" }, { "label": "衡阳综合保税区", "value": "430471" }, { "label": "湖南衡阳高新技术产业园区", "value": "430472" }, { "label": "湖南衡阳松木经济开发区", "value": "430473" }, { "label": "耒阳市", "value": "430481" }, { "label": "常宁市", "value": "430482" }], [{ "label": "双清区", "value": "430502" }, { "label": "大祥区", "value": "430503" }, { "label": "北塔区", "value": "430511" }, { "label": "邵东县", "value": "430521" }, { "label": "新邵县", "value": "430522" }, { "label": "邵阳县", "value": "430523" }, { "label": "隆回县", "value": "430524" }, { "label": "洞口县", "value": "430525" }, { "label": "绥宁县", "value": "430527" }, { "label": "新宁县", "value": "430528" }, { "label": "城步苗族自治县", "value": "430529" }, { "label": "武冈市", "value": "430581" }], [{ "label": "岳阳楼区", "value": "430602" }, { "label": "云溪区", "value": "430603" }, { "label": "君山区", "value": "430611" }, { "label": "岳阳县", "value": "430621" }, { "label": "华容县", "value": "430623" }, { "label": "湘阴县", "value": "430624" }, { "label": "平江县", "value": "430626" }, { "label": "岳阳市屈原管理区", "value": "430671" }, { "label": "汨罗市", "value": "430681" }, { "label": "临湘市", "value": "430682" }], [{ "label": "武陵区", "value": "430702" }, { "label": "鼎城区", "value": "430703" }, { "label": "安乡县", "value": "430721" }, { "label": "汉寿县", "value": "430722" }, { "label": "澧县", "value": "430723" }, { "label": "临澧县", "value": "430724" }, { "label": "桃源县", "value": "430725" }, { "label": "石门县", "value": "430726" }, { "label": "常德市西洞庭管理区", "value": "430771" }, { "label": "津市市", "value": "430781" }], [{ "label": "永定区", "value": "430802" }, { "label": "武陵源区", "value": "430811" }, { "label": "慈利县", "value": "430821" }, { "label": "桑植县", "value": "430822" }], [{ "label": "资阳区", "value": "430902" }, { "label": "赫山区", "value": "430903" }, { "label": "南县", "value": "430921" }, { "label": "桃江县", "value": "430922" }, { "label": "安化县", "value": "430923" }, { "label": "益阳市大通湖管理区", "value": "430971" }, { "label": "湖南益阳高新技术产业园区", "value": "430972" }, { "label": "沅江市", "value": "430981" }], [{ "label": "北湖区", "value": "431002" }, { "label": "苏仙区", "value": "431003" }, { "label": "桂阳县", "value": "431021" }, { "label": "宜章县", "value": "431022" }, { "label": "永兴县", "value": "431023" }, { "label": "嘉禾县", "value": "431024" }, { "label": "临武县", "value": "431025" }, { "label": "汝城县", "value": "431026" }, { "label": "桂东县", "value": "431027" }, { "label": "安仁县", "value": "431028" }, { "label": "资兴市", "value": "431081" }], [{ "label": "零陵区", "value": "431102" }, { "label": "冷水滩区", "value": "431103" }, { "label": "祁阳县", "value": "431121" }, { "label": "东安县", "value": "431122" }, { "label": "双牌县", "value": "431123" }, { "label": "道县", "value": "431124" }, { "label": "江永县", "value": "431125" }, { "label": "宁远县", "value": "431126" }, { "label": "蓝山县", "value": "431127" }, { "label": "新田县", "value": "431128" }, { "label": "江华瑶族自治县", "value": "431129" }, { "label": "永州经济技术开发区", "value": "431171" }, { "label": "永州市金洞管理区", "value": "431172" }, { "label": "永州市回龙圩管理区", "value": "431173" }], [{ "label": "鹤城区", "value": "431202" }, { "label": "中方县", "value": "431221" }, { "label": "沅陵县", "value": "431222" }, { "label": "辰溪县", "value": "431223" }, { "label": "溆浦县", "value": "431224" }, { "label": "会同县", "value": "431225" }, { "label": "麻阳苗族自治县", "value": "431226" }, { "label": "新晃侗族自治县", "value": "431227" }, { "label": "芷江侗族自治县", "value": "431228" }, { "label": "靖州苗族侗族自治县", "value": "431229" }, { "label": "通道侗族自治县", "value": "431230" }, { "label": "怀化市洪江管理区", "value": "431271" }, { "label": "洪江市", "value": "431281" }], [{ "label": "娄星区", "value": "431302" }, { "label": "双峰县", "value": "431321" }, { "label": "新化县", "value": "431322" }, { "label": "冷水江市", "value": "431381" }, { "label": "涟源市", "value": "431382" }], [{ "label": "吉首市", "value": "433101" }, { "label": "泸溪县", "value": "433122" }, { "label": "凤凰县", "value": "433123" }, { "label": "花垣县", "value": "433124" }, { "label": "保靖县", "value": "433125" }, { "label": "古丈县", "value": "433126" }, { "label": "永顺县", "value": "433127" }, { "label": "龙山县", "value": "433130" }, { "label": "湖南吉首经济开发区", "value": "433172" }, { "label": "湖南永顺经济开发区", "value": "433173" }]], [[{ "label": "荔湾区", "value": "440103" }, { "label": "越秀区", "value": "440104" }, { "label": "海珠区", "value": "440105" }, { "label": "天河区", "value": "440106" }, { "label": "白云区", "value": "440111" }, { "label": "黄埔区", "value": "440112" }, { "label": "番禺区", "value": "440113" }, { "label": "花都区", "value": "440114" }, { "label": "南沙区", "value": "440115" }, { "label": "从化区", "value": "440117" }, { "label": "增城区", "value": "440118" }], [{ "label": "武江区", "value": "440203" }, { "label": "浈江区", "value": "440204" }, { "label": "曲江区", "value": "440205" }, { "label": "始兴县", "value": "440222" }, { "label": "仁化县", "value": "440224" }, { "label": "翁源县", "value": "440229" }, { "label": "乳源瑶族自治县", "value": "440232" }, { "label": "新丰县", "value": "440233" }, { "label": "乐昌市", "value": "440281" }, { "label": "南雄市", "value": "440282" }], [{ "label": "罗湖区", "value": "440303" }, { "label": "福田区", "value": "440304" }, { "label": "南山区", "value": "440305" }, { "label": "宝安区", "value": "440306" }, { "label": "龙岗区", "value": "440307" }, { "label": "盐田区", "value": "440308" }, { "label": "龙华区", "value": "440309" }, { "label": "坪山区", "value": "440310" }], [{ "label": "香洲区", "value": "440402" }, { "label": "斗门区", "value": "440403" }, { "label": "金湾区", "value": "440404" }], [{ "label": "龙湖区", "value": "440507" }, { "label": "金平区", "value": "440511" }, { "label": "濠江区", "value": "440512" }, { "label": "潮阳区", "value": "440513" }, { "label": "潮南区", "value": "440514" }, { "label": "澄海区", "value": "440515" }, { "label": "南澳县", "value": "440523" }], [{ "label": "禅城区", "value": "440604" }, { "label": "南海区", "value": "440605" }, { "label": "顺德区", "value": "440606" }, { "label": "三水区", "value": "440607" }, { "label": "高明区", "value": "440608" }], [{ "label": "蓬江区", "value": "440703" }, { "label": "江海区", "value": "440704" }, { "label": "新会区", "value": "440705" }, { "label": "台山市", "value": "440781" }, { "label": "开平市", "value": "440783" }, { "label": "鹤山市", "value": "440784" }, { "label": "恩平市", "value": "440785" }], [{ "label": "赤坎区", "value": "440802" }, { "label": "霞山区", "value": "440803" }, { "label": "坡头区", "value": "440804" }, { "label": "麻章区", "value": "440811" }, { "label": "遂溪县", "value": "440823" }, { "label": "徐闻县", "value": "440825" }, { "label": "廉江市", "value": "440881" }, { "label": "雷州市", "value": "440882" }, { "label": "吴川市", "value": "440883" }], [{ "label": "茂南区", "value": "440902" }, { "label": "电白区", "value": "440904" }, { "label": "高州市", "value": "440981" }, { "label": "化州市", "value": "440982" }, { "label": "信宜市", "value": "440983" }], [{ "label": "端州区", "value": "441202" }, { "label": "鼎湖区", "value": "441203" }, { "label": "高要区", "value": "441204" }, { "label": "广宁县", "value": "441223" }, { "label": "怀集县", "value": "441224" }, { "label": "封开县", "value": "441225" }, { "label": "德庆县", "value": "441226" }, { "label": "四会市", "value": "441284" }], [{ "label": "惠城区", "value": "441302" }, { "label": "惠阳区", "value": "441303" }, { "label": "博罗县", "value": "441322" }, { "label": "惠东县", "value": "441323" }, { "label": "龙门县", "value": "441324" }], [{ "label": "梅江区", "value": "441402" }, { "label": "梅县区", "value": "441403" }, { "label": "大埔县", "value": "441422" }, { "label": "丰顺县", "value": "441423" }, { "label": "五华县", "value": "441424" }, { "label": "平远县", "value": "441426" }, { "label": "蕉岭县", "value": "441427" }, { "label": "兴宁市", "value": "441481" }], [{ "label": "城区", "value": "441502" }, { "label": "海丰县", "value": "441521" }, { "label": "陆河县", "value": "441523" }, { "label": "陆丰市", "value": "441581" }], [{ "label": "源城区", "value": "441602" }, { "label": "紫金县", "value": "441621" }, { "label": "龙川县", "value": "441622" }, { "label": "连平县", "value": "441623" }, { "label": "和平县", "value": "441624" }, { "label": "东源县", "value": "441625" }], [{ "label": "江城区", "value": "441702" }, { "label": "阳东区", "value": "441704" }, { "label": "阳西县", "value": "441721" }, { "label": "阳春市", "value": "441781" }], [{ "label": "清城区", "value": "441802" }, { "label": "清新区", "value": "441803" }, { "label": "佛冈县", "value": "441821" }, { "label": "阳山县", "value": "441823" }, { "label": "连山壮族瑶族自治县", "value": "441825" }, { "label": "连南瑶族自治县", "value": "441826" }, { "label": "英德市", "value": "441881" }, { "label": "连州市", "value": "441882" }], [{ "label": "东莞市", "value": "441900" }], [{ "label": "中山市", "value": "442000" }], [{ "label": "湘桥区", "value": "445102" }, { "label": "潮安区", "value": "445103" }, { "label": "饶平县", "value": "445122" }], [{ "label": "榕城区", "value": "445202" }, { "label": "揭东区", "value": "445203" }, { "label": "揭西县", "value": "445222" }, { "label": "惠来县", "value": "445224" }, { "label": "普宁市", "value": "445281" }], [{ "label": "云城区", "value": "445302" }, { "label": "云安区", "value": "445303" }, { "label": "新兴县", "value": "445321" }, { "label": "郁南县", "value": "445322" }, { "label": "罗定市", "value": "445381" }]], [[{ "label": "兴宁区", "value": "450102" }, { "label": "青秀区", "value": "450103" }, { "label": "江南区", "value": "450105" }, { "label": "西乡塘区", "value": "450107" }, { "label": "良庆区", "value": "450108" }, { "label": "邕宁区", "value": "450109" }, { "label": "武鸣区", "value": "450110" }, { "label": "隆安县", "value": "450123" }, { "label": "马山县", "value": "450124" }, { "label": "上林县", "value": "450125" }, { "label": "宾阳县", "value": "450126" }, { "label": "横县", "value": "450127" }], [{ "label": "城中区", "value": "450202" }, { "label": "鱼峰区", "value": "450203" }, { "label": "柳南区", "value": "450204" }, { "label": "柳北区", "value": "450205" }, { "label": "柳江区", "value": "450206" }, { "label": "柳城县", "value": "450222" }, { "label": "鹿寨县", "value": "450223" }, { "label": "融安县", "value": "450224" }, { "label": "融水苗族自治县", "value": "450225" }, { "label": "三江侗族自治县", "value": "450226" }], [{ "label": "秀峰区", "value": "450302" }, { "label": "叠彩区", "value": "450303" }, { "label": "象山区", "value": "450304" }, { "label": "七星区", "value": "450305" }, { "label": "雁山区", "value": "450311" }, { "label": "临桂区", "value": "450312" }, { "label": "阳朔县", "value": "450321" }, { "label": "灵川县", "value": "450323" }, { "label": "全州县", "value": "450324" }, { "label": "兴安县", "value": "450325" }, { "label": "永福县", "value": "450326" }, { "label": "灌阳县", "value": "450327" }, { "label": "龙胜各族自治县", "value": "450328" }, { "label": "资源县", "value": "450329" }, { "label": "平乐县", "value": "450330" }, { "label": "荔浦县", "value": "450331" }, { "label": "恭城瑶族自治县", "value": "450332" }], [{ "label": "万秀区", "value": "450403" }, { "label": "长洲区", "value": "450405" }, { "label": "龙圩区", "value": "450406" }, { "label": "苍梧县", "value": "450421" }, { "label": "藤县", "value": "450422" }, { "label": "蒙山县", "value": "450423" }, { "label": "岑溪市", "value": "450481" }], [{ "label": "海城区", "value": "450502" }, { "label": "银海区", "value": "450503" }, { "label": "铁山港区", "value": "450512" }, { "label": "合浦县", "value": "450521" }], [{ "label": "港口区", "value": "450602" }, { "label": "防城区", "value": "450603" }, { "label": "上思县", "value": "450621" }, { "label": "东兴市", "value": "450681" }], [{ "label": "钦南区", "value": "450702" }, { "label": "钦北区", "value": "450703" }, { "label": "灵山县", "value": "450721" }, { "label": "浦北县", "value": "450722" }], [{ "label": "港北区", "value": "450802" }, { "label": "港南区", "value": "450803" }, { "label": "覃塘区", "value": "450804" }, { "label": "平南县", "value": "450821" }, { "label": "桂平市", "value": "450881" }], [{ "label": "玉州区", "value": "450902" }, { "label": "福绵区", "value": "450903" }, { "label": "容县", "value": "450921" }, { "label": "陆川县", "value": "450922" }, { "label": "博白县", "value": "450923" }, { "label": "兴业县", "value": "450924" }, { "label": "北流市", "value": "450981" }], [{ "label": "右江区", "value": "451002" }, { "label": "田阳县", "value": "451021" }, { "label": "田东县", "value": "451022" }, { "label": "平果县", "value": "451023" }, { "label": "德保县", "value": "451024" }, { "label": "那坡县", "value": "451026" }, { "label": "凌云县", "value": "451027" }, { "label": "乐业县", "value": "451028" }, { "label": "田林县", "value": "451029" }, { "label": "西林县", "value": "451030" }, { "label": "隆林各族自治县", "value": "451031" }, { "label": "靖西市", "value": "451081" }], [{ "label": "八步区", "value": "451102" }, { "label": "平桂区", "value": "451103" }, { "label": "昭平县", "value": "451121" }, { "label": "钟山县", "value": "451122" }, { "label": "富川瑶族自治县", "value": "451123" }], [{ "label": "金城江区", "value": "451202" }, { "label": "宜州区", "value": "451203" }, { "label": "南丹县", "value": "451221" }, { "label": "天峨县", "value": "451222" }, { "label": "凤山县", "value": "451223" }, { "label": "东兰县", "value": "451224" }, { "label": "罗城仫佬族自治县", "value": "451225" }, { "label": "环江毛南族自治县", "value": "451226" }, { "label": "巴马瑶族自治县", "value": "451227" }, { "label": "都安瑶族自治县", "value": "451228" }, { "label": "大化瑶族自治县", "value": "451229" }], [{ "label": "兴宾区", "value": "451302" }, { "label": "忻城县", "value": "451321" }, { "label": "象州县", "value": "451322" }, { "label": "武宣县", "value": "451323" }, { "label": "金秀瑶族自治县", "value": "451324" }, { "label": "合山市", "value": "451381" }], [{ "label": "江州区", "value": "451402" }, { "label": "扶绥县", "value": "451421" }, { "label": "宁明县", "value": "451422" }, { "label": "龙州县", "value": "451423" }, { "label": "大新县", "value": "451424" }, { "label": "天等县", "value": "451425" }, { "label": "凭祥市", "value": "451481" }]], [[{ "label": "秀英区", "value": "460105" }, { "label": "龙华区", "value": "460106" }, { "label": "琼山区", "value": "460107" }, { "label": "美兰区", "value": "460108" }], [{ "label": "海棠区", "value": "460202" }, { "label": "吉阳区", "value": "460203" }, { "label": "天涯区", "value": "460204" }, { "label": "崖州区", "value": "460205" }], [{ "label": "西沙群岛", "value": "460321" }, { "label": "南沙群岛", "value": "460322" }, { "label": "中沙群岛的岛礁及其海域", "value": "460323" }], [{ "label": "儋州市", "value": "460400" }], [{ "label": "五指山市", "value": "469001" }, { "label": "琼海市", "value": "469002" }, { "label": "文昌市", "value": "469005" }, { "label": "万宁市", "value": "469006" }, { "label": "东方市", "value": "469007" }, { "label": "定安县", "value": "469021" }, { "label": "屯昌县", "value": "469022" }, { "label": "澄迈县", "value": "469023" }, { "label": "临高县", "value": "469024" }, { "label": "白沙黎族自治县", "value": "469025" }, { "label": "昌江黎族自治县", "value": "469026" }, { "label": "乐东黎族自治县", "value": "469027" }, { "label": "陵水黎族自治县", "value": "469028" }, { "label": "保亭黎族苗族自治县", "value": "469029" }, { "label": "琼中黎族苗族自治县", "value": "469030" }]], [[{ "label": "万州区", "value": "500101" }, { "label": "涪陵区", "value": "500102" }, { "label": "渝中区", "value": "500103" }, { "label": "大渡口区", "value": "500104" }, { "label": "江北区", "value": "500105" }, { "label": "沙坪坝区", "value": "500106" }, { "label": "九龙坡区", "value": "500107" }, { "label": "南岸区", "value": "500108" }, { "label": "北碚区", "value": "500109" }, { "label": "綦江区", "value": "500110" }, { "label": "大足区", "value": "500111" }, { "label": "渝北区", "value": "500112" }, { "label": "巴南区", "value": "500113" }, { "label": "黔江区", "value": "500114" }, { "label": "长寿区", "value": "500115" }, { "label": "江津区", "value": "500116" }, { "label": "合川区", "value": "500117" }, { "label": "永川区", "value": "500118" }, { "label": "南川区", "value": "500119" }, { "label": "璧山区", "value": "500120" }, { "label": "铜梁区", "value": "500151" }, { "label": "潼南区", "value": "500152" }, { "label": "荣昌区", "value": "500153" }, { "label": "开州区", "value": "500154" }, { "label": "梁平区", "value": "500155" }, { "label": "武隆区", "value": "500156" }], [{ "label": "城口县", "value": "500229" }, { "label": "丰都县", "value": "500230" }, { "label": "垫江县", "value": "500231" }, { "label": "忠县", "value": "500233" }, { "label": "云阳县", "value": "500235" }, { "label": "奉节县", "value": "500236" }, { "label": "巫山县", "value": "500237" }, { "label": "巫溪县", "value": "500238" }, { "label": "石柱土家族自治县", "value": "500240" }, { "label": "秀山土家族苗族自治县", "value": "500241" }, { "label": "酉阳土家族苗族自治县", "value": "500242" }, { "label": "彭水苗族土家族自治县", "value": "500243" }]], [[{ "label": "锦江区", "value": "510104" }, { "label": "青羊区", "value": "510105" }, { "label": "金牛区", "value": "510106" }, { "label": "武侯区", "value": "510107" }, { "label": "成华区", "value": "510108" }, { "label": "龙泉驿区", "value": "510112" }, { "label": "青白江区", "value": "510113" }, { "label": "新都区", "value": "510114" }, { "label": "温江区", "value": "510115" }, { "label": "双流区", "value": "510116" }, { "label": "郫都区", "value": "510117" }, { "label": "金堂县", "value": "510121" }, { "label": "大邑县", "value": "510129" }, { "label": "蒲江县", "value": "510131" }, { "label": "新津县", "value": "510132" }, { "label": "都江堰市", "value": "510181" }, { "label": "彭州市", "value": "510182" }, { "label": "邛崃市", "value": "510183" }, { "label": "崇州市", "value": "510184" }, { "label": "简阳市", "value": "510185" }], [{ "label": "自流井区", "value": "510302" }, { "label": "贡井区", "value": "510303" }, { "label": "大安区", "value": "510304" }, { "label": "沿滩区", "value": "510311" }, { "label": "荣县", "value": "510321" }, { "label": "富顺县", "value": "510322" }], [{ "label": "东区", "value": "510402" }, { "label": "西区", "value": "510403" }, { "label": "仁和区", "value": "510411" }, { "label": "米易县", "value": "510421" }, { "label": "盐边县", "value": "510422" }], [{ "label": "江阳区", "value": "510502" }, { "label": "纳溪区", "value": "510503" }, { "label": "龙马潭区", "value": "510504" }, { "label": "泸县", "value": "510521" }, { "label": "合江县", "value": "510522" }, { "label": "叙永县", "value": "510524" }, { "label": "古蔺县", "value": "510525" }], [{ "label": "旌阳区", "value": "510603" }, { "label": "罗江区", "value": "510604" }, { "label": "中江县", "value": "510623" }, { "label": "广汉市", "value": "510681" }, { "label": "什邡市", "value": "510682" }, { "label": "绵竹市", "value": "510683" }], [{ "label": "涪城区", "value": "510703" }, { "label": "游仙区", "value": "510704" }, { "label": "安州区", "value": "510705" }, { "label": "三台县", "value": "510722" }, { "label": "盐亭县", "value": "510723" }, { "label": "梓潼县", "value": "510725" }, { "label": "北川羌族自治县", "value": "510726" }, { "label": "平武县", "value": "510727" }, { "label": "江油市", "value": "510781" }], [{ "label": "利州区", "value": "510802" }, { "label": "昭化区", "value": "510811" }, { "label": "朝天区", "value": "510812" }, { "label": "旺苍县", "value": "510821" }, { "label": "青川县", "value": "510822" }, { "label": "剑阁县", "value": "510823" }, { "label": "苍溪县", "value": "510824" }], [{ "label": "船山区", "value": "510903" }, { "label": "安居区", "value": "510904" }, { "label": "蓬溪县", "value": "510921" }, { "label": "射洪县", "value": "510922" }, { "label": "大英县", "value": "510923" }], [{ "label": "市中区", "value": "511002" }, { "label": "东兴区", "value": "511011" }, { "label": "威远县", "value": "511024" }, { "label": "资中县", "value": "511025" }, { "label": "内江经济开发区", "value": "511071" }, { "label": "隆昌市", "value": "511083" }], [{ "label": "市中区", "value": "511102" }, { "label": "沙湾区", "value": "511111" }, { "label": "五通桥区", "value": "511112" }, { "label": "金口河区", "value": "511113" }, { "label": "犍为县", "value": "511123" }, { "label": "井研县", "value": "511124" }, { "label": "夹江县", "value": "511126" }, { "label": "沐川县", "value": "511129" }, { "label": "峨边彝族自治县", "value": "511132" }, { "label": "马边彝族自治县", "value": "511133" }, { "label": "峨眉山市", "value": "511181" }], [{ "label": "顺庆区", "value": "511302" }, { "label": "高坪区", "value": "511303" }, { "label": "嘉陵区", "value": "511304" }, { "label": "南部县", "value": "511321" }, { "label": "营山县", "value": "511322" }, { "label": "蓬安县", "value": "511323" }, { "label": "仪陇县", "value": "511324" }, { "label": "西充县", "value": "511325" }, { "label": "阆中市", "value": "511381" }], [{ "label": "东坡区", "value": "511402" }, { "label": "彭山区", "value": "511403" }, { "label": "仁寿县", "value": "511421" }, { "label": "洪雅县", "value": "511423" }, { "label": "丹棱县", "value": "511424" }, { "label": "青神县", "value": "511425" }], [{ "label": "翠屏区", "value": "511502" }, { "label": "南溪区", "value": "511503" }, { "label": "宜宾县", "value": "511521" }, { "label": "江安县", "value": "511523" }, { "label": "长宁县", "value": "511524" }, { "label": "高县", "value": "511525" }, { "label": "珙县", "value": "511526" }, { "label": "筠连县", "value": "511527" }, { "label": "兴文县", "value": "511528" }, { "label": "屏山县", "value": "511529" }], [{ "label": "广安区", "value": "511602" }, { "label": "前锋区", "value": "511603" }, { "label": "岳池县", "value": "511621" }, { "label": "武胜县", "value": "511622" }, { "label": "邻水县", "value": "511623" }, { "label": "华蓥市", "value": "511681" }], [{ "label": "通川区", "value": "511702" }, { "label": "达川区", "value": "511703" }, { "label": "宣汉县", "value": "511722" }, { "label": "开江县", "value": "511723" }, { "label": "大竹县", "value": "511724" }, { "label": "渠县", "value": "511725" }, { "label": "达州经济开发区", "value": "511771" }, { "label": "万源市", "value": "511781" }], [{ "label": "雨城区", "value": "511802" }, { "label": "名山区", "value": "511803" }, { "label": "荥经县", "value": "511822" }, { "label": "汉源县", "value": "511823" }, { "label": "石棉县", "value": "511824" }, { "label": "天全县", "value": "511825" }, { "label": "芦山县", "value": "511826" }, { "label": "宝兴县", "value": "511827" }], [{ "label": "巴州区", "value": "511902" }, { "label": "恩阳区", "value": "511903" }, { "label": "通江县", "value": "511921" }, { "label": "南江县", "value": "511922" }, { "label": "平昌县", "value": "511923" }, { "label": "巴中经济开发区", "value": "511971" }], [{ "label": "雁江区", "value": "512002" }, { "label": "安岳县", "value": "512021" }, { "label": "乐至县", "value": "512022" }], [{ "label": "马尔康市", "value": "513201" }, { "label": "汶川县", "value": "513221" }, { "label": "理县", "value": "513222" }, { "label": "茂县", "value": "513223" }, { "label": "松潘县", "value": "513224" }, { "label": "九寨沟县", "value": "513225" }, { "label": "金川县", "value": "513226" }, { "label": "小金县", "value": "513227" }, { "label": "黑水县", "value": "513228" }, { "label": "壤塘县", "value": "513230" }, { "label": "阿坝县", "value": "513231" }, { "label": "若尔盖县", "value": "513232" }, { "label": "红原县", "value": "513233" }], [{ "label": "康定市", "value": "513301" }, { "label": "泸定县", "value": "513322" }, { "label": "丹巴县", "value": "513323" }, { "label": "九龙县", "value": "513324" }, { "label": "雅江县", "value": "513325" }, { "label": "道孚县", "value": "513326" }, { "label": "炉霍县", "value": "513327" }, { "label": "甘孜县", "value": "513328" }, { "label": "新龙县", "value": "513329" }, { "label": "德格县", "value": "513330" }, { "label": "白玉县", "value": "513331" }, { "label": "石渠县", "value": "513332" }, { "label": "色达县", "value": "513333" }, { "label": "理塘县", "value": "513334" }, { "label": "巴塘县", "value": "513335" }, { "label": "乡城县", "value": "513336" }, { "label": "稻城县", "value": "513337" }, { "label": "得荣县", "value": "513338" }], [{ "label": "西昌市", "value": "513401" }, { "label": "木里藏族自治县", "value": "513422" }, { "label": "盐源县", "value": "513423" }, { "label": "德昌县", "value": "513424" }, { "label": "会理县", "value": "513425" }, { "label": "会东县", "value": "513426" }, { "label": "宁南县", "value": "513427" }, { "label": "普格县", "value": "513428" }, { "label": "布拖县", "value": "513429" }, { "label": "金阳县", "value": "513430" }, { "label": "昭觉县", "value": "513431" }, { "label": "喜德县", "value": "513432" }, { "label": "冕宁县", "value": "513433" }, { "label": "越西县", "value": "513434" }, { "label": "甘洛县", "value": "513435" }, { "label": "美姑县", "value": "513436" }, { "label": "雷波县", "value": "513437" }]], [[{ "label": "南明区", "value": "520102" }, { "label": "云岩区", "value": "520103" }, { "label": "花溪区", "value": "520111" }, { "label": "乌当区", "value": "520112" }, { "label": "白云区", "value": "520113" }, { "label": "观山湖区", "value": "520115" }, { "label": "开阳县", "value": "520121" }, { "label": "息烽县", "value": "520122" }, { "label": "修文县", "value": "520123" }, { "label": "清镇市", "value": "520181" }], [{ "label": "钟山区", "value": "520201" }, { "label": "六枝特区", "value": "520203" }, { "label": "水城县", "value": "520221" }, { "label": "盘州市", "value": "520281" }], [{ "label": "红花岗区", "value": "520302" }, { "label": "汇川区", "value": "520303" }, { "label": "播州区", "value": "520304" }, { "label": "桐梓县", "value": "520322" }, { "label": "绥阳县", "value": "520323" }, { "label": "正安县", "value": "520324" }, { "label": "道真仡佬族苗族自治县", "value": "520325" }, { "label": "务川仡佬族苗族自治县", "value": "520326" }, { "label": "凤冈县", "value": "520327" }, { "label": "湄潭县", "value": "520328" }, { "label": "余庆县", "value": "520329" }, { "label": "习水县", "value": "520330" }, { "label": "赤水市", "value": "520381" }, { "label": "仁怀市", "value": "520382" }], [{ "label": "西秀区", "value": "520402" }, { "label": "平坝区", "value": "520403" }, { "label": "普定县", "value": "520422" }, { "label": "镇宁布依族苗族自治县", "value": "520423" }, { "label": "关岭布依族苗族自治县", "value": "520424" }, { "label": "紫云苗族布依族自治县", "value": "520425" }], [{ "label": "七星关区", "value": "520502" }, { "label": "大方县", "value": "520521" }, { "label": "黔西县", "value": "520522" }, { "label": "金沙县", "value": "520523" }, { "label": "织金县", "value": "520524" }, { "label": "纳雍县", "value": "520525" }, { "label": "威宁彝族回族苗族自治县", "value": "520526" }, { "label": "赫章县", "value": "520527" }], [{ "label": "碧江区", "value": "520602" }, { "label": "万山区", "value": "520603" }, { "label": "江口县", "value": "520621" }, { "label": "玉屏侗族自治县", "value": "520622" }, { "label": "石阡县", "value": "520623" }, { "label": "思南县", "value": "520624" }, { "label": "印江土家族苗族自治县", "value": "520625" }, { "label": "德江县", "value": "520626" }, { "label": "沿河土家族自治县", "value": "520627" }, { "label": "松桃苗族自治县", "value": "520628" }], [{ "label": "兴义市", "value": "522301" }, { "label": "兴仁县", "value": "522322" }, { "label": "普安县", "value": "522323" }, { "label": "晴隆县", "value": "522324" }, { "label": "贞丰县", "value": "522325" }, { "label": "望谟县", "value": "522326" }, { "label": "册亨县", "value": "522327" }, { "label": "安龙县", "value": "522328" }], [{ "label": "凯里市", "value": "522601" }, { "label": "黄平县", "value": "522622" }, { "label": "施秉县", "value": "522623" }, { "label": "三穗县", "value": "522624" }, { "label": "镇远县", "value": "522625" }, { "label": "岑巩县", "value": "522626" }, { "label": "天柱县", "value": "522627" }, { "label": "锦屏县", "value": "522628" }, { "label": "剑河县", "value": "522629" }, { "label": "台江县", "value": "522630" }, { "label": "黎平县", "value": "522631" }, { "label": "榕江县", "value": "522632" }, { "label": "从江县", "value": "522633" }, { "label": "雷山县", "value": "522634" }, { "label": "麻江县", "value": "522635" }, { "label": "丹寨县", "value": "522636" }], [{ "label": "都匀市", "value": "522701" }, { "label": "福泉市", "value": "522702" }, { "label": "荔波县", "value": "522722" }, { "label": "贵定县", "value": "522723" }, { "label": "瓮安县", "value": "522725" }, { "label": "独山县", "value": "522726" }, { "label": "平塘县", "value": "522727" }, { "label": "罗甸县", "value": "522728" }, { "label": "长顺县", "value": "522729" }, { "label": "龙里县", "value": "522730" }, { "label": "惠水县", "value": "522731" }, { "label": "三都水族自治县", "value": "522732" }]], [[{ "label": "五华区", "value": "530102" }, { "label": "盘龙区", "value": "530103" }, { "label": "官渡区", "value": "530111" }, { "label": "西山区", "value": "530112" }, { "label": "东川区", "value": "530113" }, { "label": "呈贡区", "value": "530114" }, { "label": "晋宁区", "value": "530115" }, { "label": "富民县", "value": "530124" }, { "label": "宜良县", "value": "530125" }, { "label": "石林彝族自治县", "value": "530126" }, { "label": "嵩明县", "value": "530127" }, { "label": "禄劝彝族苗族自治县", "value": "530128" }, { "label": "寻甸回族彝族自治县", "value": "530129" }, { "label": "安宁市", "value": "530181" }], [{ "label": "麒麟区", "value": "530302" }, { "label": "沾益区", "value": "530303" }, { "label": "马龙县", "value": "530321" }, { "label": "陆良县", "value": "530322" }, { "label": "师宗县", "value": "530323" }, { "label": "罗平县", "value": "530324" }, { "label": "富源县", "value": "530325" }, { "label": "会泽县", "value": "530326" }, { "label": "宣威市", "value": "530381" }], [{ "label": "红塔区", "value": "530402" }, { "label": "江川区", "value": "530403" }, { "label": "澄江县", "value": "530422" }, { "label": "通海县", "value": "530423" }, { "label": "华宁县", "value": "530424" }, { "label": "易门县", "value": "530425" }, { "label": "峨山彝族自治县", "value": "530426" }, { "label": "新平彝族傣族自治县", "value": "530427" }, { "label": "元江哈尼族彝族傣族自治县", "value": "530428" }], [{ "label": "隆阳区", "value": "530502" }, { "label": "施甸县", "value": "530521" }, { "label": "龙陵县", "value": "530523" }, { "label": "昌宁县", "value": "530524" }, { "label": "腾冲市", "value": "530581" }], [{ "label": "昭阳区", "value": "530602" }, { "label": "鲁甸县", "value": "530621" }, { "label": "巧家县", "value": "530622" }, { "label": "盐津县", "value": "530623" }, { "label": "大关县", "value": "530624" }, { "label": "永善县", "value": "530625" }, { "label": "绥江县", "value": "530626" }, { "label": "镇雄县", "value": "530627" }, { "label": "彝良县", "value": "530628" }, { "label": "威信县", "value": "530629" }, { "label": "水富县", "value": "530630" }], [{ "label": "古城区", "value": "530702" }, { "label": "玉龙纳西族自治县", "value": "530721" }, { "label": "永胜县", "value": "530722" }, { "label": "华坪县", "value": "530723" }, { "label": "宁蒗彝族自治县", "value": "530724" }], [{ "label": "思茅区", "value": "530802" }, { "label": "宁洱哈尼族彝族自治县", "value": "530821" }, { "label": "墨江哈尼族自治县", "value": "530822" }, { "label": "景东彝族自治县", "value": "530823" }, { "label": "景谷傣族彝族自治县", "value": "530824" }, { "label": "镇沅彝族哈尼族拉祜族自治县", "value": "530825" }, { "label": "江城哈尼族彝族自治县", "value": "530826" }, { "label": "孟连傣族拉祜族佤族自治县", "value": "530827" }, { "label": "澜沧拉祜族自治县", "value": "530828" }, { "label": "西盟佤族自治县", "value": "530829" }], [{ "label": "临翔区", "value": "530902" }, { "label": "凤庆县", "value": "530921" }, { "label": "云县", "value": "530922" }, { "label": "永德县", "value": "530923" }, { "label": "镇康县", "value": "530924" }, { "label": "双江拉祜族佤族布朗族傣族自治县", "value": "530925" }, { "label": "耿马傣族佤族自治县", "value": "530926" }, { "label": "沧源佤族自治县", "value": "530927" }], [{ "label": "楚雄市", "value": "532301" }, { "label": "双柏县", "value": "532322" }, { "label": "牟定县", "value": "532323" }, { "label": "南华县", "value": "532324" }, { "label": "姚安县", "value": "532325" }, { "label": "大姚县", "value": "532326" }, { "label": "永仁县", "value": "532327" }, { "label": "元谋县", "value": "532328" }, { "label": "武定县", "value": "532329" }, { "label": "禄丰县", "value": "532331" }], [{ "label": "个旧市", "value": "532501" }, { "label": "开远市", "value": "532502" }, { "label": "蒙自市", "value": "532503" }, { "label": "弥勒市", "value": "532504" }, { "label": "屏边苗族自治县", "value": "532523" }, { "label": "建水县", "value": "532524" }, { "label": "石屏县", "value": "532525" }, { "label": "泸西县", "value": "532527" }, { "label": "元阳县", "value": "532528" }, { "label": "红河县", "value": "532529" }, { "label": "金平苗族瑶族傣族自治县", "value": "532530" }, { "label": "绿春县", "value": "532531" }, { "label": "河口瑶族自治县", "value": "532532" }], [{ "label": "文山市", "value": "532601" }, { "label": "砚山县", "value": "532622" }, { "label": "西畴县", "value": "532623" }, { "label": "麻栗坡县", "value": "532624" }, { "label": "马关县", "value": "532625" }, { "label": "丘北县", "value": "532626" }, { "label": "广南县", "value": "532627" }, { "label": "富宁县", "value": "532628" }], [{ "label": "景洪市", "value": "532801" }, { "label": "勐海县", "value": "532822" }, { "label": "勐腊县", "value": "532823" }], [{ "label": "大理市", "value": "532901" }, { "label": "漾濞彝族自治县", "value": "532922" }, { "label": "祥云县", "value": "532923" }, { "label": "宾川县", "value": "532924" }, { "label": "弥渡县", "value": "532925" }, { "label": "南涧彝族自治县", "value": "532926" }, { "label": "巍山彝族回族自治县", "value": "532927" }, { "label": "永平县", "value": "532928" }, { "label": "云龙县", "value": "532929" }, { "label": "洱源县", "value": "532930" }, { "label": "剑川县", "value": "532931" }, { "label": "鹤庆县", "value": "532932" }], [{ "label": "瑞丽市", "value": "533102" }, { "label": "芒市", "value": "533103" }, { "label": "梁河县", "value": "533122" }, { "label": "盈江县", "value": "533123" }, { "label": "陇川县", "value": "533124" }], [{ "label": "泸水市", "value": "533301" }, { "label": "福贡县", "value": "533323" }, { "label": "贡山独龙族怒族自治县", "value": "533324" }, { "label": "兰坪白族普米族自治县", "value": "533325" }], [{ "label": "香格里拉市", "value": "533401" }, { "label": "德钦县", "value": "533422" }, { "label": "维西傈僳族自治县", "value": "533423" }]], [[{ "label": "城关区", "value": "540102" }, { "label": "堆龙德庆区", "value": "540103" }, { "label": "林周县", "value": "540121" }, { "label": "当雄县", "value": "540122" }, { "label": "尼木县", "value": "540123" }, { "label": "曲水县", "value": "540124" }, { "label": "达孜县", "value": "540126" }, { "label": "墨竹工卡县", "value": "540127" }, { "label": "格尔木藏青工业园区", "value": "540171" }, { "label": "拉萨经济技术开发区", "value": "540172" }, { "label": "西藏文化旅游创意园区", "value": "540173" }, { "label": "达孜工业园区", "value": "540174" }], [{ "label": "桑珠孜区", "value": "540202" }, { "label": "南木林县", "value": "540221" }, { "label": "江孜县", "value": "540222" }, { "label": "定日县", "value": "540223" }, { "label": "萨迦县", "value": "540224" }, { "label": "拉孜县", "value": "540225" }, { "label": "昂仁县", "value": "540226" }, { "label": "谢通门县", "value": "540227" }, { "label": "白朗县", "value": "540228" }, { "label": "仁布县", "value": "540229" }, { "label": "康马县", "value": "540230" }, { "label": "定结县", "value": "540231" }, { "label": "仲巴县", "value": "540232" }, { "label": "亚东县", "value": "540233" }, { "label": "吉隆县", "value": "540234" }, { "label": "聂拉木县", "value": "540235" }, { "label": "萨嘎县", "value": "540236" }, { "label": "岗巴县", "value": "540237" }], [{ "label": "卡若区", "value": "540302" }, { "label": "江达县", "value": "540321" }, { "label": "贡觉县", "value": "540322" }, { "label": "类乌齐县", "value": "540323" }, { "label": "丁青县", "value": "540324" }, { "label": "察雅县", "value": "540325" }, { "label": "八宿县", "value": "540326" }, { "label": "左贡县", "value": "540327" }, { "label": "芒康县", "value": "540328" }, { "label": "洛隆县", "value": "540329" }, { "label": "边坝县", "value": "540330" }], [{ "label": "巴宜区", "value": "540402" }, { "label": "工布江达县", "value": "540421" }, { "label": "米林县", "value": "540422" }, { "label": "墨脱县", "value": "540423" }, { "label": "波密县", "value": "540424" }, { "label": "察隅县", "value": "540425" }, { "label": "朗县", "value": "540426" }], [{ "label": "乃东区", "value": "540502" }, { "label": "扎囊县", "value": "540521" }, { "label": "贡嘎县", "value": "540522" }, { "label": "桑日县", "value": "540523" }, { "label": "琼结县", "value": "540524" }, { "label": "曲松县", "value": "540525" }, { "label": "措美县", "value": "540526" }, { "label": "洛扎县", "value": "540527" }, { "label": "加查县", "value": "540528" }, { "label": "隆子县", "value": "540529" }, { "label": "错那县", "value": "540530" }, { "label": "浪卡子县", "value": "540531" }], [{ "label": "那曲县", "value": "542421" }, { "label": "嘉黎县", "value": "542422" }, { "label": "比如县", "value": "542423" }, { "label": "聂荣县", "value": "542424" }, { "label": "安多县", "value": "542425" }, { "label": "申扎县", "value": "542426" }, { "label": "索县", "value": "542427" }, { "label": "班戈县", "value": "542428" }, { "label": "巴青县", "value": "542429" }, { "label": "尼玛县", "value": "542430" }, { "label": "双湖县", "value": "542431" }], [{ "label": "普兰县", "value": "542521" }, { "label": "札达县", "value": "542522" }, { "label": "噶尔县", "value": "542523" }, { "label": "日土县", "value": "542524" }, { "label": "革吉县", "value": "542525" }, { "label": "改则县", "value": "542526" }, { "label": "措勤县", "value": "542527" }]], [[{ "label": "新城区", "value": "610102" }, { "label": "碑林区", "value": "610103" }, { "label": "莲湖区", "value": "610104" }, { "label": "灞桥区", "value": "610111" }, { "label": "未央区", "value": "610112" }, { "label": "雁塔区", "value": "610113" }, { "label": "阎良区", "value": "610114" }, { "label": "临潼区", "value": "610115" }, { "label": "长安区", "value": "610116" }, { "label": "高陵区", "value": "610117" }, { "label": "鄠邑区", "value": "610118" }, { "label": "蓝田县", "value": "610122" }, { "label": "周至县", "value": "610124" }], [{ "label": "王益区", "value": "610202" }, { "label": "印台区", "value": "610203" }, { "label": "耀州区", "value": "610204" }, { "label": "宜君县", "value": "610222" }], [{ "label": "渭滨区", "value": "610302" }, { "label": "金台区", "value": "610303" }, { "label": "陈仓区", "value": "610304" }, { "label": "凤翔县", "value": "610322" }, { "label": "岐山县", "value": "610323" }, { "label": "扶风县", "value": "610324" }, { "label": "眉县", "value": "610326" }, { "label": "陇县", "value": "610327" }, { "label": "千阳县", "value": "610328" }, { "label": "麟游县", "value": "610329" }, { "label": "凤县", "value": "610330" }, { "label": "太白县", "value": "610331" }], [{ "label": "秦都区", "value": "610402" }, { "label": "杨陵区", "value": "610403" }, { "label": "渭城区", "value": "610404" }, { "label": "三原县", "value": "610422" }, { "label": "泾阳县", "value": "610423" }, { "label": "乾县", "value": "610424" }, { "label": "礼泉县", "value": "610425" }, { "label": "永寿县", "value": "610426" }, { "label": "彬县", "value": "610427" }, { "label": "长武县", "value": "610428" }, { "label": "旬邑县", "value": "610429" }, { "label": "淳化县", "value": "610430" }, { "label": "武功县", "value": "610431" }, { "label": "兴平市", "value": "610481" }], [{ "label": "临渭区", "value": "610502" }, { "label": "华州区", "value": "610503" }, { "label": "潼关县", "value": "610522" }, { "label": "大荔县", "value": "610523" }, { "label": "合阳县", "value": "610524" }, { "label": "澄城县", "value": "610525" }, { "label": "蒲城县", "value": "610526" }, { "label": "白水县", "value": "610527" }, { "label": "富平县", "value": "610528" }, { "label": "韩城市", "value": "610581" }, { "label": "华阴市", "value": "610582" }], [{ "label": "宝塔区", "value": "610602" }, { "label": "安塞区", "value": "610603" }, { "label": "延长县", "value": "610621" }, { "label": "延川县", "value": "610622" }, { "label": "子长县", "value": "610623" }, { "label": "志丹县", "value": "610625" }, { "label": "吴起县", "value": "610626" }, { "label": "甘泉县", "value": "610627" }, { "label": "富县", "value": "610628" }, { "label": "洛川县", "value": "610629" }, { "label": "宜川县", "value": "610630" }, { "label": "黄龙县", "value": "610631" }, { "label": "黄陵县", "value": "610632" }], [{ "label": "汉台区", "value": "610702" }, { "label": "南郑区", "value": "610703" }, { "label": "城固县", "value": "610722" }, { "label": "洋县", "value": "610723" }, { "label": "西乡县", "value": "610724" }, { "label": "勉县", "value": "610725" }, { "label": "宁强县", "value": "610726" }, { "label": "略阳县", "value": "610727" }, { "label": "镇巴县", "value": "610728" }, { "label": "留坝县", "value": "610729" }, { "label": "佛坪县", "value": "610730" }], [{ "label": "榆阳区", "value": "610802" }, { "label": "横山区", "value": "610803" }, { "label": "府谷县", "value": "610822" }, { "label": "靖边县", "value": "610824" }, { "label": "定边县", "value": "610825" }, { "label": "绥德县", "value": "610826" }, { "label": "米脂县", "value": "610827" }, { "label": "佳县", "value": "610828" }, { "label": "吴堡县", "value": "610829" }, { "label": "清涧县", "value": "610830" }, { "label": "子洲县", "value": "610831" }, { "label": "神木市", "value": "610881" }], [{ "label": "汉滨区", "value": "610902" }, { "label": "汉阴县", "value": "610921" }, { "label": "石泉县", "value": "610922" }, { "label": "宁陕县", "value": "610923" }, { "label": "紫阳县", "value": "610924" }, { "label": "岚皋县", "value": "610925" }, { "label": "平利县", "value": "610926" }, { "label": "镇坪县", "value": "610927" }, { "label": "旬阳县", "value": "610928" }, { "label": "白河县", "value": "610929" }], [{ "label": "商州区", "value": "611002" }, { "label": "洛南县", "value": "611021" }, { "label": "丹凤县", "value": "611022" }, { "label": "商南县", "value": "611023" }, { "label": "山阳县", "value": "611024" }, { "label": "镇安县", "value": "611025" }, { "label": "柞水县", "value": "611026" }]], [[{ "label": "城关区", "value": "620102" }, { "label": "七里河区", "value": "620103" }, { "label": "西固区", "value": "620104" }, { "label": "安宁区", "value": "620105" }, { "label": "红古区", "value": "620111" }, { "label": "永登县", "value": "620121" }, { "label": "皋兰县", "value": "620122" }, { "label": "榆中县", "value": "620123" }, { "label": "兰州新区", "value": "620171" }], [{ "label": "嘉峪关市", "value": "620201" }], [{ "label": "金川区", "value": "620302" }, { "label": "永昌县", "value": "620321" }], [{ "label": "白银区", "value": "620402" }, { "label": "平川区", "value": "620403" }, { "label": "靖远县", "value": "620421" }, { "label": "会宁县", "value": "620422" }, { "label": "景泰县", "value": "620423" }], [{ "label": "秦州区", "value": "620502" }, { "label": "麦积区", "value": "620503" }, { "label": "清水县", "value": "620521" }, { "label": "秦安县", "value": "620522" }, { "label": "甘谷县", "value": "620523" }, { "label": "武山县", "value": "620524" }, { "label": "张家川回族自治县", "value": "620525" }], [{ "label": "凉州区", "value": "620602" }, { "label": "民勤县", "value": "620621" }, { "label": "古浪县", "value": "620622" }, { "label": "天祝藏族自治县", "value": "620623" }], [{ "label": "甘州区", "value": "620702" }, { "label": "肃南裕固族自治县", "value": "620721" }, { "label": "民乐县", "value": "620722" }, { "label": "临泽县", "value": "620723" }, { "label": "高台县", "value": "620724" }, { "label": "山丹县", "value": "620725" }], [{ "label": "崆峒区", "value": "620802" }, { "label": "泾川县", "value": "620821" }, { "label": "灵台县", "value": "620822" }, { "label": "崇信县", "value": "620823" }, { "label": "华亭县", "value": "620824" }, { "label": "庄浪县", "value": "620825" }, { "label": "静宁县", "value": "620826" }, { "label": "平凉工业园区", "value": "620871" }], [{ "label": "肃州区", "value": "620902" }, { "label": "金塔县", "value": "620921" }, { "label": "瓜州县", "value": "620922" }, { "label": "肃北蒙古族自治县", "value": "620923" }, { "label": "阿克塞哈萨克族自治县", "value": "620924" }, { "label": "玉门市", "value": "620981" }, { "label": "敦煌市", "value": "620982" }], [{ "label": "西峰区", "value": "621002" }, { "label": "庆城县", "value": "621021" }, { "label": "环县", "value": "621022" }, { "label": "华池县", "value": "621023" }, { "label": "合水县", "value": "621024" }, { "label": "正宁县", "value": "621025" }, { "label": "宁县", "value": "621026" }, { "label": "镇原县", "value": "621027" }], [{ "label": "安定区", "value": "621102" }, { "label": "通渭县", "value": "621121" }, { "label": "陇西县", "value": "621122" }, { "label": "渭源县", "value": "621123" }, { "label": "临洮县", "value": "621124" }, { "label": "漳县", "value": "621125" }, { "label": "岷县", "value": "621126" }], [{ "label": "武都区", "value": "621202" }, { "label": "成县", "value": "621221" }, { "label": "文县", "value": "621222" }, { "label": "宕昌县", "value": "621223" }, { "label": "康县", "value": "621224" }, { "label": "西和县", "value": "621225" }, { "label": "礼县", "value": "621226" }, { "label": "徽县", "value": "621227" }, { "label": "两当县", "value": "621228" }], [{ "label": "临夏市", "value": "622901" }, { "label": "临夏县", "value": "622921" }, { "label": "康乐县", "value": "622922" }, { "label": "永靖县", "value": "622923" }, { "label": "广河县", "value": "622924" }, { "label": "和政县", "value": "622925" }, { "label": "东乡族自治县", "value": "622926" }, { "label": "积石山保安族东乡族撒拉族自治县", "value": "622927" }], [{ "label": "合作市", "value": "623001" }, { "label": "临潭县", "value": "623021" }, { "label": "卓尼县", "value": "623022" }, { "label": "舟曲县", "value": "623023" }, { "label": "迭部县", "value": "623024" }, { "label": "玛曲县", "value": "623025" }, { "label": "碌曲县", "value": "623026" }, { "label": "夏河县", "value": "623027" }]], [[{ "label": "城东区", "value": "630102" }, { "label": "城中区", "value": "630103" }, { "label": "城西区", "value": "630104" }, { "label": "城北区", "value": "630105" }, { "label": "大通回族土族自治县", "value": "630121" }, { "label": "湟中县", "value": "630122" }, { "label": "湟源县", "value": "630123" }], [{ "label": "乐都区", "value": "630202" }, { "label": "平安区", "value": "630203" }, { "label": "民和回族土族自治县", "value": "630222" }, { "label": "互助土族自治县", "value": "630223" }, { "label": "化隆回族自治县", "value": "630224" }, { "label": "循化撒拉族自治县", "value": "630225" }], [{ "label": "门源回族自治县", "value": "632221" }, { "label": "祁连县", "value": "632222" }, { "label": "海晏县", "value": "632223" }, { "label": "刚察县", "value": "632224" }], [{ "label": "同仁县", "value": "632321" }, { "label": "尖扎县", "value": "632322" }, { "label": "泽库县", "value": "632323" }, { "label": "河南蒙古族自治县", "value": "632324" }], [{ "label": "共和县", "value": "632521" }, { "label": "同德县", "value": "632522" }, { "label": "贵德县", "value": "632523" }, { "label": "兴海县", "value": "632524" }, { "label": "贵南县", "value": "632525" }], [{ "label": "玛沁县", "value": "632621" }, { "label": "班玛县", "value": "632622" }, { "label": "甘德县", "value": "632623" }, { "label": "达日县", "value": "632624" }, { "label": "久治县", "value": "632625" }, { "label": "玛多县", "value": "632626" }], [{ "label": "玉树市", "value": "632701" }, { "label": "杂多县", "value": "632722" }, { "label": "称多县", "value": "632723" }, { "label": "治多县", "value": "632724" }, { "label": "囊谦县", "value": "632725" }, { "label": "曲麻莱县", "value": "632726" }], [{ "label": "格尔木市", "value": "632801" }, { "label": "德令哈市", "value": "632802" }, { "label": "乌兰县", "value": "632821" }, { "label": "都兰县", "value": "632822" }, { "label": "天峻县", "value": "632823" }, { "label": "大柴旦行政委员会", "value": "632857" }, { "label": "冷湖行政委员会", "value": "632858" }, { "label": "茫崖行政委员会", "value": "632859" }]], [[{ "label": "兴庆区", "value": "640104" }, { "label": "西夏区", "value": "640105" }, { "label": "金凤区", "value": "640106" }, { "label": "永宁县", "value": "640121" }, { "label": "贺兰县", "value": "640122" }, { "label": "灵武市", "value": "640181" }], [{ "label": "大武口区", "value": "640202" }, { "label": "惠农区", "value": "640205" }, { "label": "平罗县", "value": "640221" }], [{ "label": "利通区", "value": "640302" }, { "label": "红寺堡区", "value": "640303" }, { "label": "盐池县", "value": "640323" }, { "label": "同心县", "value": "640324" }, { "label": "青铜峡市", "value": "640381" }], [{ "label": "原州区", "value": "640402" }, { "label": "西吉县", "value": "640422" }, { "label": "隆德县", "value": "640423" }, { "label": "泾源县", "value": "640424" }, { "label": "彭阳县", "value": "640425" }], [{ "label": "沙坡头区", "value": "640502" }, { "label": "中宁县", "value": "640521" }, { "label": "海原县", "value": "640522" }]], [[{ "label": "天山区", "value": "650102" }, { "label": "沙依巴克区", "value": "650103" }, { "label": "新市区", "value": "650104" }, { "label": "水磨沟区", "value": "650105" }, { "label": "头屯河区", "value": "650106" }, { "label": "达坂城区", "value": "650107" }, { "label": "米东区", "value": "650109" }, { "label": "乌鲁木齐县", "value": "650121" }, { "label": "乌鲁木齐经济技术开发区", "value": "650171" }, { "label": "乌鲁木齐高新技术产业开发区", "value": "650172" }], [{ "label": "独山子区", "value": "650202" }, { "label": "克拉玛依区", "value": "650203" }, { "label": "白碱滩区", "value": "650204" }, { "label": "乌尔禾区", "value": "650205" }], [{ "label": "高昌区", "value": "650402" }, { "label": "鄯善县", "value": "650421" }, { "label": "托克逊县", "value": "650422" }], [{ "label": "伊州区", "value": "650502" }, { "label": "巴里坤哈萨克自治县", "value": "650521" }, { "label": "伊吾县", "value": "650522" }], [{ "label": "昌吉市", "value": "652301" }, { "label": "阜康市", "value": "652302" }, { "label": "呼图壁县", "value": "652323" }, { "label": "玛纳斯县", "value": "652324" }, { "label": "奇台县", "value": "652325" }, { "label": "吉木萨尔县", "value": "652327" }, { "label": "木垒哈萨克自治县", "value": "652328" }], [{ "label": "博乐市", "value": "652701" }, { "label": "阿拉山口市", "value": "652702" }, { "label": "精河县", "value": "652722" }, { "label": "温泉县", "value": "652723" }], [{ "label": "库尔勒市", "value": "652801" }, { "label": "轮台县", "value": "652822" }, { "label": "尉犁县", "value": "652823" }, { "label": "若羌县", "value": "652824" }, { "label": "且末县", "value": "652825" }, { "label": "焉耆回族自治县", "value": "652826" }, { "label": "和静县", "value": "652827" }, { "label": "和硕县", "value": "652828" }, { "label": "博湖县", "value": "652829" }, { "label": "库尔勒经济技术开发区", "value": "652871" }], [{ "label": "阿克苏市", "value": "652901" }, { "label": "温宿县", "value": "652922" }, { "label": "库车县", "value": "652923" }, { "label": "沙雅县", "value": "652924" }, { "label": "新和县", "value": "652925" }, { "label": "拜城县", "value": "652926" }, { "label": "乌什县", "value": "652927" }, { "label": "阿瓦提县", "value": "652928" }, { "label": "柯坪县", "value": "652929" }], [{ "label": "阿图什市", "value": "653001" }, { "label": "阿克陶县", "value": "653022" }, { "label": "阿合奇县", "value": "653023" }, { "label": "乌恰县", "value": "653024" }], [{ "label": "喀什市", "value": "653101" }, { "label": "疏附县", "value": "653121" }, { "label": "疏勒县", "value": "653122" }, { "label": "英吉沙县", "value": "653123" }, { "label": "泽普县", "value": "653124" }, { "label": "莎车县", "value": "653125" }, { "label": "叶城县", "value": "653126" }, { "label": "麦盖提县", "value": "653127" }, { "label": "岳普湖县", "value": "653128" }, { "label": "伽师县", "value": "653129" }, { "label": "巴楚县", "value": "653130" }, { "label": "塔什库尔干塔吉克自治县", "value": "653131" }], [{ "label": "和田市", "value": "653201" }, { "label": "和田县", "value": "653221" }, { "label": "墨玉县", "value": "653222" }, { "label": "皮山县", "value": "653223" }, { "label": "洛浦县", "value": "653224" }, { "label": "策勒县", "value": "653225" }, { "label": "于田县", "value": "653226" }, { "label": "民丰县", "value": "653227" }], [{ "label": "伊宁市", "value": "654002" }, { "label": "奎屯市", "value": "654003" }, { "label": "霍尔果斯市", "value": "654004" }, { "label": "伊宁县", "value": "654021" }, { "label": "察布查尔锡伯自治县", "value": "654022" }, { "label": "霍城县", "value": "654023" }, { "label": "巩留县", "value": "654024" }, { "label": "新源县", "value": "654025" }, { "label": "昭苏县", "value": "654026" }, { "label": "特克斯县", "value": "654027" }, { "label": "尼勒克县", "value": "654028" }], [{ "label": "塔城市", "value": "654201" }, { "label": "乌苏市", "value": "654202" }, { "label": "额敏县", "value": "654221" }, { "label": "沙湾县", "value": "654223" }, { "label": "托里县", "value": "654224" }, { "label": "裕民县", "value": "654225" }, { "label": "和布克赛尔蒙古自治县", "value": "654226" }], [{ "label": "阿勒泰市", "value": "654301" }, { "label": "布尔津县", "value": "654321" }, { "label": "富蕴县", "value": "654322" }, { "label": "福海县", "value": "654323" }, { "label": "哈巴河县", "value": "654324" }, { "label": "青河县", "value": "654325" }, { "label": "吉木乃县", "value": "654326" }], [{ "label": "石河子市", "value": "659001" }, { "label": "阿拉尔市", "value": "659002" }, { "label": "图木舒克市", "value": "659003" }, { "label": "五家渠市", "value": "659004" }, { "label": "铁门关市", "value": "659006" }]], [[{ "label": "台北", "value": "660101" }], [{ "label": "高雄", "value": "660201" }], [{ "label": "基隆", "value": "660301" }], [{ "label": "台中", "value": "660401" }], [{ "label": "台南", "value": "660501" }], [{ "label": "新竹", "value": "660601" }], [{ "label": "嘉义", "value": "660701" }], [{ "label": "宜兰", "value": "660801" }], [{ "label": "桃园", "value": "660901" }], [{ "label": "苗栗", "value": "661001" }], [{ "label": "彰化", "value": "661101" }], [{ "label": "南投", "value": "661201" }], [{ "label": "云林", "value": "661301" }], [{ "label": "屏东", "value": "661401" }], [{ "label": "台东", "value": "661501" }], [{ "label": "花莲", "value": "661601" }], [{ "label": "澎湖", "value": "661701" }]], [[{ "label": "香港岛", "value": "670101" }], [{ "label": "九龙", "value": "670201" }], [{ "label": "新界", "value": "670301" }]], [[{ "label": "澳门半岛", "value": "680101" }], [{ "label": "氹仔岛", "value": "680201" }], [{ "label": "路环岛", "value": "680301" }], [{ "label": "路氹城", "value": "680401" }]]];var _default = areaData;exports.default = _default;
  17116. /***/ }),
  17117. /***/ 768:
  17118. /*!****************************************************************************************!*\
  17119. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/components/bazaar-city_list/citylist.json ***!
  17120. \****************************************************************************************/
  17121. /*! exports provided: hotcity, city, default */
  17122. /***/ (function(module) {
  17123. module.exports = JSON.parse("{\"hotcity\":{\"title\":\"热门城市\",\"lists\":[\"上海\",\"北京\",\"广州\",\"深圳\",\"武汉\",\"天津\",\"西安\",\"南京\",\"杭州\",\"成都\",\"重庆\"]},\"city\":[{\"title\":\"A\",\"lists\":[\"阿坝\",\"阿拉善\",\"阿里\",\"安康\",\"安庆\",\"鞍山\",\"安顺\",\"安阳\",\"澳门\"]},{\"title\":\"B\",\"lists\":[\"北京\",\"白银\",\"保定\",\"宝鸡\",\"保山\",\"包头\",\"巴中\",\"北海\",\"蚌埠\",\"本溪\",\"毕节\",\"滨州\",\"百色\",\"亳州\"]},{\"title\":\"C\",\"lists\":[\"重庆\",\"成都\",\"长沙\",\"长春\",\"沧州\",\"常德\",\"昌都\",\"长治\",\"常州\",\"巢湖\",\"潮州\",\"承德\",\"郴州\",\"赤峰\",\"池州\",\"崇左\",\"楚雄\",\"滁州\",\"朝阳\"]},{\"title\":\"D\",\"lists\":[\"大连\",\"东莞\",\"大理\",\"丹东\",\"大庆\",\"大同\",\"大兴安岭\",\"德宏\",\"德阳\",\"德州\",\"定西\",\"迪庆\",\"东营\"]},{\"title\":\"E\",\"lists\":[\"鄂尔多斯\",\"恩施\",\"鄂州\"]},{\"title\":\"F\",\"lists\":[\"福州\",\"防城港\",\"佛山\",\"抚顺\",\"抚州\",\"阜新\",\"阜阳\"]},{\"title\":\"G\",\"lists\":[\"广州\",\"桂林\",\"贵阳\",\"甘南\",\"赣州\",\"甘孜\",\"广安\",\"广元\",\"贵港\",\"果洛\"]},{\"title\":\"H\",\"lists\":[\"杭州\",\"哈尔滨\",\"合肥\",\"海口\",\"呼和浩特\",\"海北\",\"海东\",\"海南\",\"海西\",\"邯郸\",\"汉中\",\"鹤壁\",\"河池\",\"鹤岗\",\"黑河\",\"衡水\",\"衡阳\",\"河源\",\"贺州\",\"红河\",\"淮安\",\"淮北\",\"怀化\",\"淮南\",\"黄冈\",\"黄南\",\"黄山\",\"黄石\",\"惠州\",\"葫芦岛\",\"呼伦贝尔\",\"湖州\",\"菏泽\"]},{\"title\":\"J\",\"lists\":[\"济南\",\"佳木斯\",\"吉安\",\"江门\",\"焦作\",\"嘉兴\",\"嘉峪关\",\"揭阳\",\"吉林\",\"金昌\",\"晋城\",\"景德镇\",\"荆门\",\"荆州\",\"金华\",\"济宁\",\"晋中\",\"锦州\",\"九江\",\"酒泉\"]},{\"title\":\"K\",\"lists\":[\"昆明\",\"开封\"]},{\"title\":\"L\",\"lists\":[\"兰州\",\"拉萨\",\"来宾\",\"莱芜\",\"廊坊\",\"乐山\",\"凉山\",\"连云港\",\"聊城\",\"辽阳\",\"辽源\",\"丽江\",\"临沧\",\"临汾\",\"临夏\",\"临沂\",\"林芝\",\"丽水\",\"六安\",\"六盘水\",\"柳州\",\"陇南\",\"龙岩\",\"娄底\",\"漯河\",\"洛阳\",\"泸州\",\"吕梁\"]},{\"title\":\"M\",\"lists\":[\"马鞍山\",\"茂名\",\"眉山\",\"梅州\",\"绵阳\",\"牡丹江\"]},{\"title\":\"N\",\"lists\":[\"南京\",\"南昌\",\"南宁\",\"宁波\",\"南充\",\"南平\",\"南通\",\"南阳\",\"那曲\",\"内江\",\"宁德\",\"怒江\"]},{\"title\":\"P\",\"lists\":[\"盘锦\",\"攀枝花\",\"平顶山\",\"平凉\",\"萍乡\",\"莆田\",\"濮阳\"]},{\"title\":\"Q\",\"lists\":[\"青岛\",\"黔东南\",\"黔南\",\"黔西南\",\"庆阳\",\"清远\",\"秦皇岛\",\"钦州\",\"齐齐哈尔\",\"泉州\",\"曲靖\",\"衢州\"]},{\"title\":\"R\",\"lists\":[\"日喀则\",\"日照\"]},{\"title\":\"S\",\"lists\":[\"上海\",\"深圳\",\"苏州\",\"沈阳\",\"石家庄\",\"三门峡\",\"三明\",\"三亚\",\"商洛\",\"商丘\",\"上饶\",\"山南\",\"汕头\",\"汕尾\",\"韶关\",\"绍兴\",\"邵阳\",\"十堰\",\"朔州\",\"四平\",\"绥化\",\"遂宁\",\"随州\",\"宿迁\",\"宿州\"]},{\"title\":\"T\",\"lists\":[\"天津\",\"太原\",\"泰安\",\"泰州\",\"台州\",\"唐山\",\"天水\",\"铁岭\",\"铜川\",\"通化\",\"通辽\",\"铜陵\",\"铜仁\",\"台湾\"]},{\"title\":\"W\",\"lists\":[\"武汉\",\"乌鲁木齐\",\"无锡\",\"威海\",\"潍坊\",\"文山\",\"温州\",\"乌海\",\"芜湖\",\"乌兰察布\",\"武威\",\"梧州\"]},{\"title\":\"X\",\"lists\":[\"厦门\",\"西安\",\"西宁\",\"襄樊\",\"湘潭\",\"湘西\",\"咸宁\",\"咸阳\",\"孝感\",\"邢台\",\"新乡\",\"信阳\",\"新余\",\"忻州\",\"西双版纳\",\"宣城\",\"许昌\",\"徐州\",\"香港\",\"锡林郭勒\",\"兴安\"]},{\"title\":\"Y\",\"lists\":[\"银川\",\"雅安\",\"延安\",\"延边\",\"盐城\",\"阳江\",\"阳泉\",\"扬州\",\"烟台\",\"宜宾\",\"宜昌\",\"宜春\",\"营口\",\"益阳\",\"永州\",\"岳阳\",\"榆林\",\"运城\",\"云浮\",\"玉树\",\"玉溪\",\"玉林\"]},{\"title\":\"Z\",\"lists\":[\"杂多县\",\"赞皇县\",\"枣强县\",\"枣阳市\",\"枣庄\",\"泽库县\",\"增城市\",\"曾都区\",\"泽普县\",\"泽州县\",\"札达县\",\"扎赉特旗\",\"扎兰屯市\",\"扎鲁特旗\",\"扎囊县\",\"张北县\",\"张店区\",\"章贡区\",\"张家港\",\"张家界\",\"张家口\",\"漳平市\",\"漳浦县\",\"章丘市\",\"樟树市\",\"张湾区\",\"彰武县\",\"漳县\",\"张掖\",\"漳州\",\"长子县\",\"湛河区\",\"湛江\",\"站前区\",\"沾益县\",\"诏安县\",\"召陵区\",\"昭平县\",\"肇庆\",\"昭通\",\"赵县\",\"昭阳区\",\"招远市\",\"肇源县\",\"肇州县\",\"柞水县\",\"柘城县\",\"浙江\",\"镇安县\",\"振安区\",\"镇巴县\",\"正安县\",\"正定县\",\"正定新区\",\"正蓝旗\",\"正宁县\",\"蒸湘区\",\"正镶白旗\",\"正阳县\",\"郑州\",\"镇海区\",\"镇江\",\"浈江区\",\"镇康县\",\"镇赉县\",\"镇平县\",\"振兴区\",\"镇雄县\",\"镇原县\",\"志丹县\",\"治多县\",\"芝罘区\",\"枝江市\",\"芷江侗族自治县\",\"织金县\",\"中方县\",\"中江县\",\"钟楼区\",\"中牟县\",\"中宁县\",\"中山\",\"中山区\",\"钟山区\",\"钟山县\",\"中卫\",\"钟祥市\",\"中阳县\",\"中原区\",\"周村区\",\"周口\",\"周宁县\",\"舟曲县\",\"舟山\",\"周至县\",\"庄河市\",\"诸城市\",\"珠海\",\"珠晖区\",\"诸暨市\",\"驻马店\",\"准格尔旗\",\"涿鹿县\",\"卓尼\",\"涿州市\",\"卓资县\",\"珠山区\",\"竹山县\",\"竹溪县\",\"株洲\",\"株洲县\",\"淄博\",\"子长县\",\"淄川区\",\"自贡\",\"秭归县\",\"紫金县\",\"自流井区\",\"资溪县\",\"资兴市\",\"资阳\"]}]}");
  17124. /***/ }),
  17125. /***/ 88:
  17126. /*!***************************************************************!*\
  17127. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/util/anitthro.js ***!
  17128. \***************************************************************/
  17129. /*! no static exports found */
  17130. /***/ (function(module, exports) {
  17131. var timer1 = null; //防抖,
  17132. var timer2 = null; //节流
  17133. function Debounce(fn, t) {//防抖
  17134. var delay = t || 500;
  17135. return function () {var _this = this;
  17136. var args = arguments;
  17137. // let timer1 = null
  17138. // console.log(timer1);
  17139. if (timer1) {
  17140. clearTimeout(timer1);
  17141. }
  17142. timer1 = setTimeout(function () {
  17143. fn.apply(_this, args);
  17144. timer1 = null;
  17145. }, delay);
  17146. };
  17147. }
  17148. // 使用
  17149. /*import {Debounce} from '@/common/debounceThrottle.js'
  17150. Debounce(() => {
  17151. //要执行的函数
  17152. }, 200)() */
  17153. function Throttle(fn, t) {//节流
  17154. var last;
  17155. var interval = t || 500;
  17156. return function () {var _this2 = this;
  17157. var args = arguments;
  17158. var now = +new Date();
  17159. if (last && now - last < interval) {
  17160. clearTimeout(timer2);
  17161. timer2 = setTimeout(function () {
  17162. last = now;
  17163. fn.apply(_this2, args);
  17164. }, interval);
  17165. } else {
  17166. last = now;
  17167. fn.apply(this, args);
  17168. }
  17169. };
  17170. }
  17171. module.exports = {
  17172. Debounce: Debounce,
  17173. Throttle: Throttle };
  17174. /***/ }),
  17175. /***/ 965:
  17176. /*!***********************************************************************!*\
  17177. !*** C:/Users/FC/Desktop/大数据平台小程序/master_wx/static/json/eleList.json ***!
  17178. \***********************************************************************/
  17179. /*! exports provided: 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, default */
  17180. /***/ (function(module) {
  17181. module.exports = JSON.parse("{\"100\":{\"id\":4,\"index\":\"100\",\"max\":\"10\",\"min\":\"0\",\"name\":\"未定义\",\"prec\":\"1\",\"unit\":\"-\"},\"101\":{\"id\":5,\"index\":\"101\",\"max\":\"100\",\"min\":\"-50\",\"name\":\"大气温度\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"102\":{\"id\":6,\"index\":\"102\",\"max\":\"100\",\"min\":\"0\",\"name\":\"大气湿度\",\"prec\":\"0.1\",\"unit\":\"%RH\"},\"103\":{\"id\":7,\"index\":\"103\",\"max\":\"1500\",\"min\":\"500\",\"name\":\"模拟气压\",\"prec\":\"0.1\",\"unit\":\"hPa\"},\"104\":{\"id\":8,\"index\":\"104\",\"max\":\"100\",\"min\":\"0\",\"name\":\"雨量\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"105\":{\"id\":9,\"index\":\"105\",\"max\":\"1500\",\"min\":\"0\",\"name\":\"简易总辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"106\":{\"id\":10,\"index\":\"106\",\"max\":\"100\",\"min\":\"-50\",\"name\":\"土壤温度\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"107\":{\"id\":11,\"index\":\"107\",\"max\":\"100\",\"min\":\"0\",\"name\":\"土壤湿度\",\"prec\":\"0.1\",\"unit\":\"%\"},\"108\":{\"id\":12,\"index\":\"108\",\"max\":\"70\",\"min\":\"0\",\"name\":\"风速\",\"prec\":\"0.1\",\"unit\":\"m/s\"},\"109\":{\"id\":13,\"index\":\"109\",\"max\":\"360\",\"min\":\"0\",\"name\":\"风向\",\"prec\":\"1\",\"unit\":\"°\"},\"110\":{\"id\":14,\"index\":\"110\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"蒸发\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"111\":{\"id\":15,\"index\":\"111\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"雪量\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"112\":{\"id\":16,\"index\":\"112\",\"max\":\"200000\",\"min\":\"0\",\"name\":\"照度\",\"prec\":\"10\",\"unit\":\"Lux\"},\"113\":{\"id\":17,\"index\":\"113\",\"max\":\"24\",\"min\":\"0\",\"name\":\"日照时数\",\"prec\":\"0.1\",\"unit\":\"h\"},\"114\":{\"id\":18,\"index\":\"114\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"光合\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"115\":{\"id\":19,\"index\":\"115\",\"max\":\"6000\",\"min\":\"0\",\"name\":\"雨量累计\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"116\":{\"id\":20,\"index\":\"116\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"辐射累计\",\"prec\":\"0.01\",\"unit\":\"MJ/m2\"},\"117\":{\"id\":21,\"index\":\"117\",\"max\":\"1\",\"min\":\"0\",\"name\":\"有无雨雪\",\"prec\":\"1\",\"unit\":\"\"},\"118\":{\"id\":22,\"index\":\"118\",\"max\":\"100\",\"min\":\"0\",\"name\":\"噪声\",\"prec\":\"0.1\",\"unit\":\"dB\"},\"119\":{\"id\":23,\"index\":\"119\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"水位\",\"prec\":\"0.1\",\"unit\":\"cm\"},\"120\":{\"id\":24,\"index\":\"120\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"二氧化碳\",\"prec\":\"1\",\"unit\":\"PPM\"},\"121\":{\"id\":25,\"index\":\"121\",\"max\":\"3\",\"min\":\"0\",\"name\":\"曝辐量\",\"prec\":\"1\",\"unit\":\"cal/cm2\"},\"122\":{\"id\":26,\"index\":\"122\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"液位\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"123\":{\"id\":27,\"index\":\"123\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"光合有效辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"124\":{\"id\":28,\"index\":\"124\",\"max\":\"15\",\"min\":\"0\",\"name\":\"电压\",\"prec\":\"0.001\",\"unit\":\"V\"},\"125\":{\"id\":29,\"index\":\"125\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"紫外线\",\"prec\":\"1\",\"unit\":\"mW/m2\"},\"126\":{\"id\":30,\"index\":\"126\",\"max\":\"4\",\"min\":\"0\",\"name\":\"粉尘\",\"prec\":\"0.1\",\"unit\":\"ug/m3\"},\"127\":{\"id\":31,\"index\":\"127\",\"max\":\"1100\",\"min\":\"10\",\"name\":\"数字气压\",\"prec\":\"0.1\",\"unit\":\"hPa\"},\"128\":{\"id\":47,\"index\":\"128\",\"max\":\"14\",\"min\":\"0\",\"name\":\"pH值\",\"prec\":\"0.01\",\"unit\":\"\"},\"129\":{\"id\":33,\"index\":\"129\",\"max\":\"70\",\"min\":\"0\",\"name\":\"最大风速\",\"prec\":\"0.1\",\"unit\":\"m/s\"},\"130\":{\"id\":36,\"index\":\"130\",\"max\":\"70\",\"min\":\"0\",\"name\":\"平均风速\",\"prec\":\"0.1\",\"unit\":\"m/s\"},\"131\":{\"id\":37,\"index\":\"131\",\"max\":\"180\",\"min\":\"-180\",\"name\":\"经度\",\"prec\":\"0.1\",\"unit\":\"°\"},\"132\":{\"id\":38,\"index\":\"132\",\"max\":\"90\",\"min\":\"-90\",\"name\":\"纬度\",\"prec\":\"0.1\",\"unit\":\"°\"},\"133\":{\"id\":39,\"index\":\"133\",\"max\":\"9000\",\"min\":\"-2000\",\"name\":\"海拔高度\",\"prec\":\"0.1\",\"unit\":\"m\"},\"134\":{\"id\":40,\"index\":\"134\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"TBQ总辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"135\":{\"id\":41,\"index\":\"135\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"直接辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"136\":{\"id\":42,\"index\":\"136\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"散射辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"138\":{\"id\":43,\"index\":\"138\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"紫外辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"139\":{\"id\":44,\"index\":\"139\",\"max\":\"100\",\"min\":\"-50\",\"name\":\"贴片温度\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"140\":{\"id\":45,\"index\":\"140\",\"max\":\"40\",\"min\":\"-50\",\"name\":\"露点温度\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"141\":{\"id\":46,\"index\":\"141\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"一氧化碳\",\"prec\":\"1\",\"unit\":\"PPM\"},\"142\":{\"id\":32,\"index\":\"142\",\"max\":\"5000\",\"min\":\"0\",\"name\":\"电流\",\"prec\":\"0.1\",\"unit\":\"mA\"},\"143\":{\"id\":48,\"index\":\"143\",\"max\":\"60\",\"min\":\"0\",\"name\":\"超声波风速\",\"prec\":\"0.01\",\"unit\":\"m/s\"},\"144\":{\"id\":49,\"index\":\"144\",\"max\":\"100\",\"min\":\"-50\",\"name\":\"水温\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"145\":{\"id\":50,\"index\":\"145\",\"max\":\"10\",\"min\":\"0\",\"name\":\"PM2.5\",\"prec\":\"0.1\",\"unit\":\"ug/m3\"},\"146\":{\"id\":51,\"index\":\"146\",\"max\":\"10\",\"min\":\"0\",\"name\":\"PM10\",\"prec\":\"0.1\",\"unit\":\"ug/m3\"},\"147\":{\"id\":53,\"index\":\"147\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.1\",\"prec\":\"0.1\",\"unit\":\" \"},\"148\":{\"id\":54,\"index\":\"148\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.01\",\"prec\":\"0.01\",\"unit\":\" \"},\"149\":{\"id\":55,\"index\":\"149\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.001\",\"prec\":\"0.001\",\"unit\":\" \"},\"150\":{\"id\":56,\"index\":\"150\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"PM2.5\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"151\":{\"id\":57,\"index\":\"151\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"PM10\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"152\":{\"id\":52,\"index\":\"152\",\"max\":\"50000\",\"min\":\"0\",\"name\":\"能见度\",\"prec\":\"0.1\",\"unit\":\" m\"},\"153\":{\"id\":58,\"index\":\"153\",\"max\":\"5000\",\"min\":\"0\",\"name\":\"负氧离子\",\"prec\":\"10\",\"unit\":\"个/cm3\"},\"154\":{\"id\":59,\"index\":\"154\",\"max\":\"15000\",\"min\":\"0\",\"name\":\"盐分\",\"prec\":\"1\",\"unit\":\"mg/L\"},\"155\":{\"id\":60,\"index\":\"155\",\"max\":\"20\",\"min\":\"0\",\"name\":\"电导率\",\"prec\":\"0.01\",\"unit\":\"mS/cm\"},\"156\":{\"id\":61,\"index\":\"156\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"SO2\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"157\":{\"id\":62,\"index\":\"157\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"CO\",\"prec\":\"0.01\",\"unit\":\"mg/m3\"},\"158\":{\"id\":63,\"index\":\"158\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"NO2\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"159\":{\"id\":64,\"index\":\"159\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"O3\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"160\":{\"id\":65,\"index\":\"160\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"管道流量\",\"prec\":\"0.01\",\"unit\":\"m3/s\"},\"161\":{\"id\":66,\"index\":\"161\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"流速\",\"prec\":\"1\",\"unit\":\"L/min\"},\"162\":{\"id\":67,\"index\":\"162\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"管道压力\",\"prec\":\"1\",\"unit\":\"KPa\"},\"163\":{\"id\":68,\"index\":\"163\",\"max\":\"150\",\"min\":\"-150\",\"name\":\"温差\",\"prec\":\"0.1\",\"unit\":\"℃\"},\"164\":{\"id\":69,\"index\":\"164\",\"max\":\"20\",\"min\":\"0\",\"name\":\"溶解氧\",\"prec\":\"0.01\",\"unit\":\"mg/L\"},\"165\":{\"id\":70,\"index\":\"165\",\"max\":\"20\",\"min\":\"-20\",\"name\":\"溶解氧差\",\"prec\":\"0.01\",\"unit\":\"mg/L\"},\"166\":{\"id\":71,\"index\":\"166\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"氨氮\",\"prec\":\"0.1\",\"unit\":\"mg/L\"},\"167\":{\"id\":72,\"index\":\"167\",\"max\":\"50000\",\"min\":\"0\",\"name\":\"负氧离子\",\"prec\":\"1\",\"unit\":\"个/cm3\"},\"168\":{\"id\":73,\"index\":\"168\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"TSP\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"169\":{\"id\":74,\"index\":\"169\",\"max\":\"300\",\"min\":\"0\",\"name\":\"水位\",\"prec\":\"0.01\",\"unit\":\"m\"},\"170\":{\"id\":75,\"index\":\"170\",\"max\":\"20\",\"min\":\"0\",\"name\":\"浊度\",\"prec\":\"0.1\",\"unit\":\"NTU\"},\"171\":{\"id\":76,\"index\":\"171\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.016\",\"prec\":\"0.016\",\"unit\":\" \"},\"172\":{\"id\":77,\"index\":\"172\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.019\",\"prec\":\"0.019\",\"unit\":\" \"},\"173\":{\"id\":78,\"index\":\"173\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.2\",\"prec\":\"0.2\",\"unit\":\" \"},\"174\":{\"id\":79,\"index\":\"174\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.3\",\"prec\":\"0.3\",\"unit\":\" \"},\"175\":{\"id\":80,\"index\":\"175\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.5\",\"prec\":\"0.5\",\"unit\":\" \"},\"176\":{\"id\":81,\"index\":\"176\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.7\",\"prec\":\"0.7\",\"unit\":\" \"},\"177\":{\"id\":82,\"index\":\"177\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.8\",\"prec\":\"0.8\",\"unit\":\" \"},\"178\":{\"id\":83,\"index\":\"178\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.9\",\"prec\":\"0.9\",\"unit\":\" \"},\"179\":{\"id\":84,\"index\":\"179\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.022\",\"prec\":\"0.022\",\"unit\":\" \"},\"180\":{\"id\":85,\"index\":\"180\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"0.025\",\"prec\":\"0.025\",\"unit\":\" \"},\"181\":{\"id\":86,\"index\":\"181\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"SO2\",\"prec\":\"1\",\"unit\":\"ppb\"},\"182\":{\"id\":87,\"index\":\"182\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"CO\",\"prec\":\"1\",\"unit\":\"ppb\"},\"183\":{\"id\":88,\"index\":\"183\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"NO2\",\"prec\":\"1\",\"unit\":\"ppb\"},\"184\":{\"id\":89,\"index\":\"184\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"O3\",\"prec\":\"1\",\"unit\":\"ppb\"},\"185\":{\"id\":90,\"index\":\"185\",\"max\":\"5000\",\"min\":\"0\",\"name\":\"NH3\",\"prec\":\"0.01\",\"unit\":\"ppm\"},\"186\":{\"id\":91,\"index\":\"186\",\"max\":\"5000\",\"min\":\"0\",\"name\":\"H2S\",\"prec\":\"0.01\",\"unit\":\"ppm\"},\"187\":{\"id\":92,\"index\":\"187\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"氧气\",\"prec\":\"0.1\",\"unit\":\"%Vol\"},\"188\":{\"id\":93,\"index\":\"188\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"声波液位\",\"prec\":\"0.4\",\"unit\":\"mm\"},\"189\":{\"id\":94,\"index\":\"189\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"5min-PM25\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"190\":{\"id\":96,\"index\":\"190\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"5min-PM10\",\"prec\":\"1\",\"unit\":\"ug/m3\"},\"191\":{\"id\":95,\"index\":\"191\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"水位\",\"prec\":\"0.1\",\"unit\":\"m\"},\"192\":{\"id\":97,\"index\":\"192\",\"max\":\"0\",\"min\":\"0\",\"name\":\"归零\",\"prec\":\"0\",\"unit\":\"0\"},\"193\":{\"id\":98,\"index\":\"193\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"CO\",\"prec\":\"0.1\",\"unit\":\"mg/m3\"},\"194\":{\"id\":99,\"index\":\"194\",\"max\":\"100\",\"min\":\"0\",\"name\":\"CH4\",\"prec\":\"0.1\",\"unit\":\"%LEL\"},\"195\":{\"id\":100,\"index\":\"195\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"CH4S\",\"prec\":\"0.001\",\"unit\":\"mg/m3\"},\"196\":{\"id\":101,\"index\":\"196\",\"max\":\"60000\",\"min\":\"0\",\"name\":\"能见度\",\"prec\":\"1\",\"unit\":\"m\"},\"197\":{\"id\":102,\"index\":\"197\",\"max\":\"10000\",\"min\":\"-500\",\"name\":\"0.105\",\"prec\":\"0.105\",\"unit\":\"℃\"},\"198\":{\"id\":103,\"index\":\"198\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"土壤盐分\",\"prec\":\"1\",\"unit\":\"\"},\"199\":{\"id\":104,\"index\":\"199\",\"max\":\"60000\",\"min\":\"0\",\"name\":\"累积流量\",\"prec\":\"0.01\",\"unit\":\"m3\"},\"200\":{\"id\":105,\"index\":\"200\",\"max\":\"800\",\"min\":\"0\",\"name\":\"菌落总数\",\"prec\":\"1\",\"unit\":\"CFU\"},\"201\":{\"id\":106,\"index\":\"201\",\"max\":\"500\",\"min\":\"-500\",\"name\":\"土壤热通量\",\"prec\":\"0.1\",\"unit\":\"w/m2\"},\"202\":{\"id\":107,\"index\":\"202\",\"max\":\"5000\",\"min\":\"0\",\"name\":\"液位\",\"prec\":\"1\",\"unit\":\"mm\"},\"203\":{\"id\":108,\"index\":\"203\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"液位\",\"prec\":\"1\",\"unit\":\"mm\"},\"204\":{\"id\":109,\"index\":\"204\",\"max\":\"300\",\"min\":\"0\",\"name\":\"氨氮\",\"prec\":\"0.1\",\"unit\":\"ppm\"},\"205\":{\"id\":110,\"index\":\"205\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"1.2PM\",\"prec\":\"1.2\",\"unit\":\"ug\"},\"206\":{\"id\":111,\"index\":\"206\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"1.5PM\",\"prec\":\"1.5\",\"unit\":\"ug\"},\"207\":{\"id\":112,\"index\":\"207\",\"max\":\"2000\",\"min\":\"0\",\"name\":\"毫米汞柱\",\"prec\":\"0.1\",\"unit\":\"mmHg\"},\"208\":{\"id\":113,\"index\":\"208\",\"max\":\"200000\",\"min\":\"0\",\"name\":\"照度\",\"prec\":\"1\",\"unit\":\"Lux\"},\"209\":{\"id\":114,\"index\":\"209\",\"max\":\"100000\",\"min\":\"0\",\"name\":\"电压\",\"prec\":\"0.1\",\"unit\":\"V\"},\"210\":{\"id\":115,\"index\":\"210\",\"max\":\"100000\",\"min\":\"0\",\"name\":\"电流\",\"prec\":\"0.1\",\"unit\":\"A\"},\"211\":{\"id\":116,\"index\":\"211\",\"max\":\"10000\",\"min\":\"-10000\",\"name\":\"ORP\",\"prec\":\"0.01\",\"unit\":\"mV\"},\"212\":{\"id\":117,\"index\":\"212\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"电压\",\"prec\":\"1\",\"unit\":\"V\"},\"213\":{\"id\":118,\"index\":\"213\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"电流\",\"prec\":\"1\",\"unit\":\"A\"},\"214\":{\"id\":119,\"index\":\"214\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"电量\",\"prec\":\"0.01\",\"unit\":\"KW·h\"},\"215\":{\"id\":120,\"index\":\"215\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"流量\",\"prec\":\"0.01\",\"unit\":\"m3/h\"},\"216\":{\"id\":121,\"index\":\"216\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"累计流量\",\"prec\":\"1\",\"unit\":\"m3\"},\"217\":{\"id\":122,\"index\":\"217\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"累计流量\",\"prec\":\"1\",\"unit\":\"L\"},\"218\":{\"id\":123,\"index\":\"218\",\"max\":\"20000\",\"min\":\"0\",\"name\":\"编码\",\"prec\":\"1\",\"unit\":\" \"},\"219\":{\"id\":124,\"index\":\"219\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"1\",\"prec\":\"1\",\"unit\":\" \"},\"220\":{\"id\":125,\"index\":\"220\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"电导率\",\"prec\":\"1\",\"unit\":\"uS/cm\"},\"221\":{\"id\":126,\"index\":\"221\",\"max\":\"100\",\"min\":\"0\",\"name\":\"路面状况\",\"prec\":\"1\",\"unit\":\" \"},\"222\":{\"id\":127,\"index\":\"222\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"直径\",\"prec\":\"0.1\",\"unit\":\"mm\"},\"223\":{\"id\":128,\"index\":\"223\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"100\",\"prec\":\"100\",\"unit\":\" \"},\"224\":{\"id\":129,\"index\":\"224\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"1000\",\"prec\":\"1000\",\"unit\":\" \"},\"225\":{\"id\":130,\"index\":\"225\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"流量\",\"prec\":\"0.1\",\"unit\":\"m3/h\"},\"226\":{\"id\":131,\"index\":\"226\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"ppm\",\"prec\":\"0.001\",\"unit\":\"ppm\"},\"227\":{\"id\":132,\"index\":\"227\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"10\",\"prec\":\"10\",\"unit\":\" \"},\"228\":{\"id\":133,\"index\":\"228\",\"max\":\"100\",\"min\":\"0\",\"name\":\"湿度\",\"prec\":\"0.001\",\"unit\":\"%RH\"},\"229\":{\"id\":134,\"index\":\"229\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"辐射\",\"prec\":\"1\",\"unit\":\"W/m2\"},\"230\":{\"id\":135,\"index\":\"230\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"水量\",\"prec\":\"0.0056\",\"unit\":\"m3\"},\"231\":{\"id\":136,\"index\":\"231\",\"max\":\"1000\",\"min\":\"0\",\"name\":\"金额\",\"prec\":\"0.1\",\"unit\":\"元\"},\"232\":{\"id\":137,\"index\":\"232\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.001\",\"prec\":\"0.001\",\"unit\":\"m\"},\"233\":{\"id\":138,\"index\":\"233\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.001\",\"prec\":\"0.001\",\"unit\":\"m/s\"},\"234\":{\"id\":139,\"index\":\"234\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.1\",\"prec\":\"0.1\",\"unit\":\"m3\"},\"235\":{\"id\":140,\"index\":\"235\",\"max\":\"10000\",\"min\":\"0\",\"name\":\"0.001\",\"prec\":\"0.001\",\"unit\":\"m3/s\"},\"236\":{\"id\":141,\"index\":\"236\",\"max\":\"360\",\"min\":\"0\",\"name\":\"0.1风向\",\"prec\":\"0.1\",\"unit\":\"°\"},\"237\":{\"id\":142,\"index\":\"237\",\"max\":\"100\",\"min\":\"0\",\"name\":\"0.01大气温度\",\"prec\":\"0.01\",\"unit\":\"℃\"},\"238\":{\"id\":143,\"index\":\"238\",\"max\":\"100\",\"min\":\"0\",\"name\":\"0.01大气湿度\",\"prec\":\"0.01\",\"unit\":\"%RH\"},\"239\":{\"id\":144,\"index\":\"239\",\"max\":\"500\",\"min\":\"0\",\"name\":\"氮离子\",\"prec\":\"1\",\"unit\":\"mg/L\"},\"240\":{\"id\":145,\"index\":\"240\",\"max\":\"500\",\"min\":\"0\",\"name\":\"钾离子\",\"prec\":\"1\",\"unit\":\"mg/L\"},\"241\":{\"id\":146,\"index\":\"241\",\"max\":\"500\",\"min\":\"0\",\"name\":\"磷离子\",\"prec\":\"1\",\"unit\":\"mg/L\"},\"242\":{\"id\":147,\"index\":\"242\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"0.0001\",\"prec\":\"0.0001\",\"unit\":\" \"},\"243\":{\"id\":148,\"index\":\"243\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"0.00001\",\"prec\":\"0.00001\",\"unit\":\" \"},\"244\":{\"id\":149,\"index\":\"244\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"流量\",\"prec\":\"1\",\"unit\":\"mL\"},\"245\":{\"id\":150,\"index\":\"245\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"流速\",\"prec\":\"1\",\"unit\":\"mL/s\"},\"246\":{\"id\":151,\"index\":\"246\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"重量\",\"prec\":\"1\",\"unit\":\"g\"},\"247\":{\"id\":152,\"index\":\"247\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"百分比\",\"prec\":\"0.01\",\"unit\":\"%\"},\"248\":{\"id\":153,\"index\":\"248\",\"max\":\"30000\",\"min\":\"0\",\"name\":\"分米\",\"prec\":\"0.01\",\"unit\":\"dm\"}}");
  17182. /***/ })
  17183. }]);
  17184. //# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map