vendor.js 738 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525
  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. Object.defineProperty(exports, "__esModule", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));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;}
  10. var _toString = Object.prototype.toString;
  11. var hasOwnProperty = Object.prototype.hasOwnProperty;
  12. function isFn(fn) {
  13. return typeof fn === 'function';
  14. }
  15. function isStr(str) {
  16. return typeof str === 'string';
  17. }
  18. function isPlainObject(obj) {
  19. return _toString.call(obj) === '[object Object]';
  20. }
  21. function hasOwn(obj, key) {
  22. return hasOwnProperty.call(obj, key);
  23. }
  24. function noop() {}
  25. /**
  26. * Create a cached version of a pure function.
  27. */
  28. function cached(fn) {
  29. var cache = Object.create(null);
  30. return function cachedFn(str) {
  31. var hit = cache[str];
  32. return hit || (cache[str] = fn(str));
  33. };
  34. }
  35. /**
  36. * Camelize a hyphen-delimited string.
  37. */
  38. var camelizeRE = /-(\w)/g;
  39. var camelize = cached(function (str) {
  40. return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});
  41. });
  42. var HOOKS = [
  43. 'invoke',
  44. 'success',
  45. 'fail',
  46. 'complete',
  47. 'returnValue'];
  48. var globalInterceptors = {};
  49. var scopedInterceptors = {};
  50. function mergeHook(parentVal, childVal) {
  51. var res = childVal ?
  52. parentVal ?
  53. parentVal.concat(childVal) :
  54. Array.isArray(childVal) ?
  55. childVal : [childVal] :
  56. parentVal;
  57. return res ?
  58. dedupeHooks(res) :
  59. res;
  60. }
  61. function dedupeHooks(hooks) {
  62. var res = [];
  63. for (var i = 0; i < hooks.length; i++) {
  64. if (res.indexOf(hooks[i]) === -1) {
  65. res.push(hooks[i]);
  66. }
  67. }
  68. return res;
  69. }
  70. function removeHook(hooks, hook) {
  71. var index = hooks.indexOf(hook);
  72. if (index !== -1) {
  73. hooks.splice(index, 1);
  74. }
  75. }
  76. function mergeInterceptorHook(interceptor, option) {
  77. Object.keys(option).forEach(function (hook) {
  78. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  79. interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
  80. }
  81. });
  82. }
  83. function removeInterceptorHook(interceptor, option) {
  84. if (!interceptor || !option) {
  85. return;
  86. }
  87. Object.keys(option).forEach(function (hook) {
  88. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  89. removeHook(interceptor[hook], option[hook]);
  90. }
  91. });
  92. }
  93. function addInterceptor(method, option) {
  94. if (typeof method === 'string' && isPlainObject(option)) {
  95. mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
  96. } else if (isPlainObject(method)) {
  97. mergeInterceptorHook(globalInterceptors, method);
  98. }
  99. }
  100. function removeInterceptor(method, option) {
  101. if (typeof method === 'string') {
  102. if (isPlainObject(option)) {
  103. removeInterceptorHook(scopedInterceptors[method], option);
  104. } else {
  105. delete scopedInterceptors[method];
  106. }
  107. } else if (isPlainObject(method)) {
  108. removeInterceptorHook(globalInterceptors, method);
  109. }
  110. }
  111. function wrapperHook(hook) {
  112. return function (data) {
  113. return hook(data) || data;
  114. };
  115. }
  116. function isPromise(obj) {
  117. return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
  118. }
  119. function queue(hooks, data) {
  120. var promise = false;
  121. for (var i = 0; i < hooks.length; i++) {
  122. var hook = hooks[i];
  123. if (promise) {
  124. promise = Promise.resolve(wrapperHook(hook));
  125. } else {
  126. var res = hook(data);
  127. if (isPromise(res)) {
  128. promise = Promise.resolve(res);
  129. }
  130. if (res === false) {
  131. return {
  132. then: function then() {} };
  133. }
  134. }
  135. }
  136. return promise || {
  137. then: function then(callback) {
  138. return callback(data);
  139. } };
  140. }
  141. function wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  142. ['success', 'fail', 'complete'].forEach(function (name) {
  143. if (Array.isArray(interceptor[name])) {
  144. var oldCallback = options[name];
  145. options[name] = function callbackInterceptor(res) {
  146. queue(interceptor[name], res).then(function (res) {
  147. /* eslint-disable no-mixed-operators */
  148. return isFn(oldCallback) && oldCallback(res) || res;
  149. });
  150. };
  151. }
  152. });
  153. return options;
  154. }
  155. function wrapperReturnValue(method, returnValue) {
  156. var returnValueHooks = [];
  157. if (Array.isArray(globalInterceptors.returnValue)) {
  158. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));
  159. }
  160. var interceptor = scopedInterceptors[method];
  161. if (interceptor && Array.isArray(interceptor.returnValue)) {
  162. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));
  163. }
  164. returnValueHooks.forEach(function (hook) {
  165. returnValue = hook(returnValue) || returnValue;
  166. });
  167. return returnValue;
  168. }
  169. function getApiInterceptorHooks(method) {
  170. var interceptor = Object.create(null);
  171. Object.keys(globalInterceptors).forEach(function (hook) {
  172. if (hook !== 'returnValue') {
  173. interceptor[hook] = globalInterceptors[hook].slice();
  174. }
  175. });
  176. var scopedInterceptor = scopedInterceptors[method];
  177. if (scopedInterceptor) {
  178. Object.keys(scopedInterceptor).forEach(function (hook) {
  179. if (hook !== 'returnValue') {
  180. interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
  181. }
  182. });
  183. }
  184. return interceptor;
  185. }
  186. 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];}
  187. var interceptor = getApiInterceptorHooks(method);
  188. if (interceptor && Object.keys(interceptor).length) {
  189. if (Array.isArray(interceptor.invoke)) {
  190. var res = queue(interceptor.invoke, options);
  191. return res.then(function (options) {
  192. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  193. });
  194. } else {
  195. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  196. }
  197. }
  198. return api.apply(void 0, [options].concat(params));
  199. }
  200. var promiseInterceptor = {
  201. returnValue: function returnValue(res) {
  202. if (!isPromise(res)) {
  203. return res;
  204. }
  205. return res.then(function (res) {
  206. return res[1];
  207. }).catch(function (res) {
  208. return res[0];
  209. });
  210. } };
  211. var SYNC_API_RE =
  212. /^\$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
  213. var CONTEXT_API_RE = /^create|Manager$/;
  214. // Context例外情况
  215. var CONTEXT_API_RE_EXC = ['createBLEConnection'];
  216. // 同步例外情况
  217. var ASYNC_API = ['createBLEConnection'];
  218. var CALLBACK_API_RE = /^on|^off/;
  219. function isContextApi(name) {
  220. return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
  221. }
  222. function isSyncApi(name) {
  223. return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
  224. }
  225. function isCallbackApi(name) {
  226. return CALLBACK_API_RE.test(name) && name !== 'onPush';
  227. }
  228. function handlePromise(promise) {
  229. return promise.then(function (data) {
  230. return [null, data];
  231. }).
  232. catch(function (err) {return [err];});
  233. }
  234. function shouldPromise(name) {
  235. if (
  236. isContextApi(name) ||
  237. isSyncApi(name) ||
  238. isCallbackApi(name))
  239. {
  240. return false;
  241. }
  242. return true;
  243. }
  244. /* eslint-disable no-extend-native */
  245. if (!Promise.prototype.finally) {
  246. Promise.prototype.finally = function (callback) {
  247. var promise = this.constructor;
  248. return this.then(
  249. function (value) {return promise.resolve(callback()).then(function () {return value;});},
  250. function (reason) {return promise.resolve(callback()).then(function () {
  251. throw reason;
  252. });});
  253. };
  254. }
  255. function promisify(name, api) {
  256. if (!shouldPromise(name)) {
  257. return api;
  258. }
  259. 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];}
  260. if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
  261. return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));
  262. }
  263. return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {
  264. invokeApi.apply(void 0, [name, api, Object.assign({}, options, {
  265. success: resolve,
  266. fail: reject })].concat(
  267. params));
  268. })));
  269. };
  270. }
  271. var EPS = 1e-4;
  272. var BASE_DEVICE_WIDTH = 750;
  273. var isIOS = false;
  274. var deviceWidth = 0;
  275. var deviceDPR = 0;
  276. function checkDeviceWidth() {var _wx$getSystemInfoSync =
  277. wx.getSystemInfoSync(),platform = _wx$getSystemInfoSync.platform,pixelRatio = _wx$getSystemInfoSync.pixelRatio,windowWidth = _wx$getSystemInfoSync.windowWidth; // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni
  278. deviceWidth = windowWidth;
  279. deviceDPR = pixelRatio;
  280. isIOS = platform === 'ios';
  281. }
  282. function upx2px(number, newDeviceWidth) {
  283. if (deviceWidth === 0) {
  284. checkDeviceWidth();
  285. }
  286. number = Number(number);
  287. if (number === 0) {
  288. return 0;
  289. }
  290. var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);
  291. if (result < 0) {
  292. result = -result;
  293. }
  294. result = Math.floor(result + EPS);
  295. if (result === 0) {
  296. if (deviceDPR === 1 || !isIOS) {
  297. result = 1;
  298. } else {
  299. result = 0.5;
  300. }
  301. }
  302. return number < 0 ? -result : result;
  303. }
  304. var interceptors = {
  305. promiseInterceptor: promiseInterceptor };
  306. var baseApi = /*#__PURE__*/Object.freeze({
  307. __proto__: null,
  308. upx2px: upx2px,
  309. addInterceptor: addInterceptor,
  310. removeInterceptor: removeInterceptor,
  311. interceptors: interceptors });
  312. function findExistsPageIndex(url) {
  313. var pages = getCurrentPages();
  314. var len = pages.length;
  315. while (len--) {
  316. var page = pages[len];
  317. if (page.$page && page.$page.fullPath === url) {
  318. return len;
  319. }
  320. }
  321. return -1;
  322. }
  323. var redirectTo = {
  324. name: function name(fromArgs) {
  325. if (fromArgs.exists === 'back' && fromArgs.delta) {
  326. return 'navigateBack';
  327. }
  328. return 'redirectTo';
  329. },
  330. args: function args(fromArgs) {
  331. if (fromArgs.exists === 'back' && fromArgs.url) {
  332. var existsPageIndex = findExistsPageIndex(fromArgs.url);
  333. if (existsPageIndex !== -1) {
  334. var delta = getCurrentPages().length - 1 - existsPageIndex;
  335. if (delta > 0) {
  336. fromArgs.delta = delta;
  337. }
  338. }
  339. }
  340. } };
  341. var previewImage = {
  342. args: function args(fromArgs) {
  343. var currentIndex = parseInt(fromArgs.current);
  344. if (isNaN(currentIndex)) {
  345. return;
  346. }
  347. var urls = fromArgs.urls;
  348. if (!Array.isArray(urls)) {
  349. return;
  350. }
  351. var len = urls.length;
  352. if (!len) {
  353. return;
  354. }
  355. if (currentIndex < 0) {
  356. currentIndex = 0;
  357. } else if (currentIndex >= len) {
  358. currentIndex = len - 1;
  359. }
  360. if (currentIndex > 0) {
  361. fromArgs.current = urls[currentIndex];
  362. fromArgs.urls = urls.filter(
  363. function (item, index) {return index < currentIndex ? item !== urls[currentIndex] : true;});
  364. } else {
  365. fromArgs.current = urls[0];
  366. }
  367. return {
  368. indicator: false,
  369. loop: false };
  370. } };
  371. // import navigateTo from 'uni-helpers/navigate-to'
  372. function addSafeAreaInsets(result) {
  373. if (result.safeArea) {
  374. var safeArea = result.safeArea;
  375. result.safeAreaInsets = {
  376. top: safeArea.top,
  377. left: safeArea.left,
  378. right: result.windowWidth - safeArea.right,
  379. bottom: result.windowHeight - safeArea.bottom };
  380. }
  381. }
  382. var protocols = {
  383. redirectTo: redirectTo,
  384. // navigateTo, // 由于在微信开发者工具的页面参数,会显示__id__参数,因此暂时关闭mp-weixin对于navigateTo的AOP
  385. previewImage: previewImage,
  386. getSystemInfo: {
  387. returnValue: addSafeAreaInsets },
  388. getSystemInfoSync: {
  389. returnValue: addSafeAreaInsets } };
  390. var todos = [
  391. 'vibrate',
  392. 'preloadPage',
  393. 'unPreloadPage',
  394. 'loadSubPackage'];
  395. var canIUses = [];
  396. var CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
  397. function processCallback(methodName, method, returnValue) {
  398. return function (res) {
  399. return method(processReturnValue(methodName, res, returnValue));
  400. };
  401. }
  402. 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;
  403. if (isPlainObject(fromArgs)) {// 一般 api 的参数解析
  404. var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值
  405. if (isFn(argsOption)) {
  406. argsOption = argsOption(fromArgs, toArgs) || {};
  407. }
  408. for (var key in fromArgs) {
  409. if (hasOwn(argsOption, key)) {
  410. var keyOption = argsOption[key];
  411. if (isFn(keyOption)) {
  412. keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
  413. }
  414. if (!keyOption) {// 不支持的参数
  415. console.warn("\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F ".concat(methodName, "\u6682\u4E0D\u652F\u6301").concat(key));
  416. } else if (isStr(keyOption)) {// 重写参数 key
  417. toArgs[keyOption] = fromArgs[key];
  418. } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value
  419. toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
  420. }
  421. } else if (CALLBACKS.indexOf(key) !== -1) {
  422. if (isFn(fromArgs[key])) {
  423. toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);
  424. }
  425. } else {
  426. if (!keepFromArgs) {
  427. toArgs[key] = fromArgs[key];
  428. }
  429. }
  430. }
  431. return toArgs;
  432. } else if (isFn(fromArgs)) {
  433. fromArgs = processCallback(methodName, fromArgs, returnValue);
  434. }
  435. return fromArgs;
  436. }
  437. function processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  438. if (isFn(protocols.returnValue)) {// 处理通用 returnValue
  439. res = protocols.returnValue(methodName, res);
  440. }
  441. return processArgs(methodName, res, returnValue, {}, keepReturnValue);
  442. }
  443. function wrapper(methodName, method) {
  444. if (hasOwn(protocols, methodName)) {
  445. var protocol = protocols[methodName];
  446. if (!protocol) {// 暂不支持的 api
  447. return function () {
  448. console.error("\u5FAE\u4FE1\u5C0F\u7A0B\u5E8F \u6682\u4E0D\u652F\u6301".concat(methodName));
  449. };
  450. }
  451. return function (arg1, arg2) {// 目前 api 最多两个参数
  452. var options = protocol;
  453. if (isFn(protocol)) {
  454. options = protocol(arg1);
  455. }
  456. arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
  457. var args = [arg1];
  458. if (typeof arg2 !== 'undefined') {
  459. args.push(arg2);
  460. }
  461. if (isFn(options.name)) {
  462. methodName = options.name(arg1);
  463. } else if (isStr(options.name)) {
  464. methodName = options.name;
  465. }
  466. var returnValue = wx[methodName].apply(wx, args);
  467. if (isSyncApi(methodName)) {// 同步 api
  468. return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
  469. }
  470. return returnValue;
  471. };
  472. }
  473. return method;
  474. }
  475. var todoApis = Object.create(null);
  476. var TODOS = [
  477. 'onTabBarMidButtonTap',
  478. 'subscribePush',
  479. 'unsubscribePush',
  480. 'onPush',
  481. 'offPush',
  482. 'share'];
  483. function createTodoApi(name) {
  484. return function todoApi(_ref)
  485. {var fail = _ref.fail,complete = _ref.complete;
  486. var res = {
  487. errMsg: "".concat(name, ":fail:\u6682\u4E0D\u652F\u6301 ").concat(name, " \u65B9\u6CD5") };
  488. isFn(fail) && fail(res);
  489. isFn(complete) && complete(res);
  490. };
  491. }
  492. TODOS.forEach(function (name) {
  493. todoApis[name] = createTodoApi(name);
  494. });
  495. var providers = {
  496. oauth: ['weixin'],
  497. share: ['weixin'],
  498. payment: ['wxpay'],
  499. push: ['weixin'] };
  500. function getProvider(_ref2)
  501. {var service = _ref2.service,success = _ref2.success,fail = _ref2.fail,complete = _ref2.complete;
  502. var res = false;
  503. if (providers[service]) {
  504. res = {
  505. errMsg: 'getProvider:ok',
  506. service: service,
  507. provider: providers[service] };
  508. isFn(success) && success(res);
  509. } else {
  510. res = {
  511. errMsg: 'getProvider:fail:服务[' + service + ']不存在' };
  512. isFn(fail) && fail(res);
  513. }
  514. isFn(complete) && complete(res);
  515. }
  516. var extraApi = /*#__PURE__*/Object.freeze({
  517. __proto__: null,
  518. getProvider: getProvider });
  519. var getEmitter = function () {
  520. var Emitter;
  521. return function getUniEmitter() {
  522. if (!Emitter) {
  523. Emitter = new _vue.default();
  524. }
  525. return Emitter;
  526. };
  527. }();
  528. function apply(ctx, method, args) {
  529. return ctx[method].apply(ctx, args);
  530. }
  531. function $on() {
  532. return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));
  533. }
  534. function $off() {
  535. return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));
  536. }
  537. function $once() {
  538. return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));
  539. }
  540. function $emit() {
  541. return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));
  542. }
  543. var eventApi = /*#__PURE__*/Object.freeze({
  544. __proto__: null,
  545. $on: $on,
  546. $off: $off,
  547. $once: $once,
  548. $emit: $emit });
  549. var api = /*#__PURE__*/Object.freeze({
  550. __proto__: null });
  551. var MPPage = Page;
  552. var MPComponent = Component;
  553. var customizeRE = /:/g;
  554. var customize = cached(function (str) {
  555. return camelize(str.replace(customizeRE, '-'));
  556. });
  557. function initTriggerEvent(mpInstance) {
  558. {
  559. if (!wx.canIUse('nextTick')) {
  560. return;
  561. }
  562. }
  563. var oldTriggerEvent = mpInstance.triggerEvent;
  564. mpInstance.triggerEvent = function (event) {for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {args[_key3 - 1] = arguments[_key3];}
  565. return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));
  566. };
  567. }
  568. function initHook(name, options) {
  569. var oldHook = options[name];
  570. if (!oldHook) {
  571. options[name] = function () {
  572. initTriggerEvent(this);
  573. };
  574. } else {
  575. options[name] = function () {
  576. initTriggerEvent(this);for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {args[_key4] = arguments[_key4];}
  577. return oldHook.apply(this, args);
  578. };
  579. }
  580. }
  581. Page = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  582. initHook('onLoad', options);
  583. return MPPage(options);
  584. };
  585. Component = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  586. initHook('created', options);
  587. return MPComponent(options);
  588. };
  589. var PAGE_EVENT_HOOKS = [
  590. 'onPullDownRefresh',
  591. 'onReachBottom',
  592. 'onAddToFavorites',
  593. 'onShareTimeline',
  594. 'onShareAppMessage',
  595. 'onPageScroll',
  596. 'onResize',
  597. 'onTabItemTap'];
  598. function initMocks(vm, mocks) {
  599. var mpInstance = vm.$mp[vm.mpType];
  600. mocks.forEach(function (mock) {
  601. if (hasOwn(mpInstance, mock)) {
  602. vm[mock] = mpInstance[mock];
  603. }
  604. });
  605. }
  606. function hasHook(hook, vueOptions) {
  607. if (!vueOptions) {
  608. return true;
  609. }
  610. if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {
  611. return true;
  612. }
  613. vueOptions = vueOptions.default || vueOptions;
  614. if (isFn(vueOptions)) {
  615. if (isFn(vueOptions.extendOptions[hook])) {
  616. return true;
  617. }
  618. if (vueOptions.super &&
  619. vueOptions.super.options &&
  620. Array.isArray(vueOptions.super.options[hook])) {
  621. return true;
  622. }
  623. return false;
  624. }
  625. if (isFn(vueOptions[hook])) {
  626. return true;
  627. }
  628. var mixins = vueOptions.mixins;
  629. if (Array.isArray(mixins)) {
  630. return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});
  631. }
  632. }
  633. function initHooks(mpOptions, hooks, vueOptions) {
  634. hooks.forEach(function (hook) {
  635. if (hasHook(hook, vueOptions)) {
  636. mpOptions[hook] = function (args) {
  637. return this.$vm && this.$vm.__call_hook(hook, args);
  638. };
  639. }
  640. });
  641. }
  642. function initVueComponent(Vue, vueOptions) {
  643. vueOptions = vueOptions.default || vueOptions;
  644. var VueComponent;
  645. if (isFn(vueOptions)) {
  646. VueComponent = vueOptions;
  647. } else {
  648. VueComponent = Vue.extend(vueOptions);
  649. }
  650. vueOptions = VueComponent.options;
  651. return [VueComponent, vueOptions];
  652. }
  653. function initSlots(vm, vueSlots) {
  654. if (Array.isArray(vueSlots) && vueSlots.length) {
  655. var $slots = Object.create(null);
  656. vueSlots.forEach(function (slotName) {
  657. $slots[slotName] = true;
  658. });
  659. vm.$scopedSlots = vm.$slots = $slots;
  660. }
  661. }
  662. function initVueIds(vueIds, mpInstance) {
  663. vueIds = (vueIds || '').split(',');
  664. var len = vueIds.length;
  665. if (len === 1) {
  666. mpInstance._$vueId = vueIds[0];
  667. } else if (len === 2) {
  668. mpInstance._$vueId = vueIds[0];
  669. mpInstance._$vuePid = vueIds[1];
  670. }
  671. }
  672. function initData(vueOptions, context) {
  673. var data = vueOptions.data || {};
  674. var methods = vueOptions.methods || {};
  675. if (typeof data === 'function') {
  676. try {
  677. data = data.call(context); // 支持 Vue.prototype 上挂的数据
  678. } catch (e) {
  679. if (Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  680. console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);
  681. }
  682. }
  683. } else {
  684. try {
  685. // 对 data 格式化
  686. data = JSON.parse(JSON.stringify(data));
  687. } catch (e) {}
  688. }
  689. if (!isPlainObject(data)) {
  690. data = {};
  691. }
  692. Object.keys(methods).forEach(function (methodName) {
  693. if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {
  694. data[methodName] = methods[methodName];
  695. }
  696. });
  697. return data;
  698. }
  699. var PROP_TYPES = [String, Number, Boolean, Object, Array, null];
  700. function createObserver(name) {
  701. return function observer(newVal, oldVal) {
  702. if (this.$vm) {
  703. this.$vm[name] = newVal; // 为了触发其他非 render watcher
  704. }
  705. };
  706. }
  707. function initBehaviors(vueOptions, initBehavior) {
  708. var vueBehaviors = vueOptions.behaviors;
  709. var vueExtends = vueOptions.extends;
  710. var vueMixins = vueOptions.mixins;
  711. var vueProps = vueOptions.props;
  712. if (!vueProps) {
  713. vueOptions.props = vueProps = [];
  714. }
  715. var behaviors = [];
  716. if (Array.isArray(vueBehaviors)) {
  717. vueBehaviors.forEach(function (behavior) {
  718. behaviors.push(behavior.replace('uni://', "wx".concat("://")));
  719. if (behavior === 'uni://form-field') {
  720. if (Array.isArray(vueProps)) {
  721. vueProps.push('name');
  722. vueProps.push('value');
  723. } else {
  724. vueProps.name = {
  725. type: String,
  726. default: '' };
  727. vueProps.value = {
  728. type: [String, Number, Boolean, Array, Object, Date],
  729. default: '' };
  730. }
  731. }
  732. });
  733. }
  734. if (isPlainObject(vueExtends) && vueExtends.props) {
  735. behaviors.push(
  736. initBehavior({
  737. properties: initProperties(vueExtends.props, true) }));
  738. }
  739. if (Array.isArray(vueMixins)) {
  740. vueMixins.forEach(function (vueMixin) {
  741. if (isPlainObject(vueMixin) && vueMixin.props) {
  742. behaviors.push(
  743. initBehavior({
  744. properties: initProperties(vueMixin.props, true) }));
  745. }
  746. });
  747. }
  748. return behaviors;
  749. }
  750. function parsePropType(key, type, defaultValue, file) {
  751. // [String]=>String
  752. if (Array.isArray(type) && type.length === 1) {
  753. return type[0];
  754. }
  755. return type;
  756. }
  757. function initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
  758. var properties = {};
  759. if (!isBehavior) {
  760. properties.vueId = {
  761. type: String,
  762. value: '' };
  763. // 用于字节跳动小程序模拟抽象节点
  764. properties.generic = {
  765. type: Object,
  766. value: null };
  767. properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
  768. type: null,
  769. value: [],
  770. observer: function observer(newVal, oldVal) {
  771. var $slots = Object.create(null);
  772. newVal.forEach(function (slotName) {
  773. $slots[slotName] = true;
  774. });
  775. this.setData({
  776. $slots: $slots });
  777. } };
  778. }
  779. if (Array.isArray(props)) {// ['title']
  780. props.forEach(function (key) {
  781. properties[key] = {
  782. type: null,
  783. observer: createObserver(key) };
  784. });
  785. } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}
  786. Object.keys(props).forEach(function (key) {
  787. var opts = props[key];
  788. if (isPlainObject(opts)) {// title:{type:String,default:''}
  789. var value = opts.default;
  790. if (isFn(value)) {
  791. value = value();
  792. }
  793. opts.type = parsePropType(key, opts.type);
  794. properties[key] = {
  795. type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,
  796. value: value,
  797. observer: createObserver(key) };
  798. } else {// content:String
  799. var type = parsePropType(key, opts);
  800. properties[key] = {
  801. type: PROP_TYPES.indexOf(type) !== -1 ? type : null,
  802. observer: createObserver(key) };
  803. }
  804. });
  805. }
  806. return properties;
  807. }
  808. function wrapper$1(event) {
  809. // TODO 又得兼容 mpvue 的 mp 对象
  810. try {
  811. event.mp = JSON.parse(JSON.stringify(event));
  812. } catch (e) {}
  813. event.stopPropagation = noop;
  814. event.preventDefault = noop;
  815. event.target = event.target || {};
  816. if (!hasOwn(event, 'detail')) {
  817. event.detail = {};
  818. }
  819. if (hasOwn(event, 'markerId')) {
  820. event.detail = typeof event.detail === 'object' ? event.detail : {};
  821. event.detail.markerId = event.markerId;
  822. }
  823. if (isPlainObject(event.detail)) {
  824. event.target = Object.assign({}, event.target, event.detail);
  825. }
  826. return event;
  827. }
  828. function getExtraValue(vm, dataPathsArray) {
  829. var context = vm;
  830. dataPathsArray.forEach(function (dataPathArray) {
  831. var dataPath = dataPathArray[0];
  832. var value = dataPathArray[2];
  833. if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']
  834. var propPath = dataPathArray[1];
  835. var valuePath = dataPathArray[3];
  836. var vFor;
  837. if (Number.isInteger(dataPath)) {
  838. vFor = dataPath;
  839. } else if (!dataPath) {
  840. vFor = context;
  841. } else if (typeof dataPath === 'string' && dataPath) {
  842. if (dataPath.indexOf('#s#') === 0) {
  843. vFor = dataPath.substr(3);
  844. } else {
  845. vFor = vm.__get_value(dataPath, context);
  846. }
  847. }
  848. if (Number.isInteger(vFor)) {
  849. context = value;
  850. } else if (!propPath) {
  851. context = vFor[value];
  852. } else {
  853. if (Array.isArray(vFor)) {
  854. context = vFor.find(function (vForItem) {
  855. return vm.__get_value(propPath, vForItem) === value;
  856. });
  857. } else if (isPlainObject(vFor)) {
  858. context = Object.keys(vFor).find(function (vForKey) {
  859. return vm.__get_value(propPath, vFor[vForKey]) === value;
  860. });
  861. } else {
  862. console.error('v-for 暂不支持循环数据:', vFor);
  863. }
  864. }
  865. if (valuePath) {
  866. context = vm.__get_value(valuePath, context);
  867. }
  868. }
  869. });
  870. return context;
  871. }
  872. function processEventExtra(vm, extra, event) {
  873. var extraObj = {};
  874. if (Array.isArray(extra) && extra.length) {
  875. /**
  876. *[
  877. * ['data.items', 'data.id', item.data.id],
  878. * ['metas', 'id', meta.id]
  879. *],
  880. *[
  881. * ['data.items', 'data.id', item.data.id],
  882. * ['metas', 'id', meta.id]
  883. *],
  884. *'test'
  885. */
  886. extra.forEach(function (dataPath, index) {
  887. if (typeof dataPath === 'string') {
  888. if (!dataPath) {// model,prop.sync
  889. extraObj['$' + index] = vm;
  890. } else {
  891. if (dataPath === '$event') {// $event
  892. extraObj['$' + index] = event;
  893. } else if (dataPath === 'arguments') {
  894. if (event.detail && event.detail.__args__) {
  895. extraObj['$' + index] = event.detail.__args__;
  896. } else {
  897. extraObj['$' + index] = [event];
  898. }
  899. } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value
  900. extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);
  901. } else {
  902. extraObj['$' + index] = vm.__get_value(dataPath);
  903. }
  904. }
  905. } else {
  906. extraObj['$' + index] = getExtraValue(vm, dataPath);
  907. }
  908. });
  909. }
  910. return extraObj;
  911. }
  912. function getObjByArray(arr) {
  913. var obj = {};
  914. for (var i = 1; i < arr.length; i++) {
  915. var element = arr[i];
  916. obj[element[0]] = element[1];
  917. }
  918. return obj;
  919. }
  920. 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;
  921. var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象
  922. if (isCustom) {// 自定义事件
  923. isCustomMPEvent = event.currentTarget &&
  924. event.currentTarget.dataset &&
  925. event.currentTarget.dataset.comType === 'wx';
  926. if (!args.length) {// 无参数,直接传入 event 或 detail 数组
  927. if (isCustomMPEvent) {
  928. return [event];
  929. }
  930. return event.detail.__args__ || event.detail;
  931. }
  932. }
  933. var extraObj = processEventExtra(vm, extra, event);
  934. var ret = [];
  935. args.forEach(function (arg) {
  936. if (arg === '$event') {
  937. if (methodName === '__set_model' && !isCustom) {// input v-model value
  938. ret.push(event.target.value);
  939. } else {
  940. if (isCustom && !isCustomMPEvent) {
  941. ret.push(event.detail.__args__[0]);
  942. } else {// wxcomponent 组件或内置组件
  943. ret.push(event);
  944. }
  945. }
  946. } else {
  947. if (Array.isArray(arg) && arg[0] === 'o') {
  948. ret.push(getObjByArray(arg));
  949. } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {
  950. ret.push(extraObj[arg]);
  951. } else {
  952. ret.push(arg);
  953. }
  954. }
  955. });
  956. return ret;
  957. }
  958. var ONCE = '~';
  959. var CUSTOM = '^';
  960. function isMatchEventType(eventType, optType) {
  961. return eventType === optType ||
  962. optType === 'regionchange' && (
  963. eventType === 'begin' ||
  964. eventType === 'end');
  965. }
  966. function getContextVm(vm) {
  967. var $parent = vm.$parent;
  968. // 父组件是 scoped slots 或者其他自定义组件时继续查找
  969. while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {
  970. $parent = $parent.$parent;
  971. }
  972. return $parent && $parent.$parent;
  973. }
  974. function handleEvent(event) {var _this = this;
  975. event = wrapper$1(event);
  976. // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
  977. var dataset = (event.currentTarget || event.target).dataset;
  978. if (!dataset) {
  979. return console.warn('事件信息不存在');
  980. }
  981. var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰
  982. if (!eventOpts) {
  983. return console.warn('事件信息不存在');
  984. }
  985. // [['handle',[1,2,a]],['handle1',[1,2,a]]]
  986. var eventType = event.type;
  987. var ret = [];
  988. eventOpts.forEach(function (eventOpt) {
  989. var type = eventOpt[0];
  990. var eventsArray = eventOpt[1];
  991. var isCustom = type.charAt(0) === CUSTOM;
  992. type = isCustom ? type.slice(1) : type;
  993. var isOnce = type.charAt(0) === ONCE;
  994. type = isOnce ? type.slice(1) : type;
  995. if (eventsArray && isMatchEventType(eventType, type)) {
  996. eventsArray.forEach(function (eventArray) {
  997. var methodName = eventArray[0];
  998. if (methodName) {
  999. var handlerCtx = _this.$vm;
  1000. if (handlerCtx.$options.generic) {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
  1001. handlerCtx = getContextVm(handlerCtx) || handlerCtx;
  1002. }
  1003. if (methodName === '$emit') {
  1004. handlerCtx.$emit.apply(handlerCtx,
  1005. processEventArgs(
  1006. _this.$vm,
  1007. event,
  1008. eventArray[1],
  1009. eventArray[2],
  1010. isCustom,
  1011. methodName));
  1012. return;
  1013. }
  1014. var handler = handlerCtx[methodName];
  1015. if (!isFn(handler)) {
  1016. throw new Error(" _vm.".concat(methodName, " is not a function"));
  1017. }
  1018. if (isOnce) {
  1019. if (handler.once) {
  1020. return;
  1021. }
  1022. handler.once = true;
  1023. }
  1024. var params = processEventArgs(
  1025. _this.$vm,
  1026. event,
  1027. eventArray[1],
  1028. eventArray[2],
  1029. isCustom,
  1030. methodName);
  1031. // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
  1032. // eslint-disable-next-line no-sparse-arrays
  1033. ret.push(handler.apply(handlerCtx, (Array.isArray(params) ? params : []).concat([,,,,,,,,,, event])));
  1034. }
  1035. });
  1036. }
  1037. });
  1038. if (
  1039. eventType === 'input' &&
  1040. ret.length === 1 &&
  1041. typeof ret[0] !== 'undefined')
  1042. {
  1043. return ret[0];
  1044. }
  1045. }
  1046. var hooks = [
  1047. 'onShow',
  1048. 'onHide',
  1049. 'onError',
  1050. 'onPageNotFound',
  1051. 'onThemeChange',
  1052. 'onUnhandledRejection'];
  1053. function parseBaseApp(vm, _ref3)
  1054. {var mocks = _ref3.mocks,initRefs = _ref3.initRefs;
  1055. if (vm.$options.store) {
  1056. _vue.default.prototype.$store = vm.$options.store;
  1057. }
  1058. _vue.default.prototype.mpHost = "mp-weixin";
  1059. _vue.default.mixin({
  1060. beforeCreate: function beforeCreate() {
  1061. if (!this.$options.mpType) {
  1062. return;
  1063. }
  1064. this.mpType = this.$options.mpType;
  1065. this.$mp = _defineProperty({
  1066. data: {} },
  1067. this.mpType, this.$options.mpInstance);
  1068. this.$scope = this.$options.mpInstance;
  1069. delete this.$options.mpType;
  1070. delete this.$options.mpInstance;
  1071. if (this.mpType !== 'app') {
  1072. initRefs(this);
  1073. initMocks(this, mocks);
  1074. }
  1075. } });
  1076. var appOptions = {
  1077. onLaunch: function onLaunch(args) {
  1078. if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
  1079. return;
  1080. }
  1081. {
  1082. if (!wx.canIUse('nextTick')) {// 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断
  1083. console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上');
  1084. }
  1085. }
  1086. this.$vm = vm;
  1087. this.$vm.$mp = {
  1088. app: this };
  1089. this.$vm.$scope = this;
  1090. // vm 上也挂载 globalData
  1091. this.$vm.globalData = this.globalData;
  1092. this.$vm._isMounted = true;
  1093. this.$vm.__call_hook('mounted', args);
  1094. this.$vm.__call_hook('onLaunch', args);
  1095. } };
  1096. // 兼容旧版本 globalData
  1097. appOptions.globalData = vm.$options.globalData || {};
  1098. // 将 methods 中的方法挂在 getApp() 中
  1099. var methods = vm.$options.methods;
  1100. if (methods) {
  1101. Object.keys(methods).forEach(function (name) {
  1102. appOptions[name] = methods[name];
  1103. });
  1104. }
  1105. initHooks(appOptions, hooks);
  1106. return appOptions;
  1107. }
  1108. var mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];
  1109. function findVmByVueId(vm, vuePid) {
  1110. var $children = vm.$children;
  1111. // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)
  1112. for (var i = $children.length - 1; i >= 0; i--) {
  1113. var childVm = $children[i];
  1114. if (childVm.$scope._$vueId === vuePid) {
  1115. return childVm;
  1116. }
  1117. }
  1118. // 反向递归查找
  1119. var parentVm;
  1120. for (var _i = $children.length - 1; _i >= 0; _i--) {
  1121. parentVm = findVmByVueId($children[_i], vuePid);
  1122. if (parentVm) {
  1123. return parentVm;
  1124. }
  1125. }
  1126. }
  1127. function initBehavior(options) {
  1128. return Behavior(options);
  1129. }
  1130. function isPage() {
  1131. return !!this.route;
  1132. }
  1133. function initRelation(detail) {
  1134. this.triggerEvent('__l', detail);
  1135. }
  1136. function selectAllComponents(mpInstance, selector, $refs) {
  1137. var components = mpInstance.selectAllComponents(selector);
  1138. components.forEach(function (component) {
  1139. var ref = component.dataset.ref;
  1140. $refs[ref] = component.$vm || component;
  1141. {
  1142. if (component.dataset.vueGeneric === 'scoped') {
  1143. component.selectAllComponents('.scoped-ref').forEach(function (scopedComponent) {
  1144. selectAllComponents(scopedComponent, selector, $refs);
  1145. });
  1146. }
  1147. }
  1148. });
  1149. }
  1150. function initRefs(vm) {
  1151. var mpInstance = vm.$scope;
  1152. Object.defineProperty(vm, '$refs', {
  1153. get: function get() {
  1154. var $refs = {};
  1155. selectAllComponents(mpInstance, '.vue-ref', $refs);
  1156. // TODO 暂不考虑 for 中的 scoped
  1157. var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');
  1158. forComponents.forEach(function (component) {
  1159. var ref = component.dataset.ref;
  1160. if (!$refs[ref]) {
  1161. $refs[ref] = [];
  1162. }
  1163. $refs[ref].push(component.$vm || component);
  1164. });
  1165. return $refs;
  1166. } });
  1167. }
  1168. function handleLink(event) {var _ref4 =
  1169. event.detail || event.value,vuePid = _ref4.vuePid,vueOptions = _ref4.vueOptions; // detail 是微信,value 是百度(dipatch)
  1170. var parentVm;
  1171. if (vuePid) {
  1172. parentVm = findVmByVueId(this.$vm, vuePid);
  1173. }
  1174. if (!parentVm) {
  1175. parentVm = this.$vm;
  1176. }
  1177. vueOptions.parent = parentVm;
  1178. }
  1179. function parseApp(vm) {
  1180. return parseBaseApp(vm, {
  1181. mocks: mocks,
  1182. initRefs: initRefs });
  1183. }
  1184. var eventChannels = {};
  1185. var eventChannelStack = [];
  1186. function getEventChannel(id) {
  1187. if (id) {
  1188. var eventChannel = eventChannels[id];
  1189. delete eventChannels[id];
  1190. return eventChannel;
  1191. }
  1192. return eventChannelStack.shift();
  1193. }
  1194. function createApp(vm) {
  1195. _vue.default.prototype.getOpenerEventChannel = function () {
  1196. // 微信小程序使用自身getOpenerEventChannel
  1197. {
  1198. return this.$scope.getOpenerEventChannel();
  1199. }
  1200. };
  1201. var callHook = _vue.default.prototype.__call_hook;
  1202. _vue.default.prototype.__call_hook = function (hook, args) {
  1203. if (hook === 'onLoad' && args && args.__id__) {
  1204. this.__eventChannel__ = getEventChannel(args.__id__);
  1205. delete args.__id__;
  1206. }
  1207. return callHook.call(this, hook, args);
  1208. };
  1209. App(parseApp(vm));
  1210. return vm;
  1211. }
  1212. var encodeReserveRE = /[!'()*]/g;
  1213. var encodeReserveReplacer = function encodeReserveReplacer(c) {return '%' + c.charCodeAt(0).toString(16);};
  1214. var commaRE = /%2C/g;
  1215. // fixed encodeURIComponent which is more conformant to RFC3986:
  1216. // - escapes [!'()*]
  1217. // - preserve commas
  1218. var encode = function encode(str) {return encodeURIComponent(str).
  1219. replace(encodeReserveRE, encodeReserveReplacer).
  1220. replace(commaRE, ',');};
  1221. function stringifyQuery(obj) {var encodeStr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : encode;
  1222. var res = obj ? Object.keys(obj).map(function (key) {
  1223. var val = obj[key];
  1224. if (val === undefined) {
  1225. return '';
  1226. }
  1227. if (val === null) {
  1228. return encodeStr(key);
  1229. }
  1230. if (Array.isArray(val)) {
  1231. var result = [];
  1232. val.forEach(function (val2) {
  1233. if (val2 === undefined) {
  1234. return;
  1235. }
  1236. if (val2 === null) {
  1237. result.push(encodeStr(key));
  1238. } else {
  1239. result.push(encodeStr(key) + '=' + encodeStr(val2));
  1240. }
  1241. });
  1242. return result.join('&');
  1243. }
  1244. return encodeStr(key) + '=' + encodeStr(val);
  1245. }).filter(function (x) {return x.length > 0;}).join('&') : null;
  1246. return res ? "?".concat(res) : '';
  1247. }
  1248. function parseBaseComponent(vueComponentOptions)
  1249. {var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref5.isPage,initRelation = _ref5.initRelation;var _initVueComponent =
  1250. initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];
  1251. var options = _objectSpread({
  1252. multipleSlots: true,
  1253. addGlobalClass: true },
  1254. vueOptions.options || {});
  1255. {
  1256. // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项
  1257. if (vueOptions['mp-weixin'] && vueOptions['mp-weixin'].options) {
  1258. Object.assign(options, vueOptions['mp-weixin'].options);
  1259. }
  1260. }
  1261. var componentOptions = {
  1262. options: options,
  1263. data: initData(vueOptions, _vue.default.prototype),
  1264. behaviors: initBehaviors(vueOptions, initBehavior),
  1265. properties: initProperties(vueOptions.props, false, vueOptions.__file),
  1266. lifetimes: {
  1267. attached: function attached() {
  1268. var properties = this.properties;
  1269. var options = {
  1270. mpType: isPage.call(this) ? 'page' : 'component',
  1271. mpInstance: this,
  1272. propsData: properties };
  1273. initVueIds(properties.vueId, this);
  1274. // 处理父子关系
  1275. initRelation.call(this, {
  1276. vuePid: this._$vuePid,
  1277. vueOptions: options });
  1278. // 初始化 vue 实例
  1279. this.$vm = new VueComponent(options);
  1280. // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
  1281. initSlots(this.$vm, properties.vueSlots);
  1282. // 触发首次 setData
  1283. this.$vm.$mount();
  1284. },
  1285. ready: function ready() {
  1286. // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发
  1287. // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800
  1288. if (this.$vm) {
  1289. this.$vm._isMounted = true;
  1290. this.$vm.__call_hook('mounted');
  1291. this.$vm.__call_hook('onReady');
  1292. }
  1293. },
  1294. detached: function detached() {
  1295. this.$vm && this.$vm.$destroy();
  1296. } },
  1297. pageLifetimes: {
  1298. show: function show(args) {
  1299. this.$vm && this.$vm.__call_hook('onPageShow', args);
  1300. },
  1301. hide: function hide() {
  1302. this.$vm && this.$vm.__call_hook('onPageHide');
  1303. },
  1304. resize: function resize(size) {
  1305. this.$vm && this.$vm.__call_hook('onPageResize', size);
  1306. } },
  1307. methods: {
  1308. __l: handleLink,
  1309. __e: handleEvent } };
  1310. // externalClasses
  1311. if (vueOptions.externalClasses) {
  1312. componentOptions.externalClasses = vueOptions.externalClasses;
  1313. }
  1314. if (Array.isArray(vueOptions.wxsCallMethods)) {
  1315. vueOptions.wxsCallMethods.forEach(function (callMethod) {
  1316. componentOptions.methods[callMethod] = function (args) {
  1317. return this.$vm[callMethod](args);
  1318. };
  1319. });
  1320. }
  1321. if (isPage) {
  1322. return componentOptions;
  1323. }
  1324. return [componentOptions, VueComponent];
  1325. }
  1326. function parseComponent(vueComponentOptions) {
  1327. return parseBaseComponent(vueComponentOptions, {
  1328. isPage: isPage,
  1329. initRelation: initRelation });
  1330. }
  1331. var hooks$1 = [
  1332. 'onShow',
  1333. 'onHide',
  1334. 'onUnload'];
  1335. hooks$1.push.apply(hooks$1, PAGE_EVENT_HOOKS);
  1336. function parseBasePage(vuePageOptions, _ref6)
  1337. {var isPage = _ref6.isPage,initRelation = _ref6.initRelation;
  1338. var pageOptions = parseComponent(vuePageOptions);
  1339. initHooks(pageOptions.methods, hooks$1, vuePageOptions);
  1340. pageOptions.methods.onLoad = function (query) {
  1341. this.options = query;
  1342. var copyQuery = Object.assign({}, query);
  1343. delete copyQuery.__id__;
  1344. this.$page = {
  1345. fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery) };
  1346. this.$vm.$mp.query = query; // 兼容 mpvue
  1347. this.$vm.__call_hook('onLoad', query);
  1348. };
  1349. return pageOptions;
  1350. }
  1351. function parsePage(vuePageOptions) {
  1352. return parseBasePage(vuePageOptions, {
  1353. isPage: isPage,
  1354. initRelation: initRelation });
  1355. }
  1356. function createPage(vuePageOptions) {
  1357. {
  1358. return Component(parsePage(vuePageOptions));
  1359. }
  1360. }
  1361. function createComponent(vueOptions) {
  1362. {
  1363. return Component(parseComponent(vueOptions));
  1364. }
  1365. }
  1366. todos.forEach(function (todoApi) {
  1367. protocols[todoApi] = false;
  1368. });
  1369. canIUses.forEach(function (canIUseApi) {
  1370. var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :
  1371. canIUseApi;
  1372. if (!wx.canIUse(apiName)) {
  1373. protocols[canIUseApi] = false;
  1374. }
  1375. });
  1376. var uni = {};
  1377. if (typeof Proxy !== 'undefined' && "mp-weixin" !== 'app-plus') {
  1378. uni = new Proxy({}, {
  1379. get: function get(target, name) {
  1380. if (hasOwn(target, name)) {
  1381. return target[name];
  1382. }
  1383. if (baseApi[name]) {
  1384. return baseApi[name];
  1385. }
  1386. if (api[name]) {
  1387. return promisify(name, api[name]);
  1388. }
  1389. {
  1390. if (extraApi[name]) {
  1391. return promisify(name, extraApi[name]);
  1392. }
  1393. if (todoApis[name]) {
  1394. return promisify(name, todoApis[name]);
  1395. }
  1396. }
  1397. if (eventApi[name]) {
  1398. return eventApi[name];
  1399. }
  1400. if (!hasOwn(wx, name) && !hasOwn(protocols, name)) {
  1401. return;
  1402. }
  1403. return promisify(name, wrapper(name, wx[name]));
  1404. },
  1405. set: function set(target, name, value) {
  1406. target[name] = value;
  1407. return true;
  1408. } });
  1409. } else {
  1410. Object.keys(baseApi).forEach(function (name) {
  1411. uni[name] = baseApi[name];
  1412. });
  1413. {
  1414. Object.keys(todoApis).forEach(function (name) {
  1415. uni[name] = promisify(name, todoApis[name]);
  1416. });
  1417. Object.keys(extraApi).forEach(function (name) {
  1418. uni[name] = promisify(name, todoApis[name]);
  1419. });
  1420. }
  1421. Object.keys(eventApi).forEach(function (name) {
  1422. uni[name] = eventApi[name];
  1423. });
  1424. Object.keys(api).forEach(function (name) {
  1425. uni[name] = promisify(name, api[name]);
  1426. });
  1427. Object.keys(wx).forEach(function (name) {
  1428. if (hasOwn(wx, name) || hasOwn(protocols, name)) {
  1429. uni[name] = promisify(name, wrapper(name, wx[name]));
  1430. }
  1431. });
  1432. }
  1433. wx.createApp = createApp;
  1434. wx.createPage = createPage;
  1435. wx.createComponent = createComponent;
  1436. var uni$1 = uni;var _default =
  1437. uni$1;exports.default = _default;
  1438. /***/ }),
  1439. /***/ 10:
  1440. /*!**********************************************************************************************************!*\
  1441. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js ***!
  1442. \**********************************************************************************************************/
  1443. /*! exports provided: default */
  1444. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1445. "use strict";
  1446. __webpack_require__.r(__webpack_exports__);
  1447. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
  1448. /* globals __VUE_SSR_CONTEXT__ */
  1449. // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
  1450. // This module is a runtime utility for cleaner component module output and will
  1451. // be included in the final webpack user bundle.
  1452. function normalizeComponent (
  1453. scriptExports,
  1454. render,
  1455. staticRenderFns,
  1456. functionalTemplate,
  1457. injectStyles,
  1458. scopeId,
  1459. moduleIdentifier, /* server only */
  1460. shadowMode, /* vue-cli only */
  1461. components, // fixed by xxxxxx auto components
  1462. renderjs // fixed by xxxxxx renderjs
  1463. ) {
  1464. // Vue.extend constructor export interop
  1465. var options = typeof scriptExports === 'function'
  1466. ? scriptExports.options
  1467. : scriptExports
  1468. // fixed by xxxxxx auto components
  1469. if (components) {
  1470. if (!options.components) {
  1471. options.components = {}
  1472. }
  1473. var hasOwn = Object.prototype.hasOwnProperty
  1474. for (var name in components) {
  1475. if (hasOwn.call(components, name) && !hasOwn.call(options.components, name)) {
  1476. options.components[name] = components[name]
  1477. }
  1478. }
  1479. }
  1480. // fixed by xxxxxx renderjs
  1481. if (renderjs) {
  1482. (renderjs.beforeCreate || (renderjs.beforeCreate = [])).unshift(function() {
  1483. this[renderjs.__module] = this
  1484. });
  1485. (options.mixins || (options.mixins = [])).push(renderjs)
  1486. }
  1487. // render functions
  1488. if (render) {
  1489. options.render = render
  1490. options.staticRenderFns = staticRenderFns
  1491. options._compiled = true
  1492. }
  1493. // functional template
  1494. if (functionalTemplate) {
  1495. options.functional = true
  1496. }
  1497. // scopedId
  1498. if (scopeId) {
  1499. options._scopeId = 'data-v-' + scopeId
  1500. }
  1501. var hook
  1502. if (moduleIdentifier) { // server build
  1503. hook = function (context) {
  1504. // 2.3 injection
  1505. context =
  1506. context || // cached call
  1507. (this.$vnode && this.$vnode.ssrContext) || // stateful
  1508. (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
  1509. // 2.2 with runInNewContext: true
  1510. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  1511. context = __VUE_SSR_CONTEXT__
  1512. }
  1513. // inject component styles
  1514. if (injectStyles) {
  1515. injectStyles.call(this, context)
  1516. }
  1517. // register component module identifier for async chunk inferrence
  1518. if (context && context._registeredComponents) {
  1519. context._registeredComponents.add(moduleIdentifier)
  1520. }
  1521. }
  1522. // used by ssr in case component is cached and beforeCreate
  1523. // never gets called
  1524. options._ssrRegister = hook
  1525. } else if (injectStyles) {
  1526. hook = shadowMode
  1527. ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
  1528. : injectStyles
  1529. }
  1530. if (hook) {
  1531. if (options.functional) {
  1532. // for template-only hot-reload because in that case the render fn doesn't
  1533. // go through the normalizer
  1534. options._injectStyles = hook
  1535. // register for functioal component in vue file
  1536. var originalRender = options.render
  1537. options.render = function renderWithStyleInjection (h, context) {
  1538. hook.call(context)
  1539. return originalRender(h, context)
  1540. }
  1541. } else {
  1542. // inject component registration as beforeCreate hook
  1543. var existing = options.beforeCreate
  1544. options.beforeCreate = existing
  1545. ? [].concat(existing, hook)
  1546. : [hook]
  1547. }
  1548. }
  1549. return {
  1550. exports: scriptExports,
  1551. options: options
  1552. }
  1553. }
  1554. /***/ }),
  1555. /***/ 11:
  1556. /*!***************************************!*\
  1557. !*** E:/bigDataApp/uview-ui/index.js ***!
  1558. \***************************************/
  1559. /*! no static exports found */
  1560. /***/ (function(module, exports, __webpack_require__) {
  1561. "use strict";
  1562. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;
  1563. var _mixin = _interopRequireDefault(__webpack_require__(/*! ./libs/mixin/mixin.js */ 12));
  1564. var _request = _interopRequireDefault(__webpack_require__(/*! ./libs/request */ 13));
  1565. var _queryParams = _interopRequireDefault(__webpack_require__(/*! ./libs/function/queryParams.js */ 17));
  1566. var _route = _interopRequireDefault(__webpack_require__(/*! ./libs/function/route.js */ 18));
  1567. var _timeFormat = _interopRequireDefault(__webpack_require__(/*! ./libs/function/timeFormat.js */ 22));
  1568. var _timeFrom = _interopRequireDefault(__webpack_require__(/*! ./libs/function/timeFrom.js */ 23));
  1569. var _colorGradient = _interopRequireDefault(__webpack_require__(/*! ./libs/function/colorGradient.js */ 24));
  1570. var _guid = _interopRequireDefault(__webpack_require__(/*! ./libs/function/guid.js */ 25));
  1571. var _color = _interopRequireDefault(__webpack_require__(/*! ./libs/function/color.js */ 26));
  1572. var _type2icon = _interopRequireDefault(__webpack_require__(/*! ./libs/function/type2icon.js */ 27));
  1573. var _randomArray = _interopRequireDefault(__webpack_require__(/*! ./libs/function/randomArray.js */ 28));
  1574. var _deepClone = _interopRequireDefault(__webpack_require__(/*! ./libs/function/deepClone.js */ 15));
  1575. var _deepMerge = _interopRequireDefault(__webpack_require__(/*! ./libs/function/deepMerge.js */ 14));
  1576. var _addUnit = _interopRequireDefault(__webpack_require__(/*! ./libs/function/addUnit.js */ 29));
  1577. var _test = _interopRequireDefault(__webpack_require__(/*! ./libs/function/test.js */ 16));
  1578. var _random = _interopRequireDefault(__webpack_require__(/*! ./libs/function/random.js */ 30));
  1579. var _trim = _interopRequireDefault(__webpack_require__(/*! ./libs/function/trim.js */ 31));
  1580. var _toast = _interopRequireDefault(__webpack_require__(/*! ./libs/function/toast.js */ 32));
  1581. var _getParent = _interopRequireDefault(__webpack_require__(/*! ./libs/function/getParent.js */ 33));
  1582. var _$parent = _interopRequireDefault(__webpack_require__(/*! ./libs/function/$parent.js */ 34));
  1583. var _sys = __webpack_require__(/*! ./libs/function/sys.js */ 35);
  1584. var _debounce = _interopRequireDefault(__webpack_require__(/*! ./libs/function/debounce.js */ 36));
  1585. var _throttle = _interopRequireDefault(__webpack_require__(/*! ./libs/function/throttle.js */ 37));
  1586. var _config = _interopRequireDefault(__webpack_require__(/*! ./libs/config/config.js */ 38));
  1587. var _zIndex = _interopRequireDefault(__webpack_require__(/*! ./libs/config/zIndex.js */ 39));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };} // 引入全局mixin
  1588. // 引入关于是否mixin集成小程序分享的配置
  1589. // import wxshare from './libs/mixin/mpShare.js'
  1590. // 全局挂载引入http相关请求拦截插件
  1591. function wranning(str) {// 开发环境进行信息输出,主要是一些报错信息
  1592. // 这个环境的来由是在程序编写时候,点击hx编辑器运行调试代码的时候,详见:
  1593. // 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
  1594. if (true) {console.warn(str);}} // 尝试判断在根目录的/store中是否有$u.mixin.js,此文件uView默认为需要挂在到全局的vuex的state变量
  1595. // HX2.6.11版本,放到try中,控制台依然会警告,暂时不用此方式,
  1596. // let vuexStore = {};
  1597. // try {
  1598. // vuexStore = require("@/store/$u.mixin.js");
  1599. // } catch (e) {
  1600. // //TODO handle the exception
  1601. // }
  1602. // post类型对象参数转为get类型url参数
  1603. var $u = { queryParams: _queryParams.default, route: _route.default, timeFormat: _timeFormat.default, date: _timeFormat.default, // 另名date
  1604. 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,
  1605. post: _request.default.post,
  1606. put: _request.default.put,
  1607. 'delete': _request.default.delete,
  1608. hexToRgb: _colorGradient.default.hexToRgb,
  1609. rgbToHex: _colorGradient.default.rgbToHex,
  1610. test: _test.default,
  1611. random: _random.default,
  1612. deepClone: _deepClone.default,
  1613. deepMerge: _deepMerge.default,
  1614. getParent: _getParent.default,
  1615. $parent: _$parent.default,
  1616. addUnit: _addUnit.default,
  1617. trim: _trim.default,
  1618. type: ['primary', 'success', 'error', 'warning', 'info'],
  1619. http: _request.default,
  1620. toast: _toast.default,
  1621. config: _config.default, // uView配置信息相关,比如版本号
  1622. zIndex: _zIndex.default,
  1623. debounce: _debounce.default,
  1624. throttle: _throttle.default };
  1625. // $u挂载到uni对象上
  1626. uni.$u = $u;
  1627. var install = function install(Vue) {
  1628. Vue.mixin(_mixin.default);
  1629. if (Vue.prototype.openShare) {
  1630. Vue.mixin(mpShare);
  1631. }
  1632. // Vue.mixin(vuexStore);
  1633. // 时间格式化,同时两个名称,date和timeFormat
  1634. Vue.filter('timeFormat', function (timestamp, format) {
  1635. return (0, _timeFormat.default)(timestamp, format);
  1636. });
  1637. Vue.filter('date', function (timestamp, format) {
  1638. return (0, _timeFormat.default)(timestamp, format);
  1639. });
  1640. // 将多久以前的方法,注入到全局过滤器
  1641. Vue.filter('timeFrom', function (timestamp, format) {
  1642. return (0, _timeFrom.default)(timestamp, format);
  1643. });
  1644. Vue.prototype.$u = $u;
  1645. };var _default =
  1646. {
  1647. install: install };exports.default = _default;
  1648. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  1649. /***/ }),
  1650. /***/ 112:
  1651. /*!**************************************!*\
  1652. !*** E:/bigDataApp/util/anitthro.js ***!
  1653. \**************************************/
  1654. /*! no static exports found */
  1655. /***/ (function(module, exports) {
  1656. var timer1 = null; //防抖,
  1657. var timer2 = null; //节流
  1658. function Debounce(fn, t) {//防抖
  1659. var delay = t || 500;
  1660. return function () {var _this = this;
  1661. var args = arguments;
  1662. // let timer1 = null
  1663. // console.log(timer1);
  1664. if (timer1) {
  1665. clearTimeout(timer1);
  1666. }
  1667. timer1 = setTimeout(function () {
  1668. fn.apply(_this, args);
  1669. timer1 = null;
  1670. }, delay);
  1671. };
  1672. }
  1673. // 使用
  1674. /*import {Debounce} from '@/common/debounceThrottle.js'
  1675. Debounce(() => {
  1676. //要执行的函数
  1677. }, 200)() */
  1678. function Throttle(fn, t) {//节流
  1679. var last;
  1680. var interval = t || 500;
  1681. return function () {var _this2 = this;
  1682. var args = arguments;
  1683. var now = +new Date();
  1684. if (last && now - last < interval) {
  1685. clearTimeout(timer2);
  1686. timer2 = setTimeout(function () {
  1687. last = now;
  1688. fn.apply(_this2, args);
  1689. }, interval);
  1690. } else {
  1691. last = now;
  1692. fn.apply(this, args);
  1693. }
  1694. };
  1695. }
  1696. module.exports = {
  1697. Debounce: Debounce,
  1698. Throttle: Throttle };
  1699. /***/ }),
  1700. /***/ 12:
  1701. /*!**************************************************!*\
  1702. !*** E:/bigDataApp/uview-ui/libs/mixin/mixin.js ***!
  1703. \**************************************************/
  1704. /*! no static exports found */
  1705. /***/ (function(module, exports, __webpack_require__) {
  1706. /* WEBPACK VAR INJECTION */(function(uni) {module.exports = {
  1707. data: function data() {
  1708. return {};
  1709. },
  1710. onLoad: function onLoad() {
  1711. // getRect挂载到$u上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出
  1712. this.$u.getRect = this.$uGetRect;
  1713. },
  1714. methods: {
  1715. // 查询节点信息
  1716. // 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
  1717. // 解决办法为在组件根部再套一个没有任何作用的view元素
  1718. $uGetRect: function $uGetRect(selector, all) {var _this = this;
  1719. return new Promise(function (resolve) {
  1720. uni.createSelectorQuery().
  1721. in(_this)[all ? 'selectAll' : 'select'](selector).
  1722. boundingClientRect(function (rect) {
  1723. if (all && Array.isArray(rect) && rect.length) {
  1724. resolve(rect);
  1725. }
  1726. if (!all && rect) {
  1727. resolve(rect);
  1728. }
  1729. }).
  1730. exec();
  1731. });
  1732. },
  1733. getParentData: function getParentData() {var _this2 = this;var parentName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  1734. // 避免在created中去定义parent变量
  1735. if (!this.parent) this.parent = false;
  1736. // 这里的本质原理是,通过获取父组件实例(也即u-radio-group的this)
  1737. // 将父组件this中对应的参数,赋值给本组件(u-radio的this)的parentData对象中对应的属性
  1738. // 之所以需要这么做,是因为所有端中,头条小程序不支持通过this.parent.xxx去监听父组件参数的变化
  1739. this.parent = this.$u.$parent.call(this, parentName);
  1740. if (this.parent) {
  1741. // 历遍parentData中的属性,将parent中的同名属性赋值给parentData
  1742. Object.keys(this.parentData).map(function (key) {
  1743. _this2.parentData[key] = _this2.parent[key];
  1744. });
  1745. }
  1746. },
  1747. // 阻止事件冒泡
  1748. preventEvent: function preventEvent(e) {
  1749. e && e.stopPropagation && e.stopPropagation();
  1750. } },
  1751. onReachBottom: function onReachBottom() {
  1752. uni.$emit('uOnReachBottom');
  1753. } };
  1754. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  1755. /***/ }),
  1756. /***/ 13:
  1757. /*!****************************************************!*\
  1758. !*** E:/bigDataApp/uview-ui/libs/request/index.js ***!
  1759. \****************************************************/
  1760. /*! no static exports found */
  1761. /***/ (function(module, exports, __webpack_require__) {
  1762. "use strict";
  1763. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _deepMerge = _interopRequireDefault(__webpack_require__(/*! ../function/deepMerge */ 14));
  1764. var _test = _interopRequireDefault(__webpack_require__(/*! ../function/test */ 16));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
  1765. Request = /*#__PURE__*/function () {_createClass(Request, [{ key: "setConfig",
  1766. // 设置全局默认配置
  1767. value: function setConfig(customConfig) {
  1768. // 深度合并对象,否则会造成对象深层属性丢失
  1769. this.config = (0, _deepMerge.default)(this.config, customConfig);
  1770. }
  1771. // 主要请求部分
  1772. }, { key: "request", value: function request() {var _this = this;var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  1773. // 检查请求拦截
  1774. if (this.interceptor.request && typeof this.interceptor.request === 'function') {
  1775. var tmpConfig = {};
  1776. var interceptorRequest = this.interceptor.request(options);
  1777. if (interceptorRequest === false) {
  1778. // 返回一个处于pending状态中的Promise,来取消原promise,避免进入then()回调
  1779. return new Promise(function () {});
  1780. }
  1781. this.options = interceptorRequest;
  1782. }
  1783. options.dataType = options.dataType || this.config.dataType;
  1784. options.responseType = options.responseType || this.config.responseType;
  1785. options.url = options.url || '';
  1786. options.params = options.params || {};
  1787. options.header = Object.assign(this.config.header, options.header);
  1788. options.method = options.method || this.config.method;
  1789. return new Promise(function (resolve, reject) {
  1790. options.complete = function (response) {
  1791. // 请求返回后,隐藏loading(如果请求返回快的话,可能会没有loading)
  1792. uni.hideLoading();
  1793. // 清除定时器,如果请求回来了,就无需loading
  1794. clearTimeout(_this.config.timer);
  1795. _this.config.timer = null;
  1796. // 判断用户对拦截返回数据的要求,如果originalData为true,返回所有的数据(response)到拦截器,否则只返回response.data
  1797. if (_this.config.originalData) {
  1798. // 判断是否存在拦截器
  1799. if (_this.interceptor.response && typeof _this.interceptor.response === 'function') {
  1800. var resInterceptors = _this.interceptor.response(response);
  1801. // 如果拦截器不返回false,就将拦截器返回的内容给this.$u.post的then回调
  1802. if (resInterceptors !== false) {
  1803. resolve(resInterceptors);
  1804. } else {
  1805. // 如果拦截器返回false,意味着拦截器定义者认为返回有问题,直接接入catch回调
  1806. reject(response);
  1807. }
  1808. } else {
  1809. // 如果要求返回原始数据,就算没有拦截器,也返回最原始的数据
  1810. resolve(response);
  1811. }
  1812. } else {
  1813. if (response.statusCode == 200) {
  1814. if (_this.interceptor.response && typeof _this.interceptor.response === 'function') {
  1815. var _resInterceptors = _this.interceptor.response(response.data);
  1816. if (_resInterceptors !== false) {
  1817. resolve(_resInterceptors);
  1818. } else {
  1819. reject(response.data);
  1820. }
  1821. } else {
  1822. // 如果不是返回原始数据(originalData=false),且没有拦截器的情况下,返回纯数据给then回调
  1823. resolve(response.data);
  1824. }
  1825. } else {
  1826. // 不返回原始数据的情况下,服务器状态码不为200,modal弹框提示
  1827. // if(response.errMsg) {
  1828. // uni.showModal({
  1829. // title: response.errMsg
  1830. // });
  1831. // }
  1832. reject(response);
  1833. }
  1834. }
  1835. };
  1836. // 判断用户传递的URL是否/开头,如果不是,加上/,这里使用了uView的test.js验证库的url()方法
  1837. options.url = _test.default.url(options.url) ? options.url : _this.config.baseUrl + (options.url.indexOf('/') == 0 ?
  1838. options.url : '/' + options.url);
  1839. // 是否显示loading
  1840. // 加一个是否已有timer定时器的判断,否则有两个同时请求的时候,后者会清除前者的定时器id
  1841. // 而没有清除前者的定时器,导致前者超时,一直显示loading
  1842. if (_this.config.showLoading && !_this.config.timer) {
  1843. _this.config.timer = setTimeout(function () {
  1844. uni.showLoading({
  1845. title: _this.config.loadingText,
  1846. mask: _this.config.loadingMask });
  1847. _this.config.timer = null;
  1848. }, _this.config.loadingTime);
  1849. }
  1850. uni.request(options);
  1851. });
  1852. // .catch(res => {
  1853. // // 如果返回reject(),不让其进入this.$u.post().then().catch()后面的catct()
  1854. // // 因为很多人都会忘了写后面的catch(),导致报错捕获不到catch
  1855. // return new Promise(()=>{});
  1856. // })
  1857. } }]);
  1858. function Request() {var _this2 = this;_classCallCheck(this, Request);
  1859. this.config = {
  1860. baseUrl: '', // 请求的根域名
  1861. // 默认的请求头
  1862. header: {},
  1863. method: 'POST',
  1864. // 设置为json,返回后uni.request会对数据进行一次JSON.parse
  1865. dataType: 'json',
  1866. // 此参数无需处理,因为5+和支付宝小程序不支持,默认为text即可
  1867. responseType: 'text',
  1868. showLoading: true, // 是否显示请求中的loading
  1869. loadingText: '请求中...',
  1870. loadingTime: 800, // 在此时间内,请求还没回来的话,就显示加载中动画,单位ms
  1871. timer: null, // 定时器
  1872. originalData: false, // 是否在拦截器中返回服务端的原始数据,见文档说明
  1873. loadingMask: true // 展示loading的时候,是否给一个透明的蒙层,防止触摸穿透
  1874. };
  1875. // 拦截器
  1876. this.interceptor = {
  1877. // 请求前的拦截
  1878. request: null,
  1879. // 请求后的拦截
  1880. response: null };
  1881. // get请求
  1882. this.get = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  1883. return _this2.request({
  1884. method: 'GET',
  1885. url: url,
  1886. header: header,
  1887. data: data });
  1888. };
  1889. // post请求
  1890. this.post = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  1891. return _this2.request({
  1892. url: url,
  1893. method: 'POST',
  1894. header: header,
  1895. data: data });
  1896. };
  1897. // put请求,不支持支付宝小程序(HX2.6.15)
  1898. this.put = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  1899. return _this2.request({
  1900. url: url,
  1901. method: 'PUT',
  1902. header: header,
  1903. data: data });
  1904. };
  1905. // delete请求,不支持支付宝和头条小程序(HX2.6.15)
  1906. this.delete = function (url) {var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};var header = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
  1907. return _this2.request({
  1908. url: url,
  1909. method: 'DELETE',
  1910. header: header,
  1911. data: data });
  1912. };
  1913. }return Request;}();var _default =
  1914. new Request();exports.default = _default;
  1915. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  1916. /***/ }),
  1917. /***/ 14:
  1918. /*!*********************************************************!*\
  1919. !*** E:/bigDataApp/uview-ui/libs/function/deepMerge.js ***!
  1920. \*********************************************************/
  1921. /*! no static exports found */
  1922. /***/ (function(module, exports, __webpack_require__) {
  1923. "use strict";
  1924. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _deepClone = _interopRequireDefault(__webpack_require__(/*! ./deepClone */ 15));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  1925. // JS对象深度合并
  1926. function deepMerge() {var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  1927. target = (0, _deepClone.default)(target);
  1928. if (typeof target !== 'object' || typeof source !== 'object') return false;
  1929. for (var prop in source) {
  1930. if (!source.hasOwnProperty(prop)) continue;
  1931. if (prop in target) {
  1932. if (typeof target[prop] !== 'object') {
  1933. target[prop] = source[prop];
  1934. } else {
  1935. if (typeof source[prop] !== 'object') {
  1936. target[prop] = source[prop];
  1937. } else {
  1938. if (target[prop].concat && source[prop].concat) {
  1939. target[prop] = target[prop].concat(source[prop]);
  1940. } else {
  1941. target[prop] = deepMerge(target[prop], source[prop]);
  1942. }
  1943. }
  1944. }
  1945. } else {
  1946. target[prop] = source[prop];
  1947. }
  1948. }
  1949. return target;
  1950. }var _default =
  1951. deepMerge;exports.default = _default;
  1952. /***/ }),
  1953. /***/ 15:
  1954. /*!*********************************************************!*\
  1955. !*** E:/bigDataApp/uview-ui/libs/function/deepClone.js ***!
  1956. \*********************************************************/
  1957. /*! no static exports found */
  1958. /***/ (function(module, exports, __webpack_require__) {
  1959. "use strict";
  1960. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 判断arr是否为一个数组,返回一个bool值
  1961. function isArray(arr) {
  1962. return Object.prototype.toString.call(arr) === '[object Array]';
  1963. }
  1964. // 深度克隆
  1965. function deepClone(obj) {
  1966. // 对常见的“非”值,直接返回原来值
  1967. if ([null, undefined, NaN, false].includes(obj)) return obj;
  1968. if (typeof obj !== "object" && typeof obj !== 'function') {
  1969. //原始类型直接返回
  1970. return obj;
  1971. }
  1972. var o = isArray(obj) ? [] : {};
  1973. for (var i in obj) {
  1974. if (obj.hasOwnProperty(i)) {
  1975. o[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
  1976. }
  1977. }
  1978. return o;
  1979. }var _default =
  1980. deepClone;exports.default = _default;
  1981. /***/ }),
  1982. /***/ 16:
  1983. /*!****************************************************!*\
  1984. !*** E:/bigDataApp/uview-ui/libs/function/test.js ***!
  1985. \****************************************************/
  1986. /*! no static exports found */
  1987. /***/ (function(module, exports, __webpack_require__) {
  1988. "use strict";
  1989. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  1990. * 验证电子邮箱格式
  1991. */
  1992. function email(value) {
  1993. return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value);
  1994. }
  1995. /**
  1996. * 验证手机格式
  1997. */
  1998. function mobile(value) {
  1999. return /^1[23456789]\d{9}$/.test(value);
  2000. }
  2001. /**
  2002. * 验证URL格式
  2003. */
  2004. function url(value) {
  2005. return /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/.test(value);
  2006. }
  2007. /**
  2008. * 验证日期格式
  2009. */
  2010. function date(value) {
  2011. return !/Invalid|NaN/.test(new Date(value).toString());
  2012. }
  2013. /**
  2014. * 验证ISO类型的日期格式
  2015. */
  2016. function dateISO(value) {
  2017. return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value);
  2018. }
  2019. /**
  2020. * 验证十进制数字
  2021. */
  2022. function number(value) {
  2023. return /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
  2024. }
  2025. /**
  2026. * 验证整数
  2027. */
  2028. function digits(value) {
  2029. return /^\d+$/.test(value);
  2030. }
  2031. /**
  2032. * 验证身份证号码
  2033. */
  2034. function idCard(value) {
  2035. 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(
  2036. value);
  2037. }
  2038. /**
  2039. * 是否车牌号
  2040. */
  2041. function carNo(value) {
  2042. // 新能源车牌
  2043. var xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
  2044. // 旧车牌
  2045. var creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
  2046. if (value.length === 7) {
  2047. return creg.test(value);
  2048. } else if (value.length === 8) {
  2049. return xreg.test(value);
  2050. } else {
  2051. return false;
  2052. }
  2053. }
  2054. /**
  2055. * 金额,只允许2位小数
  2056. */
  2057. function amount(value) {
  2058. //金额,只允许保留两位小数
  2059. return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value);
  2060. }
  2061. /**
  2062. * 中文
  2063. */
  2064. function chinese(value) {
  2065. var reg = /^[\u4e00-\u9fa5]+$/gi;
  2066. return reg.test(value);
  2067. }
  2068. /**
  2069. * 只能输入字母
  2070. */
  2071. function letter(value) {
  2072. return /^[a-zA-Z]*$/.test(value);
  2073. }
  2074. /**
  2075. * 只能是字母或者数字
  2076. */
  2077. function enOrNum(value) {
  2078. //英文或者数字
  2079. var reg = /^[0-9a-zA-Z]*$/g;
  2080. return reg.test(value);
  2081. }
  2082. /**
  2083. * 验证是否包含某个值
  2084. */
  2085. function contains(value, param) {
  2086. return value.indexOf(param) >= 0;
  2087. }
  2088. /**
  2089. * 验证一个值范围[min, max]
  2090. */
  2091. function range(value, param) {
  2092. return value >= param[0] && value <= param[1];
  2093. }
  2094. /**
  2095. * 验证一个长度范围[min, max]
  2096. */
  2097. function rangeLength(value, param) {
  2098. return value.length >= param[0] && value.length <= param[1];
  2099. }
  2100. /**
  2101. * 是否固定电话
  2102. */
  2103. function landline(value) {
  2104. var reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
  2105. return reg.test(value);
  2106. }
  2107. /**
  2108. * 判断是否为空
  2109. */
  2110. function empty(value) {
  2111. switch (typeof value) {
  2112. case 'undefined':
  2113. return true;
  2114. case 'string':
  2115. if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true;
  2116. break;
  2117. case 'boolean':
  2118. if (!value) return true;
  2119. break;
  2120. case 'number':
  2121. if (0 === value || isNaN(value)) return true;
  2122. break;
  2123. case 'object':
  2124. if (null === value || value.length === 0) return true;
  2125. for (var i in value) {
  2126. return false;
  2127. }
  2128. return true;}
  2129. return false;
  2130. }
  2131. /**
  2132. * 是否json字符串
  2133. */
  2134. function jsonString(value) {
  2135. if (typeof value == 'string') {
  2136. try {
  2137. var obj = JSON.parse(value);
  2138. if (typeof obj == 'object' && obj) {
  2139. return true;
  2140. } else {
  2141. return false;
  2142. }
  2143. } catch (e) {
  2144. return false;
  2145. }
  2146. }
  2147. return false;
  2148. }
  2149. /**
  2150. * 是否数组
  2151. */
  2152. function array(value) {
  2153. if (typeof Array.isArray === "function") {
  2154. return Array.isArray(value);
  2155. } else {
  2156. return Object.prototype.toString.call(value) === "[object Array]";
  2157. }
  2158. }
  2159. /**
  2160. * 是否对象
  2161. */
  2162. function object(value) {
  2163. return Object.prototype.toString.call(value) === '[object Object]';
  2164. }
  2165. /**
  2166. * 是否短信验证码
  2167. */
  2168. function code(value) {var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 6;
  2169. return new RegExp("^\\d{".concat(len, "}$")).test(value);
  2170. }var _default =
  2171. {
  2172. email: email,
  2173. mobile: mobile,
  2174. url: url,
  2175. date: date,
  2176. dateISO: dateISO,
  2177. number: number,
  2178. digits: digits,
  2179. idCard: idCard,
  2180. carNo: carNo,
  2181. amount: amount,
  2182. chinese: chinese,
  2183. letter: letter,
  2184. enOrNum: enOrNum,
  2185. contains: contains,
  2186. range: range,
  2187. rangeLength: rangeLength,
  2188. empty: empty,
  2189. isEmpty: empty,
  2190. jsonString: jsonString,
  2191. landline: landline,
  2192. object: object,
  2193. array: array,
  2194. code: code };exports.default = _default;
  2195. /***/ }),
  2196. /***/ 17:
  2197. /*!***********************************************************!*\
  2198. !*** E:/bigDataApp/uview-ui/libs/function/queryParams.js ***!
  2199. \***********************************************************/
  2200. /*! no static exports found */
  2201. /***/ (function(module, exports, __webpack_require__) {
  2202. "use strict";
  2203. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  2204. * 对象转url参数
  2205. * @param {*} data,对象
  2206. * @param {*} isPrefix,是否自动加上"?"
  2207. */
  2208. 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';
  2209. var prefix = isPrefix ? '?' : '';
  2210. var _result = [];
  2211. if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets';var _loop = function _loop(
  2212. key) {
  2213. var value = data[key];
  2214. // 去掉为空的参数
  2215. if (['', undefined, null].indexOf(value) >= 0) {
  2216. return "continue";
  2217. }
  2218. // 如果值为数组,另行处理
  2219. if (value.constructor === Array) {
  2220. // e.g. {ids: [1, 2, 3]}
  2221. switch (arrayFormat) {
  2222. case 'indices':
  2223. // 结果: ids[0]=1&ids[1]=2&ids[2]=3
  2224. for (var i = 0; i < value.length; i++) {
  2225. _result.push(key + '[' + i + ']=' + value[i]);
  2226. }
  2227. break;
  2228. case 'brackets':
  2229. // 结果: ids[]=1&ids[]=2&ids[]=3
  2230. value.forEach(function (_value) {
  2231. _result.push(key + '[]=' + _value);
  2232. });
  2233. break;
  2234. case 'repeat':
  2235. // 结果: ids=1&ids=2&ids=3
  2236. value.forEach(function (_value) {
  2237. _result.push(key + '=' + _value);
  2238. });
  2239. break;
  2240. case 'comma':
  2241. // 结果: ids=1,2,3
  2242. var commaStr = "";
  2243. value.forEach(function (_value) {
  2244. commaStr += (commaStr ? "," : "") + _value;
  2245. });
  2246. _result.push(key + '=' + commaStr);
  2247. break;
  2248. default:
  2249. value.forEach(function (_value) {
  2250. _result.push(key + '[]=' + _value);
  2251. });}
  2252. } else {
  2253. _result.push(key + '=' + value);
  2254. }};for (var key in data) {var _ret = _loop(key);if (_ret === "continue") continue;
  2255. }
  2256. return _result.length ? prefix + _result.join('&') : '';
  2257. }var _default =
  2258. queryParams;exports.default = _default;
  2259. /***/ }),
  2260. /***/ 18:
  2261. /*!*****************************************************!*\
  2262. !*** E:/bigDataApp/uview-ui/libs/function/route.js ***!
  2263. \*****************************************************/
  2264. /*! no static exports found */
  2265. /***/ (function(module, exports, __webpack_require__) {
  2266. "use strict";
  2267. /* 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 */ 19));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;} /**
  2268. * 路由跳转方法,该方法相对于直接使用uni.xxx的好处是使用更加简单快捷
  2269. * 并且带有路由拦截功能
  2270. */var
  2271. Router = /*#__PURE__*/function () {
  2272. // 原始属性定义
  2273. function Router() {_classCallCheck(this, Router);_defineProperty(this, "config", { type: 'navigateTo', url: '', delta: 1, // navigateBack页面后退时,回退的层数
  2274. params: {}, // 传递的参数
  2275. animationType: 'pop-in', // 窗口动画,只在APP有效
  2276. animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效
  2277. intercept: false // 是否需要拦截
  2278. }); // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文
  2279. // 这里在构造函数中进行this绑定
  2280. this.route = this.route.bind(this);} // 判断url前面是否有"/",如果没有则加上,否则无法跳转
  2281. _createClass(Router, [{ key: "addRootPath", value: function addRootPath(url) {return url[0] === '/' ? url : "/".concat(url);
  2282. }
  2283. // 整合路由参数
  2284. }, { key: "mixinParam", value: function mixinParam(url, params) {
  2285. url = this.addRootPath(url);
  2286. // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary"
  2287. // 如果有url中有get参数,转换后无需带上"?"
  2288. var query = '';
  2289. if (/.*\/.*\?.*=.*/.test(url)) {
  2290. // object对象转为get类型的参数
  2291. query = uni.$u.queryParams(params, false);
  2292. // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开
  2293. return url += "&" + query;
  2294. } else {
  2295. // 直接拼接参数,因为此处url中没有后面的query参数,也就没有"?/&"之类的符号
  2296. query = uni.$u.queryParams(params);
  2297. return url += query;
  2298. }
  2299. }
  2300. // 对外的方法名称
  2301. }, { 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] : {};
  2302. // 合并用户的配置和内部的默认配置
  2303. mergeConfig = {};
  2304. if (typeof options === 'string') {
  2305. // 如果options为字符串,则为route(url, params)的形式
  2306. mergeConfig.url = this.mixinParam(options, params);
  2307. mergeConfig.type = 'navigateTo';
  2308. } else {
  2309. mergeConfig = uni.$u.deepClone(options, this.config);
  2310. // 否则正常使用mergeConfig中的url和params进行拼接
  2311. mergeConfig.url = this.mixinParam(options.url, options.params);
  2312. }
  2313. if (params.intercept) {
  2314. this.config.intercept = params.intercept;
  2315. }
  2316. // params参数也带给拦截器
  2317. mergeConfig.params = params;
  2318. // 合并内外部参数
  2319. mergeConfig = uni.$u.deepMerge(this.config, mergeConfig);
  2320. // 判断用户是否定义了拦截器
  2321. if (!(typeof uni.$u.routeIntercept === 'function')) {_context.next = 14;break;}_context.next = 10;return (
  2322. new Promise(function (resolve, reject) {
  2323. uni.$u.routeIntercept(mergeConfig, resolve);
  2324. }));case 10:isNext = _context.sent;
  2325. // 如果isNext为true,则执行路由跳转
  2326. isNext && this.openPage(mergeConfig);_context.next = 15;break;case 14:
  2327. this.openPage(mergeConfig);case 15:case "end":return _context.stop();}}}, _callee, this);}));function route() {return _route.apply(this, arguments);}return route;}()
  2328. // 执行路由跳转
  2329. }, { key: "openPage", value: function openPage(config) {
  2330. // 解构参数
  2331. var
  2332. url =
  2333. config.url,type = config.type,delta = config.delta,animationType = config.animationType,animationDuration = config.animationDuration;
  2334. if (config.type == 'navigateTo' || config.type == 'to') {
  2335. uni.navigateTo({
  2336. url: url,
  2337. animationType: animationType,
  2338. animationDuration: animationDuration });
  2339. }
  2340. if (config.type == 'redirectTo' || config.type == 'redirect') {
  2341. uni.redirectTo({
  2342. url: url });
  2343. }
  2344. if (config.type == 'switchTab' || config.type == 'tab') {
  2345. uni.switchTab({
  2346. url: url });
  2347. }
  2348. if (config.type == 'reLaunch' || config.type == 'launch') {
  2349. uni.reLaunch({
  2350. url: url });
  2351. }
  2352. if (config.type == 'navigateBack' || config.type == 'back') {
  2353. uni.navigateBack({
  2354. delta: delta });
  2355. }
  2356. } }]);return Router;}();var _default =
  2357. new Router().route;exports.default = _default;
  2358. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  2359. /***/ }),
  2360. /***/ 19:
  2361. /*!**********************************************************!*\
  2362. !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
  2363. \**********************************************************/
  2364. /*! no static exports found */
  2365. /***/ (function(module, exports, __webpack_require__) {
  2366. module.exports = __webpack_require__(/*! regenerator-runtime */ 20);
  2367. /***/ }),
  2368. /***/ 2:
  2369. /*!******************************************************************************************!*\
  2370. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
  2371. \******************************************************************************************/
  2372. /*! exports provided: default */
  2373. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2374. "use strict";
  2375. __webpack_require__.r(__webpack_exports__);
  2376. /* WEBPACK VAR INJECTION */(function(global) {/*!
  2377. * Vue.js v2.6.11
  2378. * (c) 2014-2020 Evan You
  2379. * Released under the MIT License.
  2380. */
  2381. /* */
  2382. var emptyObject = Object.freeze({});
  2383. // These helpers produce better VM code in JS engines due to their
  2384. // explicitness and function inlining.
  2385. function isUndef (v) {
  2386. return v === undefined || v === null
  2387. }
  2388. function isDef (v) {
  2389. return v !== undefined && v !== null
  2390. }
  2391. function isTrue (v) {
  2392. return v === true
  2393. }
  2394. function isFalse (v) {
  2395. return v === false
  2396. }
  2397. /**
  2398. * Check if value is primitive.
  2399. */
  2400. function isPrimitive (value) {
  2401. return (
  2402. typeof value === 'string' ||
  2403. typeof value === 'number' ||
  2404. // $flow-disable-line
  2405. typeof value === 'symbol' ||
  2406. typeof value === 'boolean'
  2407. )
  2408. }
  2409. /**
  2410. * Quick object check - this is primarily used to tell
  2411. * Objects from primitive values when we know the value
  2412. * is a JSON-compliant type.
  2413. */
  2414. function isObject (obj) {
  2415. return obj !== null && typeof obj === 'object'
  2416. }
  2417. /**
  2418. * Get the raw type string of a value, e.g., [object Object].
  2419. */
  2420. var _toString = Object.prototype.toString;
  2421. function toRawType (value) {
  2422. return _toString.call(value).slice(8, -1)
  2423. }
  2424. /**
  2425. * Strict object type check. Only returns true
  2426. * for plain JavaScript objects.
  2427. */
  2428. function isPlainObject (obj) {
  2429. return _toString.call(obj) === '[object Object]'
  2430. }
  2431. function isRegExp (v) {
  2432. return _toString.call(v) === '[object RegExp]'
  2433. }
  2434. /**
  2435. * Check if val is a valid array index.
  2436. */
  2437. function isValidArrayIndex (val) {
  2438. var n = parseFloat(String(val));
  2439. return n >= 0 && Math.floor(n) === n && isFinite(val)
  2440. }
  2441. function isPromise (val) {
  2442. return (
  2443. isDef(val) &&
  2444. typeof val.then === 'function' &&
  2445. typeof val.catch === 'function'
  2446. )
  2447. }
  2448. /**
  2449. * Convert a value to a string that is actually rendered.
  2450. */
  2451. function toString (val) {
  2452. return val == null
  2453. ? ''
  2454. : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
  2455. ? JSON.stringify(val, null, 2)
  2456. : String(val)
  2457. }
  2458. /**
  2459. * Convert an input value to a number for persistence.
  2460. * If the conversion fails, return original string.
  2461. */
  2462. function toNumber (val) {
  2463. var n = parseFloat(val);
  2464. return isNaN(n) ? val : n
  2465. }
  2466. /**
  2467. * Make a map and return a function for checking if a key
  2468. * is in that map.
  2469. */
  2470. function makeMap (
  2471. str,
  2472. expectsLowerCase
  2473. ) {
  2474. var map = Object.create(null);
  2475. var list = str.split(',');
  2476. for (var i = 0; i < list.length; i++) {
  2477. map[list[i]] = true;
  2478. }
  2479. return expectsLowerCase
  2480. ? function (val) { return map[val.toLowerCase()]; }
  2481. : function (val) { return map[val]; }
  2482. }
  2483. /**
  2484. * Check if a tag is a built-in tag.
  2485. */
  2486. var isBuiltInTag = makeMap('slot,component', true);
  2487. /**
  2488. * Check if an attribute is a reserved attribute.
  2489. */
  2490. var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  2491. /**
  2492. * Remove an item from an array.
  2493. */
  2494. function remove (arr, item) {
  2495. if (arr.length) {
  2496. var index = arr.indexOf(item);
  2497. if (index > -1) {
  2498. return arr.splice(index, 1)
  2499. }
  2500. }
  2501. }
  2502. /**
  2503. * Check whether an object has the property.
  2504. */
  2505. var hasOwnProperty = Object.prototype.hasOwnProperty;
  2506. function hasOwn (obj, key) {
  2507. return hasOwnProperty.call(obj, key)
  2508. }
  2509. /**
  2510. * Create a cached version of a pure function.
  2511. */
  2512. function cached (fn) {
  2513. var cache = Object.create(null);
  2514. return (function cachedFn (str) {
  2515. var hit = cache[str];
  2516. return hit || (cache[str] = fn(str))
  2517. })
  2518. }
  2519. /**
  2520. * Camelize a hyphen-delimited string.
  2521. */
  2522. var camelizeRE = /-(\w)/g;
  2523. var camelize = cached(function (str) {
  2524. return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  2525. });
  2526. /**
  2527. * Capitalize a string.
  2528. */
  2529. var capitalize = cached(function (str) {
  2530. return str.charAt(0).toUpperCase() + str.slice(1)
  2531. });
  2532. /**
  2533. * Hyphenate a camelCase string.
  2534. */
  2535. var hyphenateRE = /\B([A-Z])/g;
  2536. var hyphenate = cached(function (str) {
  2537. return str.replace(hyphenateRE, '-$1').toLowerCase()
  2538. });
  2539. /**
  2540. * Simple bind polyfill for environments that do not support it,
  2541. * e.g., PhantomJS 1.x. Technically, we don't need this anymore
  2542. * since native bind is now performant enough in most browsers.
  2543. * But removing it would mean breaking code that was able to run in
  2544. * PhantomJS 1.x, so this must be kept for backward compatibility.
  2545. */
  2546. /* istanbul ignore next */
  2547. function polyfillBind (fn, ctx) {
  2548. function boundFn (a) {
  2549. var l = arguments.length;
  2550. return l
  2551. ? l > 1
  2552. ? fn.apply(ctx, arguments)
  2553. : fn.call(ctx, a)
  2554. : fn.call(ctx)
  2555. }
  2556. boundFn._length = fn.length;
  2557. return boundFn
  2558. }
  2559. function nativeBind (fn, ctx) {
  2560. return fn.bind(ctx)
  2561. }
  2562. var bind = Function.prototype.bind
  2563. ? nativeBind
  2564. : polyfillBind;
  2565. /**
  2566. * Convert an Array-like object to a real Array.
  2567. */
  2568. function toArray (list, start) {
  2569. start = start || 0;
  2570. var i = list.length - start;
  2571. var ret = new Array(i);
  2572. while (i--) {
  2573. ret[i] = list[i + start];
  2574. }
  2575. return ret
  2576. }
  2577. /**
  2578. * Mix properties into target object.
  2579. */
  2580. function extend (to, _from) {
  2581. for (var key in _from) {
  2582. to[key] = _from[key];
  2583. }
  2584. return to
  2585. }
  2586. /**
  2587. * Merge an Array of Objects into a single Object.
  2588. */
  2589. function toObject (arr) {
  2590. var res = {};
  2591. for (var i = 0; i < arr.length; i++) {
  2592. if (arr[i]) {
  2593. extend(res, arr[i]);
  2594. }
  2595. }
  2596. return res
  2597. }
  2598. /* eslint-disable no-unused-vars */
  2599. /**
  2600. * Perform no operation.
  2601. * Stubbing args to make Flow happy without leaving useless transpiled code
  2602. * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
  2603. */
  2604. function noop (a, b, c) {}
  2605. /**
  2606. * Always return false.
  2607. */
  2608. var no = function (a, b, c) { return false; };
  2609. /* eslint-enable no-unused-vars */
  2610. /**
  2611. * Return the same value.
  2612. */
  2613. var identity = function (_) { return _; };
  2614. /**
  2615. * Check if two values are loosely equal - that is,
  2616. * if they are plain objects, do they have the same shape?
  2617. */
  2618. function looseEqual (a, b) {
  2619. if (a === b) { return true }
  2620. var isObjectA = isObject(a);
  2621. var isObjectB = isObject(b);
  2622. if (isObjectA && isObjectB) {
  2623. try {
  2624. var isArrayA = Array.isArray(a);
  2625. var isArrayB = Array.isArray(b);
  2626. if (isArrayA && isArrayB) {
  2627. return a.length === b.length && a.every(function (e, i) {
  2628. return looseEqual(e, b[i])
  2629. })
  2630. } else if (a instanceof Date && b instanceof Date) {
  2631. return a.getTime() === b.getTime()
  2632. } else if (!isArrayA && !isArrayB) {
  2633. var keysA = Object.keys(a);
  2634. var keysB = Object.keys(b);
  2635. return keysA.length === keysB.length && keysA.every(function (key) {
  2636. return looseEqual(a[key], b[key])
  2637. })
  2638. } else {
  2639. /* istanbul ignore next */
  2640. return false
  2641. }
  2642. } catch (e) {
  2643. /* istanbul ignore next */
  2644. return false
  2645. }
  2646. } else if (!isObjectA && !isObjectB) {
  2647. return String(a) === String(b)
  2648. } else {
  2649. return false
  2650. }
  2651. }
  2652. /**
  2653. * Return the first index at which a loosely equal value can be
  2654. * found in the array (if value is a plain object, the array must
  2655. * contain an object of the same shape), or -1 if it is not present.
  2656. */
  2657. function looseIndexOf (arr, val) {
  2658. for (var i = 0; i < arr.length; i++) {
  2659. if (looseEqual(arr[i], val)) { return i }
  2660. }
  2661. return -1
  2662. }
  2663. /**
  2664. * Ensure a function is called only once.
  2665. */
  2666. function once (fn) {
  2667. var called = false;
  2668. return function () {
  2669. if (!called) {
  2670. called = true;
  2671. fn.apply(this, arguments);
  2672. }
  2673. }
  2674. }
  2675. var ASSET_TYPES = [
  2676. 'component',
  2677. 'directive',
  2678. 'filter'
  2679. ];
  2680. var LIFECYCLE_HOOKS = [
  2681. 'beforeCreate',
  2682. 'created',
  2683. 'beforeMount',
  2684. 'mounted',
  2685. 'beforeUpdate',
  2686. 'updated',
  2687. 'beforeDestroy',
  2688. 'destroyed',
  2689. 'activated',
  2690. 'deactivated',
  2691. 'errorCaptured',
  2692. 'serverPrefetch'
  2693. ];
  2694. /* */
  2695. var config = ({
  2696. /**
  2697. * Option merge strategies (used in core/util/options)
  2698. */
  2699. // $flow-disable-line
  2700. optionMergeStrategies: Object.create(null),
  2701. /**
  2702. * Whether to suppress warnings.
  2703. */
  2704. silent: false,
  2705. /**
  2706. * Show production mode tip message on boot?
  2707. */
  2708. productionTip: "development" !== 'production',
  2709. /**
  2710. * Whether to enable devtools
  2711. */
  2712. devtools: "development" !== 'production',
  2713. /**
  2714. * Whether to record perf
  2715. */
  2716. performance: false,
  2717. /**
  2718. * Error handler for watcher errors
  2719. */
  2720. errorHandler: null,
  2721. /**
  2722. * Warn handler for watcher warns
  2723. */
  2724. warnHandler: null,
  2725. /**
  2726. * Ignore certain custom elements
  2727. */
  2728. ignoredElements: [],
  2729. /**
  2730. * Custom user key aliases for v-on
  2731. */
  2732. // $flow-disable-line
  2733. keyCodes: Object.create(null),
  2734. /**
  2735. * Check if a tag is reserved so that it cannot be registered as a
  2736. * component. This is platform-dependent and may be overwritten.
  2737. */
  2738. isReservedTag: no,
  2739. /**
  2740. * Check if an attribute is reserved so that it cannot be used as a component
  2741. * prop. This is platform-dependent and may be overwritten.
  2742. */
  2743. isReservedAttr: no,
  2744. /**
  2745. * Check if a tag is an unknown element.
  2746. * Platform-dependent.
  2747. */
  2748. isUnknownElement: no,
  2749. /**
  2750. * Get the namespace of an element
  2751. */
  2752. getTagNamespace: noop,
  2753. /**
  2754. * Parse the real tag name for the specific platform.
  2755. */
  2756. parsePlatformTagName: identity,
  2757. /**
  2758. * Check if an attribute must be bound using property, e.g. value
  2759. * Platform-dependent.
  2760. */
  2761. mustUseProp: no,
  2762. /**
  2763. * Perform updates asynchronously. Intended to be used by Vue Test Utils
  2764. * This will significantly reduce performance if set to false.
  2765. */
  2766. async: true,
  2767. /**
  2768. * Exposed for legacy reasons
  2769. */
  2770. _lifecycleHooks: LIFECYCLE_HOOKS
  2771. });
  2772. /* */
  2773. /**
  2774. * unicode letters used for parsing html tags, component names and property paths.
  2775. * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
  2776. * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
  2777. */
  2778. 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/;
  2779. /**
  2780. * Check if a string starts with $ or _
  2781. */
  2782. function isReserved (str) {
  2783. var c = (str + '').charCodeAt(0);
  2784. return c === 0x24 || c === 0x5F
  2785. }
  2786. /**
  2787. * Define a property.
  2788. */
  2789. function def (obj, key, val, enumerable) {
  2790. Object.defineProperty(obj, key, {
  2791. value: val,
  2792. enumerable: !!enumerable,
  2793. writable: true,
  2794. configurable: true
  2795. });
  2796. }
  2797. /**
  2798. * Parse simple path.
  2799. */
  2800. var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
  2801. function parsePath (path) {
  2802. if (bailRE.test(path)) {
  2803. return
  2804. }
  2805. var segments = path.split('.');
  2806. return function (obj) {
  2807. for (var i = 0; i < segments.length; i++) {
  2808. if (!obj) { return }
  2809. obj = obj[segments[i]];
  2810. }
  2811. return obj
  2812. }
  2813. }
  2814. /* */
  2815. // can we use __proto__?
  2816. var hasProto = '__proto__' in {};
  2817. // Browser environment sniffing
  2818. var inBrowser = typeof window !== 'undefined';
  2819. var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
  2820. var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
  2821. var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  2822. var isIE = UA && /msie|trident/.test(UA);
  2823. var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  2824. var isEdge = UA && UA.indexOf('edge/') > 0;
  2825. var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
  2826. var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
  2827. var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
  2828. var isPhantomJS = UA && /phantomjs/.test(UA);
  2829. var isFF = UA && UA.match(/firefox\/(\d+)/);
  2830. // Firefox has a "watch" function on Object.prototype...
  2831. var nativeWatch = ({}).watch;
  2832. if (inBrowser) {
  2833. try {
  2834. var opts = {};
  2835. Object.defineProperty(opts, 'passive', ({
  2836. get: function get () {
  2837. }
  2838. })); // https://github.com/facebook/flow/issues/285
  2839. window.addEventListener('test-passive', null, opts);
  2840. } catch (e) {}
  2841. }
  2842. // this needs to be lazy-evaled because vue may be required before
  2843. // vue-server-renderer can set VUE_ENV
  2844. var _isServer;
  2845. var isServerRendering = function () {
  2846. if (_isServer === undefined) {
  2847. /* istanbul ignore if */
  2848. if (!inBrowser && !inWeex && typeof global !== 'undefined') {
  2849. // detect presence of vue-server-renderer and avoid
  2850. // Webpack shimming the process
  2851. _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
  2852. } else {
  2853. _isServer = false;
  2854. }
  2855. }
  2856. return _isServer
  2857. };
  2858. // detect devtools
  2859. var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  2860. /* istanbul ignore next */
  2861. function isNative (Ctor) {
  2862. return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
  2863. }
  2864. var hasSymbol =
  2865. typeof Symbol !== 'undefined' && isNative(Symbol) &&
  2866. typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
  2867. var _Set;
  2868. /* istanbul ignore if */ // $flow-disable-line
  2869. if (typeof Set !== 'undefined' && isNative(Set)) {
  2870. // use native Set when available.
  2871. _Set = Set;
  2872. } else {
  2873. // a non-standard Set polyfill that only works with primitive keys.
  2874. _Set = /*@__PURE__*/(function () {
  2875. function Set () {
  2876. this.set = Object.create(null);
  2877. }
  2878. Set.prototype.has = function has (key) {
  2879. return this.set[key] === true
  2880. };
  2881. Set.prototype.add = function add (key) {
  2882. this.set[key] = true;
  2883. };
  2884. Set.prototype.clear = function clear () {
  2885. this.set = Object.create(null);
  2886. };
  2887. return Set;
  2888. }());
  2889. }
  2890. /* */
  2891. var warn = noop;
  2892. var tip = noop;
  2893. var generateComponentTrace = (noop); // work around flow check
  2894. var formatComponentName = (noop);
  2895. if (true) {
  2896. var hasConsole = typeof console !== 'undefined';
  2897. var classifyRE = /(?:^|[-_])(\w)/g;
  2898. var classify = function (str) { return str
  2899. .replace(classifyRE, function (c) { return c.toUpperCase(); })
  2900. .replace(/[-_]/g, ''); };
  2901. warn = function (msg, vm) {
  2902. var trace = vm ? generateComponentTrace(vm) : '';
  2903. if (config.warnHandler) {
  2904. config.warnHandler.call(null, msg, vm, trace);
  2905. } else if (hasConsole && (!config.silent)) {
  2906. console.error(("[Vue warn]: " + msg + trace));
  2907. }
  2908. };
  2909. tip = function (msg, vm) {
  2910. if (hasConsole && (!config.silent)) {
  2911. console.warn("[Vue tip]: " + msg + (
  2912. vm ? generateComponentTrace(vm) : ''
  2913. ));
  2914. }
  2915. };
  2916. formatComponentName = function (vm, includeFile) {
  2917. if (vm.$root === vm) {
  2918. if (vm.$options && vm.$options.__file) { // fixed by xxxxxx
  2919. return ('') + vm.$options.__file
  2920. }
  2921. return '<Root>'
  2922. }
  2923. var options = typeof vm === 'function' && vm.cid != null
  2924. ? vm.options
  2925. : vm._isVue
  2926. ? vm.$options || vm.constructor.options
  2927. : vm;
  2928. var name = options.name || options._componentTag;
  2929. var file = options.__file;
  2930. if (!name && file) {
  2931. var match = file.match(/([^/\\]+)\.vue$/);
  2932. name = match && match[1];
  2933. }
  2934. return (
  2935. (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
  2936. (file && includeFile !== false ? (" at " + file) : '')
  2937. )
  2938. };
  2939. var repeat = function (str, n) {
  2940. var res = '';
  2941. while (n) {
  2942. if (n % 2 === 1) { res += str; }
  2943. if (n > 1) { str += str; }
  2944. n >>= 1;
  2945. }
  2946. return res
  2947. };
  2948. generateComponentTrace = function (vm) {
  2949. if (vm._isVue && vm.$parent) {
  2950. var tree = [];
  2951. var currentRecursiveSequence = 0;
  2952. while (vm && vm.$options.name !== 'PageBody') {
  2953. if (tree.length > 0) {
  2954. var last = tree[tree.length - 1];
  2955. if (last.constructor === vm.constructor) {
  2956. currentRecursiveSequence++;
  2957. vm = vm.$parent;
  2958. continue
  2959. } else if (currentRecursiveSequence > 0) {
  2960. tree[tree.length - 1] = [last, currentRecursiveSequence];
  2961. currentRecursiveSequence = 0;
  2962. }
  2963. }
  2964. !vm.$options.isReserved && tree.push(vm);
  2965. vm = vm.$parent;
  2966. }
  2967. return '\n\nfound in\n\n' + tree
  2968. .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
  2969. ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
  2970. : formatComponentName(vm))); })
  2971. .join('\n')
  2972. } else {
  2973. return ("\n\n(found in " + (formatComponentName(vm)) + ")")
  2974. }
  2975. };
  2976. }
  2977. /* */
  2978. var uid = 0;
  2979. /**
  2980. * A dep is an observable that can have multiple
  2981. * directives subscribing to it.
  2982. */
  2983. var Dep = function Dep () {
  2984. this.id = uid++;
  2985. this.subs = [];
  2986. };
  2987. Dep.prototype.addSub = function addSub (sub) {
  2988. this.subs.push(sub);
  2989. };
  2990. Dep.prototype.removeSub = function removeSub (sub) {
  2991. remove(this.subs, sub);
  2992. };
  2993. Dep.prototype.depend = function depend () {
  2994. if (Dep.SharedObject.target) {
  2995. Dep.SharedObject.target.addDep(this);
  2996. }
  2997. };
  2998. Dep.prototype.notify = function notify () {
  2999. // stabilize the subscriber list first
  3000. var subs = this.subs.slice();
  3001. if ( true && !config.async) {
  3002. // subs aren't sorted in scheduler if not running async
  3003. // we need to sort them now to make sure they fire in correct
  3004. // order
  3005. subs.sort(function (a, b) { return a.id - b.id; });
  3006. }
  3007. for (var i = 0, l = subs.length; i < l; i++) {
  3008. subs[i].update();
  3009. }
  3010. };
  3011. // The current target watcher being evaluated.
  3012. // This is globally unique because only one watcher
  3013. // can be evaluated at a time.
  3014. // fixed by xxxxxx (nvue shared vuex)
  3015. /* eslint-disable no-undef */
  3016. Dep.SharedObject = {};
  3017. Dep.SharedObject.target = null;
  3018. Dep.SharedObject.targetStack = [];
  3019. function pushTarget (target) {
  3020. Dep.SharedObject.targetStack.push(target);
  3021. Dep.SharedObject.target = target;
  3022. Dep.target = target;
  3023. }
  3024. function popTarget () {
  3025. Dep.SharedObject.targetStack.pop();
  3026. Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];
  3027. Dep.target = Dep.SharedObject.target;
  3028. }
  3029. /* */
  3030. var VNode = function VNode (
  3031. tag,
  3032. data,
  3033. children,
  3034. text,
  3035. elm,
  3036. context,
  3037. componentOptions,
  3038. asyncFactory
  3039. ) {
  3040. this.tag = tag;
  3041. this.data = data;
  3042. this.children = children;
  3043. this.text = text;
  3044. this.elm = elm;
  3045. this.ns = undefined;
  3046. this.context = context;
  3047. this.fnContext = undefined;
  3048. this.fnOptions = undefined;
  3049. this.fnScopeId = undefined;
  3050. this.key = data && data.key;
  3051. this.componentOptions = componentOptions;
  3052. this.componentInstance = undefined;
  3053. this.parent = undefined;
  3054. this.raw = false;
  3055. this.isStatic = false;
  3056. this.isRootInsert = true;
  3057. this.isComment = false;
  3058. this.isCloned = false;
  3059. this.isOnce = false;
  3060. this.asyncFactory = asyncFactory;
  3061. this.asyncMeta = undefined;
  3062. this.isAsyncPlaceholder = false;
  3063. };
  3064. var prototypeAccessors = { child: { configurable: true } };
  3065. // DEPRECATED: alias for componentInstance for backwards compat.
  3066. /* istanbul ignore next */
  3067. prototypeAccessors.child.get = function () {
  3068. return this.componentInstance
  3069. };
  3070. Object.defineProperties( VNode.prototype, prototypeAccessors );
  3071. var createEmptyVNode = function (text) {
  3072. if ( text === void 0 ) text = '';
  3073. var node = new VNode();
  3074. node.text = text;
  3075. node.isComment = true;
  3076. return node
  3077. };
  3078. function createTextVNode (val) {
  3079. return new VNode(undefined, undefined, undefined, String(val))
  3080. }
  3081. // optimized shallow clone
  3082. // used for static nodes and slot nodes because they may be reused across
  3083. // multiple renders, cloning them avoids errors when DOM manipulations rely
  3084. // on their elm reference.
  3085. function cloneVNode (vnode) {
  3086. var cloned = new VNode(
  3087. vnode.tag,
  3088. vnode.data,
  3089. // #7975
  3090. // clone children array to avoid mutating original in case of cloning
  3091. // a child.
  3092. vnode.children && vnode.children.slice(),
  3093. vnode.text,
  3094. vnode.elm,
  3095. vnode.context,
  3096. vnode.componentOptions,
  3097. vnode.asyncFactory
  3098. );
  3099. cloned.ns = vnode.ns;
  3100. cloned.isStatic = vnode.isStatic;
  3101. cloned.key = vnode.key;
  3102. cloned.isComment = vnode.isComment;
  3103. cloned.fnContext = vnode.fnContext;
  3104. cloned.fnOptions = vnode.fnOptions;
  3105. cloned.fnScopeId = vnode.fnScopeId;
  3106. cloned.asyncMeta = vnode.asyncMeta;
  3107. cloned.isCloned = true;
  3108. return cloned
  3109. }
  3110. /*
  3111. * not type checking this file because flow doesn't play well with
  3112. * dynamically accessing methods on Array prototype
  3113. */
  3114. var arrayProto = Array.prototype;
  3115. var arrayMethods = Object.create(arrayProto);
  3116. var methodsToPatch = [
  3117. 'push',
  3118. 'pop',
  3119. 'shift',
  3120. 'unshift',
  3121. 'splice',
  3122. 'sort',
  3123. 'reverse'
  3124. ];
  3125. /**
  3126. * Intercept mutating methods and emit events
  3127. */
  3128. methodsToPatch.forEach(function (method) {
  3129. // cache original method
  3130. var original = arrayProto[method];
  3131. def(arrayMethods, method, function mutator () {
  3132. var args = [], len = arguments.length;
  3133. while ( len-- ) args[ len ] = arguments[ len ];
  3134. var result = original.apply(this, args);
  3135. var ob = this.__ob__;
  3136. var inserted;
  3137. switch (method) {
  3138. case 'push':
  3139. case 'unshift':
  3140. inserted = args;
  3141. break
  3142. case 'splice':
  3143. inserted = args.slice(2);
  3144. break
  3145. }
  3146. if (inserted) { ob.observeArray(inserted); }
  3147. // notify change
  3148. ob.dep.notify();
  3149. return result
  3150. });
  3151. });
  3152. /* */
  3153. var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  3154. /**
  3155. * In some cases we may want to disable observation inside a component's
  3156. * update computation.
  3157. */
  3158. var shouldObserve = true;
  3159. function toggleObserving (value) {
  3160. shouldObserve = value;
  3161. }
  3162. /**
  3163. * Observer class that is attached to each observed
  3164. * object. Once attached, the observer converts the target
  3165. * object's property keys into getter/setters that
  3166. * collect dependencies and dispatch updates.
  3167. */
  3168. var Observer = function Observer (value) {
  3169. this.value = value;
  3170. this.dep = new Dep();
  3171. this.vmCount = 0;
  3172. def(value, '__ob__', this);
  3173. if (Array.isArray(value)) {
  3174. if (hasProto) {
  3175. {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑
  3176. if(value.push !== value.__proto__.push){
  3177. copyAugment(value, arrayMethods, arrayKeys);
  3178. } else {
  3179. protoAugment(value, arrayMethods);
  3180. }
  3181. }
  3182. } else {
  3183. copyAugment(value, arrayMethods, arrayKeys);
  3184. }
  3185. this.observeArray(value);
  3186. } else {
  3187. this.walk(value);
  3188. }
  3189. };
  3190. /**
  3191. * Walk through all properties and convert them into
  3192. * getter/setters. This method should only be called when
  3193. * value type is Object.
  3194. */
  3195. Observer.prototype.walk = function walk (obj) {
  3196. var keys = Object.keys(obj);
  3197. for (var i = 0; i < keys.length; i++) {
  3198. defineReactive$$1(obj, keys[i]);
  3199. }
  3200. };
  3201. /**
  3202. * Observe a list of Array items.
  3203. */
  3204. Observer.prototype.observeArray = function observeArray (items) {
  3205. for (var i = 0, l = items.length; i < l; i++) {
  3206. observe(items[i]);
  3207. }
  3208. };
  3209. // helpers
  3210. /**
  3211. * Augment a target Object or Array by intercepting
  3212. * the prototype chain using __proto__
  3213. */
  3214. function protoAugment (target, src) {
  3215. /* eslint-disable no-proto */
  3216. target.__proto__ = src;
  3217. /* eslint-enable no-proto */
  3218. }
  3219. /**
  3220. * Augment a target Object or Array by defining
  3221. * hidden properties.
  3222. */
  3223. /* istanbul ignore next */
  3224. function copyAugment (target, src, keys) {
  3225. for (var i = 0, l = keys.length; i < l; i++) {
  3226. var key = keys[i];
  3227. def(target, key, src[key]);
  3228. }
  3229. }
  3230. /**
  3231. * Attempt to create an observer instance for a value,
  3232. * returns the new observer if successfully observed,
  3233. * or the existing observer if the value already has one.
  3234. */
  3235. function observe (value, asRootData) {
  3236. if (!isObject(value) || value instanceof VNode) {
  3237. return
  3238. }
  3239. var ob;
  3240. if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
  3241. ob = value.__ob__;
  3242. } else if (
  3243. shouldObserve &&
  3244. !isServerRendering() &&
  3245. (Array.isArray(value) || isPlainObject(value)) &&
  3246. Object.isExtensible(value) &&
  3247. !value._isVue
  3248. ) {
  3249. ob = new Observer(value);
  3250. }
  3251. if (asRootData && ob) {
  3252. ob.vmCount++;
  3253. }
  3254. return ob
  3255. }
  3256. /**
  3257. * Define a reactive property on an Object.
  3258. */
  3259. function defineReactive$$1 (
  3260. obj,
  3261. key,
  3262. val,
  3263. customSetter,
  3264. shallow
  3265. ) {
  3266. var dep = new Dep();
  3267. var property = Object.getOwnPropertyDescriptor(obj, key);
  3268. if (property && property.configurable === false) {
  3269. return
  3270. }
  3271. // cater for pre-defined getter/setters
  3272. var getter = property && property.get;
  3273. var setter = property && property.set;
  3274. if ((!getter || setter) && arguments.length === 2) {
  3275. val = obj[key];
  3276. }
  3277. var childOb = !shallow && observe(val);
  3278. Object.defineProperty(obj, key, {
  3279. enumerable: true,
  3280. configurable: true,
  3281. get: function reactiveGetter () {
  3282. var value = getter ? getter.call(obj) : val;
  3283. if (Dep.SharedObject.target) { // fixed by xxxxxx
  3284. dep.depend();
  3285. if (childOb) {
  3286. childOb.dep.depend();
  3287. if (Array.isArray(value)) {
  3288. dependArray(value);
  3289. }
  3290. }
  3291. }
  3292. return value
  3293. },
  3294. set: function reactiveSetter (newVal) {
  3295. var value = getter ? getter.call(obj) : val;
  3296. /* eslint-disable no-self-compare */
  3297. if (newVal === value || (newVal !== newVal && value !== value)) {
  3298. return
  3299. }
  3300. /* eslint-enable no-self-compare */
  3301. if ( true && customSetter) {
  3302. customSetter();
  3303. }
  3304. // #7981: for accessor properties without setter
  3305. if (getter && !setter) { return }
  3306. if (setter) {
  3307. setter.call(obj, newVal);
  3308. } else {
  3309. val = newVal;
  3310. }
  3311. childOb = !shallow && observe(newVal);
  3312. dep.notify();
  3313. }
  3314. });
  3315. }
  3316. /**
  3317. * Set a property on an object. Adds the new property and
  3318. * triggers change notification if the property doesn't
  3319. * already exist.
  3320. */
  3321. function set (target, key, val) {
  3322. if ( true &&
  3323. (isUndef(target) || isPrimitive(target))
  3324. ) {
  3325. warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
  3326. }
  3327. if (Array.isArray(target) && isValidArrayIndex(key)) {
  3328. target.length = Math.max(target.length, key);
  3329. target.splice(key, 1, val);
  3330. return val
  3331. }
  3332. if (key in target && !(key in Object.prototype)) {
  3333. target[key] = val;
  3334. return val
  3335. }
  3336. var ob = (target).__ob__;
  3337. if (target._isVue || (ob && ob.vmCount)) {
  3338. true && warn(
  3339. 'Avoid adding reactive properties to a Vue instance or its root $data ' +
  3340. 'at runtime - declare it upfront in the data option.'
  3341. );
  3342. return val
  3343. }
  3344. if (!ob) {
  3345. target[key] = val;
  3346. return val
  3347. }
  3348. defineReactive$$1(ob.value, key, val);
  3349. ob.dep.notify();
  3350. return val
  3351. }
  3352. /**
  3353. * Delete a property and trigger change if necessary.
  3354. */
  3355. function del (target, key) {
  3356. if ( true &&
  3357. (isUndef(target) || isPrimitive(target))
  3358. ) {
  3359. warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
  3360. }
  3361. if (Array.isArray(target) && isValidArrayIndex(key)) {
  3362. target.splice(key, 1);
  3363. return
  3364. }
  3365. var ob = (target).__ob__;
  3366. if (target._isVue || (ob && ob.vmCount)) {
  3367. true && warn(
  3368. 'Avoid deleting properties on a Vue instance or its root $data ' +
  3369. '- just set it to null.'
  3370. );
  3371. return
  3372. }
  3373. if (!hasOwn(target, key)) {
  3374. return
  3375. }
  3376. delete target[key];
  3377. if (!ob) {
  3378. return
  3379. }
  3380. ob.dep.notify();
  3381. }
  3382. /**
  3383. * Collect dependencies on array elements when the array is touched, since
  3384. * we cannot intercept array element access like property getters.
  3385. */
  3386. function dependArray (value) {
  3387. for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
  3388. e = value[i];
  3389. e && e.__ob__ && e.__ob__.dep.depend();
  3390. if (Array.isArray(e)) {
  3391. dependArray(e);
  3392. }
  3393. }
  3394. }
  3395. /* */
  3396. /**
  3397. * Option overwriting strategies are functions that handle
  3398. * how to merge a parent option value and a child option
  3399. * value into the final value.
  3400. */
  3401. var strats = config.optionMergeStrategies;
  3402. /**
  3403. * Options with restrictions
  3404. */
  3405. if (true) {
  3406. strats.el = strats.propsData = function (parent, child, vm, key) {
  3407. if (!vm) {
  3408. warn(
  3409. "option \"" + key + "\" can only be used during instance " +
  3410. 'creation with the `new` keyword.'
  3411. );
  3412. }
  3413. return defaultStrat(parent, child)
  3414. };
  3415. }
  3416. /**
  3417. * Helper that recursively merges two data objects together.
  3418. */
  3419. function mergeData (to, from) {
  3420. if (!from) { return to }
  3421. var key, toVal, fromVal;
  3422. var keys = hasSymbol
  3423. ? Reflect.ownKeys(from)
  3424. : Object.keys(from);
  3425. for (var i = 0; i < keys.length; i++) {
  3426. key = keys[i];
  3427. // in case the object is already observed...
  3428. if (key === '__ob__') { continue }
  3429. toVal = to[key];
  3430. fromVal = from[key];
  3431. if (!hasOwn(to, key)) {
  3432. set(to, key, fromVal);
  3433. } else if (
  3434. toVal !== fromVal &&
  3435. isPlainObject(toVal) &&
  3436. isPlainObject(fromVal)
  3437. ) {
  3438. mergeData(toVal, fromVal);
  3439. }
  3440. }
  3441. return to
  3442. }
  3443. /**
  3444. * Data
  3445. */
  3446. function mergeDataOrFn (
  3447. parentVal,
  3448. childVal,
  3449. vm
  3450. ) {
  3451. if (!vm) {
  3452. // in a Vue.extend merge, both should be functions
  3453. if (!childVal) {
  3454. return parentVal
  3455. }
  3456. if (!parentVal) {
  3457. return childVal
  3458. }
  3459. // when parentVal & childVal are both present,
  3460. // we need to return a function that returns the
  3461. // merged result of both functions... no need to
  3462. // check if parentVal is a function here because
  3463. // it has to be a function to pass previous merges.
  3464. return function mergedDataFn () {
  3465. return mergeData(
  3466. typeof childVal === 'function' ? childVal.call(this, this) : childVal,
  3467. typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
  3468. )
  3469. }
  3470. } else {
  3471. return function mergedInstanceDataFn () {
  3472. // instance merge
  3473. var instanceData = typeof childVal === 'function'
  3474. ? childVal.call(vm, vm)
  3475. : childVal;
  3476. var defaultData = typeof parentVal === 'function'
  3477. ? parentVal.call(vm, vm)
  3478. : parentVal;
  3479. if (instanceData) {
  3480. return mergeData(instanceData, defaultData)
  3481. } else {
  3482. return defaultData
  3483. }
  3484. }
  3485. }
  3486. }
  3487. strats.data = function (
  3488. parentVal,
  3489. childVal,
  3490. vm
  3491. ) {
  3492. if (!vm) {
  3493. if (childVal && typeof childVal !== 'function') {
  3494. true && warn(
  3495. 'The "data" option should be a function ' +
  3496. 'that returns a per-instance value in component ' +
  3497. 'definitions.',
  3498. vm
  3499. );
  3500. return parentVal
  3501. }
  3502. return mergeDataOrFn(parentVal, childVal)
  3503. }
  3504. return mergeDataOrFn(parentVal, childVal, vm)
  3505. };
  3506. /**
  3507. * Hooks and props are merged as arrays.
  3508. */
  3509. function mergeHook (
  3510. parentVal,
  3511. childVal
  3512. ) {
  3513. var res = childVal
  3514. ? parentVal
  3515. ? parentVal.concat(childVal)
  3516. : Array.isArray(childVal)
  3517. ? childVal
  3518. : [childVal]
  3519. : parentVal;
  3520. return res
  3521. ? dedupeHooks(res)
  3522. : res
  3523. }
  3524. function dedupeHooks (hooks) {
  3525. var res = [];
  3526. for (var i = 0; i < hooks.length; i++) {
  3527. if (res.indexOf(hooks[i]) === -1) {
  3528. res.push(hooks[i]);
  3529. }
  3530. }
  3531. return res
  3532. }
  3533. LIFECYCLE_HOOKS.forEach(function (hook) {
  3534. strats[hook] = mergeHook;
  3535. });
  3536. /**
  3537. * Assets
  3538. *
  3539. * When a vm is present (instance creation), we need to do
  3540. * a three-way merge between constructor options, instance
  3541. * options and parent options.
  3542. */
  3543. function mergeAssets (
  3544. parentVal,
  3545. childVal,
  3546. vm,
  3547. key
  3548. ) {
  3549. var res = Object.create(parentVal || null);
  3550. if (childVal) {
  3551. true && assertObjectType(key, childVal, vm);
  3552. return extend(res, childVal)
  3553. } else {
  3554. return res
  3555. }
  3556. }
  3557. ASSET_TYPES.forEach(function (type) {
  3558. strats[type + 's'] = mergeAssets;
  3559. });
  3560. /**
  3561. * Watchers.
  3562. *
  3563. * Watchers hashes should not overwrite one
  3564. * another, so we merge them as arrays.
  3565. */
  3566. strats.watch = function (
  3567. parentVal,
  3568. childVal,
  3569. vm,
  3570. key
  3571. ) {
  3572. // work around Firefox's Object.prototype.watch...
  3573. if (parentVal === nativeWatch) { parentVal = undefined; }
  3574. if (childVal === nativeWatch) { childVal = undefined; }
  3575. /* istanbul ignore if */
  3576. if (!childVal) { return Object.create(parentVal || null) }
  3577. if (true) {
  3578. assertObjectType(key, childVal, vm);
  3579. }
  3580. if (!parentVal) { return childVal }
  3581. var ret = {};
  3582. extend(ret, parentVal);
  3583. for (var key$1 in childVal) {
  3584. var parent = ret[key$1];
  3585. var child = childVal[key$1];
  3586. if (parent && !Array.isArray(parent)) {
  3587. parent = [parent];
  3588. }
  3589. ret[key$1] = parent
  3590. ? parent.concat(child)
  3591. : Array.isArray(child) ? child : [child];
  3592. }
  3593. return ret
  3594. };
  3595. /**
  3596. * Other object hashes.
  3597. */
  3598. strats.props =
  3599. strats.methods =
  3600. strats.inject =
  3601. strats.computed = function (
  3602. parentVal,
  3603. childVal,
  3604. vm,
  3605. key
  3606. ) {
  3607. if (childVal && "development" !== 'production') {
  3608. assertObjectType(key, childVal, vm);
  3609. }
  3610. if (!parentVal) { return childVal }
  3611. var ret = Object.create(null);
  3612. extend(ret, parentVal);
  3613. if (childVal) { extend(ret, childVal); }
  3614. return ret
  3615. };
  3616. strats.provide = mergeDataOrFn;
  3617. /**
  3618. * Default strategy.
  3619. */
  3620. var defaultStrat = function (parentVal, childVal) {
  3621. return childVal === undefined
  3622. ? parentVal
  3623. : childVal
  3624. };
  3625. /**
  3626. * Validate component names
  3627. */
  3628. function checkComponents (options) {
  3629. for (var key in options.components) {
  3630. validateComponentName(key);
  3631. }
  3632. }
  3633. function validateComponentName (name) {
  3634. if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
  3635. warn(
  3636. 'Invalid component name: "' + name + '". Component names ' +
  3637. 'should conform to valid custom element name in html5 specification.'
  3638. );
  3639. }
  3640. if (isBuiltInTag(name) || config.isReservedTag(name)) {
  3641. warn(
  3642. 'Do not use built-in or reserved HTML elements as component ' +
  3643. 'id: ' + name
  3644. );
  3645. }
  3646. }
  3647. /**
  3648. * Ensure all props option syntax are normalized into the
  3649. * Object-based format.
  3650. */
  3651. function normalizeProps (options, vm) {
  3652. var props = options.props;
  3653. if (!props) { return }
  3654. var res = {};
  3655. var i, val, name;
  3656. if (Array.isArray(props)) {
  3657. i = props.length;
  3658. while (i--) {
  3659. val = props[i];
  3660. if (typeof val === 'string') {
  3661. name = camelize(val);
  3662. res[name] = { type: null };
  3663. } else if (true) {
  3664. warn('props must be strings when using array syntax.');
  3665. }
  3666. }
  3667. } else if (isPlainObject(props)) {
  3668. for (var key in props) {
  3669. val = props[key];
  3670. name = camelize(key);
  3671. res[name] = isPlainObject(val)
  3672. ? val
  3673. : { type: val };
  3674. }
  3675. } else if (true) {
  3676. warn(
  3677. "Invalid value for option \"props\": expected an Array or an Object, " +
  3678. "but got " + (toRawType(props)) + ".",
  3679. vm
  3680. );
  3681. }
  3682. options.props = res;
  3683. }
  3684. /**
  3685. * Normalize all injections into Object-based format
  3686. */
  3687. function normalizeInject (options, vm) {
  3688. var inject = options.inject;
  3689. if (!inject) { return }
  3690. var normalized = options.inject = {};
  3691. if (Array.isArray(inject)) {
  3692. for (var i = 0; i < inject.length; i++) {
  3693. normalized[inject[i]] = { from: inject[i] };
  3694. }
  3695. } else if (isPlainObject(inject)) {
  3696. for (var key in inject) {
  3697. var val = inject[key];
  3698. normalized[key] = isPlainObject(val)
  3699. ? extend({ from: key }, val)
  3700. : { from: val };
  3701. }
  3702. } else if (true) {
  3703. warn(
  3704. "Invalid value for option \"inject\": expected an Array or an Object, " +
  3705. "but got " + (toRawType(inject)) + ".",
  3706. vm
  3707. );
  3708. }
  3709. }
  3710. /**
  3711. * Normalize raw function directives into object format.
  3712. */
  3713. function normalizeDirectives (options) {
  3714. var dirs = options.directives;
  3715. if (dirs) {
  3716. for (var key in dirs) {
  3717. var def$$1 = dirs[key];
  3718. if (typeof def$$1 === 'function') {
  3719. dirs[key] = { bind: def$$1, update: def$$1 };
  3720. }
  3721. }
  3722. }
  3723. }
  3724. function assertObjectType (name, value, vm) {
  3725. if (!isPlainObject(value)) {
  3726. warn(
  3727. "Invalid value for option \"" + name + "\": expected an Object, " +
  3728. "but got " + (toRawType(value)) + ".",
  3729. vm
  3730. );
  3731. }
  3732. }
  3733. /**
  3734. * Merge two option objects into a new one.
  3735. * Core utility used in both instantiation and inheritance.
  3736. */
  3737. function mergeOptions (
  3738. parent,
  3739. child,
  3740. vm
  3741. ) {
  3742. if (true) {
  3743. checkComponents(child);
  3744. }
  3745. if (typeof child === 'function') {
  3746. child = child.options;
  3747. }
  3748. normalizeProps(child, vm);
  3749. normalizeInject(child, vm);
  3750. normalizeDirectives(child);
  3751. // Apply extends and mixins on the child options,
  3752. // but only if it is a raw options object that isn't
  3753. // the result of another mergeOptions call.
  3754. // Only merged options has the _base property.
  3755. if (!child._base) {
  3756. if (child.extends) {
  3757. parent = mergeOptions(parent, child.extends, vm);
  3758. }
  3759. if (child.mixins) {
  3760. for (var i = 0, l = child.mixins.length; i < l; i++) {
  3761. parent = mergeOptions(parent, child.mixins[i], vm);
  3762. }
  3763. }
  3764. }
  3765. var options = {};
  3766. var key;
  3767. for (key in parent) {
  3768. mergeField(key);
  3769. }
  3770. for (key in child) {
  3771. if (!hasOwn(parent, key)) {
  3772. mergeField(key);
  3773. }
  3774. }
  3775. function mergeField (key) {
  3776. var strat = strats[key] || defaultStrat;
  3777. options[key] = strat(parent[key], child[key], vm, key);
  3778. }
  3779. return options
  3780. }
  3781. /**
  3782. * Resolve an asset.
  3783. * This function is used because child instances need access
  3784. * to assets defined in its ancestor chain.
  3785. */
  3786. function resolveAsset (
  3787. options,
  3788. type,
  3789. id,
  3790. warnMissing
  3791. ) {
  3792. /* istanbul ignore if */
  3793. if (typeof id !== 'string') {
  3794. return
  3795. }
  3796. var assets = options[type];
  3797. // check local registration variations first
  3798. if (hasOwn(assets, id)) { return assets[id] }
  3799. var camelizedId = camelize(id);
  3800. if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
  3801. var PascalCaseId = capitalize(camelizedId);
  3802. if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
  3803. // fallback to prototype chain
  3804. var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
  3805. if ( true && warnMissing && !res) {
  3806. warn(
  3807. 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
  3808. options
  3809. );
  3810. }
  3811. return res
  3812. }
  3813. /* */
  3814. function validateProp (
  3815. key,
  3816. propOptions,
  3817. propsData,
  3818. vm
  3819. ) {
  3820. var prop = propOptions[key];
  3821. var absent = !hasOwn(propsData, key);
  3822. var value = propsData[key];
  3823. // boolean casting
  3824. var booleanIndex = getTypeIndex(Boolean, prop.type);
  3825. if (booleanIndex > -1) {
  3826. if (absent && !hasOwn(prop, 'default')) {
  3827. value = false;
  3828. } else if (value === '' || value === hyphenate(key)) {
  3829. // only cast empty string / same name to boolean if
  3830. // boolean has higher priority
  3831. var stringIndex = getTypeIndex(String, prop.type);
  3832. if (stringIndex < 0 || booleanIndex < stringIndex) {
  3833. value = true;
  3834. }
  3835. }
  3836. }
  3837. // check default value
  3838. if (value === undefined) {
  3839. value = getPropDefaultValue(vm, prop, key);
  3840. // since the default value is a fresh copy,
  3841. // make sure to observe it.
  3842. var prevShouldObserve = shouldObserve;
  3843. toggleObserving(true);
  3844. observe(value);
  3845. toggleObserving(prevShouldObserve);
  3846. }
  3847. if (
  3848. true
  3849. ) {
  3850. assertProp(prop, key, value, vm, absent);
  3851. }
  3852. return value
  3853. }
  3854. /**
  3855. * Get the default value of a prop.
  3856. */
  3857. function getPropDefaultValue (vm, prop, key) {
  3858. // no default, return undefined
  3859. if (!hasOwn(prop, 'default')) {
  3860. return undefined
  3861. }
  3862. var def = prop.default;
  3863. // warn against non-factory defaults for Object & Array
  3864. if ( true && isObject(def)) {
  3865. warn(
  3866. 'Invalid default value for prop "' + key + '": ' +
  3867. 'Props with type Object/Array must use a factory function ' +
  3868. 'to return the default value.',
  3869. vm
  3870. );
  3871. }
  3872. // the raw prop value was also undefined from previous render,
  3873. // return previous default value to avoid unnecessary watcher trigger
  3874. if (vm && vm.$options.propsData &&
  3875. vm.$options.propsData[key] === undefined &&
  3876. vm._props[key] !== undefined
  3877. ) {
  3878. return vm._props[key]
  3879. }
  3880. // call factory function for non-Function types
  3881. // a value is Function if its prototype is function even across different execution context
  3882. return typeof def === 'function' && getType(prop.type) !== 'Function'
  3883. ? def.call(vm)
  3884. : def
  3885. }
  3886. /**
  3887. * Assert whether a prop is valid.
  3888. */
  3889. function assertProp (
  3890. prop,
  3891. name,
  3892. value,
  3893. vm,
  3894. absent
  3895. ) {
  3896. if (prop.required && absent) {
  3897. warn(
  3898. 'Missing required prop: "' + name + '"',
  3899. vm
  3900. );
  3901. return
  3902. }
  3903. if (value == null && !prop.required) {
  3904. return
  3905. }
  3906. var type = prop.type;
  3907. var valid = !type || type === true;
  3908. var expectedTypes = [];
  3909. if (type) {
  3910. if (!Array.isArray(type)) {
  3911. type = [type];
  3912. }
  3913. for (var i = 0; i < type.length && !valid; i++) {
  3914. var assertedType = assertType(value, type[i]);
  3915. expectedTypes.push(assertedType.expectedType || '');
  3916. valid = assertedType.valid;
  3917. }
  3918. }
  3919. if (!valid) {
  3920. warn(
  3921. getInvalidTypeMessage(name, value, expectedTypes),
  3922. vm
  3923. );
  3924. return
  3925. }
  3926. var validator = prop.validator;
  3927. if (validator) {
  3928. if (!validator(value)) {
  3929. warn(
  3930. 'Invalid prop: custom validator check failed for prop "' + name + '".',
  3931. vm
  3932. );
  3933. }
  3934. }
  3935. }
  3936. var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
  3937. function assertType (value, type) {
  3938. var valid;
  3939. var expectedType = getType(type);
  3940. if (simpleCheckRE.test(expectedType)) {
  3941. var t = typeof value;
  3942. valid = t === expectedType.toLowerCase();
  3943. // for primitive wrapper objects
  3944. if (!valid && t === 'object') {
  3945. valid = value instanceof type;
  3946. }
  3947. } else if (expectedType === 'Object') {
  3948. valid = isPlainObject(value);
  3949. } else if (expectedType === 'Array') {
  3950. valid = Array.isArray(value);
  3951. } else {
  3952. valid = value instanceof type;
  3953. }
  3954. return {
  3955. valid: valid,
  3956. expectedType: expectedType
  3957. }
  3958. }
  3959. /**
  3960. * Use function string name to check built-in types,
  3961. * because a simple equality check will fail when running
  3962. * across different vms / iframes.
  3963. */
  3964. function getType (fn) {
  3965. var match = fn && fn.toString().match(/^\s*function (\w+)/);
  3966. return match ? match[1] : ''
  3967. }
  3968. function isSameType (a, b) {
  3969. return getType(a) === getType(b)
  3970. }
  3971. function getTypeIndex (type, expectedTypes) {
  3972. if (!Array.isArray(expectedTypes)) {
  3973. return isSameType(expectedTypes, type) ? 0 : -1
  3974. }
  3975. for (var i = 0, len = expectedTypes.length; i < len; i++) {
  3976. if (isSameType(expectedTypes[i], type)) {
  3977. return i
  3978. }
  3979. }
  3980. return -1
  3981. }
  3982. function getInvalidTypeMessage (name, value, expectedTypes) {
  3983. var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
  3984. " Expected " + (expectedTypes.map(capitalize).join(', '));
  3985. var expectedType = expectedTypes[0];
  3986. var receivedType = toRawType(value);
  3987. var expectedValue = styleValue(value, expectedType);
  3988. var receivedValue = styleValue(value, receivedType);
  3989. // check if we need to specify expected value
  3990. if (expectedTypes.length === 1 &&
  3991. isExplicable(expectedType) &&
  3992. !isBoolean(expectedType, receivedType)) {
  3993. message += " with value " + expectedValue;
  3994. }
  3995. message += ", got " + receivedType + " ";
  3996. // check if we need to specify received value
  3997. if (isExplicable(receivedType)) {
  3998. message += "with value " + receivedValue + ".";
  3999. }
  4000. return message
  4001. }
  4002. function styleValue (value, type) {
  4003. if (type === 'String') {
  4004. return ("\"" + value + "\"")
  4005. } else if (type === 'Number') {
  4006. return ("" + (Number(value)))
  4007. } else {
  4008. return ("" + value)
  4009. }
  4010. }
  4011. function isExplicable (value) {
  4012. var explicitTypes = ['string', 'number', 'boolean'];
  4013. return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
  4014. }
  4015. function isBoolean () {
  4016. var args = [], len = arguments.length;
  4017. while ( len-- ) args[ len ] = arguments[ len ];
  4018. return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
  4019. }
  4020. /* */
  4021. function handleError (err, vm, info) {
  4022. // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
  4023. // See: https://github.com/vuejs/vuex/issues/1505
  4024. pushTarget();
  4025. try {
  4026. if (vm) {
  4027. var cur = vm;
  4028. while ((cur = cur.$parent)) {
  4029. var hooks = cur.$options.errorCaptured;
  4030. if (hooks) {
  4031. for (var i = 0; i < hooks.length; i++) {
  4032. try {
  4033. var capture = hooks[i].call(cur, err, vm, info) === false;
  4034. if (capture) { return }
  4035. } catch (e) {
  4036. globalHandleError(e, cur, 'errorCaptured hook');
  4037. }
  4038. }
  4039. }
  4040. }
  4041. }
  4042. globalHandleError(err, vm, info);
  4043. } finally {
  4044. popTarget();
  4045. }
  4046. }
  4047. function invokeWithErrorHandling (
  4048. handler,
  4049. context,
  4050. args,
  4051. vm,
  4052. info
  4053. ) {
  4054. var res;
  4055. try {
  4056. res = args ? handler.apply(context, args) : handler.call(context);
  4057. if (res && !res._isVue && isPromise(res) && !res._handled) {
  4058. res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
  4059. // issue #9511
  4060. // avoid catch triggering multiple times when nested calls
  4061. res._handled = true;
  4062. }
  4063. } catch (e) {
  4064. handleError(e, vm, info);
  4065. }
  4066. return res
  4067. }
  4068. function globalHandleError (err, vm, info) {
  4069. if (config.errorHandler) {
  4070. try {
  4071. return config.errorHandler.call(null, err, vm, info)
  4072. } catch (e) {
  4073. // if the user intentionally throws the original error in the handler,
  4074. // do not log it twice
  4075. if (e !== err) {
  4076. logError(e, null, 'config.errorHandler');
  4077. }
  4078. }
  4079. }
  4080. logError(err, vm, info);
  4081. }
  4082. function logError (err, vm, info) {
  4083. if (true) {
  4084. warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  4085. }
  4086. /* istanbul ignore else */
  4087. if ((inBrowser || inWeex) && typeof console !== 'undefined') {
  4088. console.error(err);
  4089. } else {
  4090. throw err
  4091. }
  4092. }
  4093. /* */
  4094. var callbacks = [];
  4095. var pending = false;
  4096. function flushCallbacks () {
  4097. pending = false;
  4098. var copies = callbacks.slice(0);
  4099. callbacks.length = 0;
  4100. for (var i = 0; i < copies.length; i++) {
  4101. copies[i]();
  4102. }
  4103. }
  4104. // Here we have async deferring wrappers using microtasks.
  4105. // In 2.5 we used (macro) tasks (in combination with microtasks).
  4106. // However, it has subtle problems when state is changed right before repaint
  4107. // (e.g. #6813, out-in transitions).
  4108. // Also, using (macro) tasks in event handler would cause some weird behaviors
  4109. // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  4110. // So we now use microtasks everywhere, again.
  4111. // A major drawback of this tradeoff is that there are some scenarios
  4112. // where microtasks have too high a priority and fire in between supposedly
  4113. // sequential events (e.g. #4521, #6690, which have workarounds)
  4114. // or even between bubbling of the same event (#6566).
  4115. var timerFunc;
  4116. // The nextTick behavior leverages the microtask queue, which can be accessed
  4117. // via either native Promise.then or MutationObserver.
  4118. // MutationObserver has wider support, however it is seriously bugged in
  4119. // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  4120. // completely stops working after triggering a few times... so, if native
  4121. // Promise is available, we will use it:
  4122. /* istanbul ignore next, $flow-disable-line */
  4123. if (typeof Promise !== 'undefined' && isNative(Promise)) {
  4124. var p = Promise.resolve();
  4125. timerFunc = function () {
  4126. p.then(flushCallbacks);
  4127. // In problematic UIWebViews, Promise.then doesn't completely break, but
  4128. // it can get stuck in a weird state where callbacks are pushed into the
  4129. // microtask queue but the queue isn't being flushed, until the browser
  4130. // needs to do some other work, e.g. handle a timer. Therefore we can
  4131. // "force" the microtask queue to be flushed by adding an empty timer.
  4132. if (isIOS) { setTimeout(noop); }
  4133. };
  4134. } else if (!isIE && typeof MutationObserver !== 'undefined' && (
  4135. isNative(MutationObserver) ||
  4136. // PhantomJS and iOS 7.x
  4137. MutationObserver.toString() === '[object MutationObserverConstructor]'
  4138. )) {
  4139. // Use MutationObserver where native Promise is not available,
  4140. // e.g. PhantomJS, iOS7, Android 4.4
  4141. // (#6466 MutationObserver is unreliable in IE11)
  4142. var counter = 1;
  4143. var observer = new MutationObserver(flushCallbacks);
  4144. var textNode = document.createTextNode(String(counter));
  4145. observer.observe(textNode, {
  4146. characterData: true
  4147. });
  4148. timerFunc = function () {
  4149. counter = (counter + 1) % 2;
  4150. textNode.data = String(counter);
  4151. };
  4152. } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
  4153. // Fallback to setImmediate.
  4154. // Technically it leverages the (macro) task queue,
  4155. // but it is still a better choice than setTimeout.
  4156. timerFunc = function () {
  4157. setImmediate(flushCallbacks);
  4158. };
  4159. } else {
  4160. // Fallback to setTimeout.
  4161. timerFunc = function () {
  4162. setTimeout(flushCallbacks, 0);
  4163. };
  4164. }
  4165. function nextTick (cb, ctx) {
  4166. var _resolve;
  4167. callbacks.push(function () {
  4168. if (cb) {
  4169. try {
  4170. cb.call(ctx);
  4171. } catch (e) {
  4172. handleError(e, ctx, 'nextTick');
  4173. }
  4174. } else if (_resolve) {
  4175. _resolve(ctx);
  4176. }
  4177. });
  4178. if (!pending) {
  4179. pending = true;
  4180. timerFunc();
  4181. }
  4182. // $flow-disable-line
  4183. if (!cb && typeof Promise !== 'undefined') {
  4184. return new Promise(function (resolve) {
  4185. _resolve = resolve;
  4186. })
  4187. }
  4188. }
  4189. /* */
  4190. /* not type checking this file because flow doesn't play well with Proxy */
  4191. var initProxy;
  4192. if (true) {
  4193. var allowedGlobals = makeMap(
  4194. 'Infinity,undefined,NaN,isFinite,isNaN,' +
  4195. 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
  4196. 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
  4197. 'require' // for Webpack/Browserify
  4198. );
  4199. var warnNonPresent = function (target, key) {
  4200. warn(
  4201. "Property or method \"" + key + "\" is not defined on the instance but " +
  4202. 'referenced during render. Make sure that this property is reactive, ' +
  4203. 'either in the data option, or for class-based components, by ' +
  4204. 'initializing the property. ' +
  4205. 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
  4206. target
  4207. );
  4208. };
  4209. var warnReservedPrefix = function (target, key) {
  4210. warn(
  4211. "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
  4212. 'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
  4213. 'prevent conflicts with Vue internals. ' +
  4214. 'See: https://vuejs.org/v2/api/#data',
  4215. target
  4216. );
  4217. };
  4218. var hasProxy =
  4219. typeof Proxy !== 'undefined' && isNative(Proxy);
  4220. if (hasProxy) {
  4221. var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
  4222. config.keyCodes = new Proxy(config.keyCodes, {
  4223. set: function set (target, key, value) {
  4224. if (isBuiltInModifier(key)) {
  4225. warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
  4226. return false
  4227. } else {
  4228. target[key] = value;
  4229. return true
  4230. }
  4231. }
  4232. });
  4233. }
  4234. var hasHandler = {
  4235. has: function has (target, key) {
  4236. var has = key in target;
  4237. var isAllowed = allowedGlobals(key) ||
  4238. (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
  4239. if (!has && !isAllowed) {
  4240. if (key in target.$data) { warnReservedPrefix(target, key); }
  4241. else { warnNonPresent(target, key); }
  4242. }
  4243. return has || !isAllowed
  4244. }
  4245. };
  4246. var getHandler = {
  4247. get: function get (target, key) {
  4248. if (typeof key === 'string' && !(key in target)) {
  4249. if (key in target.$data) { warnReservedPrefix(target, key); }
  4250. else { warnNonPresent(target, key); }
  4251. }
  4252. return target[key]
  4253. }
  4254. };
  4255. initProxy = function initProxy (vm) {
  4256. if (hasProxy) {
  4257. // determine which proxy handler to use
  4258. var options = vm.$options;
  4259. var handlers = options.render && options.render._withStripped
  4260. ? getHandler
  4261. : hasHandler;
  4262. vm._renderProxy = new Proxy(vm, handlers);
  4263. } else {
  4264. vm._renderProxy = vm;
  4265. }
  4266. };
  4267. }
  4268. /* */
  4269. var seenObjects = new _Set();
  4270. /**
  4271. * Recursively traverse an object to evoke all converted
  4272. * getters, so that every nested property inside the object
  4273. * is collected as a "deep" dependency.
  4274. */
  4275. function traverse (val) {
  4276. _traverse(val, seenObjects);
  4277. seenObjects.clear();
  4278. }
  4279. function _traverse (val, seen) {
  4280. var i, keys;
  4281. var isA = Array.isArray(val);
  4282. if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
  4283. return
  4284. }
  4285. if (val.__ob__) {
  4286. var depId = val.__ob__.dep.id;
  4287. if (seen.has(depId)) {
  4288. return
  4289. }
  4290. seen.add(depId);
  4291. }
  4292. if (isA) {
  4293. i = val.length;
  4294. while (i--) { _traverse(val[i], seen); }
  4295. } else {
  4296. keys = Object.keys(val);
  4297. i = keys.length;
  4298. while (i--) { _traverse(val[keys[i]], seen); }
  4299. }
  4300. }
  4301. var mark;
  4302. var measure;
  4303. if (true) {
  4304. var perf = inBrowser && window.performance;
  4305. /* istanbul ignore if */
  4306. if (
  4307. perf &&
  4308. perf.mark &&
  4309. perf.measure &&
  4310. perf.clearMarks &&
  4311. perf.clearMeasures
  4312. ) {
  4313. mark = function (tag) { return perf.mark(tag); };
  4314. measure = function (name, startTag, endTag) {
  4315. perf.measure(name, startTag, endTag);
  4316. perf.clearMarks(startTag);
  4317. perf.clearMarks(endTag);
  4318. // perf.clearMeasures(name)
  4319. };
  4320. }
  4321. }
  4322. /* */
  4323. var normalizeEvent = cached(function (name) {
  4324. var passive = name.charAt(0) === '&';
  4325. name = passive ? name.slice(1) : name;
  4326. var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
  4327. name = once$$1 ? name.slice(1) : name;
  4328. var capture = name.charAt(0) === '!';
  4329. name = capture ? name.slice(1) : name;
  4330. return {
  4331. name: name,
  4332. once: once$$1,
  4333. capture: capture,
  4334. passive: passive
  4335. }
  4336. });
  4337. function createFnInvoker (fns, vm) {
  4338. function invoker () {
  4339. var arguments$1 = arguments;
  4340. var fns = invoker.fns;
  4341. if (Array.isArray(fns)) {
  4342. var cloned = fns.slice();
  4343. for (var i = 0; i < cloned.length; i++) {
  4344. invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
  4345. }
  4346. } else {
  4347. // return handler return value for single handlers
  4348. return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
  4349. }
  4350. }
  4351. invoker.fns = fns;
  4352. return invoker
  4353. }
  4354. function updateListeners (
  4355. on,
  4356. oldOn,
  4357. add,
  4358. remove$$1,
  4359. createOnceHandler,
  4360. vm
  4361. ) {
  4362. var name, def$$1, cur, old, event;
  4363. for (name in on) {
  4364. def$$1 = cur = on[name];
  4365. old = oldOn[name];
  4366. event = normalizeEvent(name);
  4367. if (isUndef(cur)) {
  4368. true && warn(
  4369. "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
  4370. vm
  4371. );
  4372. } else if (isUndef(old)) {
  4373. if (isUndef(cur.fns)) {
  4374. cur = on[name] = createFnInvoker(cur, vm);
  4375. }
  4376. if (isTrue(event.once)) {
  4377. cur = on[name] = createOnceHandler(event.name, cur, event.capture);
  4378. }
  4379. add(event.name, cur, event.capture, event.passive, event.params);
  4380. } else if (cur !== old) {
  4381. old.fns = cur;
  4382. on[name] = old;
  4383. }
  4384. }
  4385. for (name in oldOn) {
  4386. if (isUndef(on[name])) {
  4387. event = normalizeEvent(name);
  4388. remove$$1(event.name, oldOn[name], event.capture);
  4389. }
  4390. }
  4391. }
  4392. /* */
  4393. /* */
  4394. // fixed by xxxxxx (mp properties)
  4395. function extractPropertiesFromVNodeData(data, Ctor, res, context) {
  4396. var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;
  4397. if (isUndef(propOptions)) {
  4398. return res
  4399. }
  4400. var externalClasses = Ctor.options.mpOptions.externalClasses || [];
  4401. var attrs = data.attrs;
  4402. var props = data.props;
  4403. if (isDef(attrs) || isDef(props)) {
  4404. for (var key in propOptions) {
  4405. var altKey = hyphenate(key);
  4406. var result = checkProp(res, props, key, altKey, true) ||
  4407. checkProp(res, attrs, key, altKey, false);
  4408. // externalClass
  4409. if (
  4410. result &&
  4411. res[key] &&
  4412. externalClasses.indexOf(altKey) !== -1 &&
  4413. context[camelize(res[key])]
  4414. ) {
  4415. // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)
  4416. res[key] = context[camelize(res[key])];
  4417. }
  4418. }
  4419. }
  4420. return res
  4421. }
  4422. function extractPropsFromVNodeData (
  4423. data,
  4424. Ctor,
  4425. tag,
  4426. context// fixed by xxxxxx
  4427. ) {
  4428. // we are only extracting raw values here.
  4429. // validation and default values are handled in the child
  4430. // component itself.
  4431. var propOptions = Ctor.options.props;
  4432. if (isUndef(propOptions)) {
  4433. // fixed by xxxxxx
  4434. return extractPropertiesFromVNodeData(data, Ctor, {}, context)
  4435. }
  4436. var res = {};
  4437. var attrs = data.attrs;
  4438. var props = data.props;
  4439. if (isDef(attrs) || isDef(props)) {
  4440. for (var key in propOptions) {
  4441. var altKey = hyphenate(key);
  4442. if (true) {
  4443. var keyInLowerCase = key.toLowerCase();
  4444. if (
  4445. key !== keyInLowerCase &&
  4446. attrs && hasOwn(attrs, keyInLowerCase)
  4447. ) {
  4448. tip(
  4449. "Prop \"" + keyInLowerCase + "\" is passed to component " +
  4450. (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
  4451. " \"" + key + "\". " +
  4452. "Note that HTML attributes are case-insensitive and camelCased " +
  4453. "props need to use their kebab-case equivalents when using in-DOM " +
  4454. "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
  4455. );
  4456. }
  4457. }
  4458. checkProp(res, props, key, altKey, true) ||
  4459. checkProp(res, attrs, key, altKey, false);
  4460. }
  4461. }
  4462. // fixed by xxxxxx
  4463. return extractPropertiesFromVNodeData(data, Ctor, res, context)
  4464. }
  4465. function checkProp (
  4466. res,
  4467. hash,
  4468. key,
  4469. altKey,
  4470. preserve
  4471. ) {
  4472. if (isDef(hash)) {
  4473. if (hasOwn(hash, key)) {
  4474. res[key] = hash[key];
  4475. if (!preserve) {
  4476. delete hash[key];
  4477. }
  4478. return true
  4479. } else if (hasOwn(hash, altKey)) {
  4480. res[key] = hash[altKey];
  4481. if (!preserve) {
  4482. delete hash[altKey];
  4483. }
  4484. return true
  4485. }
  4486. }
  4487. return false
  4488. }
  4489. /* */
  4490. // The template compiler attempts to minimize the need for normalization by
  4491. // statically analyzing the template at compile time.
  4492. //
  4493. // For plain HTML markup, normalization can be completely skipped because the
  4494. // generated render function is guaranteed to return Array<VNode>. There are
  4495. // two cases where extra normalization is needed:
  4496. // 1. When the children contains components - because a functional component
  4497. // may return an Array instead of a single root. In this case, just a simple
  4498. // normalization is needed - if any child is an Array, we flatten the whole
  4499. // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  4500. // because functional components already normalize their own children.
  4501. function simpleNormalizeChildren (children) {
  4502. for (var i = 0; i < children.length; i++) {
  4503. if (Array.isArray(children[i])) {
  4504. return Array.prototype.concat.apply([], children)
  4505. }
  4506. }
  4507. return children
  4508. }
  4509. // 2. When the children contains constructs that always generated nested Arrays,
  4510. // e.g. <template>, <slot>, v-for, or when the children is provided by user
  4511. // with hand-written render functions / JSX. In such cases a full normalization
  4512. // is needed to cater to all possible types of children values.
  4513. function normalizeChildren (children) {
  4514. return isPrimitive(children)
  4515. ? [createTextVNode(children)]
  4516. : Array.isArray(children)
  4517. ? normalizeArrayChildren(children)
  4518. : undefined
  4519. }
  4520. function isTextNode (node) {
  4521. return isDef(node) && isDef(node.text) && isFalse(node.isComment)
  4522. }
  4523. function normalizeArrayChildren (children, nestedIndex) {
  4524. var res = [];
  4525. var i, c, lastIndex, last;
  4526. for (i = 0; i < children.length; i++) {
  4527. c = children[i];
  4528. if (isUndef(c) || typeof c === 'boolean') { continue }
  4529. lastIndex = res.length - 1;
  4530. last = res[lastIndex];
  4531. // nested
  4532. if (Array.isArray(c)) {
  4533. if (c.length > 0) {
  4534. c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
  4535. // merge adjacent text nodes
  4536. if (isTextNode(c[0]) && isTextNode(last)) {
  4537. res[lastIndex] = createTextVNode(last.text + (c[0]).text);
  4538. c.shift();
  4539. }
  4540. res.push.apply(res, c);
  4541. }
  4542. } else if (isPrimitive(c)) {
  4543. if (isTextNode(last)) {
  4544. // merge adjacent text nodes
  4545. // this is necessary for SSR hydration because text nodes are
  4546. // essentially merged when rendered to HTML strings
  4547. res[lastIndex] = createTextVNode(last.text + c);
  4548. } else if (c !== '') {
  4549. // convert primitive to vnode
  4550. res.push(createTextVNode(c));
  4551. }
  4552. } else {
  4553. if (isTextNode(c) && isTextNode(last)) {
  4554. // merge adjacent text nodes
  4555. res[lastIndex] = createTextVNode(last.text + c.text);
  4556. } else {
  4557. // default key for nested array children (likely generated by v-for)
  4558. if (isTrue(children._isVList) &&
  4559. isDef(c.tag) &&
  4560. isUndef(c.key) &&
  4561. isDef(nestedIndex)) {
  4562. c.key = "__vlist" + nestedIndex + "_" + i + "__";
  4563. }
  4564. res.push(c);
  4565. }
  4566. }
  4567. }
  4568. return res
  4569. }
  4570. /* */
  4571. function initProvide (vm) {
  4572. var provide = vm.$options.provide;
  4573. if (provide) {
  4574. vm._provided = typeof provide === 'function'
  4575. ? provide.call(vm)
  4576. : provide;
  4577. }
  4578. }
  4579. function initInjections (vm) {
  4580. var result = resolveInject(vm.$options.inject, vm);
  4581. if (result) {
  4582. toggleObserving(false);
  4583. Object.keys(result).forEach(function (key) {
  4584. /* istanbul ignore else */
  4585. if (true) {
  4586. defineReactive$$1(vm, key, result[key], function () {
  4587. warn(
  4588. "Avoid mutating an injected value directly since the changes will be " +
  4589. "overwritten whenever the provided component re-renders. " +
  4590. "injection being mutated: \"" + key + "\"",
  4591. vm
  4592. );
  4593. });
  4594. } else {}
  4595. });
  4596. toggleObserving(true);
  4597. }
  4598. }
  4599. function resolveInject (inject, vm) {
  4600. if (inject) {
  4601. // inject is :any because flow is not smart enough to figure out cached
  4602. var result = Object.create(null);
  4603. var keys = hasSymbol
  4604. ? Reflect.ownKeys(inject)
  4605. : Object.keys(inject);
  4606. for (var i = 0; i < keys.length; i++) {
  4607. var key = keys[i];
  4608. // #6574 in case the inject object is observed...
  4609. if (key === '__ob__') { continue }
  4610. var provideKey = inject[key].from;
  4611. var source = vm;
  4612. while (source) {
  4613. if (source._provided && hasOwn(source._provided, provideKey)) {
  4614. result[key] = source._provided[provideKey];
  4615. break
  4616. }
  4617. source = source.$parent;
  4618. }
  4619. if (!source) {
  4620. if ('default' in inject[key]) {
  4621. var provideDefault = inject[key].default;
  4622. result[key] = typeof provideDefault === 'function'
  4623. ? provideDefault.call(vm)
  4624. : provideDefault;
  4625. } else if (true) {
  4626. warn(("Injection \"" + key + "\" not found"), vm);
  4627. }
  4628. }
  4629. }
  4630. return result
  4631. }
  4632. }
  4633. /* */
  4634. /**
  4635. * Runtime helper for resolving raw children VNodes into a slot object.
  4636. */
  4637. function resolveSlots (
  4638. children,
  4639. context
  4640. ) {
  4641. if (!children || !children.length) {
  4642. return {}
  4643. }
  4644. var slots = {};
  4645. for (var i = 0, l = children.length; i < l; i++) {
  4646. var child = children[i];
  4647. var data = child.data;
  4648. // remove slot attribute if the node is resolved as a Vue slot node
  4649. if (data && data.attrs && data.attrs.slot) {
  4650. delete data.attrs.slot;
  4651. }
  4652. // named slots should only be respected if the vnode was rendered in the
  4653. // same context.
  4654. if ((child.context === context || child.fnContext === context) &&
  4655. data && data.slot != null
  4656. ) {
  4657. var name = data.slot;
  4658. var slot = (slots[name] || (slots[name] = []));
  4659. if (child.tag === 'template') {
  4660. slot.push.apply(slot, child.children || []);
  4661. } else {
  4662. slot.push(child);
  4663. }
  4664. } else {
  4665. // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
  4666. if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){
  4667. (slots['page'] || (slots['page'] = [])).push(child);
  4668. }else{
  4669. (slots.default || (slots.default = [])).push(child);
  4670. }
  4671. }
  4672. }
  4673. // ignore slots that contains only whitespace
  4674. for (var name$1 in slots) {
  4675. if (slots[name$1].every(isWhitespace)) {
  4676. delete slots[name$1];
  4677. }
  4678. }
  4679. return slots
  4680. }
  4681. function isWhitespace (node) {
  4682. return (node.isComment && !node.asyncFactory) || node.text === ' '
  4683. }
  4684. /* */
  4685. function normalizeScopedSlots (
  4686. slots,
  4687. normalSlots,
  4688. prevSlots
  4689. ) {
  4690. var res;
  4691. var hasNormalSlots = Object.keys(normalSlots).length > 0;
  4692. var isStable = slots ? !!slots.$stable : !hasNormalSlots;
  4693. var key = slots && slots.$key;
  4694. if (!slots) {
  4695. res = {};
  4696. } else if (slots._normalized) {
  4697. // fast path 1: child component re-render only, parent did not change
  4698. return slots._normalized
  4699. } else if (
  4700. isStable &&
  4701. prevSlots &&
  4702. prevSlots !== emptyObject &&
  4703. key === prevSlots.$key &&
  4704. !hasNormalSlots &&
  4705. !prevSlots.$hasNormal
  4706. ) {
  4707. // fast path 2: stable scoped slots w/ no normal slots to proxy,
  4708. // only need to normalize once
  4709. return prevSlots
  4710. } else {
  4711. res = {};
  4712. for (var key$1 in slots) {
  4713. if (slots[key$1] && key$1[0] !== '$') {
  4714. res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
  4715. }
  4716. }
  4717. }
  4718. // expose normal slots on scopedSlots
  4719. for (var key$2 in normalSlots) {
  4720. if (!(key$2 in res)) {
  4721. res[key$2] = proxyNormalSlot(normalSlots, key$2);
  4722. }
  4723. }
  4724. // avoriaz seems to mock a non-extensible $scopedSlots object
  4725. // and when that is passed down this would cause an error
  4726. if (slots && Object.isExtensible(slots)) {
  4727. (slots)._normalized = res;
  4728. }
  4729. def(res, '$stable', isStable);
  4730. def(res, '$key', key);
  4731. def(res, '$hasNormal', hasNormalSlots);
  4732. return res
  4733. }
  4734. function normalizeScopedSlot(normalSlots, key, fn) {
  4735. var normalized = function () {
  4736. var res = arguments.length ? fn.apply(null, arguments) : fn({});
  4737. res = res && typeof res === 'object' && !Array.isArray(res)
  4738. ? [res] // single vnode
  4739. : normalizeChildren(res);
  4740. return res && (
  4741. res.length === 0 ||
  4742. (res.length === 1 && res[0].isComment) // #9658
  4743. ) ? undefined
  4744. : res
  4745. };
  4746. // this is a slot using the new v-slot syntax without scope. although it is
  4747. // compiled as a scoped slot, render fn users would expect it to be present
  4748. // on this.$slots because the usage is semantically a normal slot.
  4749. if (fn.proxy) {
  4750. Object.defineProperty(normalSlots, key, {
  4751. get: normalized,
  4752. enumerable: true,
  4753. configurable: true
  4754. });
  4755. }
  4756. return normalized
  4757. }
  4758. function proxyNormalSlot(slots, key) {
  4759. return function () { return slots[key]; }
  4760. }
  4761. /* */
  4762. /**
  4763. * Runtime helper for rendering v-for lists.
  4764. */
  4765. function renderList (
  4766. val,
  4767. render
  4768. ) {
  4769. var ret, i, l, keys, key;
  4770. if (Array.isArray(val) || typeof val === 'string') {
  4771. ret = new Array(val.length);
  4772. for (i = 0, l = val.length; i < l; i++) {
  4773. ret[i] = render(val[i], i, i, i); // fixed by xxxxxx
  4774. }
  4775. } else if (typeof val === 'number') {
  4776. ret = new Array(val);
  4777. for (i = 0; i < val; i++) {
  4778. ret[i] = render(i + 1, i, i, i); // fixed by xxxxxx
  4779. }
  4780. } else if (isObject(val)) {
  4781. if (hasSymbol && val[Symbol.iterator]) {
  4782. ret = [];
  4783. var iterator = val[Symbol.iterator]();
  4784. var result = iterator.next();
  4785. while (!result.done) {
  4786. ret.push(render(result.value, ret.length, i++, i)); // fixed by xxxxxx
  4787. result = iterator.next();
  4788. }
  4789. } else {
  4790. keys = Object.keys(val);
  4791. ret = new Array(keys.length);
  4792. for (i = 0, l = keys.length; i < l; i++) {
  4793. key = keys[i];
  4794. ret[i] = render(val[key], key, i, i); // fixed by xxxxxx
  4795. }
  4796. }
  4797. }
  4798. if (!isDef(ret)) {
  4799. ret = [];
  4800. }
  4801. (ret)._isVList = true;
  4802. return ret
  4803. }
  4804. /* */
  4805. /**
  4806. * Runtime helper for rendering <slot>
  4807. */
  4808. function renderSlot (
  4809. name,
  4810. fallback,
  4811. props,
  4812. bindObject
  4813. ) {
  4814. var scopedSlotFn = this.$scopedSlots[name];
  4815. var nodes;
  4816. if (scopedSlotFn) { // scoped slot
  4817. props = props || {};
  4818. if (bindObject) {
  4819. if ( true && !isObject(bindObject)) {
  4820. warn(
  4821. 'slot v-bind without argument expects an Object',
  4822. this
  4823. );
  4824. }
  4825. props = extend(extend({}, bindObject), props);
  4826. }
  4827. // fixed by xxxxxx app-plus scopedSlot
  4828. nodes = scopedSlotFn(props, this, props._i) || fallback;
  4829. } else {
  4830. nodes = this.$slots[name] || fallback;
  4831. }
  4832. var target = props && props.slot;
  4833. if (target) {
  4834. return this.$createElement('template', { slot: target }, nodes)
  4835. } else {
  4836. return nodes
  4837. }
  4838. }
  4839. /* */
  4840. /**
  4841. * Runtime helper for resolving filters
  4842. */
  4843. function resolveFilter (id) {
  4844. return resolveAsset(this.$options, 'filters', id, true) || identity
  4845. }
  4846. /* */
  4847. function isKeyNotMatch (expect, actual) {
  4848. if (Array.isArray(expect)) {
  4849. return expect.indexOf(actual) === -1
  4850. } else {
  4851. return expect !== actual
  4852. }
  4853. }
  4854. /**
  4855. * Runtime helper for checking keyCodes from config.
  4856. * exposed as Vue.prototype._k
  4857. * passing in eventKeyName as last argument separately for backwards compat
  4858. */
  4859. function checkKeyCodes (
  4860. eventKeyCode,
  4861. key,
  4862. builtInKeyCode,
  4863. eventKeyName,
  4864. builtInKeyName
  4865. ) {
  4866. var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
  4867. if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
  4868. return isKeyNotMatch(builtInKeyName, eventKeyName)
  4869. } else if (mappedKeyCode) {
  4870. return isKeyNotMatch(mappedKeyCode, eventKeyCode)
  4871. } else if (eventKeyName) {
  4872. return hyphenate(eventKeyName) !== key
  4873. }
  4874. }
  4875. /* */
  4876. /**
  4877. * Runtime helper for merging v-bind="object" into a VNode's data.
  4878. */
  4879. function bindObjectProps (
  4880. data,
  4881. tag,
  4882. value,
  4883. asProp,
  4884. isSync
  4885. ) {
  4886. if (value) {
  4887. if (!isObject(value)) {
  4888. true && warn(
  4889. 'v-bind without argument expects an Object or Array value',
  4890. this
  4891. );
  4892. } else {
  4893. if (Array.isArray(value)) {
  4894. value = toObject(value);
  4895. }
  4896. var hash;
  4897. var loop = function ( key ) {
  4898. if (
  4899. key === 'class' ||
  4900. key === 'style' ||
  4901. isReservedAttribute(key)
  4902. ) {
  4903. hash = data;
  4904. } else {
  4905. var type = data.attrs && data.attrs.type;
  4906. hash = asProp || config.mustUseProp(tag, type, key)
  4907. ? data.domProps || (data.domProps = {})
  4908. : data.attrs || (data.attrs = {});
  4909. }
  4910. var camelizedKey = camelize(key);
  4911. var hyphenatedKey = hyphenate(key);
  4912. if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
  4913. hash[key] = value[key];
  4914. if (isSync) {
  4915. var on = data.on || (data.on = {});
  4916. on[("update:" + key)] = function ($event) {
  4917. value[key] = $event;
  4918. };
  4919. }
  4920. }
  4921. };
  4922. for (var key in value) loop( key );
  4923. }
  4924. }
  4925. return data
  4926. }
  4927. /* */
  4928. /**
  4929. * Runtime helper for rendering static trees.
  4930. */
  4931. function renderStatic (
  4932. index,
  4933. isInFor
  4934. ) {
  4935. var cached = this._staticTrees || (this._staticTrees = []);
  4936. var tree = cached[index];
  4937. // if has already-rendered static tree and not inside v-for,
  4938. // we can reuse the same tree.
  4939. if (tree && !isInFor) {
  4940. return tree
  4941. }
  4942. // otherwise, render a fresh tree.
  4943. tree = cached[index] = this.$options.staticRenderFns[index].call(
  4944. this._renderProxy,
  4945. null,
  4946. this // for render fns generated for functional component templates
  4947. );
  4948. markStatic(tree, ("__static__" + index), false);
  4949. return tree
  4950. }
  4951. /**
  4952. * Runtime helper for v-once.
  4953. * Effectively it means marking the node as static with a unique key.
  4954. */
  4955. function markOnce (
  4956. tree,
  4957. index,
  4958. key
  4959. ) {
  4960. markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
  4961. return tree
  4962. }
  4963. function markStatic (
  4964. tree,
  4965. key,
  4966. isOnce
  4967. ) {
  4968. if (Array.isArray(tree)) {
  4969. for (var i = 0; i < tree.length; i++) {
  4970. if (tree[i] && typeof tree[i] !== 'string') {
  4971. markStaticNode(tree[i], (key + "_" + i), isOnce);
  4972. }
  4973. }
  4974. } else {
  4975. markStaticNode(tree, key, isOnce);
  4976. }
  4977. }
  4978. function markStaticNode (node, key, isOnce) {
  4979. node.isStatic = true;
  4980. node.key = key;
  4981. node.isOnce = isOnce;
  4982. }
  4983. /* */
  4984. function bindObjectListeners (data, value) {
  4985. if (value) {
  4986. if (!isPlainObject(value)) {
  4987. true && warn(
  4988. 'v-on without argument expects an Object value',
  4989. this
  4990. );
  4991. } else {
  4992. var on = data.on = data.on ? extend({}, data.on) : {};
  4993. for (var key in value) {
  4994. var existing = on[key];
  4995. var ours = value[key];
  4996. on[key] = existing ? [].concat(existing, ours) : ours;
  4997. }
  4998. }
  4999. }
  5000. return data
  5001. }
  5002. /* */
  5003. function resolveScopedSlots (
  5004. fns, // see flow/vnode
  5005. res,
  5006. // the following are added in 2.6
  5007. hasDynamicKeys,
  5008. contentHashKey
  5009. ) {
  5010. res = res || { $stable: !hasDynamicKeys };
  5011. for (var i = 0; i < fns.length; i++) {
  5012. var slot = fns[i];
  5013. if (Array.isArray(slot)) {
  5014. resolveScopedSlots(slot, res, hasDynamicKeys);
  5015. } else if (slot) {
  5016. // marker for reverse proxying v-slot without scope on this.$slots
  5017. if (slot.proxy) {
  5018. slot.fn.proxy = true;
  5019. }
  5020. res[slot.key] = slot.fn;
  5021. }
  5022. }
  5023. if (contentHashKey) {
  5024. (res).$key = contentHashKey;
  5025. }
  5026. return res
  5027. }
  5028. /* */
  5029. function bindDynamicKeys (baseObj, values) {
  5030. for (var i = 0; i < values.length; i += 2) {
  5031. var key = values[i];
  5032. if (typeof key === 'string' && key) {
  5033. baseObj[values[i]] = values[i + 1];
  5034. } else if ( true && key !== '' && key !== null) {
  5035. // null is a special value for explicitly removing a binding
  5036. warn(
  5037. ("Invalid value for dynamic directive argument (expected string or null): " + key),
  5038. this
  5039. );
  5040. }
  5041. }
  5042. return baseObj
  5043. }
  5044. // helper to dynamically append modifier runtime markers to event names.
  5045. // ensure only append when value is already string, otherwise it will be cast
  5046. // to string and cause the type check to miss.
  5047. function prependModifier (value, symbol) {
  5048. return typeof value === 'string' ? symbol + value : value
  5049. }
  5050. /* */
  5051. function installRenderHelpers (target) {
  5052. target._o = markOnce;
  5053. target._n = toNumber;
  5054. target._s = toString;
  5055. target._l = renderList;
  5056. target._t = renderSlot;
  5057. target._q = looseEqual;
  5058. target._i = looseIndexOf;
  5059. target._m = renderStatic;
  5060. target._f = resolveFilter;
  5061. target._k = checkKeyCodes;
  5062. target._b = bindObjectProps;
  5063. target._v = createTextVNode;
  5064. target._e = createEmptyVNode;
  5065. target._u = resolveScopedSlots;
  5066. target._g = bindObjectListeners;
  5067. target._d = bindDynamicKeys;
  5068. target._p = prependModifier;
  5069. }
  5070. /* */
  5071. function FunctionalRenderContext (
  5072. data,
  5073. props,
  5074. children,
  5075. parent,
  5076. Ctor
  5077. ) {
  5078. var this$1 = this;
  5079. var options = Ctor.options;
  5080. // ensure the createElement function in functional components
  5081. // gets a unique context - this is necessary for correct named slot check
  5082. var contextVm;
  5083. if (hasOwn(parent, '_uid')) {
  5084. contextVm = Object.create(parent);
  5085. // $flow-disable-line
  5086. contextVm._original = parent;
  5087. } else {
  5088. // the context vm passed in is a functional context as well.
  5089. // in this case we want to make sure we are able to get a hold to the
  5090. // real context instance.
  5091. contextVm = parent;
  5092. // $flow-disable-line
  5093. parent = parent._original;
  5094. }
  5095. var isCompiled = isTrue(options._compiled);
  5096. var needNormalization = !isCompiled;
  5097. this.data = data;
  5098. this.props = props;
  5099. this.children = children;
  5100. this.parent = parent;
  5101. this.listeners = data.on || emptyObject;
  5102. this.injections = resolveInject(options.inject, parent);
  5103. this.slots = function () {
  5104. if (!this$1.$slots) {
  5105. normalizeScopedSlots(
  5106. data.scopedSlots,
  5107. this$1.$slots = resolveSlots(children, parent)
  5108. );
  5109. }
  5110. return this$1.$slots
  5111. };
  5112. Object.defineProperty(this, 'scopedSlots', ({
  5113. enumerable: true,
  5114. get: function get () {
  5115. return normalizeScopedSlots(data.scopedSlots, this.slots())
  5116. }
  5117. }));
  5118. // support for compiled functional template
  5119. if (isCompiled) {
  5120. // exposing $options for renderStatic()
  5121. this.$options = options;
  5122. // pre-resolve slots for renderSlot()
  5123. this.$slots = this.slots();
  5124. this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
  5125. }
  5126. if (options._scopeId) {
  5127. this._c = function (a, b, c, d) {
  5128. var vnode = createElement(contextVm, a, b, c, d, needNormalization);
  5129. if (vnode && !Array.isArray(vnode)) {
  5130. vnode.fnScopeId = options._scopeId;
  5131. vnode.fnContext = parent;
  5132. }
  5133. return vnode
  5134. };
  5135. } else {
  5136. this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
  5137. }
  5138. }
  5139. installRenderHelpers(FunctionalRenderContext.prototype);
  5140. function createFunctionalComponent (
  5141. Ctor,
  5142. propsData,
  5143. data,
  5144. contextVm,
  5145. children
  5146. ) {
  5147. var options = Ctor.options;
  5148. var props = {};
  5149. var propOptions = options.props;
  5150. if (isDef(propOptions)) {
  5151. for (var key in propOptions) {
  5152. props[key] = validateProp(key, propOptions, propsData || emptyObject);
  5153. }
  5154. } else {
  5155. if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
  5156. if (isDef(data.props)) { mergeProps(props, data.props); }
  5157. }
  5158. var renderContext = new FunctionalRenderContext(
  5159. data,
  5160. props,
  5161. children,
  5162. contextVm,
  5163. Ctor
  5164. );
  5165. var vnode = options.render.call(null, renderContext._c, renderContext);
  5166. if (vnode instanceof VNode) {
  5167. return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
  5168. } else if (Array.isArray(vnode)) {
  5169. var vnodes = normalizeChildren(vnode) || [];
  5170. var res = new Array(vnodes.length);
  5171. for (var i = 0; i < vnodes.length; i++) {
  5172. res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
  5173. }
  5174. return res
  5175. }
  5176. }
  5177. function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
  5178. // #7817 clone node before setting fnContext, otherwise if the node is reused
  5179. // (e.g. it was from a cached normal slot) the fnContext causes named slots
  5180. // that should not be matched to match.
  5181. var clone = cloneVNode(vnode);
  5182. clone.fnContext = contextVm;
  5183. clone.fnOptions = options;
  5184. if (true) {
  5185. (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
  5186. }
  5187. if (data.slot) {
  5188. (clone.data || (clone.data = {})).slot = data.slot;
  5189. }
  5190. return clone
  5191. }
  5192. function mergeProps (to, from) {
  5193. for (var key in from) {
  5194. to[camelize(key)] = from[key];
  5195. }
  5196. }
  5197. /* */
  5198. /* */
  5199. /* */
  5200. /* */
  5201. // inline hooks to be invoked on component VNodes during patch
  5202. var componentVNodeHooks = {
  5203. init: function init (vnode, hydrating) {
  5204. if (
  5205. vnode.componentInstance &&
  5206. !vnode.componentInstance._isDestroyed &&
  5207. vnode.data.keepAlive
  5208. ) {
  5209. // kept-alive components, treat as a patch
  5210. var mountedNode = vnode; // work around flow
  5211. componentVNodeHooks.prepatch(mountedNode, mountedNode);
  5212. } else {
  5213. var child = vnode.componentInstance = createComponentInstanceForVnode(
  5214. vnode,
  5215. activeInstance
  5216. );
  5217. child.$mount(hydrating ? vnode.elm : undefined, hydrating);
  5218. }
  5219. },
  5220. prepatch: function prepatch (oldVnode, vnode) {
  5221. var options = vnode.componentOptions;
  5222. var child = vnode.componentInstance = oldVnode.componentInstance;
  5223. updateChildComponent(
  5224. child,
  5225. options.propsData, // updated props
  5226. options.listeners, // updated listeners
  5227. vnode, // new parent vnode
  5228. options.children // new children
  5229. );
  5230. },
  5231. insert: function insert (vnode) {
  5232. var context = vnode.context;
  5233. var componentInstance = vnode.componentInstance;
  5234. if (!componentInstance._isMounted) {
  5235. callHook(componentInstance, 'onServiceCreated');
  5236. callHook(componentInstance, 'onServiceAttached');
  5237. componentInstance._isMounted = true;
  5238. callHook(componentInstance, 'mounted');
  5239. }
  5240. if (vnode.data.keepAlive) {
  5241. if (context._isMounted) {
  5242. // vue-router#1212
  5243. // During updates, a kept-alive component's child components may
  5244. // change, so directly walking the tree here may call activated hooks
  5245. // on incorrect children. Instead we push them into a queue which will
  5246. // be processed after the whole patch process ended.
  5247. queueActivatedComponent(componentInstance);
  5248. } else {
  5249. activateChildComponent(componentInstance, true /* direct */);
  5250. }
  5251. }
  5252. },
  5253. destroy: function destroy (vnode) {
  5254. var componentInstance = vnode.componentInstance;
  5255. if (!componentInstance._isDestroyed) {
  5256. if (!vnode.data.keepAlive) {
  5257. componentInstance.$destroy();
  5258. } else {
  5259. deactivateChildComponent(componentInstance, true /* direct */);
  5260. }
  5261. }
  5262. }
  5263. };
  5264. var hooksToMerge = Object.keys(componentVNodeHooks);
  5265. function createComponent (
  5266. Ctor,
  5267. data,
  5268. context,
  5269. children,
  5270. tag
  5271. ) {
  5272. if (isUndef(Ctor)) {
  5273. return
  5274. }
  5275. var baseCtor = context.$options._base;
  5276. // plain options object: turn it into a constructor
  5277. if (isObject(Ctor)) {
  5278. Ctor = baseCtor.extend(Ctor);
  5279. }
  5280. // if at this stage it's not a constructor or an async component factory,
  5281. // reject.
  5282. if (typeof Ctor !== 'function') {
  5283. if (true) {
  5284. warn(("Invalid Component definition: " + (String(Ctor))), context);
  5285. }
  5286. return
  5287. }
  5288. // async component
  5289. var asyncFactory;
  5290. if (isUndef(Ctor.cid)) {
  5291. asyncFactory = Ctor;
  5292. Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
  5293. if (Ctor === undefined) {
  5294. // return a placeholder node for async component, which is rendered
  5295. // as a comment node but preserves all the raw information for the node.
  5296. // the information will be used for async server-rendering and hydration.
  5297. return createAsyncPlaceholder(
  5298. asyncFactory,
  5299. data,
  5300. context,
  5301. children,
  5302. tag
  5303. )
  5304. }
  5305. }
  5306. data = data || {};
  5307. // resolve constructor options in case global mixins are applied after
  5308. // component constructor creation
  5309. resolveConstructorOptions(Ctor);
  5310. // transform component v-model data into props & events
  5311. if (isDef(data.model)) {
  5312. transformModel(Ctor.options, data);
  5313. }
  5314. // extract props
  5315. var propsData = extractPropsFromVNodeData(data, Ctor, tag, context); // fixed by xxxxxx
  5316. // functional component
  5317. if (isTrue(Ctor.options.functional)) {
  5318. return createFunctionalComponent(Ctor, propsData, data, context, children)
  5319. }
  5320. // extract listeners, since these needs to be treated as
  5321. // child component listeners instead of DOM listeners
  5322. var listeners = data.on;
  5323. // replace with listeners with .native modifier
  5324. // so it gets processed during parent component patch.
  5325. data.on = data.nativeOn;
  5326. if (isTrue(Ctor.options.abstract)) {
  5327. // abstract components do not keep anything
  5328. // other than props & listeners & slot
  5329. // work around flow
  5330. var slot = data.slot;
  5331. data = {};
  5332. if (slot) {
  5333. data.slot = slot;
  5334. }
  5335. }
  5336. // install component management hooks onto the placeholder node
  5337. installComponentHooks(data);
  5338. // return a placeholder vnode
  5339. var name = Ctor.options.name || tag;
  5340. var vnode = new VNode(
  5341. ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
  5342. data, undefined, undefined, undefined, context,
  5343. { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
  5344. asyncFactory
  5345. );
  5346. return vnode
  5347. }
  5348. function createComponentInstanceForVnode (
  5349. vnode, // we know it's MountedComponentVNode but flow doesn't
  5350. parent // activeInstance in lifecycle state
  5351. ) {
  5352. var options = {
  5353. _isComponent: true,
  5354. _parentVnode: vnode,
  5355. parent: parent
  5356. };
  5357. // check inline-template render functions
  5358. var inlineTemplate = vnode.data.inlineTemplate;
  5359. if (isDef(inlineTemplate)) {
  5360. options.render = inlineTemplate.render;
  5361. options.staticRenderFns = inlineTemplate.staticRenderFns;
  5362. }
  5363. return new vnode.componentOptions.Ctor(options)
  5364. }
  5365. function installComponentHooks (data) {
  5366. var hooks = data.hook || (data.hook = {});
  5367. for (var i = 0; i < hooksToMerge.length; i++) {
  5368. var key = hooksToMerge[i];
  5369. var existing = hooks[key];
  5370. var toMerge = componentVNodeHooks[key];
  5371. if (existing !== toMerge && !(existing && existing._merged)) {
  5372. hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
  5373. }
  5374. }
  5375. }
  5376. function mergeHook$1 (f1, f2) {
  5377. var merged = function (a, b) {
  5378. // flow complains about extra args which is why we use any
  5379. f1(a, b);
  5380. f2(a, b);
  5381. };
  5382. merged._merged = true;
  5383. return merged
  5384. }
  5385. // transform component v-model info (value and callback) into
  5386. // prop and event handler respectively.
  5387. function transformModel (options, data) {
  5388. var prop = (options.model && options.model.prop) || 'value';
  5389. var event = (options.model && options.model.event) || 'input'
  5390. ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
  5391. var on = data.on || (data.on = {});
  5392. var existing = on[event];
  5393. var callback = data.model.callback;
  5394. if (isDef(existing)) {
  5395. if (
  5396. Array.isArray(existing)
  5397. ? existing.indexOf(callback) === -1
  5398. : existing !== callback
  5399. ) {
  5400. on[event] = [callback].concat(existing);
  5401. }
  5402. } else {
  5403. on[event] = callback;
  5404. }
  5405. }
  5406. /* */
  5407. var SIMPLE_NORMALIZE = 1;
  5408. var ALWAYS_NORMALIZE = 2;
  5409. // wrapper function for providing a more flexible interface
  5410. // without getting yelled at by flow
  5411. function createElement (
  5412. context,
  5413. tag,
  5414. data,
  5415. children,
  5416. normalizationType,
  5417. alwaysNormalize
  5418. ) {
  5419. if (Array.isArray(data) || isPrimitive(data)) {
  5420. normalizationType = children;
  5421. children = data;
  5422. data = undefined;
  5423. }
  5424. if (isTrue(alwaysNormalize)) {
  5425. normalizationType = ALWAYS_NORMALIZE;
  5426. }
  5427. return _createElement(context, tag, data, children, normalizationType)
  5428. }
  5429. function _createElement (
  5430. context,
  5431. tag,
  5432. data,
  5433. children,
  5434. normalizationType
  5435. ) {
  5436. if (isDef(data) && isDef((data).__ob__)) {
  5437. true && warn(
  5438. "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
  5439. 'Always create fresh vnode data objects in each render!',
  5440. context
  5441. );
  5442. return createEmptyVNode()
  5443. }
  5444. // object syntax in v-bind
  5445. if (isDef(data) && isDef(data.is)) {
  5446. tag = data.is;
  5447. }
  5448. if (!tag) {
  5449. // in case of component :is set to falsy value
  5450. return createEmptyVNode()
  5451. }
  5452. // warn against non-primitive key
  5453. if ( true &&
  5454. isDef(data) && isDef(data.key) && !isPrimitive(data.key)
  5455. ) {
  5456. {
  5457. warn(
  5458. 'Avoid using non-primitive value as key, ' +
  5459. 'use string/number value instead.',
  5460. context
  5461. );
  5462. }
  5463. }
  5464. // support single function children as default scoped slot
  5465. if (Array.isArray(children) &&
  5466. typeof children[0] === 'function'
  5467. ) {
  5468. data = data || {};
  5469. data.scopedSlots = { default: children[0] };
  5470. children.length = 0;
  5471. }
  5472. if (normalizationType === ALWAYS_NORMALIZE) {
  5473. children = normalizeChildren(children);
  5474. } else if (normalizationType === SIMPLE_NORMALIZE) {
  5475. children = simpleNormalizeChildren(children);
  5476. }
  5477. var vnode, ns;
  5478. if (typeof tag === 'string') {
  5479. var Ctor;
  5480. ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
  5481. if (config.isReservedTag(tag)) {
  5482. // platform built-in elements
  5483. if ( true && isDef(data) && isDef(data.nativeOn)) {
  5484. warn(
  5485. ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."),
  5486. context
  5487. );
  5488. }
  5489. vnode = new VNode(
  5490. config.parsePlatformTagName(tag), data, children,
  5491. undefined, undefined, context
  5492. );
  5493. } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
  5494. // component
  5495. vnode = createComponent(Ctor, data, context, children, tag);
  5496. } else {
  5497. // unknown or unlisted namespaced elements
  5498. // check at runtime because it may get assigned a namespace when its
  5499. // parent normalizes children
  5500. vnode = new VNode(
  5501. tag, data, children,
  5502. undefined, undefined, context
  5503. );
  5504. }
  5505. } else {
  5506. // direct component options / constructor
  5507. vnode = createComponent(tag, data, context, children);
  5508. }
  5509. if (Array.isArray(vnode)) {
  5510. return vnode
  5511. } else if (isDef(vnode)) {
  5512. if (isDef(ns)) { applyNS(vnode, ns); }
  5513. if (isDef(data)) { registerDeepBindings(data); }
  5514. return vnode
  5515. } else {
  5516. return createEmptyVNode()
  5517. }
  5518. }
  5519. function applyNS (vnode, ns, force) {
  5520. vnode.ns = ns;
  5521. if (vnode.tag === 'foreignObject') {
  5522. // use default namespace inside foreignObject
  5523. ns = undefined;
  5524. force = true;
  5525. }
  5526. if (isDef(vnode.children)) {
  5527. for (var i = 0, l = vnode.children.length; i < l; i++) {
  5528. var child = vnode.children[i];
  5529. if (isDef(child.tag) && (
  5530. isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
  5531. applyNS(child, ns, force);
  5532. }
  5533. }
  5534. }
  5535. }
  5536. // ref #5318
  5537. // necessary to ensure parent re-render when deep bindings like :style and
  5538. // :class are used on slot nodes
  5539. function registerDeepBindings (data) {
  5540. if (isObject(data.style)) {
  5541. traverse(data.style);
  5542. }
  5543. if (isObject(data.class)) {
  5544. traverse(data.class);
  5545. }
  5546. }
  5547. /* */
  5548. function initRender (vm) {
  5549. vm._vnode = null; // the root of the child tree
  5550. vm._staticTrees = null; // v-once cached trees
  5551. var options = vm.$options;
  5552. var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
  5553. var renderContext = parentVnode && parentVnode.context;
  5554. vm.$slots = resolveSlots(options._renderChildren, renderContext);
  5555. vm.$scopedSlots = emptyObject;
  5556. // bind the createElement fn to this instance
  5557. // so that we get proper render context inside it.
  5558. // args order: tag, data, children, normalizationType, alwaysNormalize
  5559. // internal version is used by render functions compiled from templates
  5560. vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
  5561. // normalization is always applied for the public version, used in
  5562. // user-written render functions.
  5563. vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
  5564. // $attrs & $listeners are exposed for easier HOC creation.
  5565. // they need to be reactive so that HOCs using them are always updated
  5566. var parentData = parentVnode && parentVnode.data;
  5567. /* istanbul ignore else */
  5568. if (true) {
  5569. defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
  5570. !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
  5571. }, true);
  5572. defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
  5573. !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
  5574. }, true);
  5575. } else {}
  5576. }
  5577. var currentRenderingInstance = null;
  5578. function renderMixin (Vue) {
  5579. // install runtime convenience helpers
  5580. installRenderHelpers(Vue.prototype);
  5581. Vue.prototype.$nextTick = function (fn) {
  5582. return nextTick(fn, this)
  5583. };
  5584. Vue.prototype._render = function () {
  5585. var vm = this;
  5586. var ref = vm.$options;
  5587. var render = ref.render;
  5588. var _parentVnode = ref._parentVnode;
  5589. if (_parentVnode) {
  5590. vm.$scopedSlots = normalizeScopedSlots(
  5591. _parentVnode.data.scopedSlots,
  5592. vm.$slots,
  5593. vm.$scopedSlots
  5594. );
  5595. }
  5596. // set parent vnode. this allows render functions to have access
  5597. // to the data on the placeholder node.
  5598. vm.$vnode = _parentVnode;
  5599. // render self
  5600. var vnode;
  5601. try {
  5602. // There's no need to maintain a stack because all render fns are called
  5603. // separately from one another. Nested component's render fns are called
  5604. // when parent component is patched.
  5605. currentRenderingInstance = vm;
  5606. vnode = render.call(vm._renderProxy, vm.$createElement);
  5607. } catch (e) {
  5608. handleError(e, vm, "render");
  5609. // return error render result,
  5610. // or previous vnode to prevent render error causing blank component
  5611. /* istanbul ignore else */
  5612. if ( true && vm.$options.renderError) {
  5613. try {
  5614. vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
  5615. } catch (e) {
  5616. handleError(e, vm, "renderError");
  5617. vnode = vm._vnode;
  5618. }
  5619. } else {
  5620. vnode = vm._vnode;
  5621. }
  5622. } finally {
  5623. currentRenderingInstance = null;
  5624. }
  5625. // if the returned array contains only a single node, allow it
  5626. if (Array.isArray(vnode) && vnode.length === 1) {
  5627. vnode = vnode[0];
  5628. }
  5629. // return empty vnode in case the render function errored out
  5630. if (!(vnode instanceof VNode)) {
  5631. if ( true && Array.isArray(vnode)) {
  5632. warn(
  5633. 'Multiple root nodes returned from render function. Render function ' +
  5634. 'should return a single root node.',
  5635. vm
  5636. );
  5637. }
  5638. vnode = createEmptyVNode();
  5639. }
  5640. // set parent
  5641. vnode.parent = _parentVnode;
  5642. return vnode
  5643. };
  5644. }
  5645. /* */
  5646. function ensureCtor (comp, base) {
  5647. if (
  5648. comp.__esModule ||
  5649. (hasSymbol && comp[Symbol.toStringTag] === 'Module')
  5650. ) {
  5651. comp = comp.default;
  5652. }
  5653. return isObject(comp)
  5654. ? base.extend(comp)
  5655. : comp
  5656. }
  5657. function createAsyncPlaceholder (
  5658. factory,
  5659. data,
  5660. context,
  5661. children,
  5662. tag
  5663. ) {
  5664. var node = createEmptyVNode();
  5665. node.asyncFactory = factory;
  5666. node.asyncMeta = { data: data, context: context, children: children, tag: tag };
  5667. return node
  5668. }
  5669. function resolveAsyncComponent (
  5670. factory,
  5671. baseCtor
  5672. ) {
  5673. if (isTrue(factory.error) && isDef(factory.errorComp)) {
  5674. return factory.errorComp
  5675. }
  5676. if (isDef(factory.resolved)) {
  5677. return factory.resolved
  5678. }
  5679. var owner = currentRenderingInstance;
  5680. if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
  5681. // already pending
  5682. factory.owners.push(owner);
  5683. }
  5684. if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
  5685. return factory.loadingComp
  5686. }
  5687. if (owner && !isDef(factory.owners)) {
  5688. var owners = factory.owners = [owner];
  5689. var sync = true;
  5690. var timerLoading = null;
  5691. var timerTimeout = null
  5692. ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
  5693. var forceRender = function (renderCompleted) {
  5694. for (var i = 0, l = owners.length; i < l; i++) {
  5695. (owners[i]).$forceUpdate();
  5696. }
  5697. if (renderCompleted) {
  5698. owners.length = 0;
  5699. if (timerLoading !== null) {
  5700. clearTimeout(timerLoading);
  5701. timerLoading = null;
  5702. }
  5703. if (timerTimeout !== null) {
  5704. clearTimeout(timerTimeout);
  5705. timerTimeout = null;
  5706. }
  5707. }
  5708. };
  5709. var resolve = once(function (res) {
  5710. // cache resolved
  5711. factory.resolved = ensureCtor(res, baseCtor);
  5712. // invoke callbacks only if this is not a synchronous resolve
  5713. // (async resolves are shimmed as synchronous during SSR)
  5714. if (!sync) {
  5715. forceRender(true);
  5716. } else {
  5717. owners.length = 0;
  5718. }
  5719. });
  5720. var reject = once(function (reason) {
  5721. true && warn(
  5722. "Failed to resolve async component: " + (String(factory)) +
  5723. (reason ? ("\nReason: " + reason) : '')
  5724. );
  5725. if (isDef(factory.errorComp)) {
  5726. factory.error = true;
  5727. forceRender(true);
  5728. }
  5729. });
  5730. var res = factory(resolve, reject);
  5731. if (isObject(res)) {
  5732. if (isPromise(res)) {
  5733. // () => Promise
  5734. if (isUndef(factory.resolved)) {
  5735. res.then(resolve, reject);
  5736. }
  5737. } else if (isPromise(res.component)) {
  5738. res.component.then(resolve, reject);
  5739. if (isDef(res.error)) {
  5740. factory.errorComp = ensureCtor(res.error, baseCtor);
  5741. }
  5742. if (isDef(res.loading)) {
  5743. factory.loadingComp = ensureCtor(res.loading, baseCtor);
  5744. if (res.delay === 0) {
  5745. factory.loading = true;
  5746. } else {
  5747. timerLoading = setTimeout(function () {
  5748. timerLoading = null;
  5749. if (isUndef(factory.resolved) && isUndef(factory.error)) {
  5750. factory.loading = true;
  5751. forceRender(false);
  5752. }
  5753. }, res.delay || 200);
  5754. }
  5755. }
  5756. if (isDef(res.timeout)) {
  5757. timerTimeout = setTimeout(function () {
  5758. timerTimeout = null;
  5759. if (isUndef(factory.resolved)) {
  5760. reject(
  5761. true
  5762. ? ("timeout (" + (res.timeout) + "ms)")
  5763. : undefined
  5764. );
  5765. }
  5766. }, res.timeout);
  5767. }
  5768. }
  5769. }
  5770. sync = false;
  5771. // return in case resolved synchronously
  5772. return factory.loading
  5773. ? factory.loadingComp
  5774. : factory.resolved
  5775. }
  5776. }
  5777. /* */
  5778. function isAsyncPlaceholder (node) {
  5779. return node.isComment && node.asyncFactory
  5780. }
  5781. /* */
  5782. function getFirstComponentChild (children) {
  5783. if (Array.isArray(children)) {
  5784. for (var i = 0; i < children.length; i++) {
  5785. var c = children[i];
  5786. if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
  5787. return c
  5788. }
  5789. }
  5790. }
  5791. }
  5792. /* */
  5793. /* */
  5794. function initEvents (vm) {
  5795. vm._events = Object.create(null);
  5796. vm._hasHookEvent = false;
  5797. // init parent attached events
  5798. var listeners = vm.$options._parentListeners;
  5799. if (listeners) {
  5800. updateComponentListeners(vm, listeners);
  5801. }
  5802. }
  5803. var target;
  5804. function add (event, fn) {
  5805. target.$on(event, fn);
  5806. }
  5807. function remove$1 (event, fn) {
  5808. target.$off(event, fn);
  5809. }
  5810. function createOnceHandler (event, fn) {
  5811. var _target = target;
  5812. return function onceHandler () {
  5813. var res = fn.apply(null, arguments);
  5814. if (res !== null) {
  5815. _target.$off(event, onceHandler);
  5816. }
  5817. }
  5818. }
  5819. function updateComponentListeners (
  5820. vm,
  5821. listeners,
  5822. oldListeners
  5823. ) {
  5824. target = vm;
  5825. updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
  5826. target = undefined;
  5827. }
  5828. function eventsMixin (Vue) {
  5829. var hookRE = /^hook:/;
  5830. Vue.prototype.$on = function (event, fn) {
  5831. var vm = this;
  5832. if (Array.isArray(event)) {
  5833. for (var i = 0, l = event.length; i < l; i++) {
  5834. vm.$on(event[i], fn);
  5835. }
  5836. } else {
  5837. (vm._events[event] || (vm._events[event] = [])).push(fn);
  5838. // optimize hook:event cost by using a boolean flag marked at registration
  5839. // instead of a hash lookup
  5840. if (hookRE.test(event)) {
  5841. vm._hasHookEvent = true;
  5842. }
  5843. }
  5844. return vm
  5845. };
  5846. Vue.prototype.$once = function (event, fn) {
  5847. var vm = this;
  5848. function on () {
  5849. vm.$off(event, on);
  5850. fn.apply(vm, arguments);
  5851. }
  5852. on.fn = fn;
  5853. vm.$on(event, on);
  5854. return vm
  5855. };
  5856. Vue.prototype.$off = function (event, fn) {
  5857. var vm = this;
  5858. // all
  5859. if (!arguments.length) {
  5860. vm._events = Object.create(null);
  5861. return vm
  5862. }
  5863. // array of events
  5864. if (Array.isArray(event)) {
  5865. for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
  5866. vm.$off(event[i$1], fn);
  5867. }
  5868. return vm
  5869. }
  5870. // specific event
  5871. var cbs = vm._events[event];
  5872. if (!cbs) {
  5873. return vm
  5874. }
  5875. if (!fn) {
  5876. vm._events[event] = null;
  5877. return vm
  5878. }
  5879. // specific handler
  5880. var cb;
  5881. var i = cbs.length;
  5882. while (i--) {
  5883. cb = cbs[i];
  5884. if (cb === fn || cb.fn === fn) {
  5885. cbs.splice(i, 1);
  5886. break
  5887. }
  5888. }
  5889. return vm
  5890. };
  5891. Vue.prototype.$emit = function (event) {
  5892. var vm = this;
  5893. if (true) {
  5894. var lowerCaseEvent = event.toLowerCase();
  5895. if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
  5896. tip(
  5897. "Event \"" + lowerCaseEvent + "\" is emitted in component " +
  5898. (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
  5899. "Note that HTML attributes are case-insensitive and you cannot use " +
  5900. "v-on to listen to camelCase events when using in-DOM templates. " +
  5901. "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
  5902. );
  5903. }
  5904. }
  5905. var cbs = vm._events[event];
  5906. if (cbs) {
  5907. cbs = cbs.length > 1 ? toArray(cbs) : cbs;
  5908. var args = toArray(arguments, 1);
  5909. var info = "event handler for \"" + event + "\"";
  5910. for (var i = 0, l = cbs.length; i < l; i++) {
  5911. invokeWithErrorHandling(cbs[i], vm, args, vm, info);
  5912. }
  5913. }
  5914. return vm
  5915. };
  5916. }
  5917. /* */
  5918. var activeInstance = null;
  5919. var isUpdatingChildComponent = false;
  5920. function setActiveInstance(vm) {
  5921. var prevActiveInstance = activeInstance;
  5922. activeInstance = vm;
  5923. return function () {
  5924. activeInstance = prevActiveInstance;
  5925. }
  5926. }
  5927. function initLifecycle (vm) {
  5928. var options = vm.$options;
  5929. // locate first non-abstract parent
  5930. var parent = options.parent;
  5931. if (parent && !options.abstract) {
  5932. while (parent.$options.abstract && parent.$parent) {
  5933. parent = parent.$parent;
  5934. }
  5935. parent.$children.push(vm);
  5936. }
  5937. vm.$parent = parent;
  5938. vm.$root = parent ? parent.$root : vm;
  5939. vm.$children = [];
  5940. vm.$refs = {};
  5941. vm._watcher = null;
  5942. vm._inactive = null;
  5943. vm._directInactive = false;
  5944. vm._isMounted = false;
  5945. vm._isDestroyed = false;
  5946. vm._isBeingDestroyed = false;
  5947. }
  5948. function lifecycleMixin (Vue) {
  5949. Vue.prototype._update = function (vnode, hydrating) {
  5950. var vm = this;
  5951. var prevEl = vm.$el;
  5952. var prevVnode = vm._vnode;
  5953. var restoreActiveInstance = setActiveInstance(vm);
  5954. vm._vnode = vnode;
  5955. // Vue.prototype.__patch__ is injected in entry points
  5956. // based on the rendering backend used.
  5957. if (!prevVnode) {
  5958. // initial render
  5959. vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
  5960. } else {
  5961. // updates
  5962. vm.$el = vm.__patch__(prevVnode, vnode);
  5963. }
  5964. restoreActiveInstance();
  5965. // update __vue__ reference
  5966. if (prevEl) {
  5967. prevEl.__vue__ = null;
  5968. }
  5969. if (vm.$el) {
  5970. vm.$el.__vue__ = vm;
  5971. }
  5972. // if parent is an HOC, update its $el as well
  5973. if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
  5974. vm.$parent.$el = vm.$el;
  5975. }
  5976. // updated hook is called by the scheduler to ensure that children are
  5977. // updated in a parent's updated hook.
  5978. };
  5979. Vue.prototype.$forceUpdate = function () {
  5980. var vm = this;
  5981. if (vm._watcher) {
  5982. vm._watcher.update();
  5983. }
  5984. };
  5985. Vue.prototype.$destroy = function () {
  5986. var vm = this;
  5987. if (vm._isBeingDestroyed) {
  5988. return
  5989. }
  5990. callHook(vm, 'beforeDestroy');
  5991. vm._isBeingDestroyed = true;
  5992. // remove self from parent
  5993. var parent = vm.$parent;
  5994. if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
  5995. remove(parent.$children, vm);
  5996. }
  5997. // teardown watchers
  5998. if (vm._watcher) {
  5999. vm._watcher.teardown();
  6000. }
  6001. var i = vm._watchers.length;
  6002. while (i--) {
  6003. vm._watchers[i].teardown();
  6004. }
  6005. // remove reference from data ob
  6006. // frozen object may not have observer.
  6007. if (vm._data.__ob__) {
  6008. vm._data.__ob__.vmCount--;
  6009. }
  6010. // call the last hook...
  6011. vm._isDestroyed = true;
  6012. // invoke destroy hooks on current rendered tree
  6013. vm.__patch__(vm._vnode, null);
  6014. // fire destroyed hook
  6015. callHook(vm, 'destroyed');
  6016. // turn off all instance listeners.
  6017. vm.$off();
  6018. // remove __vue__ reference
  6019. if (vm.$el) {
  6020. vm.$el.__vue__ = null;
  6021. }
  6022. // release circular reference (#6759)
  6023. if (vm.$vnode) {
  6024. vm.$vnode.parent = null;
  6025. }
  6026. };
  6027. }
  6028. function updateChildComponent (
  6029. vm,
  6030. propsData,
  6031. listeners,
  6032. parentVnode,
  6033. renderChildren
  6034. ) {
  6035. if (true) {
  6036. isUpdatingChildComponent = true;
  6037. }
  6038. // determine whether component has slot children
  6039. // we need to do this before overwriting $options._renderChildren.
  6040. // check if there are dynamic scopedSlots (hand-written or compiled but with
  6041. // dynamic slot names). Static scoped slots compiled from template has the
  6042. // "$stable" marker.
  6043. var newScopedSlots = parentVnode.data.scopedSlots;
  6044. var oldScopedSlots = vm.$scopedSlots;
  6045. var hasDynamicScopedSlot = !!(
  6046. (newScopedSlots && !newScopedSlots.$stable) ||
  6047. (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
  6048. (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
  6049. );
  6050. // Any static slot children from the parent may have changed during parent's
  6051. // update. Dynamic scoped slots may also have changed. In such cases, a forced
  6052. // update is necessary to ensure correctness.
  6053. var needsForceUpdate = !!(
  6054. renderChildren || // has new static slots
  6055. vm.$options._renderChildren || // has old static slots
  6056. hasDynamicScopedSlot
  6057. );
  6058. vm.$options._parentVnode = parentVnode;
  6059. vm.$vnode = parentVnode; // update vm's placeholder node without re-render
  6060. if (vm._vnode) { // update child tree's parent
  6061. vm._vnode.parent = parentVnode;
  6062. }
  6063. vm.$options._renderChildren = renderChildren;
  6064. // update $attrs and $listeners hash
  6065. // these are also reactive so they may trigger child update if the child
  6066. // used them during render
  6067. vm.$attrs = parentVnode.data.attrs || emptyObject;
  6068. vm.$listeners = listeners || emptyObject;
  6069. // update props
  6070. if (propsData && vm.$options.props) {
  6071. toggleObserving(false);
  6072. var props = vm._props;
  6073. var propKeys = vm.$options._propKeys || [];
  6074. for (var i = 0; i < propKeys.length; i++) {
  6075. var key = propKeys[i];
  6076. var propOptions = vm.$options.props; // wtf flow?
  6077. props[key] = validateProp(key, propOptions, propsData, vm);
  6078. }
  6079. toggleObserving(true);
  6080. // keep a copy of raw propsData
  6081. vm.$options.propsData = propsData;
  6082. }
  6083. // fixed by xxxxxx update properties(mp runtime)
  6084. vm._$updateProperties && vm._$updateProperties(vm);
  6085. // update listeners
  6086. listeners = listeners || emptyObject;
  6087. var oldListeners = vm.$options._parentListeners;
  6088. vm.$options._parentListeners = listeners;
  6089. updateComponentListeners(vm, listeners, oldListeners);
  6090. // resolve slots + force update if has children
  6091. if (needsForceUpdate) {
  6092. vm.$slots = resolveSlots(renderChildren, parentVnode.context);
  6093. vm.$forceUpdate();
  6094. }
  6095. if (true) {
  6096. isUpdatingChildComponent = false;
  6097. }
  6098. }
  6099. function isInInactiveTree (vm) {
  6100. while (vm && (vm = vm.$parent)) {
  6101. if (vm._inactive) { return true }
  6102. }
  6103. return false
  6104. }
  6105. function activateChildComponent (vm, direct) {
  6106. if (direct) {
  6107. vm._directInactive = false;
  6108. if (isInInactiveTree(vm)) {
  6109. return
  6110. }
  6111. } else if (vm._directInactive) {
  6112. return
  6113. }
  6114. if (vm._inactive || vm._inactive === null) {
  6115. vm._inactive = false;
  6116. for (var i = 0; i < vm.$children.length; i++) {
  6117. activateChildComponent(vm.$children[i]);
  6118. }
  6119. callHook(vm, 'activated');
  6120. }
  6121. }
  6122. function deactivateChildComponent (vm, direct) {
  6123. if (direct) {
  6124. vm._directInactive = true;
  6125. if (isInInactiveTree(vm)) {
  6126. return
  6127. }
  6128. }
  6129. if (!vm._inactive) {
  6130. vm._inactive = true;
  6131. for (var i = 0; i < vm.$children.length; i++) {
  6132. deactivateChildComponent(vm.$children[i]);
  6133. }
  6134. callHook(vm, 'deactivated');
  6135. }
  6136. }
  6137. function callHook (vm, hook) {
  6138. // #7573 disable dep collection when invoking lifecycle hooks
  6139. pushTarget();
  6140. var handlers = vm.$options[hook];
  6141. var info = hook + " hook";
  6142. if (handlers) {
  6143. for (var i = 0, j = handlers.length; i < j; i++) {
  6144. invokeWithErrorHandling(handlers[i], vm, null, vm, info);
  6145. }
  6146. }
  6147. if (vm._hasHookEvent) {
  6148. vm.$emit('hook:' + hook);
  6149. }
  6150. popTarget();
  6151. }
  6152. /* */
  6153. var MAX_UPDATE_COUNT = 100;
  6154. var queue = [];
  6155. var activatedChildren = [];
  6156. var has = {};
  6157. var circular = {};
  6158. var waiting = false;
  6159. var flushing = false;
  6160. var index = 0;
  6161. /**
  6162. * Reset the scheduler's state.
  6163. */
  6164. function resetSchedulerState () {
  6165. index = queue.length = activatedChildren.length = 0;
  6166. has = {};
  6167. if (true) {
  6168. circular = {};
  6169. }
  6170. waiting = flushing = false;
  6171. }
  6172. // Async edge case #6566 requires saving the timestamp when event listeners are
  6173. // attached. However, calling performance.now() has a perf overhead especially
  6174. // if the page has thousands of event listeners. Instead, we take a timestamp
  6175. // every time the scheduler flushes and use that for all event listeners
  6176. // attached during that flush.
  6177. var currentFlushTimestamp = 0;
  6178. // Async edge case fix requires storing an event listener's attach timestamp.
  6179. var getNow = Date.now;
  6180. // Determine what event timestamp the browser is using. Annoyingly, the
  6181. // timestamp can either be hi-res (relative to page load) or low-res
  6182. // (relative to UNIX epoch), so in order to compare time we have to use the
  6183. // same timestamp type when saving the flush timestamp.
  6184. // All IE versions use low-res event timestamps, and have problematic clock
  6185. // implementations (#9632)
  6186. if (inBrowser && !isIE) {
  6187. var performance = window.performance;
  6188. if (
  6189. performance &&
  6190. typeof performance.now === 'function' &&
  6191. getNow() > document.createEvent('Event').timeStamp
  6192. ) {
  6193. // if the event timestamp, although evaluated AFTER the Date.now(), is
  6194. // smaller than it, it means the event is using a hi-res timestamp,
  6195. // and we need to use the hi-res version for event listener timestamps as
  6196. // well.
  6197. getNow = function () { return performance.now(); };
  6198. }
  6199. }
  6200. /**
  6201. * Flush both queues and run the watchers.
  6202. */
  6203. function flushSchedulerQueue () {
  6204. currentFlushTimestamp = getNow();
  6205. flushing = true;
  6206. var watcher, id;
  6207. // Sort queue before flush.
  6208. // This ensures that:
  6209. // 1. Components are updated from parent to child. (because parent is always
  6210. // created before the child)
  6211. // 2. A component's user watchers are run before its render watcher (because
  6212. // user watchers are created before the render watcher)
  6213. // 3. If a component is destroyed during a parent component's watcher run,
  6214. // its watchers can be skipped.
  6215. queue.sort(function (a, b) { return a.id - b.id; });
  6216. // do not cache length because more watchers might be pushed
  6217. // as we run existing watchers
  6218. for (index = 0; index < queue.length; index++) {
  6219. watcher = queue[index];
  6220. if (watcher.before) {
  6221. watcher.before();
  6222. }
  6223. id = watcher.id;
  6224. has[id] = null;
  6225. watcher.run();
  6226. // in dev build, check and stop circular updates.
  6227. if ( true && has[id] != null) {
  6228. circular[id] = (circular[id] || 0) + 1;
  6229. if (circular[id] > MAX_UPDATE_COUNT) {
  6230. warn(
  6231. 'You may have an infinite update loop ' + (
  6232. watcher.user
  6233. ? ("in watcher with expression \"" + (watcher.expression) + "\"")
  6234. : "in a component render function."
  6235. ),
  6236. watcher.vm
  6237. );
  6238. break
  6239. }
  6240. }
  6241. }
  6242. // keep copies of post queues before resetting state
  6243. var activatedQueue = activatedChildren.slice();
  6244. var updatedQueue = queue.slice();
  6245. resetSchedulerState();
  6246. // call component updated and activated hooks
  6247. callActivatedHooks(activatedQueue);
  6248. callUpdatedHooks(updatedQueue);
  6249. // devtool hook
  6250. /* istanbul ignore if */
  6251. if (devtools && config.devtools) {
  6252. devtools.emit('flush');
  6253. }
  6254. }
  6255. function callUpdatedHooks (queue) {
  6256. var i = queue.length;
  6257. while (i--) {
  6258. var watcher = queue[i];
  6259. var vm = watcher.vm;
  6260. if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
  6261. callHook(vm, 'updated');
  6262. }
  6263. }
  6264. }
  6265. /**
  6266. * Queue a kept-alive component that was activated during patch.
  6267. * The queue will be processed after the entire tree has been patched.
  6268. */
  6269. function queueActivatedComponent (vm) {
  6270. // setting _inactive to false here so that a render function can
  6271. // rely on checking whether it's in an inactive tree (e.g. router-view)
  6272. vm._inactive = false;
  6273. activatedChildren.push(vm);
  6274. }
  6275. function callActivatedHooks (queue) {
  6276. for (var i = 0; i < queue.length; i++) {
  6277. queue[i]._inactive = true;
  6278. activateChildComponent(queue[i], true /* true */);
  6279. }
  6280. }
  6281. /**
  6282. * Push a watcher into the watcher queue.
  6283. * Jobs with duplicate IDs will be skipped unless it's
  6284. * pushed when the queue is being flushed.
  6285. */
  6286. function queueWatcher (watcher) {
  6287. var id = watcher.id;
  6288. if (has[id] == null) {
  6289. has[id] = true;
  6290. if (!flushing) {
  6291. queue.push(watcher);
  6292. } else {
  6293. // if already flushing, splice the watcher based on its id
  6294. // if already past its id, it will be run next immediately.
  6295. var i = queue.length - 1;
  6296. while (i > index && queue[i].id > watcher.id) {
  6297. i--;
  6298. }
  6299. queue.splice(i + 1, 0, watcher);
  6300. }
  6301. // queue the flush
  6302. if (!waiting) {
  6303. waiting = true;
  6304. if ( true && !config.async) {
  6305. flushSchedulerQueue();
  6306. return
  6307. }
  6308. nextTick(flushSchedulerQueue);
  6309. }
  6310. }
  6311. }
  6312. /* */
  6313. var uid$2 = 0;
  6314. /**
  6315. * A watcher parses an expression, collects dependencies,
  6316. * and fires callback when the expression value changes.
  6317. * This is used for both the $watch() api and directives.
  6318. */
  6319. var Watcher = function Watcher (
  6320. vm,
  6321. expOrFn,
  6322. cb,
  6323. options,
  6324. isRenderWatcher
  6325. ) {
  6326. this.vm = vm;
  6327. if (isRenderWatcher) {
  6328. vm._watcher = this;
  6329. }
  6330. vm._watchers.push(this);
  6331. // options
  6332. if (options) {
  6333. this.deep = !!options.deep;
  6334. this.user = !!options.user;
  6335. this.lazy = !!options.lazy;
  6336. this.sync = !!options.sync;
  6337. this.before = options.before;
  6338. } else {
  6339. this.deep = this.user = this.lazy = this.sync = false;
  6340. }
  6341. this.cb = cb;
  6342. this.id = ++uid$2; // uid for batching
  6343. this.active = true;
  6344. this.dirty = this.lazy; // for lazy watchers
  6345. this.deps = [];
  6346. this.newDeps = [];
  6347. this.depIds = new _Set();
  6348. this.newDepIds = new _Set();
  6349. this.expression = true
  6350. ? expOrFn.toString()
  6351. : undefined;
  6352. // parse expression for getter
  6353. if (typeof expOrFn === 'function') {
  6354. this.getter = expOrFn;
  6355. } else {
  6356. this.getter = parsePath(expOrFn);
  6357. if (!this.getter) {
  6358. this.getter = noop;
  6359. true && warn(
  6360. "Failed watching path: \"" + expOrFn + "\" " +
  6361. 'Watcher only accepts simple dot-delimited paths. ' +
  6362. 'For full control, use a function instead.',
  6363. vm
  6364. );
  6365. }
  6366. }
  6367. this.value = this.lazy
  6368. ? undefined
  6369. : this.get();
  6370. };
  6371. /**
  6372. * Evaluate the getter, and re-collect dependencies.
  6373. */
  6374. Watcher.prototype.get = function get () {
  6375. pushTarget(this);
  6376. var value;
  6377. var vm = this.vm;
  6378. try {
  6379. value = this.getter.call(vm, vm);
  6380. } catch (e) {
  6381. if (this.user) {
  6382. handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
  6383. } else {
  6384. throw e
  6385. }
  6386. } finally {
  6387. // "touch" every property so they are all tracked as
  6388. // dependencies for deep watching
  6389. if (this.deep) {
  6390. traverse(value);
  6391. }
  6392. popTarget();
  6393. this.cleanupDeps();
  6394. }
  6395. return value
  6396. };
  6397. /**
  6398. * Add a dependency to this directive.
  6399. */
  6400. Watcher.prototype.addDep = function addDep (dep) {
  6401. var id = dep.id;
  6402. if (!this.newDepIds.has(id)) {
  6403. this.newDepIds.add(id);
  6404. this.newDeps.push(dep);
  6405. if (!this.depIds.has(id)) {
  6406. dep.addSub(this);
  6407. }
  6408. }
  6409. };
  6410. /**
  6411. * Clean up for dependency collection.
  6412. */
  6413. Watcher.prototype.cleanupDeps = function cleanupDeps () {
  6414. var i = this.deps.length;
  6415. while (i--) {
  6416. var dep = this.deps[i];
  6417. if (!this.newDepIds.has(dep.id)) {
  6418. dep.removeSub(this);
  6419. }
  6420. }
  6421. var tmp = this.depIds;
  6422. this.depIds = this.newDepIds;
  6423. this.newDepIds = tmp;
  6424. this.newDepIds.clear();
  6425. tmp = this.deps;
  6426. this.deps = this.newDeps;
  6427. this.newDeps = tmp;
  6428. this.newDeps.length = 0;
  6429. };
  6430. /**
  6431. * Subscriber interface.
  6432. * Will be called when a dependency changes.
  6433. */
  6434. Watcher.prototype.update = function update () {
  6435. /* istanbul ignore else */
  6436. if (this.lazy) {
  6437. this.dirty = true;
  6438. } else if (this.sync) {
  6439. this.run();
  6440. } else {
  6441. queueWatcher(this);
  6442. }
  6443. };
  6444. /**
  6445. * Scheduler job interface.
  6446. * Will be called by the scheduler.
  6447. */
  6448. Watcher.prototype.run = function run () {
  6449. if (this.active) {
  6450. var value = this.get();
  6451. if (
  6452. value !== this.value ||
  6453. // Deep watchers and watchers on Object/Arrays should fire even
  6454. // when the value is the same, because the value may
  6455. // have mutated.
  6456. isObject(value) ||
  6457. this.deep
  6458. ) {
  6459. // set new value
  6460. var oldValue = this.value;
  6461. this.value = value;
  6462. if (this.user) {
  6463. try {
  6464. this.cb.call(this.vm, value, oldValue);
  6465. } catch (e) {
  6466. handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
  6467. }
  6468. } else {
  6469. this.cb.call(this.vm, value, oldValue);
  6470. }
  6471. }
  6472. }
  6473. };
  6474. /**
  6475. * Evaluate the value of the watcher.
  6476. * This only gets called for lazy watchers.
  6477. */
  6478. Watcher.prototype.evaluate = function evaluate () {
  6479. this.value = this.get();
  6480. this.dirty = false;
  6481. };
  6482. /**
  6483. * Depend on all deps collected by this watcher.
  6484. */
  6485. Watcher.prototype.depend = function depend () {
  6486. var i = this.deps.length;
  6487. while (i--) {
  6488. this.deps[i].depend();
  6489. }
  6490. };
  6491. /**
  6492. * Remove self from all dependencies' subscriber list.
  6493. */
  6494. Watcher.prototype.teardown = function teardown () {
  6495. if (this.active) {
  6496. // remove self from vm's watcher list
  6497. // this is a somewhat expensive operation so we skip it
  6498. // if the vm is being destroyed.
  6499. if (!this.vm._isBeingDestroyed) {
  6500. remove(this.vm._watchers, this);
  6501. }
  6502. var i = this.deps.length;
  6503. while (i--) {
  6504. this.deps[i].removeSub(this);
  6505. }
  6506. this.active = false;
  6507. }
  6508. };
  6509. /* */
  6510. var sharedPropertyDefinition = {
  6511. enumerable: true,
  6512. configurable: true,
  6513. get: noop,
  6514. set: noop
  6515. };
  6516. function proxy (target, sourceKey, key) {
  6517. sharedPropertyDefinition.get = function proxyGetter () {
  6518. return this[sourceKey][key]
  6519. };
  6520. sharedPropertyDefinition.set = function proxySetter (val) {
  6521. this[sourceKey][key] = val;
  6522. };
  6523. Object.defineProperty(target, key, sharedPropertyDefinition);
  6524. }
  6525. function initState (vm) {
  6526. vm._watchers = [];
  6527. var opts = vm.$options;
  6528. if (opts.props) { initProps(vm, opts.props); }
  6529. if (opts.methods) { initMethods(vm, opts.methods); }
  6530. if (opts.data) {
  6531. initData(vm);
  6532. } else {
  6533. observe(vm._data = {}, true /* asRootData */);
  6534. }
  6535. if (opts.computed) { initComputed(vm, opts.computed); }
  6536. if (opts.watch && opts.watch !== nativeWatch) {
  6537. initWatch(vm, opts.watch);
  6538. }
  6539. }
  6540. function initProps (vm, propsOptions) {
  6541. var propsData = vm.$options.propsData || {};
  6542. var props = vm._props = {};
  6543. // cache prop keys so that future props updates can iterate using Array
  6544. // instead of dynamic object key enumeration.
  6545. var keys = vm.$options._propKeys = [];
  6546. var isRoot = !vm.$parent;
  6547. // root instance props should be converted
  6548. if (!isRoot) {
  6549. toggleObserving(false);
  6550. }
  6551. var loop = function ( key ) {
  6552. keys.push(key);
  6553. var value = validateProp(key, propsOptions, propsData, vm);
  6554. /* istanbul ignore else */
  6555. if (true) {
  6556. var hyphenatedKey = hyphenate(key);
  6557. if (isReservedAttribute(hyphenatedKey) ||
  6558. config.isReservedAttr(hyphenatedKey)) {
  6559. warn(
  6560. ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
  6561. vm
  6562. );
  6563. }
  6564. defineReactive$$1(props, key, value, function () {
  6565. if (!isRoot && !isUpdatingChildComponent) {
  6566. {
  6567. if(vm.mpHost === 'mp-baidu'){//百度 observer 在 setData callback 之后触发,直接忽略该 warn
  6568. return
  6569. }
  6570. //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
  6571. if(
  6572. key === 'value' &&
  6573. Array.isArray(vm.$options.behaviors) &&
  6574. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  6575. ){
  6576. return
  6577. }
  6578. if(vm._getFormData){
  6579. return
  6580. }
  6581. var $parent = vm.$parent;
  6582. while($parent){
  6583. if($parent.__next_tick_pending){
  6584. return
  6585. }
  6586. $parent = $parent.$parent;
  6587. }
  6588. }
  6589. warn(
  6590. "Avoid mutating a prop directly since the value will be " +
  6591. "overwritten whenever the parent component re-renders. " +
  6592. "Instead, use a data or computed property based on the prop's " +
  6593. "value. Prop being mutated: \"" + key + "\"",
  6594. vm
  6595. );
  6596. }
  6597. });
  6598. } else {}
  6599. // static props are already proxied on the component's prototype
  6600. // during Vue.extend(). We only need to proxy props defined at
  6601. // instantiation here.
  6602. if (!(key in vm)) {
  6603. proxy(vm, "_props", key);
  6604. }
  6605. };
  6606. for (var key in propsOptions) loop( key );
  6607. toggleObserving(true);
  6608. }
  6609. function initData (vm) {
  6610. var data = vm.$options.data;
  6611. data = vm._data = typeof data === 'function'
  6612. ? getData(data, vm)
  6613. : data || {};
  6614. if (!isPlainObject(data)) {
  6615. data = {};
  6616. true && warn(
  6617. 'data functions should return an object:\n' +
  6618. 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
  6619. vm
  6620. );
  6621. }
  6622. // proxy data on instance
  6623. var keys = Object.keys(data);
  6624. var props = vm.$options.props;
  6625. var methods = vm.$options.methods;
  6626. var i = keys.length;
  6627. while (i--) {
  6628. var key = keys[i];
  6629. if (true) {
  6630. if (methods && hasOwn(methods, key)) {
  6631. warn(
  6632. ("Method \"" + key + "\" has already been defined as a data property."),
  6633. vm
  6634. );
  6635. }
  6636. }
  6637. if (props && hasOwn(props, key)) {
  6638. true && warn(
  6639. "The data property \"" + key + "\" is already declared as a prop. " +
  6640. "Use prop default value instead.",
  6641. vm
  6642. );
  6643. } else if (!isReserved(key)) {
  6644. proxy(vm, "_data", key);
  6645. }
  6646. }
  6647. // observe data
  6648. observe(data, true /* asRootData */);
  6649. }
  6650. function getData (data, vm) {
  6651. // #7573 disable dep collection when invoking data getters
  6652. pushTarget();
  6653. try {
  6654. return data.call(vm, vm)
  6655. } catch (e) {
  6656. handleError(e, vm, "data()");
  6657. return {}
  6658. } finally {
  6659. popTarget();
  6660. }
  6661. }
  6662. var computedWatcherOptions = { lazy: true };
  6663. function initComputed (vm, computed) {
  6664. // $flow-disable-line
  6665. var watchers = vm._computedWatchers = Object.create(null);
  6666. // computed properties are just getters during SSR
  6667. var isSSR = isServerRendering();
  6668. for (var key in computed) {
  6669. var userDef = computed[key];
  6670. var getter = typeof userDef === 'function' ? userDef : userDef.get;
  6671. if ( true && getter == null) {
  6672. warn(
  6673. ("Getter is missing for computed property \"" + key + "\"."),
  6674. vm
  6675. );
  6676. }
  6677. if (!isSSR) {
  6678. // create internal watcher for the computed property.
  6679. watchers[key] = new Watcher(
  6680. vm,
  6681. getter || noop,
  6682. noop,
  6683. computedWatcherOptions
  6684. );
  6685. }
  6686. // component-defined computed properties are already defined on the
  6687. // component prototype. We only need to define computed properties defined
  6688. // at instantiation here.
  6689. if (!(key in vm)) {
  6690. defineComputed(vm, key, userDef);
  6691. } else if (true) {
  6692. if (key in vm.$data) {
  6693. warn(("The computed property \"" + key + "\" is already defined in data."), vm);
  6694. } else if (vm.$options.props && key in vm.$options.props) {
  6695. warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
  6696. }
  6697. }
  6698. }
  6699. }
  6700. function defineComputed (
  6701. target,
  6702. key,
  6703. userDef
  6704. ) {
  6705. var shouldCache = !isServerRendering();
  6706. if (typeof userDef === 'function') {
  6707. sharedPropertyDefinition.get = shouldCache
  6708. ? createComputedGetter(key)
  6709. : createGetterInvoker(userDef);
  6710. sharedPropertyDefinition.set = noop;
  6711. } else {
  6712. sharedPropertyDefinition.get = userDef.get
  6713. ? shouldCache && userDef.cache !== false
  6714. ? createComputedGetter(key)
  6715. : createGetterInvoker(userDef.get)
  6716. : noop;
  6717. sharedPropertyDefinition.set = userDef.set || noop;
  6718. }
  6719. if ( true &&
  6720. sharedPropertyDefinition.set === noop) {
  6721. sharedPropertyDefinition.set = function () {
  6722. warn(
  6723. ("Computed property \"" + key + "\" was assigned to but it has no setter."),
  6724. this
  6725. );
  6726. };
  6727. }
  6728. Object.defineProperty(target, key, sharedPropertyDefinition);
  6729. }
  6730. function createComputedGetter (key) {
  6731. return function computedGetter () {
  6732. var watcher = this._computedWatchers && this._computedWatchers[key];
  6733. if (watcher) {
  6734. if (watcher.dirty) {
  6735. watcher.evaluate();
  6736. }
  6737. if (Dep.SharedObject.target) {// fixed by xxxxxx
  6738. watcher.depend();
  6739. }
  6740. return watcher.value
  6741. }
  6742. }
  6743. }
  6744. function createGetterInvoker(fn) {
  6745. return function computedGetter () {
  6746. return fn.call(this, this)
  6747. }
  6748. }
  6749. function initMethods (vm, methods) {
  6750. var props = vm.$options.props;
  6751. for (var key in methods) {
  6752. if (true) {
  6753. if (typeof methods[key] !== 'function') {
  6754. warn(
  6755. "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
  6756. "Did you reference the function correctly?",
  6757. vm
  6758. );
  6759. }
  6760. if (props && hasOwn(props, key)) {
  6761. warn(
  6762. ("Method \"" + key + "\" has already been defined as a prop."),
  6763. vm
  6764. );
  6765. }
  6766. if ((key in vm) && isReserved(key)) {
  6767. warn(
  6768. "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
  6769. "Avoid defining component methods that start with _ or $."
  6770. );
  6771. }
  6772. }
  6773. vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
  6774. }
  6775. }
  6776. function initWatch (vm, watch) {
  6777. for (var key in watch) {
  6778. var handler = watch[key];
  6779. if (Array.isArray(handler)) {
  6780. for (var i = 0; i < handler.length; i++) {
  6781. createWatcher(vm, key, handler[i]);
  6782. }
  6783. } else {
  6784. createWatcher(vm, key, handler);
  6785. }
  6786. }
  6787. }
  6788. function createWatcher (
  6789. vm,
  6790. expOrFn,
  6791. handler,
  6792. options
  6793. ) {
  6794. if (isPlainObject(handler)) {
  6795. options = handler;
  6796. handler = handler.handler;
  6797. }
  6798. if (typeof handler === 'string') {
  6799. handler = vm[handler];
  6800. }
  6801. return vm.$watch(expOrFn, handler, options)
  6802. }
  6803. function stateMixin (Vue) {
  6804. // flow somehow has problems with directly declared definition object
  6805. // when using Object.defineProperty, so we have to procedurally build up
  6806. // the object here.
  6807. var dataDef = {};
  6808. dataDef.get = function () { return this._data };
  6809. var propsDef = {};
  6810. propsDef.get = function () { return this._props };
  6811. if (true) {
  6812. dataDef.set = function () {
  6813. warn(
  6814. 'Avoid replacing instance root $data. ' +
  6815. 'Use nested data properties instead.',
  6816. this
  6817. );
  6818. };
  6819. propsDef.set = function () {
  6820. warn("$props is readonly.", this);
  6821. };
  6822. }
  6823. Object.defineProperty(Vue.prototype, '$data', dataDef);
  6824. Object.defineProperty(Vue.prototype, '$props', propsDef);
  6825. Vue.prototype.$set = set;
  6826. Vue.prototype.$delete = del;
  6827. Vue.prototype.$watch = function (
  6828. expOrFn,
  6829. cb,
  6830. options
  6831. ) {
  6832. var vm = this;
  6833. if (isPlainObject(cb)) {
  6834. return createWatcher(vm, expOrFn, cb, options)
  6835. }
  6836. options = options || {};
  6837. options.user = true;
  6838. var watcher = new Watcher(vm, expOrFn, cb, options);
  6839. if (options.immediate) {
  6840. try {
  6841. cb.call(vm, watcher.value);
  6842. } catch (error) {
  6843. handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
  6844. }
  6845. }
  6846. return function unwatchFn () {
  6847. watcher.teardown();
  6848. }
  6849. };
  6850. }
  6851. /* */
  6852. var uid$3 = 0;
  6853. function initMixin (Vue) {
  6854. Vue.prototype._init = function (options) {
  6855. var vm = this;
  6856. // a uid
  6857. vm._uid = uid$3++;
  6858. var startTag, endTag;
  6859. /* istanbul ignore if */
  6860. if ( true && config.performance && mark) {
  6861. startTag = "vue-perf-start:" + (vm._uid);
  6862. endTag = "vue-perf-end:" + (vm._uid);
  6863. mark(startTag);
  6864. }
  6865. // a flag to avoid this being observed
  6866. vm._isVue = true;
  6867. // merge options
  6868. if (options && options._isComponent) {
  6869. // optimize internal component instantiation
  6870. // since dynamic options merging is pretty slow, and none of the
  6871. // internal component options needs special treatment.
  6872. initInternalComponent(vm, options);
  6873. } else {
  6874. vm.$options = mergeOptions(
  6875. resolveConstructorOptions(vm.constructor),
  6876. options || {},
  6877. vm
  6878. );
  6879. }
  6880. /* istanbul ignore else */
  6881. if (true) {
  6882. initProxy(vm);
  6883. } else {}
  6884. // expose real self
  6885. vm._self = vm;
  6886. initLifecycle(vm);
  6887. initEvents(vm);
  6888. initRender(vm);
  6889. callHook(vm, 'beforeCreate');
  6890. !vm._$fallback && initInjections(vm); // resolve injections before data/props
  6891. initState(vm);
  6892. !vm._$fallback && initProvide(vm); // resolve provide after data/props
  6893. !vm._$fallback && callHook(vm, 'created');
  6894. /* istanbul ignore if */
  6895. if ( true && config.performance && mark) {
  6896. vm._name = formatComponentName(vm, false);
  6897. mark(endTag);
  6898. measure(("vue " + (vm._name) + " init"), startTag, endTag);
  6899. }
  6900. if (vm.$options.el) {
  6901. vm.$mount(vm.$options.el);
  6902. }
  6903. };
  6904. }
  6905. function initInternalComponent (vm, options) {
  6906. var opts = vm.$options = Object.create(vm.constructor.options);
  6907. // doing this because it's faster than dynamic enumeration.
  6908. var parentVnode = options._parentVnode;
  6909. opts.parent = options.parent;
  6910. opts._parentVnode = parentVnode;
  6911. var vnodeComponentOptions = parentVnode.componentOptions;
  6912. opts.propsData = vnodeComponentOptions.propsData;
  6913. opts._parentListeners = vnodeComponentOptions.listeners;
  6914. opts._renderChildren = vnodeComponentOptions.children;
  6915. opts._componentTag = vnodeComponentOptions.tag;
  6916. if (options.render) {
  6917. opts.render = options.render;
  6918. opts.staticRenderFns = options.staticRenderFns;
  6919. }
  6920. }
  6921. function resolveConstructorOptions (Ctor) {
  6922. var options = Ctor.options;
  6923. if (Ctor.super) {
  6924. var superOptions = resolveConstructorOptions(Ctor.super);
  6925. var cachedSuperOptions = Ctor.superOptions;
  6926. if (superOptions !== cachedSuperOptions) {
  6927. // super option changed,
  6928. // need to resolve new options.
  6929. Ctor.superOptions = superOptions;
  6930. // check if there are any late-modified/attached options (#4976)
  6931. var modifiedOptions = resolveModifiedOptions(Ctor);
  6932. // update base extend options
  6933. if (modifiedOptions) {
  6934. extend(Ctor.extendOptions, modifiedOptions);
  6935. }
  6936. options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
  6937. if (options.name) {
  6938. options.components[options.name] = Ctor;
  6939. }
  6940. }
  6941. }
  6942. return options
  6943. }
  6944. function resolveModifiedOptions (Ctor) {
  6945. var modified;
  6946. var latest = Ctor.options;
  6947. var sealed = Ctor.sealedOptions;
  6948. for (var key in latest) {
  6949. if (latest[key] !== sealed[key]) {
  6950. if (!modified) { modified = {}; }
  6951. modified[key] = latest[key];
  6952. }
  6953. }
  6954. return modified
  6955. }
  6956. function Vue (options) {
  6957. if ( true &&
  6958. !(this instanceof Vue)
  6959. ) {
  6960. warn('Vue is a constructor and should be called with the `new` keyword');
  6961. }
  6962. this._init(options);
  6963. }
  6964. initMixin(Vue);
  6965. stateMixin(Vue);
  6966. eventsMixin(Vue);
  6967. lifecycleMixin(Vue);
  6968. renderMixin(Vue);
  6969. /* */
  6970. function initUse (Vue) {
  6971. Vue.use = function (plugin) {
  6972. var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
  6973. if (installedPlugins.indexOf(plugin) > -1) {
  6974. return this
  6975. }
  6976. // additional parameters
  6977. var args = toArray(arguments, 1);
  6978. args.unshift(this);
  6979. if (typeof plugin.install === 'function') {
  6980. plugin.install.apply(plugin, args);
  6981. } else if (typeof plugin === 'function') {
  6982. plugin.apply(null, args);
  6983. }
  6984. installedPlugins.push(plugin);
  6985. return this
  6986. };
  6987. }
  6988. /* */
  6989. function initMixin$1 (Vue) {
  6990. Vue.mixin = function (mixin) {
  6991. this.options = mergeOptions(this.options, mixin);
  6992. return this
  6993. };
  6994. }
  6995. /* */
  6996. function initExtend (Vue) {
  6997. /**
  6998. * Each instance constructor, including Vue, has a unique
  6999. * cid. This enables us to create wrapped "child
  7000. * constructors" for prototypal inheritance and cache them.
  7001. */
  7002. Vue.cid = 0;
  7003. var cid = 1;
  7004. /**
  7005. * Class inheritance
  7006. */
  7007. Vue.extend = function (extendOptions) {
  7008. extendOptions = extendOptions || {};
  7009. var Super = this;
  7010. var SuperId = Super.cid;
  7011. var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
  7012. if (cachedCtors[SuperId]) {
  7013. return cachedCtors[SuperId]
  7014. }
  7015. var name = extendOptions.name || Super.options.name;
  7016. if ( true && name) {
  7017. validateComponentName(name);
  7018. }
  7019. var Sub = function VueComponent (options) {
  7020. this._init(options);
  7021. };
  7022. Sub.prototype = Object.create(Super.prototype);
  7023. Sub.prototype.constructor = Sub;
  7024. Sub.cid = cid++;
  7025. Sub.options = mergeOptions(
  7026. Super.options,
  7027. extendOptions
  7028. );
  7029. Sub['super'] = Super;
  7030. // For props and computed properties, we define the proxy getters on
  7031. // the Vue instances at extension time, on the extended prototype. This
  7032. // avoids Object.defineProperty calls for each instance created.
  7033. if (Sub.options.props) {
  7034. initProps$1(Sub);
  7035. }
  7036. if (Sub.options.computed) {
  7037. initComputed$1(Sub);
  7038. }
  7039. // allow further extension/mixin/plugin usage
  7040. Sub.extend = Super.extend;
  7041. Sub.mixin = Super.mixin;
  7042. Sub.use = Super.use;
  7043. // create asset registers, so extended classes
  7044. // can have their private assets too.
  7045. ASSET_TYPES.forEach(function (type) {
  7046. Sub[type] = Super[type];
  7047. });
  7048. // enable recursive self-lookup
  7049. if (name) {
  7050. Sub.options.components[name] = Sub;
  7051. }
  7052. // keep a reference to the super options at extension time.
  7053. // later at instantiation we can check if Super's options have
  7054. // been updated.
  7055. Sub.superOptions = Super.options;
  7056. Sub.extendOptions = extendOptions;
  7057. Sub.sealedOptions = extend({}, Sub.options);
  7058. // cache constructor
  7059. cachedCtors[SuperId] = Sub;
  7060. return Sub
  7061. };
  7062. }
  7063. function initProps$1 (Comp) {
  7064. var props = Comp.options.props;
  7065. for (var key in props) {
  7066. proxy(Comp.prototype, "_props", key);
  7067. }
  7068. }
  7069. function initComputed$1 (Comp) {
  7070. var computed = Comp.options.computed;
  7071. for (var key in computed) {
  7072. defineComputed(Comp.prototype, key, computed[key]);
  7073. }
  7074. }
  7075. /* */
  7076. function initAssetRegisters (Vue) {
  7077. /**
  7078. * Create asset registration methods.
  7079. */
  7080. ASSET_TYPES.forEach(function (type) {
  7081. Vue[type] = function (
  7082. id,
  7083. definition
  7084. ) {
  7085. if (!definition) {
  7086. return this.options[type + 's'][id]
  7087. } else {
  7088. /* istanbul ignore if */
  7089. if ( true && type === 'component') {
  7090. validateComponentName(id);
  7091. }
  7092. if (type === 'component' && isPlainObject(definition)) {
  7093. definition.name = definition.name || id;
  7094. definition = this.options._base.extend(definition);
  7095. }
  7096. if (type === 'directive' && typeof definition === 'function') {
  7097. definition = { bind: definition, update: definition };
  7098. }
  7099. this.options[type + 's'][id] = definition;
  7100. return definition
  7101. }
  7102. };
  7103. });
  7104. }
  7105. /* */
  7106. function getComponentName (opts) {
  7107. return opts && (opts.Ctor.options.name || opts.tag)
  7108. }
  7109. function matches (pattern, name) {
  7110. if (Array.isArray(pattern)) {
  7111. return pattern.indexOf(name) > -1
  7112. } else if (typeof pattern === 'string') {
  7113. return pattern.split(',').indexOf(name) > -1
  7114. } else if (isRegExp(pattern)) {
  7115. return pattern.test(name)
  7116. }
  7117. /* istanbul ignore next */
  7118. return false
  7119. }
  7120. function pruneCache (keepAliveInstance, filter) {
  7121. var cache = keepAliveInstance.cache;
  7122. var keys = keepAliveInstance.keys;
  7123. var _vnode = keepAliveInstance._vnode;
  7124. for (var key in cache) {
  7125. var cachedNode = cache[key];
  7126. if (cachedNode) {
  7127. var name = getComponentName(cachedNode.componentOptions);
  7128. if (name && !filter(name)) {
  7129. pruneCacheEntry(cache, key, keys, _vnode);
  7130. }
  7131. }
  7132. }
  7133. }
  7134. function pruneCacheEntry (
  7135. cache,
  7136. key,
  7137. keys,
  7138. current
  7139. ) {
  7140. var cached$$1 = cache[key];
  7141. if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
  7142. cached$$1.componentInstance.$destroy();
  7143. }
  7144. cache[key] = null;
  7145. remove(keys, key);
  7146. }
  7147. var patternTypes = [String, RegExp, Array];
  7148. var KeepAlive = {
  7149. name: 'keep-alive',
  7150. abstract: true,
  7151. props: {
  7152. include: patternTypes,
  7153. exclude: patternTypes,
  7154. max: [String, Number]
  7155. },
  7156. created: function created () {
  7157. this.cache = Object.create(null);
  7158. this.keys = [];
  7159. },
  7160. destroyed: function destroyed () {
  7161. for (var key in this.cache) {
  7162. pruneCacheEntry(this.cache, key, this.keys);
  7163. }
  7164. },
  7165. mounted: function mounted () {
  7166. var this$1 = this;
  7167. this.$watch('include', function (val) {
  7168. pruneCache(this$1, function (name) { return matches(val, name); });
  7169. });
  7170. this.$watch('exclude', function (val) {
  7171. pruneCache(this$1, function (name) { return !matches(val, name); });
  7172. });
  7173. },
  7174. render: function render () {
  7175. var slot = this.$slots.default;
  7176. var vnode = getFirstComponentChild(slot);
  7177. var componentOptions = vnode && vnode.componentOptions;
  7178. if (componentOptions) {
  7179. // check pattern
  7180. var name = getComponentName(componentOptions);
  7181. var ref = this;
  7182. var include = ref.include;
  7183. var exclude = ref.exclude;
  7184. if (
  7185. // not included
  7186. (include && (!name || !matches(include, name))) ||
  7187. // excluded
  7188. (exclude && name && matches(exclude, name))
  7189. ) {
  7190. return vnode
  7191. }
  7192. var ref$1 = this;
  7193. var cache = ref$1.cache;
  7194. var keys = ref$1.keys;
  7195. var key = vnode.key == null
  7196. // same constructor may get registered as different local components
  7197. // so cid alone is not enough (#3269)
  7198. ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
  7199. : vnode.key;
  7200. if (cache[key]) {
  7201. vnode.componentInstance = cache[key].componentInstance;
  7202. // make current key freshest
  7203. remove(keys, key);
  7204. keys.push(key);
  7205. } else {
  7206. cache[key] = vnode;
  7207. keys.push(key);
  7208. // prune oldest entry
  7209. if (this.max && keys.length > parseInt(this.max)) {
  7210. pruneCacheEntry(cache, keys[0], keys, this._vnode);
  7211. }
  7212. }
  7213. vnode.data.keepAlive = true;
  7214. }
  7215. return vnode || (slot && slot[0])
  7216. }
  7217. };
  7218. var builtInComponents = {
  7219. KeepAlive: KeepAlive
  7220. };
  7221. /* */
  7222. function initGlobalAPI (Vue) {
  7223. // config
  7224. var configDef = {};
  7225. configDef.get = function () { return config; };
  7226. if (true) {
  7227. configDef.set = function () {
  7228. warn(
  7229. 'Do not replace the Vue.config object, set individual fields instead.'
  7230. );
  7231. };
  7232. }
  7233. Object.defineProperty(Vue, 'config', configDef);
  7234. // exposed util methods.
  7235. // NOTE: these are not considered part of the public API - avoid relying on
  7236. // them unless you are aware of the risk.
  7237. Vue.util = {
  7238. warn: warn,
  7239. extend: extend,
  7240. mergeOptions: mergeOptions,
  7241. defineReactive: defineReactive$$1
  7242. };
  7243. Vue.set = set;
  7244. Vue.delete = del;
  7245. Vue.nextTick = nextTick;
  7246. // 2.6 explicit observable API
  7247. Vue.observable = function (obj) {
  7248. observe(obj);
  7249. return obj
  7250. };
  7251. Vue.options = Object.create(null);
  7252. ASSET_TYPES.forEach(function (type) {
  7253. Vue.options[type + 's'] = Object.create(null);
  7254. });
  7255. // this is used to identify the "base" constructor to extend all plain-object
  7256. // components with in Weex's multi-instance scenarios.
  7257. Vue.options._base = Vue;
  7258. extend(Vue.options.components, builtInComponents);
  7259. initUse(Vue);
  7260. initMixin$1(Vue);
  7261. initExtend(Vue);
  7262. initAssetRegisters(Vue);
  7263. }
  7264. initGlobalAPI(Vue);
  7265. Object.defineProperty(Vue.prototype, '$isServer', {
  7266. get: isServerRendering
  7267. });
  7268. Object.defineProperty(Vue.prototype, '$ssrContext', {
  7269. get: function get () {
  7270. /* istanbul ignore next */
  7271. return this.$vnode && this.$vnode.ssrContext
  7272. }
  7273. });
  7274. // expose FunctionalRenderContext for ssr runtime helper installation
  7275. Object.defineProperty(Vue, 'FunctionalRenderContext', {
  7276. value: FunctionalRenderContext
  7277. });
  7278. Vue.version = '2.6.11';
  7279. /**
  7280. * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
  7281. */
  7282. var ARRAYTYPE = '[object Array]';
  7283. var OBJECTTYPE = '[object Object]';
  7284. // const FUNCTIONTYPE = '[object Function]'
  7285. function diff(current, pre) {
  7286. var result = {};
  7287. syncKeys(current, pre);
  7288. _diff(current, pre, '', result);
  7289. return result
  7290. }
  7291. function syncKeys(current, pre) {
  7292. if (current === pre) { return }
  7293. var rootCurrentType = type(current);
  7294. var rootPreType = type(pre);
  7295. if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
  7296. if(Object.keys(current).length >= Object.keys(pre).length){
  7297. for (var key in pre) {
  7298. var currentValue = current[key];
  7299. if (currentValue === undefined) {
  7300. current[key] = null;
  7301. } else {
  7302. syncKeys(currentValue, pre[key]);
  7303. }
  7304. }
  7305. }
  7306. } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
  7307. if (current.length >= pre.length) {
  7308. pre.forEach(function (item, index) {
  7309. syncKeys(current[index], item);
  7310. });
  7311. }
  7312. }
  7313. }
  7314. function _diff(current, pre, path, result) {
  7315. if (current === pre) { return }
  7316. var rootCurrentType = type(current);
  7317. var rootPreType = type(pre);
  7318. if (rootCurrentType == OBJECTTYPE) {
  7319. if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
  7320. setResult(result, path, current);
  7321. } else {
  7322. var loop = function ( key ) {
  7323. var currentValue = current[key];
  7324. var preValue = pre[key];
  7325. var currentType = type(currentValue);
  7326. var preType = type(preValue);
  7327. if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
  7328. if (currentValue != pre[key]) {
  7329. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7330. }
  7331. } else if (currentType == ARRAYTYPE) {
  7332. if (preType != ARRAYTYPE) {
  7333. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7334. } else {
  7335. if (currentValue.length < preValue.length) {
  7336. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7337. } else {
  7338. currentValue.forEach(function (item, index) {
  7339. _diff(item, preValue[index], (path == '' ? '' : path + ".") + key + '[' + index + ']', result);
  7340. });
  7341. }
  7342. }
  7343. } else if (currentType == OBJECTTYPE) {
  7344. if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
  7345. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7346. } else {
  7347. for (var subKey in currentValue) {
  7348. _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + ".") + key + '.' + subKey, result);
  7349. }
  7350. }
  7351. }
  7352. };
  7353. for (var key in current) loop( key );
  7354. }
  7355. } else if (rootCurrentType == ARRAYTYPE) {
  7356. if (rootPreType != ARRAYTYPE) {
  7357. setResult(result, path, current);
  7358. } else {
  7359. if (current.length < pre.length) {
  7360. setResult(result, path, current);
  7361. } else {
  7362. current.forEach(function (item, index) {
  7363. _diff(item, pre[index], path + '[' + index + ']', result);
  7364. });
  7365. }
  7366. }
  7367. } else {
  7368. setResult(result, path, current);
  7369. }
  7370. }
  7371. function setResult(result, k, v) {
  7372. // if (type(v) != FUNCTIONTYPE) {
  7373. result[k] = v;
  7374. // }
  7375. }
  7376. function type(obj) {
  7377. return Object.prototype.toString.call(obj)
  7378. }
  7379. /* */
  7380. function flushCallbacks$1(vm) {
  7381. if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {
  7382. if (Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  7383. var mpInstance = vm.$scope;
  7384. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  7385. ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');
  7386. }
  7387. var copies = vm.__next_tick_callbacks.slice(0);
  7388. vm.__next_tick_callbacks.length = 0;
  7389. for (var i = 0; i < copies.length; i++) {
  7390. copies[i]();
  7391. }
  7392. }
  7393. }
  7394. function hasRenderWatcher(vm) {
  7395. return queue.find(function (watcher) { return vm._watcher === watcher; })
  7396. }
  7397. function nextTick$1(vm, cb) {
  7398. //1.nextTick 之前 已 setData 且 setData 还未回调完成
  7399. //2.nextTick 之前存在 render watcher
  7400. if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {
  7401. if(Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
  7402. var mpInstance = vm.$scope;
  7403. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  7404. ']:nextVueTick');
  7405. }
  7406. return nextTick(cb, vm)
  7407. }else{
  7408. if(Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG){
  7409. var mpInstance$1 = vm.$scope;
  7410. console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +
  7411. ']:nextMPTick');
  7412. }
  7413. }
  7414. var _resolve;
  7415. if (!vm.__next_tick_callbacks) {
  7416. vm.__next_tick_callbacks = [];
  7417. }
  7418. vm.__next_tick_callbacks.push(function () {
  7419. if (cb) {
  7420. try {
  7421. cb.call(vm);
  7422. } catch (e) {
  7423. handleError(e, vm, 'nextTick');
  7424. }
  7425. } else if (_resolve) {
  7426. _resolve(vm);
  7427. }
  7428. });
  7429. // $flow-disable-line
  7430. if (!cb && typeof Promise !== 'undefined') {
  7431. return new Promise(function (resolve) {
  7432. _resolve = resolve;
  7433. })
  7434. }
  7435. }
  7436. /* */
  7437. function cloneWithData(vm) {
  7438. // 确保当前 vm 所有数据被同步
  7439. var ret = Object.create(null);
  7440. var dataKeys = [].concat(
  7441. Object.keys(vm._data || {}),
  7442. Object.keys(vm._computedWatchers || {}));
  7443. dataKeys.reduce(function(ret, key) {
  7444. ret[key] = vm[key];
  7445. return ret
  7446. }, ret);
  7447. // vue-composition-api
  7448. var compositionApiState = vm.__composition_api_state__ || vm.__secret_vfa_state__;
  7449. var rawBindings = compositionApiState && compositionApiState.rawBindings;
  7450. if (rawBindings) {
  7451. Object.keys(rawBindings).forEach(function (key) {
  7452. ret[key] = vm[key];
  7453. });
  7454. }
  7455. //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据
  7456. Object.assign(ret, vm.$mp.data || {});
  7457. if (
  7458. Array.isArray(vm.$options.behaviors) &&
  7459. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  7460. ) { //form-field
  7461. ret['name'] = vm.name;
  7462. ret['value'] = vm.value;
  7463. }
  7464. return JSON.parse(JSON.stringify(ret))
  7465. }
  7466. var patch = function(oldVnode, vnode) {
  7467. var this$1 = this;
  7468. if (vnode === null) { //destroy
  7469. return
  7470. }
  7471. if (this.mpType === 'page' || this.mpType === 'component') {
  7472. var mpInstance = this.$scope;
  7473. var data = Object.create(null);
  7474. try {
  7475. data = cloneWithData(this);
  7476. } catch (err) {
  7477. console.error(err);
  7478. }
  7479. data.__webviewId__ = mpInstance.data.__webviewId__;
  7480. var mpData = Object.create(null);
  7481. Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据
  7482. mpData[key] = mpInstance.data[key];
  7483. });
  7484. var diffData = this.$shouldDiffData === false ? data : diff(data, mpData);
  7485. if (Object.keys(diffData).length) {
  7486. if (Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}).VUE_APP_DEBUG) {
  7487. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +
  7488. ']差量更新',
  7489. JSON.stringify(diffData));
  7490. }
  7491. this.__next_tick_pending = true;
  7492. mpInstance.setData(diffData, function () {
  7493. this$1.__next_tick_pending = false;
  7494. flushCallbacks$1(this$1);
  7495. });
  7496. } else {
  7497. flushCallbacks$1(this);
  7498. }
  7499. }
  7500. };
  7501. /* */
  7502. function createEmptyRender() {
  7503. }
  7504. function mountComponent$1(
  7505. vm,
  7506. el,
  7507. hydrating
  7508. ) {
  7509. if (!vm.mpType) {//main.js 中的 new Vue
  7510. return vm
  7511. }
  7512. if (vm.mpType === 'app') {
  7513. vm.$options.render = createEmptyRender;
  7514. }
  7515. if (!vm.$options.render) {
  7516. vm.$options.render = createEmptyRender;
  7517. if (true) {
  7518. /* istanbul ignore if */
  7519. if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
  7520. vm.$options.el || el) {
  7521. warn(
  7522. 'You are using the runtime-only build of Vue where the template ' +
  7523. 'compiler is not available. Either pre-compile the templates into ' +
  7524. 'render functions, or use the compiler-included build.',
  7525. vm
  7526. );
  7527. } else {
  7528. warn(
  7529. 'Failed to mount component: template or render function not defined.',
  7530. vm
  7531. );
  7532. }
  7533. }
  7534. }
  7535. !vm._$fallback && callHook(vm, 'beforeMount');
  7536. var updateComponent = function () {
  7537. vm._update(vm._render(), hydrating);
  7538. };
  7539. // we set this to vm._watcher inside the watcher's constructor
  7540. // since the watcher's initial patch may call $forceUpdate (e.g. inside child
  7541. // component's mounted hook), which relies on vm._watcher being already defined
  7542. new Watcher(vm, updateComponent, noop, {
  7543. before: function before() {
  7544. if (vm._isMounted && !vm._isDestroyed) {
  7545. callHook(vm, 'beforeUpdate');
  7546. }
  7547. }
  7548. }, true /* isRenderWatcher */);
  7549. hydrating = false;
  7550. return vm
  7551. }
  7552. /* */
  7553. function renderClass (
  7554. staticClass,
  7555. dynamicClass
  7556. ) {
  7557. if (isDef(staticClass) || isDef(dynamicClass)) {
  7558. return concat(staticClass, stringifyClass(dynamicClass))
  7559. }
  7560. /* istanbul ignore next */
  7561. return ''
  7562. }
  7563. function concat (a, b) {
  7564. return a ? b ? (a + ' ' + b) : a : (b || '')
  7565. }
  7566. function stringifyClass (value) {
  7567. if (Array.isArray(value)) {
  7568. return stringifyArray(value)
  7569. }
  7570. if (isObject(value)) {
  7571. return stringifyObject(value)
  7572. }
  7573. if (typeof value === 'string') {
  7574. return value
  7575. }
  7576. /* istanbul ignore next */
  7577. return ''
  7578. }
  7579. function stringifyArray (value) {
  7580. var res = '';
  7581. var stringified;
  7582. for (var i = 0, l = value.length; i < l; i++) {
  7583. if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
  7584. if (res) { res += ' '; }
  7585. res += stringified;
  7586. }
  7587. }
  7588. return res
  7589. }
  7590. function stringifyObject (value) {
  7591. var res = '';
  7592. for (var key in value) {
  7593. if (value[key]) {
  7594. if (res) { res += ' '; }
  7595. res += key;
  7596. }
  7597. }
  7598. return res
  7599. }
  7600. /* */
  7601. var parseStyleText = cached(function (cssText) {
  7602. var res = {};
  7603. var listDelimiter = /;(?![^(]*\))/g;
  7604. var propertyDelimiter = /:(.+)/;
  7605. cssText.split(listDelimiter).forEach(function (item) {
  7606. if (item) {
  7607. var tmp = item.split(propertyDelimiter);
  7608. tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
  7609. }
  7610. });
  7611. return res
  7612. });
  7613. // normalize possible array / string values into Object
  7614. function normalizeStyleBinding (bindingStyle) {
  7615. if (Array.isArray(bindingStyle)) {
  7616. return toObject(bindingStyle)
  7617. }
  7618. if (typeof bindingStyle === 'string') {
  7619. return parseStyleText(bindingStyle)
  7620. }
  7621. return bindingStyle
  7622. }
  7623. /* */
  7624. var MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];
  7625. function getTarget(obj, path) {
  7626. var parts = path.split('.');
  7627. var key = parts[0];
  7628. if (key.indexOf('__$n') === 0) { //number index
  7629. key = parseInt(key.replace('__$n', ''));
  7630. }
  7631. if (parts.length === 1) {
  7632. return obj[key]
  7633. }
  7634. return getTarget(obj[key], parts.slice(1).join('.'))
  7635. }
  7636. function internalMixin(Vue) {
  7637. Vue.config.errorHandler = function(err, vm, info) {
  7638. Vue.util.warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  7639. console.error(err);
  7640. /* eslint-disable no-undef */
  7641. var app = getApp();
  7642. if (app && app.onError) {
  7643. app.onError(err);
  7644. }
  7645. };
  7646. var oldEmit = Vue.prototype.$emit;
  7647. Vue.prototype.$emit = function(event) {
  7648. if (this.$scope && event) {
  7649. this.$scope['triggerEvent'](event, {
  7650. __args__: toArray(arguments, 1)
  7651. });
  7652. }
  7653. return oldEmit.apply(this, arguments)
  7654. };
  7655. Vue.prototype.$nextTick = function(fn) {
  7656. return nextTick$1(this, fn)
  7657. };
  7658. MP_METHODS.forEach(function (method) {
  7659. Vue.prototype[method] = function(args) {
  7660. if (this.$scope && this.$scope[method]) {
  7661. return this.$scope[method](args)
  7662. }
  7663. // mp-alipay
  7664. if (typeof my === 'undefined') {
  7665. return
  7666. }
  7667. if (method === 'createSelectorQuery') {
  7668. /* eslint-disable no-undef */
  7669. return my.createSelectorQuery(args)
  7670. } else if (method === 'createIntersectionObserver') {
  7671. /* eslint-disable no-undef */
  7672. return my.createIntersectionObserver(args)
  7673. }
  7674. // TODO mp-alipay 暂不支持 selectAllComponents,selectComponent
  7675. };
  7676. });
  7677. Vue.prototype.__init_provide = initProvide;
  7678. Vue.prototype.__init_injections = initInjections;
  7679. Vue.prototype.__call_hook = function(hook, args) {
  7680. var vm = this;
  7681. // #7573 disable dep collection when invoking lifecycle hooks
  7682. pushTarget();
  7683. var handlers = vm.$options[hook];
  7684. var info = hook + " hook";
  7685. var ret;
  7686. if (handlers) {
  7687. for (var i = 0, j = handlers.length; i < j; i++) {
  7688. ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);
  7689. }
  7690. }
  7691. if (vm._hasHookEvent) {
  7692. vm.$emit('hook:' + hook, args);
  7693. }
  7694. popTarget();
  7695. return ret
  7696. };
  7697. Vue.prototype.__set_model = function(target, key, value, modifiers) {
  7698. if (Array.isArray(modifiers)) {
  7699. if (modifiers.indexOf('trim') !== -1) {
  7700. value = value.trim();
  7701. }
  7702. if (modifiers.indexOf('number') !== -1) {
  7703. value = this._n(value);
  7704. }
  7705. }
  7706. if (!target) {
  7707. target = this;
  7708. }
  7709. target[key] = value;
  7710. };
  7711. Vue.prototype.__set_sync = function(target, key, value) {
  7712. if (!target) {
  7713. target = this;
  7714. }
  7715. target[key] = value;
  7716. };
  7717. Vue.prototype.__get_orig = function(item) {
  7718. if (isPlainObject(item)) {
  7719. return item['$orig'] || item
  7720. }
  7721. return item
  7722. };
  7723. Vue.prototype.__get_value = function(dataPath, target) {
  7724. return getTarget(target || this, dataPath)
  7725. };
  7726. Vue.prototype.__get_class = function(dynamicClass, staticClass) {
  7727. return renderClass(staticClass, dynamicClass)
  7728. };
  7729. Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {
  7730. if (!dynamicStyle && !staticStyle) {
  7731. return ''
  7732. }
  7733. var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);
  7734. var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;
  7735. return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + ":" + (styleObj[name])); }).join(';')
  7736. };
  7737. Vue.prototype.__map = function(val, iteratee) {
  7738. //TODO 暂不考虑 string
  7739. var ret, i, l, keys, key;
  7740. if (Array.isArray(val)) {
  7741. ret = new Array(val.length);
  7742. for (i = 0, l = val.length; i < l; i++) {
  7743. ret[i] = iteratee(val[i], i);
  7744. }
  7745. return ret
  7746. } else if (isObject(val)) {
  7747. keys = Object.keys(val);
  7748. ret = Object.create(null);
  7749. for (i = 0, l = keys.length; i < l; i++) {
  7750. key = keys[i];
  7751. ret[key] = iteratee(val[key], key, i);
  7752. }
  7753. return ret
  7754. } else if (typeof val === 'number') {
  7755. ret = new Array(val);
  7756. for (i = 0, l = val; i < l; i++) {
  7757. // 第一个参数暂时仍和小程序一致
  7758. ret[i] = iteratee(i, i);
  7759. }
  7760. return ret
  7761. }
  7762. return []
  7763. };
  7764. }
  7765. /* */
  7766. var LIFECYCLE_HOOKS$1 = [
  7767. //App
  7768. 'onLaunch',
  7769. 'onShow',
  7770. 'onHide',
  7771. 'onUniNViewMessage',
  7772. 'onPageNotFound',
  7773. 'onThemeChange',
  7774. 'onError',
  7775. 'onUnhandledRejection',
  7776. //Page
  7777. 'onLoad',
  7778. // 'onShow',
  7779. 'onReady',
  7780. // 'onHide',
  7781. 'onUnload',
  7782. 'onPullDownRefresh',
  7783. 'onReachBottom',
  7784. 'onTabItemTap',
  7785. 'onAddToFavorites',
  7786. 'onShareTimeline',
  7787. 'onShareAppMessage',
  7788. 'onResize',
  7789. 'onPageScroll',
  7790. 'onNavigationBarButtonTap',
  7791. 'onBackPress',
  7792. 'onNavigationBarSearchInputChanged',
  7793. 'onNavigationBarSearchInputConfirmed',
  7794. 'onNavigationBarSearchInputClicked',
  7795. //Component
  7796. // 'onReady', // 兼容旧版本,应该移除该事件
  7797. 'onPageShow',
  7798. 'onPageHide',
  7799. 'onPageResize'
  7800. ];
  7801. function lifecycleMixin$1(Vue) {
  7802. //fixed vue-class-component
  7803. var oldExtend = Vue.extend;
  7804. Vue.extend = function(extendOptions) {
  7805. extendOptions = extendOptions || {};
  7806. var methods = extendOptions.methods;
  7807. if (methods) {
  7808. Object.keys(methods).forEach(function (methodName) {
  7809. if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {
  7810. extendOptions[methodName] = methods[methodName];
  7811. delete methods[methodName];
  7812. }
  7813. });
  7814. }
  7815. return oldExtend.call(this, extendOptions)
  7816. };
  7817. var strategies = Vue.config.optionMergeStrategies;
  7818. var mergeHook = strategies.created;
  7819. LIFECYCLE_HOOKS$1.forEach(function (hook) {
  7820. strategies[hook] = mergeHook;
  7821. });
  7822. Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;
  7823. }
  7824. /* */
  7825. // install platform patch function
  7826. Vue.prototype.__patch__ = patch;
  7827. // public mount method
  7828. Vue.prototype.$mount = function(
  7829. el ,
  7830. hydrating
  7831. ) {
  7832. return mountComponent$1(this, el, hydrating)
  7833. };
  7834. lifecycleMixin$1(Vue);
  7835. internalMixin(Vue);
  7836. /* */
  7837. /* harmony default export */ __webpack_exports__["default"] = (Vue);
  7838. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 3)))
  7839. /***/ }),
  7840. /***/ 20:
  7841. /*!************************************************************!*\
  7842. !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
  7843. \************************************************************/
  7844. /*! no static exports found */
  7845. /***/ (function(module, exports, __webpack_require__) {
  7846. /**
  7847. * Copyright (c) 2014-present, Facebook, Inc.
  7848. *
  7849. * This source code is licensed under the MIT license found in the
  7850. * LICENSE file in the root directory of this source tree.
  7851. */
  7852. // This method of obtaining a reference to the global object needs to be
  7853. // kept identical to the way it is obtained in runtime.js
  7854. var g = (function() {
  7855. return this || (typeof self === "object" && self);
  7856. })() || Function("return this")();
  7857. // Use `getOwnPropertyNames` because not all browsers support calling
  7858. // `hasOwnProperty` on the global `self` object in a worker. See #183.
  7859. var hadRuntime = g.regeneratorRuntime &&
  7860. Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
  7861. // Save the old regeneratorRuntime in case it needs to be restored later.
  7862. var oldRuntime = hadRuntime && g.regeneratorRuntime;
  7863. // Force reevalutation of runtime.js.
  7864. g.regeneratorRuntime = undefined;
  7865. module.exports = __webpack_require__(/*! ./runtime */ 21);
  7866. if (hadRuntime) {
  7867. // Restore the original runtime.
  7868. g.regeneratorRuntime = oldRuntime;
  7869. } else {
  7870. // Remove the global property added by runtime.js.
  7871. try {
  7872. delete g.regeneratorRuntime;
  7873. } catch(e) {
  7874. g.regeneratorRuntime = undefined;
  7875. }
  7876. }
  7877. /***/ }),
  7878. /***/ 21:
  7879. /*!*****************************************************!*\
  7880. !*** ./node_modules/regenerator-runtime/runtime.js ***!
  7881. \*****************************************************/
  7882. /*! no static exports found */
  7883. /***/ (function(module, exports) {
  7884. /**
  7885. * Copyright (c) 2014-present, Facebook, Inc.
  7886. *
  7887. * This source code is licensed under the MIT license found in the
  7888. * LICENSE file in the root directory of this source tree.
  7889. */
  7890. !(function(global) {
  7891. "use strict";
  7892. var Op = Object.prototype;
  7893. var hasOwn = Op.hasOwnProperty;
  7894. var undefined; // More compressible than void 0.
  7895. var $Symbol = typeof Symbol === "function" ? Symbol : {};
  7896. var iteratorSymbol = $Symbol.iterator || "@@iterator";
  7897. var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  7898. var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  7899. var inModule = typeof module === "object";
  7900. var runtime = global.regeneratorRuntime;
  7901. if (runtime) {
  7902. if (inModule) {
  7903. // If regeneratorRuntime is defined globally and we're in a module,
  7904. // make the exports object identical to regeneratorRuntime.
  7905. module.exports = runtime;
  7906. }
  7907. // Don't bother evaluating the rest of this file if the runtime was
  7908. // already defined globally.
  7909. return;
  7910. }
  7911. // Define the runtime globally (as expected by generated code) as either
  7912. // module.exports (if we're in a module) or a new, empty object.
  7913. runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  7914. function wrap(innerFn, outerFn, self, tryLocsList) {
  7915. // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
  7916. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
  7917. var generator = Object.create(protoGenerator.prototype);
  7918. var context = new Context(tryLocsList || []);
  7919. // The ._invoke method unifies the implementations of the .next,
  7920. // .throw, and .return methods.
  7921. generator._invoke = makeInvokeMethod(innerFn, self, context);
  7922. return generator;
  7923. }
  7924. runtime.wrap = wrap;
  7925. // Try/catch helper to minimize deoptimizations. Returns a completion
  7926. // record like context.tryEntries[i].completion. This interface could
  7927. // have been (and was previously) designed to take a closure to be
  7928. // invoked without arguments, but in all the cases we care about we
  7929. // already have an existing method we want to call, so there's no need
  7930. // to create a new function object. We can even get away with assuming
  7931. // the method takes exactly one argument, since that happens to be true
  7932. // in every case, so we don't have to touch the arguments object. The
  7933. // only additional allocation required is the completion record, which
  7934. // has a stable shape and so hopefully should be cheap to allocate.
  7935. function tryCatch(fn, obj, arg) {
  7936. try {
  7937. return { type: "normal", arg: fn.call(obj, arg) };
  7938. } catch (err) {
  7939. return { type: "throw", arg: err };
  7940. }
  7941. }
  7942. var GenStateSuspendedStart = "suspendedStart";
  7943. var GenStateSuspendedYield = "suspendedYield";
  7944. var GenStateExecuting = "executing";
  7945. var GenStateCompleted = "completed";
  7946. // Returning this object from the innerFn has the same effect as
  7947. // breaking out of the dispatch switch statement.
  7948. var ContinueSentinel = {};
  7949. // Dummy constructor functions that we use as the .constructor and
  7950. // .constructor.prototype properties for functions that return Generator
  7951. // objects. For full spec compliance, you may wish to configure your
  7952. // minifier not to mangle the names of these two functions.
  7953. function Generator() {}
  7954. function GeneratorFunction() {}
  7955. function GeneratorFunctionPrototype() {}
  7956. // This is a polyfill for %IteratorPrototype% for environments that
  7957. // don't natively support it.
  7958. var IteratorPrototype = {};
  7959. IteratorPrototype[iteratorSymbol] = function () {
  7960. return this;
  7961. };
  7962. var getProto = Object.getPrototypeOf;
  7963. var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  7964. if (NativeIteratorPrototype &&
  7965. NativeIteratorPrototype !== Op &&
  7966. hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
  7967. // This environment has a native %IteratorPrototype%; use it instead
  7968. // of the polyfill.
  7969. IteratorPrototype = NativeIteratorPrototype;
  7970. }
  7971. var Gp = GeneratorFunctionPrototype.prototype =
  7972. Generator.prototype = Object.create(IteratorPrototype);
  7973. GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  7974. GeneratorFunctionPrototype.constructor = GeneratorFunction;
  7975. GeneratorFunctionPrototype[toStringTagSymbol] =
  7976. GeneratorFunction.displayName = "GeneratorFunction";
  7977. // Helper for defining the .next, .throw, and .return methods of the
  7978. // Iterator interface in terms of a single ._invoke method.
  7979. function defineIteratorMethods(prototype) {
  7980. ["next", "throw", "return"].forEach(function(method) {
  7981. prototype[method] = function(arg) {
  7982. return this._invoke(method, arg);
  7983. };
  7984. });
  7985. }
  7986. runtime.isGeneratorFunction = function(genFun) {
  7987. var ctor = typeof genFun === "function" && genFun.constructor;
  7988. return ctor
  7989. ? ctor === GeneratorFunction ||
  7990. // For the native GeneratorFunction constructor, the best we can
  7991. // do is to check its .name property.
  7992. (ctor.displayName || ctor.name) === "GeneratorFunction"
  7993. : false;
  7994. };
  7995. runtime.mark = function(genFun) {
  7996. if (Object.setPrototypeOf) {
  7997. Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
  7998. } else {
  7999. genFun.__proto__ = GeneratorFunctionPrototype;
  8000. if (!(toStringTagSymbol in genFun)) {
  8001. genFun[toStringTagSymbol] = "GeneratorFunction";
  8002. }
  8003. }
  8004. genFun.prototype = Object.create(Gp);
  8005. return genFun;
  8006. };
  8007. // Within the body of any async function, `await x` is transformed to
  8008. // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  8009. // `hasOwn.call(value, "__await")` to determine if the yielded value is
  8010. // meant to be awaited.
  8011. runtime.awrap = function(arg) {
  8012. return { __await: arg };
  8013. };
  8014. function AsyncIterator(generator) {
  8015. function invoke(method, arg, resolve, reject) {
  8016. var record = tryCatch(generator[method], generator, arg);
  8017. if (record.type === "throw") {
  8018. reject(record.arg);
  8019. } else {
  8020. var result = record.arg;
  8021. var value = result.value;
  8022. if (value &&
  8023. typeof value === "object" &&
  8024. hasOwn.call(value, "__await")) {
  8025. return Promise.resolve(value.__await).then(function(value) {
  8026. invoke("next", value, resolve, reject);
  8027. }, function(err) {
  8028. invoke("throw", err, resolve, reject);
  8029. });
  8030. }
  8031. return Promise.resolve(value).then(function(unwrapped) {
  8032. // When a yielded Promise is resolved, its final value becomes
  8033. // the .value of the Promise<{value,done}> result for the
  8034. // current iteration.
  8035. result.value = unwrapped;
  8036. resolve(result);
  8037. }, function(error) {
  8038. // If a rejected Promise was yielded, throw the rejection back
  8039. // into the async generator function so it can be handled there.
  8040. return invoke("throw", error, resolve, reject);
  8041. });
  8042. }
  8043. }
  8044. var previousPromise;
  8045. function enqueue(method, arg) {
  8046. function callInvokeWithMethodAndArg() {
  8047. return new Promise(function(resolve, reject) {
  8048. invoke(method, arg, resolve, reject);
  8049. });
  8050. }
  8051. return previousPromise =
  8052. // If enqueue has been called before, then we want to wait until
  8053. // all previous Promises have been resolved before calling invoke,
  8054. // so that results are always delivered in the correct order. If
  8055. // enqueue has not been called before, then it is important to
  8056. // call invoke immediately, without waiting on a callback to fire,
  8057. // so that the async generator function has the opportunity to do
  8058. // any necessary setup in a predictable way. This predictability
  8059. // is why the Promise constructor synchronously invokes its
  8060. // executor callback, and why async functions synchronously
  8061. // execute code before the first await. Since we implement simple
  8062. // async functions in terms of async generators, it is especially
  8063. // important to get this right, even though it requires care.
  8064. previousPromise ? previousPromise.then(
  8065. callInvokeWithMethodAndArg,
  8066. // Avoid propagating failures to Promises returned by later
  8067. // invocations of the iterator.
  8068. callInvokeWithMethodAndArg
  8069. ) : callInvokeWithMethodAndArg();
  8070. }
  8071. // Define the unified helper method that is used to implement .next,
  8072. // .throw, and .return (see defineIteratorMethods).
  8073. this._invoke = enqueue;
  8074. }
  8075. defineIteratorMethods(AsyncIterator.prototype);
  8076. AsyncIterator.prototype[asyncIteratorSymbol] = function () {
  8077. return this;
  8078. };
  8079. runtime.AsyncIterator = AsyncIterator;
  8080. // Note that simple async functions are implemented on top of
  8081. // AsyncIterator objects; they just return a Promise for the value of
  8082. // the final result produced by the iterator.
  8083. runtime.async = function(innerFn, outerFn, self, tryLocsList) {
  8084. var iter = new AsyncIterator(
  8085. wrap(innerFn, outerFn, self, tryLocsList)
  8086. );
  8087. return runtime.isGeneratorFunction(outerFn)
  8088. ? iter // If outerFn is a generator, return the full iterator.
  8089. : iter.next().then(function(result) {
  8090. return result.done ? result.value : iter.next();
  8091. });
  8092. };
  8093. function makeInvokeMethod(innerFn, self, context) {
  8094. var state = GenStateSuspendedStart;
  8095. return function invoke(method, arg) {
  8096. if (state === GenStateExecuting) {
  8097. throw new Error("Generator is already running");
  8098. }
  8099. if (state === GenStateCompleted) {
  8100. if (method === "throw") {
  8101. throw arg;
  8102. }
  8103. // Be forgiving, per 25.3.3.3.3 of the spec:
  8104. // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
  8105. return doneResult();
  8106. }
  8107. context.method = method;
  8108. context.arg = arg;
  8109. while (true) {
  8110. var delegate = context.delegate;
  8111. if (delegate) {
  8112. var delegateResult = maybeInvokeDelegate(delegate, context);
  8113. if (delegateResult) {
  8114. if (delegateResult === ContinueSentinel) continue;
  8115. return delegateResult;
  8116. }
  8117. }
  8118. if (context.method === "next") {
  8119. // Setting context._sent for legacy support of Babel's
  8120. // function.sent implementation.
  8121. context.sent = context._sent = context.arg;
  8122. } else if (context.method === "throw") {
  8123. if (state === GenStateSuspendedStart) {
  8124. state = GenStateCompleted;
  8125. throw context.arg;
  8126. }
  8127. context.dispatchException(context.arg);
  8128. } else if (context.method === "return") {
  8129. context.abrupt("return", context.arg);
  8130. }
  8131. state = GenStateExecuting;
  8132. var record = tryCatch(innerFn, self, context);
  8133. if (record.type === "normal") {
  8134. // If an exception is thrown from innerFn, we leave state ===
  8135. // GenStateExecuting and loop back for another invocation.
  8136. state = context.done
  8137. ? GenStateCompleted
  8138. : GenStateSuspendedYield;
  8139. if (record.arg === ContinueSentinel) {
  8140. continue;
  8141. }
  8142. return {
  8143. value: record.arg,
  8144. done: context.done
  8145. };
  8146. } else if (record.type === "throw") {
  8147. state = GenStateCompleted;
  8148. // Dispatch the exception by looping back around to the
  8149. // context.dispatchException(context.arg) call above.
  8150. context.method = "throw";
  8151. context.arg = record.arg;
  8152. }
  8153. }
  8154. };
  8155. }
  8156. // Call delegate.iterator[context.method](context.arg) and handle the
  8157. // result, either by returning a { value, done } result from the
  8158. // delegate iterator, or by modifying context.method and context.arg,
  8159. // setting context.delegate to null, and returning the ContinueSentinel.
  8160. function maybeInvokeDelegate(delegate, context) {
  8161. var method = delegate.iterator[context.method];
  8162. if (method === undefined) {
  8163. // A .throw or .return when the delegate iterator has no .throw
  8164. // method always terminates the yield* loop.
  8165. context.delegate = null;
  8166. if (context.method === "throw") {
  8167. if (delegate.iterator.return) {
  8168. // If the delegate iterator has a return method, give it a
  8169. // chance to clean up.
  8170. context.method = "return";
  8171. context.arg = undefined;
  8172. maybeInvokeDelegate(delegate, context);
  8173. if (context.method === "throw") {
  8174. // If maybeInvokeDelegate(context) changed context.method from
  8175. // "return" to "throw", let that override the TypeError below.
  8176. return ContinueSentinel;
  8177. }
  8178. }
  8179. context.method = "throw";
  8180. context.arg = new TypeError(
  8181. "The iterator does not provide a 'throw' method");
  8182. }
  8183. return ContinueSentinel;
  8184. }
  8185. var record = tryCatch(method, delegate.iterator, context.arg);
  8186. if (record.type === "throw") {
  8187. context.method = "throw";
  8188. context.arg = record.arg;
  8189. context.delegate = null;
  8190. return ContinueSentinel;
  8191. }
  8192. var info = record.arg;
  8193. if (! info) {
  8194. context.method = "throw";
  8195. context.arg = new TypeError("iterator result is not an object");
  8196. context.delegate = null;
  8197. return ContinueSentinel;
  8198. }
  8199. if (info.done) {
  8200. // Assign the result of the finished delegate to the temporary
  8201. // variable specified by delegate.resultName (see delegateYield).
  8202. context[delegate.resultName] = info.value;
  8203. // Resume execution at the desired location (see delegateYield).
  8204. context.next = delegate.nextLoc;
  8205. // If context.method was "throw" but the delegate handled the
  8206. // exception, let the outer generator proceed normally. If
  8207. // context.method was "next", forget context.arg since it has been
  8208. // "consumed" by the delegate iterator. If context.method was
  8209. // "return", allow the original .return call to continue in the
  8210. // outer generator.
  8211. if (context.method !== "return") {
  8212. context.method = "next";
  8213. context.arg = undefined;
  8214. }
  8215. } else {
  8216. // Re-yield the result returned by the delegate method.
  8217. return info;
  8218. }
  8219. // The delegate iterator is finished, so forget it and continue with
  8220. // the outer generator.
  8221. context.delegate = null;
  8222. return ContinueSentinel;
  8223. }
  8224. // Define Generator.prototype.{next,throw,return} in terms of the
  8225. // unified ._invoke helper method.
  8226. defineIteratorMethods(Gp);
  8227. Gp[toStringTagSymbol] = "Generator";
  8228. // A Generator should always return itself as the iterator object when the
  8229. // @@iterator function is called on it. Some browsers' implementations of the
  8230. // iterator prototype chain incorrectly implement this, causing the Generator
  8231. // object to not be returned from this call. This ensures that doesn't happen.
  8232. // See https://github.com/facebook/regenerator/issues/274 for more details.
  8233. Gp[iteratorSymbol] = function() {
  8234. return this;
  8235. };
  8236. Gp.toString = function() {
  8237. return "[object Generator]";
  8238. };
  8239. function pushTryEntry(locs) {
  8240. var entry = { tryLoc: locs[0] };
  8241. if (1 in locs) {
  8242. entry.catchLoc = locs[1];
  8243. }
  8244. if (2 in locs) {
  8245. entry.finallyLoc = locs[2];
  8246. entry.afterLoc = locs[3];
  8247. }
  8248. this.tryEntries.push(entry);
  8249. }
  8250. function resetTryEntry(entry) {
  8251. var record = entry.completion || {};
  8252. record.type = "normal";
  8253. delete record.arg;
  8254. entry.completion = record;
  8255. }
  8256. function Context(tryLocsList) {
  8257. // The root entry object (effectively a try statement without a catch
  8258. // or a finally block) gives us a place to store values thrown from
  8259. // locations where there is no enclosing try statement.
  8260. this.tryEntries = [{ tryLoc: "root" }];
  8261. tryLocsList.forEach(pushTryEntry, this);
  8262. this.reset(true);
  8263. }
  8264. runtime.keys = function(object) {
  8265. var keys = [];
  8266. for (var key in object) {
  8267. keys.push(key);
  8268. }
  8269. keys.reverse();
  8270. // Rather than returning an object with a next method, we keep
  8271. // things simple and return the next function itself.
  8272. return function next() {
  8273. while (keys.length) {
  8274. var key = keys.pop();
  8275. if (key in object) {
  8276. next.value = key;
  8277. next.done = false;
  8278. return next;
  8279. }
  8280. }
  8281. // To avoid creating an additional object, we just hang the .value
  8282. // and .done properties off the next function object itself. This
  8283. // also ensures that the minifier will not anonymize the function.
  8284. next.done = true;
  8285. return next;
  8286. };
  8287. };
  8288. function values(iterable) {
  8289. if (iterable) {
  8290. var iteratorMethod = iterable[iteratorSymbol];
  8291. if (iteratorMethod) {
  8292. return iteratorMethod.call(iterable);
  8293. }
  8294. if (typeof iterable.next === "function") {
  8295. return iterable;
  8296. }
  8297. if (!isNaN(iterable.length)) {
  8298. var i = -1, next = function next() {
  8299. while (++i < iterable.length) {
  8300. if (hasOwn.call(iterable, i)) {
  8301. next.value = iterable[i];
  8302. next.done = false;
  8303. return next;
  8304. }
  8305. }
  8306. next.value = undefined;
  8307. next.done = true;
  8308. return next;
  8309. };
  8310. return next.next = next;
  8311. }
  8312. }
  8313. // Return an iterator with no values.
  8314. return { next: doneResult };
  8315. }
  8316. runtime.values = values;
  8317. function doneResult() {
  8318. return { value: undefined, done: true };
  8319. }
  8320. Context.prototype = {
  8321. constructor: Context,
  8322. reset: function(skipTempReset) {
  8323. this.prev = 0;
  8324. this.next = 0;
  8325. // Resetting context._sent for legacy support of Babel's
  8326. // function.sent implementation.
  8327. this.sent = this._sent = undefined;
  8328. this.done = false;
  8329. this.delegate = null;
  8330. this.method = "next";
  8331. this.arg = undefined;
  8332. this.tryEntries.forEach(resetTryEntry);
  8333. if (!skipTempReset) {
  8334. for (var name in this) {
  8335. // Not sure about the optimal order of these conditions:
  8336. if (name.charAt(0) === "t" &&
  8337. hasOwn.call(this, name) &&
  8338. !isNaN(+name.slice(1))) {
  8339. this[name] = undefined;
  8340. }
  8341. }
  8342. }
  8343. },
  8344. stop: function() {
  8345. this.done = true;
  8346. var rootEntry = this.tryEntries[0];
  8347. var rootRecord = rootEntry.completion;
  8348. if (rootRecord.type === "throw") {
  8349. throw rootRecord.arg;
  8350. }
  8351. return this.rval;
  8352. },
  8353. dispatchException: function(exception) {
  8354. if (this.done) {
  8355. throw exception;
  8356. }
  8357. var context = this;
  8358. function handle(loc, caught) {
  8359. record.type = "throw";
  8360. record.arg = exception;
  8361. context.next = loc;
  8362. if (caught) {
  8363. // If the dispatched exception was caught by a catch block,
  8364. // then let that catch block handle the exception normally.
  8365. context.method = "next";
  8366. context.arg = undefined;
  8367. }
  8368. return !! caught;
  8369. }
  8370. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8371. var entry = this.tryEntries[i];
  8372. var record = entry.completion;
  8373. if (entry.tryLoc === "root") {
  8374. // Exception thrown outside of any try block that could handle
  8375. // it, so set the completion value of the entire function to
  8376. // throw the exception.
  8377. return handle("end");
  8378. }
  8379. if (entry.tryLoc <= this.prev) {
  8380. var hasCatch = hasOwn.call(entry, "catchLoc");
  8381. var hasFinally = hasOwn.call(entry, "finallyLoc");
  8382. if (hasCatch && hasFinally) {
  8383. if (this.prev < entry.catchLoc) {
  8384. return handle(entry.catchLoc, true);
  8385. } else if (this.prev < entry.finallyLoc) {
  8386. return handle(entry.finallyLoc);
  8387. }
  8388. } else if (hasCatch) {
  8389. if (this.prev < entry.catchLoc) {
  8390. return handle(entry.catchLoc, true);
  8391. }
  8392. } else if (hasFinally) {
  8393. if (this.prev < entry.finallyLoc) {
  8394. return handle(entry.finallyLoc);
  8395. }
  8396. } else {
  8397. throw new Error("try statement without catch or finally");
  8398. }
  8399. }
  8400. }
  8401. },
  8402. abrupt: function(type, arg) {
  8403. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8404. var entry = this.tryEntries[i];
  8405. if (entry.tryLoc <= this.prev &&
  8406. hasOwn.call(entry, "finallyLoc") &&
  8407. this.prev < entry.finallyLoc) {
  8408. var finallyEntry = entry;
  8409. break;
  8410. }
  8411. }
  8412. if (finallyEntry &&
  8413. (type === "break" ||
  8414. type === "continue") &&
  8415. finallyEntry.tryLoc <= arg &&
  8416. arg <= finallyEntry.finallyLoc) {
  8417. // Ignore the finally entry if control is not jumping to a
  8418. // location outside the try/catch block.
  8419. finallyEntry = null;
  8420. }
  8421. var record = finallyEntry ? finallyEntry.completion : {};
  8422. record.type = type;
  8423. record.arg = arg;
  8424. if (finallyEntry) {
  8425. this.method = "next";
  8426. this.next = finallyEntry.finallyLoc;
  8427. return ContinueSentinel;
  8428. }
  8429. return this.complete(record);
  8430. },
  8431. complete: function(record, afterLoc) {
  8432. if (record.type === "throw") {
  8433. throw record.arg;
  8434. }
  8435. if (record.type === "break" ||
  8436. record.type === "continue") {
  8437. this.next = record.arg;
  8438. } else if (record.type === "return") {
  8439. this.rval = this.arg = record.arg;
  8440. this.method = "return";
  8441. this.next = "end";
  8442. } else if (record.type === "normal" && afterLoc) {
  8443. this.next = afterLoc;
  8444. }
  8445. return ContinueSentinel;
  8446. },
  8447. finish: function(finallyLoc) {
  8448. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8449. var entry = this.tryEntries[i];
  8450. if (entry.finallyLoc === finallyLoc) {
  8451. this.complete(entry.completion, entry.afterLoc);
  8452. resetTryEntry(entry);
  8453. return ContinueSentinel;
  8454. }
  8455. }
  8456. },
  8457. "catch": function(tryLoc) {
  8458. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8459. var entry = this.tryEntries[i];
  8460. if (entry.tryLoc === tryLoc) {
  8461. var record = entry.completion;
  8462. if (record.type === "throw") {
  8463. var thrown = record.arg;
  8464. resetTryEntry(entry);
  8465. }
  8466. return thrown;
  8467. }
  8468. }
  8469. // The context.catch method must only be called with a location
  8470. // argument that corresponds to a known catch block.
  8471. throw new Error("illegal catch attempt");
  8472. },
  8473. delegateYield: function(iterable, resultName, nextLoc) {
  8474. this.delegate = {
  8475. iterator: values(iterable),
  8476. resultName: resultName,
  8477. nextLoc: nextLoc
  8478. };
  8479. if (this.method === "next") {
  8480. // Deliberately forget the last sent value so that we don't
  8481. // accidentally pass it on to the delegate.
  8482. this.arg = undefined;
  8483. }
  8484. return ContinueSentinel;
  8485. }
  8486. };
  8487. })(
  8488. // In sloppy mode, unbound `this` refers to the global object, fallback to
  8489. // Function constructor if we're in global strict mode. That is sadly a form
  8490. // of indirect eval which violates Content Security Policy.
  8491. (function() {
  8492. return this || (typeof self === "object" && self);
  8493. })() || Function("return this")()
  8494. );
  8495. /***/ }),
  8496. /***/ 22:
  8497. /*!**********************************************************!*\
  8498. !*** E:/bigDataApp/uview-ui/libs/function/timeFormat.js ***!
  8499. \**********************************************************/
  8500. /*! no static exports found */
  8501. /***/ (function(module, exports, __webpack_require__) {
  8502. "use strict";
  8503. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
  8504. // 所以这里做一个兼容polyfill的兼容处理
  8505. if (!String.prototype.padStart) {
  8506. // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
  8507. String.prototype.padStart = function (maxLength) {var fillString = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ' ';
  8508. if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError(
  8509. 'fillString must be String');
  8510. var str = this;
  8511. // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
  8512. if (str.length >= maxLength) return String(str);
  8513. var fillLength = maxLength - str.length,
  8514. times = Math.ceil(fillLength / fillString.length);
  8515. while (times >>= 1) {
  8516. fillString += fillString;
  8517. if (times === 1) {
  8518. fillString += fillString;
  8519. }
  8520. }
  8521. return fillString.slice(0, fillLength) + str;
  8522. };
  8523. }
  8524. // 其他更多是格式化有如下:
  8525. // yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合
  8526. 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';
  8527. // 如果为null,则格式化当前时间
  8528. if (!dateTime) dateTime = Number(new Date());
  8529. // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
  8530. if (dateTime.toString().length == 10) dateTime *= 1000;
  8531. var date = new Date(Number(dateTime));
  8532. var ret;
  8533. var opt = {
  8534. "y+": date.getFullYear().toString(), // 年
  8535. "m+": (date.getMonth() + 1).toString(), // 月
  8536. "d+": date.getDate().toString(), // 日
  8537. "h+": date.getHours().toString(), // 时
  8538. "M+": date.getMinutes().toString(), // 分
  8539. "s+": date.getSeconds().toString() // 秒
  8540. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  8541. };
  8542. for (var k in opt) {
  8543. ret = new RegExp("(" + k + ")").exec(fmt);
  8544. if (ret) {
  8545. fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0"));
  8546. };
  8547. };
  8548. return fmt;
  8549. }var _default =
  8550. timeFormat;exports.default = _default;
  8551. /***/ }),
  8552. /***/ 23:
  8553. /*!********************************************************!*\
  8554. !*** E:/bigDataApp/uview-ui/libs/function/timeFrom.js ***!
  8555. \********************************************************/
  8556. /*! no static exports found */
  8557. /***/ (function(module, exports, __webpack_require__) {
  8558. "use strict";
  8559. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _timeFormat = _interopRequireDefault(__webpack_require__(/*! ../../libs/function/timeFormat.js */ 22));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  8560. /**
  8561. * 时间戳转为多久之前
  8562. * @param String timestamp 时间戳
  8563. * @param String | Boolean format 如果为时间格式字符串,超出一定时间范围,返回固定的时间格式;
  8564. * 如果为布尔值false,无论什么时间,都返回多久以前的格式
  8565. */
  8566. 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';
  8567. // 如果为null,则格式化当前时间
  8568. if (!dateTime) dateTime = Number(new Date());
  8569. // 如果dateTime长度为10或者13,则为秒和毫秒的时间戳,如果超过13位,则为其他的时间格式
  8570. if (dateTime.toString().length == 10) dateTime *= 1000;
  8571. var timestamp = +new Date(Number(dateTime));
  8572. var timer = (Number(new Date()) - timestamp) / 1000;
  8573. // 如果小于5分钟,则返回"刚刚",其他以此类推
  8574. var tips = '';
  8575. switch (true) {
  8576. case timer < 300:
  8577. tips = '刚刚';
  8578. break;
  8579. case timer >= 300 && timer < 3600:
  8580. tips = parseInt(timer / 60) + '分钟前';
  8581. break;
  8582. case timer >= 3600 && timer < 86400:
  8583. tips = parseInt(timer / 3600) + '小时前';
  8584. break;
  8585. case timer >= 86400 && timer < 2592000:
  8586. tips = parseInt(timer / 86400) + '天前';
  8587. break;
  8588. default:
  8589. // 如果format为false,则无论什么时间戳,都显示xx之前
  8590. if (format === false) {
  8591. if (timer >= 2592000 && timer < 365 * 86400) {
  8592. tips = parseInt(timer / (86400 * 30)) + '个月前';
  8593. } else {
  8594. tips = parseInt(timer / (86400 * 365)) + '年前';
  8595. }
  8596. } else {
  8597. tips = (0, _timeFormat.default)(timestamp, format);
  8598. }}
  8599. return tips;
  8600. }var _default =
  8601. timeFrom;exports.default = _default;
  8602. /***/ }),
  8603. /***/ 24:
  8604. /*!*************************************************************!*\
  8605. !*** E:/bigDataApp/uview-ui/libs/function/colorGradient.js ***!
  8606. \*************************************************************/
  8607. /*! no static exports found */
  8608. /***/ (function(module, exports, __webpack_require__) {
  8609. "use strict";
  8610. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  8611. * 求两个颜色之间的渐变值
  8612. * @param {string} startColor 开始的颜色
  8613. * @param {string} endColor 结束的颜色
  8614. * @param {number} step 颜色等分的份额
  8615. * */
  8616. 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;
  8617. var startRGB = hexToRgb(startColor, false); //转换为rgb数组模式
  8618. var startR = startRGB[0];
  8619. var startG = startRGB[1];
  8620. var startB = startRGB[2];
  8621. var endRGB = hexToRgb(endColor, false);
  8622. var endR = endRGB[0];
  8623. var endG = endRGB[1];
  8624. var endB = endRGB[2];
  8625. var sR = (endR - startR) / step; //总差值
  8626. var sG = (endG - startG) / step;
  8627. var sB = (endB - startB) / step;
  8628. var colorArr = [];
  8629. for (var i = 0; i < step; i++) {
  8630. //计算每一步的hex值
  8631. var hex = rgbToHex('rgb(' + Math.round(sR * i + startR) + ',' + Math.round(sG * i + startG) + ',' + Math.round(sB *
  8632. i + startB) + ')');
  8633. colorArr.push(hex);
  8634. }
  8635. return colorArr;
  8636. }
  8637. // 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式)
  8638. function hexToRgb(sColor) {var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  8639. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  8640. sColor = sColor.toLowerCase();
  8641. if (sColor && reg.test(sColor)) {
  8642. if (sColor.length === 4) {
  8643. var sColorNew = "#";
  8644. for (var i = 1; i < 4; i += 1) {
  8645. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  8646. }
  8647. sColor = sColorNew;
  8648. }
  8649. //处理六位的颜色值
  8650. var sColorChange = [];
  8651. for (var _i = 1; _i < 7; _i += 2) {
  8652. sColorChange.push(parseInt("0x" + sColor.slice(_i, _i + 2)));
  8653. }
  8654. if (!str) {
  8655. return sColorChange;
  8656. } else {
  8657. return "rgb(".concat(sColorChange[0], ",").concat(sColorChange[1], ",").concat(sColorChange[2], ")");
  8658. }
  8659. } else if (/^(rgb|RGB)/.test(sColor)) {
  8660. var arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  8661. return arr.map(function (val) {return Number(val);});
  8662. } else {
  8663. return sColor;
  8664. }
  8665. };
  8666. // 将rgb表示方式转换为hex表示方式
  8667. function rgbToHex(rgb) {
  8668. var _this = rgb;
  8669. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  8670. if (/^(rgb|RGB)/.test(_this)) {
  8671. var aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  8672. var strHex = "#";
  8673. for (var i = 0; i < aColor.length; i++) {
  8674. var hex = Number(aColor[i]).toString(16);
  8675. hex = String(hex).length == 1 ? 0 + '' + hex : hex; // 保证每个rgb的值为2位
  8676. if (hex === "0") {
  8677. hex += hex;
  8678. }
  8679. strHex += hex;
  8680. }
  8681. if (strHex.length !== 7) {
  8682. strHex = _this;
  8683. }
  8684. return strHex;
  8685. } else if (reg.test(_this)) {
  8686. var aNum = _this.replace(/#/, "").split("");
  8687. if (aNum.length === 6) {
  8688. return _this;
  8689. } else if (aNum.length === 3) {
  8690. var numHex = "#";
  8691. for (var _i2 = 0; _i2 < aNum.length; _i2 += 1) {
  8692. numHex += aNum[_i2] + aNum[_i2];
  8693. }
  8694. return numHex;
  8695. }
  8696. } else {
  8697. return _this;
  8698. }
  8699. }
  8700. /**
  8701. * JS颜色十六进制转换为rgb或rgba,返回的格式为 rgba(255,255,255,0.5)字符串
  8702. * sHex为传入的十六进制的色值
  8703. * alpha为rgba的透明度
  8704. */
  8705. function colorToRgba(color) {var alpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.3;
  8706. color = rgbToHex(color);
  8707. // 十六进制颜色值的正则表达式
  8708. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  8709. /* 16进制颜色转为RGB格式 */
  8710. var sColor = color.toLowerCase();
  8711. if (sColor && reg.test(sColor)) {
  8712. if (sColor.length === 4) {
  8713. var sColorNew = '#';
  8714. for (var i = 1; i < 4; i += 1) {
  8715. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
  8716. }
  8717. sColor = sColorNew;
  8718. }
  8719. // 处理六位的颜色值
  8720. var sColorChange = [];
  8721. for (var _i3 = 1; _i3 < 7; _i3 += 2) {
  8722. sColorChange.push(parseInt('0x' + sColor.slice(_i3, _i3 + 2)));
  8723. }
  8724. // return sColorChange.join(',')
  8725. return 'rgba(' + sColorChange.join(',') + ',' + alpha + ')';
  8726. } else
  8727. {
  8728. return sColor;
  8729. }
  8730. }var _default =
  8731. {
  8732. colorGradient: colorGradient,
  8733. hexToRgb: hexToRgb,
  8734. rgbToHex: rgbToHex,
  8735. colorToRgba: colorToRgba };exports.default = _default;
  8736. /***/ }),
  8737. /***/ 25:
  8738. /*!****************************************************!*\
  8739. !*** E:/bigDataApp/uview-ui/libs/function/guid.js ***!
  8740. \****************************************************/
  8741. /*! no static exports found */
  8742. /***/ (function(module, exports, __webpack_require__) {
  8743. "use strict";
  8744. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  8745. * 本算法来源于简书开源代码,详见:https://www.jianshu.com/p/fdbf293d0a85
  8746. * 全局唯一标识符(uuid,Globally Unique Identifier),也称作 uuid(Universally Unique IDentifier)
  8747. * 一般用于多个组件之间,给它一个唯一的标识符,或者v-for循环的时候,如果使用数组的index可能会导致更新列表出现问题
  8748. * 最可能的情况是左滑删除item或者对某条信息流"不喜欢"并去掉它的时候,会导致组件内的数据可能出现错乱
  8749. * v-for的时候,推荐使用后端返回的id而不是循环的index
  8750. * @param {Number} len uuid的长度
  8751. * @param {Boolean} firstU 将返回的首字母置为"u"
  8752. * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制
  8753. */
  8754. 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;
  8755. var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
  8756. var uuid = [];
  8757. radix = radix || chars.length;
  8758. if (len) {
  8759. // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位
  8760. for (var i = 0; i < len; i++) {uuid[i] = chars[0 | Math.random() * radix];}
  8761. } else {
  8762. var r;
  8763. // rfc4122标准要求返回的uuid中,某些位为固定的字符
  8764. uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  8765. uuid[14] = '4';
  8766. for (var _i = 0; _i < 36; _i++) {
  8767. if (!uuid[_i]) {
  8768. r = 0 | Math.random() * 16;
  8769. uuid[_i] = chars[_i == 19 ? r & 0x3 | 0x8 : r];
  8770. }
  8771. }
  8772. }
  8773. // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class
  8774. if (firstU) {
  8775. uuid.shift();
  8776. return 'u' + uuid.join('');
  8777. } else {
  8778. return uuid.join('');
  8779. }
  8780. }var _default =
  8781. guid;exports.default = _default;
  8782. /***/ }),
  8783. /***/ 26:
  8784. /*!*****************************************************!*\
  8785. !*** E:/bigDataApp/uview-ui/libs/function/color.js ***!
  8786. \*****************************************************/
  8787. /*! no static exports found */
  8788. /***/ (function(module, exports, __webpack_require__) {
  8789. "use strict";
  8790. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 为了让用户能够自定义主题,会逐步弃用此文件,各颜色通过css提供
  8791. // 为了给某些特殊场景使用和向后兼容,无需删除此文件(2020-06-20)
  8792. var color = {
  8793. primary: "#2979ff",
  8794. primaryDark: "#2b85e4",
  8795. primaryDisabled: "#a0cfff",
  8796. primaryLight: "#ecf5ff",
  8797. bgColor: "#f3f4f6",
  8798. info: "#909399",
  8799. infoDark: "#82848a",
  8800. infoDisabled: "#c8c9cc",
  8801. infoLight: "#f4f4f5",
  8802. warning: "#ff9900",
  8803. warningDark: "#f29100",
  8804. warningDisabled: "#fcbd71",
  8805. warningLight: "#fdf6ec",
  8806. error: "#fa3534",
  8807. errorDark: "#dd6161",
  8808. errorDisabled: "#fab6b6",
  8809. errorLight: "#fef0f0",
  8810. success: "#19be6b",
  8811. successDark: "#18b566",
  8812. successDisabled: "#71d5a1",
  8813. successLight: "#dbf1e1",
  8814. mainColor: "#303133",
  8815. contentColor: "#606266",
  8816. tipsColor: "#909399",
  8817. lightColor: "#c0c4cc",
  8818. borderColor: "#e4e7ed" };var _default =
  8819. color;exports.default = _default;
  8820. /***/ }),
  8821. /***/ 27:
  8822. /*!*********************************************************!*\
  8823. !*** E:/bigDataApp/uview-ui/libs/function/type2icon.js ***!
  8824. \*********************************************************/
  8825. /*! no static exports found */
  8826. /***/ (function(module, exports, __webpack_require__) {
  8827. "use strict";
  8828. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  8829. * 根据主题type值,获取对应的图标
  8830. * @param String type 主题名称,primary|info|error|warning|success
  8831. * @param String fill 是否使用fill填充实体的图标
  8832. */
  8833. function type2icon() {var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'success';var fill = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  8834. // 如果非预置值,默认为success
  8835. if (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success';
  8836. var iconName = '';
  8837. // 目前(2019-12-12),info和primary使用同一个图标
  8838. switch (type) {
  8839. case 'primary':
  8840. iconName = 'info-circle';
  8841. break;
  8842. case 'info':
  8843. iconName = 'info-circle';
  8844. break;
  8845. case 'error':
  8846. iconName = 'close-circle';
  8847. break;
  8848. case 'warning':
  8849. iconName = 'error-circle';
  8850. break;
  8851. case 'success':
  8852. iconName = 'checkmark-circle';
  8853. break;
  8854. default:
  8855. iconName = 'checkmark-circle';}
  8856. // 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的
  8857. if (fill) iconName += '-fill';
  8858. return iconName;
  8859. }var _default =
  8860. type2icon;exports.default = _default;
  8861. /***/ }),
  8862. /***/ 28:
  8863. /*!***********************************************************!*\
  8864. !*** E:/bigDataApp/uview-ui/libs/function/randomArray.js ***!
  8865. \***********************************************************/
  8866. /*! no static exports found */
  8867. /***/ (function(module, exports, __webpack_require__) {
  8868. "use strict";
  8869. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 打乱数组
  8870. function randomArray() {var array = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
  8871. // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0
  8872. return array.sort(function () {return Math.random() - 0.5;});
  8873. }var _default =
  8874. randomArray;exports.default = _default;
  8875. /***/ }),
  8876. /***/ 29:
  8877. /*!*******************************************************!*\
  8878. !*** E:/bigDataApp/uview-ui/libs/function/addUnit.js ***!
  8879. \*******************************************************/
  8880. /*! no static exports found */
  8881. /***/ (function(module, exports, __webpack_require__) {
  8882. "use strict";
  8883. Object.defineProperty(exports, "__esModule", { value: true });exports.default = addUnit;var _test = _interopRequireDefault(__webpack_require__(/*! ./test.js */ 16));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  8884. // 添加单位,如果有rpx,%,px等单位结尾或者值为auto,直接返回,否则加上rpx单位结尾
  8885. function addUnit() {var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'auto';var unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'rpx';
  8886. value = String(value);
  8887. // 用uView内置验证规则中的number判断是否为数值
  8888. return _test.default.number(value) ? "".concat(value).concat(unit) : value;
  8889. }
  8890. /***/ }),
  8891. /***/ 3:
  8892. /*!***********************************!*\
  8893. !*** (webpack)/buildin/global.js ***!
  8894. \***********************************/
  8895. /*! no static exports found */
  8896. /***/ (function(module, exports) {
  8897. var g;
  8898. // This works in non-strict mode
  8899. g = (function() {
  8900. return this;
  8901. })();
  8902. try {
  8903. // This works if eval is allowed (see CSP)
  8904. g = g || new Function("return this")();
  8905. } catch (e) {
  8906. // This works if the window reference is available
  8907. if (typeof window === "object") g = window;
  8908. }
  8909. // g can still be undefined, but nothing to do about it...
  8910. // We return undefined, instead of nothing here, so it's
  8911. // easier to handle this case. if(!global) { ...}
  8912. module.exports = g;
  8913. /***/ }),
  8914. /***/ 30:
  8915. /*!******************************************************!*\
  8916. !*** E:/bigDataApp/uview-ui/libs/function/random.js ***!
  8917. \******************************************************/
  8918. /*! no static exports found */
  8919. /***/ (function(module, exports, __webpack_require__) {
  8920. "use strict";
  8921. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function random(min, max) {
  8922. if (min >= 0 && max > 0 && max >= min) {
  8923. var gab = max - min + 1;
  8924. return Math.floor(Math.random() * gab + min);
  8925. } else {
  8926. return 0;
  8927. }
  8928. }var _default =
  8929. random;exports.default = _default;
  8930. /***/ }),
  8931. /***/ 31:
  8932. /*!****************************************************!*\
  8933. !*** E:/bigDataApp/uview-ui/libs/function/trim.js ***!
  8934. \****************************************************/
  8935. /*! no static exports found */
  8936. /***/ (function(module, exports, __webpack_require__) {
  8937. "use strict";
  8938. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function trim(str) {var pos = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'both';
  8939. if (pos == 'both') {
  8940. return str.replace(/^\s+|\s+$/g, "");
  8941. } else if (pos == "left") {
  8942. return str.replace(/^\s*/, '');
  8943. } else if (pos == 'right') {
  8944. return str.replace(/(\s*$)/g, "");
  8945. } else if (pos == 'all') {
  8946. return str.replace(/\s+/g, "");
  8947. } else {
  8948. return str;
  8949. }
  8950. }var _default =
  8951. trim;exports.default = _default;
  8952. /***/ }),
  8953. /***/ 32:
  8954. /*!*****************************************************!*\
  8955. !*** E:/bigDataApp/uview-ui/libs/function/toast.js ***!
  8956. \*****************************************************/
  8957. /*! no static exports found */
  8958. /***/ (function(module, exports, __webpack_require__) {
  8959. "use strict";
  8960. /* 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;
  8961. uni.showToast({
  8962. title: title,
  8963. icon: 'none',
  8964. duration: duration });
  8965. }var _default =
  8966. toast;exports.default = _default;
  8967. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  8968. /***/ }),
  8969. /***/ 33:
  8970. /*!*********************************************************!*\
  8971. !*** E:/bigDataApp/uview-ui/libs/function/getParent.js ***!
  8972. \*********************************************************/
  8973. /*! no static exports found */
  8974. /***/ (function(module, exports, __webpack_require__) {
  8975. "use strict";
  8976. Object.defineProperty(exports, "__esModule", { value: true });exports.default = getParent; // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
  8977. // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
  8978. function getParent(name, keys) {
  8979. var parent = this.$parent;
  8980. // 通过while历遍,这里主要是为了H5需要多层解析的问题
  8981. while (parent) {
  8982. // 父组件
  8983. if (parent.$options.name !== name) {
  8984. // 如果组件的name不相等,继续上一级寻找
  8985. parent = parent.$parent;
  8986. } else {var _ret = function () {
  8987. var data = {};
  8988. // 判断keys是否数组,如果传过来的是一个数组,那么直接使用数组元素值当做键值去父组件寻找
  8989. if (Array.isArray(keys)) {
  8990. keys.map(function (val) {
  8991. data[val] = parent[val] ? parent[val] : '';
  8992. });
  8993. } else {
  8994. // 历遍传过来的对象参数
  8995. for (var i in keys) {
  8996. // 如果子组件有此值则用,无此值则用父组件的值
  8997. // 判断是否空数组,如果是,则用父组件的值,否则用子组件的值
  8998. if (Array.isArray(keys[i])) {
  8999. if (keys[i].length) {
  9000. data[i] = keys[i];
  9001. } else {
  9002. data[i] = parent[i];
  9003. }
  9004. } else if (keys[i].constructor === Object) {
  9005. // 判断是否对象,如果是对象,且有属性,那么使用子组件的值,否则使用父组件的值
  9006. if (Object.keys(keys[i]).length) {
  9007. data[i] = keys[i];
  9008. } else {
  9009. data[i] = parent[i];
  9010. }
  9011. } else {
  9012. // 只要子组件有传值,即使是false值,也是“传值”了,也需要覆盖父组件的同名参数
  9013. data[i] = keys[i] || keys[i] === false ? keys[i] : parent[i];
  9014. }
  9015. }
  9016. }
  9017. return { v: data };}();if (typeof _ret === "object") return _ret.v;
  9018. }
  9019. }
  9020. return {};
  9021. }
  9022. /***/ }),
  9023. /***/ 34:
  9024. /*!*******************************************************!*\
  9025. !*** E:/bigDataApp/uview-ui/libs/function/$parent.js ***!
  9026. \*******************************************************/
  9027. /*! no static exports found */
  9028. /***/ (function(module, exports, __webpack_require__) {
  9029. "use strict";
  9030. Object.defineProperty(exports, "__esModule", { value: true });exports.default = $parent; // 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法
  9031. // this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx
  9032. // 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name
  9033. // 值(默认为undefined),就是查找最顶层的$parent
  9034. function $parent() {var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
  9035. var parent = this.$parent;
  9036. // 通过while历遍,这里主要是为了H5需要多层解析的问题
  9037. while (parent) {
  9038. // 父组件
  9039. if (parent.$options && parent.$options.name !== name) {
  9040. // 如果组件的name不相等,继续上一级寻找
  9041. parent = parent.$parent;
  9042. } else {
  9043. return parent;
  9044. }
  9045. }
  9046. return false;
  9047. }
  9048. /***/ }),
  9049. /***/ 345:
  9050. /*!*********************************************************************!*\
  9051. !*** E:/bigDataApp/components/js_sdk/u-charts/u-charts/u-charts.js ***!
  9052. \*********************************************************************/
  9053. /*! no static exports found */
  9054. /***/ (function(module, exports, __webpack_require__) {
  9055. "use strict";
  9056. /* WEBPACK VAR INJECTION */(function(uni) {/*
  9057. * uCharts v1.9.6.20210214
  9058. * uni-app平台高性能跨全端图表,支持H5、APP、小程序(微信/支付宝/百度/头条/QQ/360)
  9059. * Copyright (c) 2021 QIUN秋云 https://www.ucharts.cn All rights reserved.
  9060. * Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  9061. *
  9062. * uCharts官方网站
  9063. * https://www.uCharts.cn
  9064. *
  9065. * 开源地址:
  9066. * https://gitee.com/uCharts/uCharts
  9067. *
  9068. * uni-app插件市场地址:
  9069. * http://ext.dcloud.net.cn/plugin?id=271
  9070. *
  9071. */
  9072. var config = {
  9073. yAxisWidth: 15,
  9074. yAxisSplit: 5,
  9075. xAxisHeight: 22,
  9076. xAxisLineHeight: 22,
  9077. legendHeight: 15,
  9078. yAxisTitleWidth: 15,
  9079. padding: [10, 10, 10, 10],
  9080. pixelRatio: 1,
  9081. rotate: false,
  9082. columePadding: 3,
  9083. fontSize: 13,
  9084. //dataPointShape: ['diamond', 'circle', 'triangle', 'rect'],
  9085. dataPointShape: ['circle', 'circle', 'circle', 'circle'],
  9086. colors: ['#1890ff', '#2fc25b', '#facc14', '#f04864', '#8543e0', '#90ed7d'],
  9087. pieChartLinePadding: 15,
  9088. pieChartTextPadding: 5,
  9089. xAxisTextPadding: 3,
  9090. titleColor: '#333333',
  9091. titleFontSize: 20,
  9092. subtitleColor: '#999999',
  9093. subtitleFontSize: 15,
  9094. toolTipPadding: 3,
  9095. toolTipBackground: '#000000',
  9096. toolTipOpacity: 0.7,
  9097. toolTipLineHeight: 20,
  9098. radarLabelTextMargin: 15,
  9099. gaugeLabelTextMargin: 15 };
  9100. 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];}
  9101. if (target == null) {
  9102. throw new TypeError('Cannot convert undefined or null to object');
  9103. }
  9104. if (!varArgs || varArgs.length <= 0) {
  9105. return target;
  9106. }
  9107. // 深度合并对象
  9108. function deepAssign(obj1, obj2) {
  9109. for (var key in obj2) {
  9110. obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" ?
  9111. deepAssign(obj1[key], obj2[key]) : obj1[key] = obj2[key];
  9112. }
  9113. return obj1;
  9114. }
  9115. varArgs.forEach(function (val) {
  9116. target = deepAssign(target, val);
  9117. });
  9118. return target;
  9119. };
  9120. var util = {
  9121. toFixed: function toFixed(num, limit) {
  9122. limit = limit || 2;
  9123. if (this.isFloat(num)) {
  9124. num = num.toFixed(limit);
  9125. }
  9126. return num;
  9127. },
  9128. isFloat: function isFloat(num) {
  9129. return num % 1 !== 0;
  9130. },
  9131. approximatelyEqual: function approximatelyEqual(num1, num2) {
  9132. return Math.abs(num1 - num2) < 1e-10;
  9133. },
  9134. isSameSign: function isSameSign(num1, num2) {
  9135. return Math.abs(num1) === num1 && Math.abs(num2) === num2 || Math.abs(num1) !== num1 && Math.abs(num2) !== num2;
  9136. },
  9137. isSameXCoordinateArea: function isSameXCoordinateArea(p1, p2) {
  9138. return this.isSameSign(p1.x, p2.x);
  9139. },
  9140. isCollision: function isCollision(obj1, obj2) {
  9141. obj1.end = {};
  9142. obj1.end.x = obj1.start.x + obj1.width;
  9143. obj1.end.y = obj1.start.y - obj1.height;
  9144. obj2.end = {};
  9145. obj2.end.x = obj2.start.x + obj2.width;
  9146. obj2.end.y = obj2.start.y - obj2.height;
  9147. 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;
  9148. return !flag;
  9149. } };
  9150. //兼容H5点击事件
  9151. function getH5Offset(e) {
  9152. e.mp = {
  9153. changedTouches: [] };
  9154. e.mp.changedTouches.push({
  9155. x: e.offsetX,
  9156. y: e.offsetY });
  9157. return e;
  9158. }
  9159. // hex 转 rgba
  9160. function hexToRgb(hexValue, opc) {
  9161. var rgx = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
  9162. var hex = hexValue.replace(rgx, function (m, r, g, b) {
  9163. return r + r + g + g + b + b;
  9164. });
  9165. var rgb = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
  9166. var r = parseInt(rgb[1], 16);
  9167. var g = parseInt(rgb[2], 16);
  9168. var b = parseInt(rgb[3], 16);
  9169. return 'rgba(' + r + ',' + g + ',' + b + ',' + opc + ')';
  9170. }
  9171. function findRange(num, type, limit) {
  9172. if (isNaN(num)) {
  9173. throw new Error('[uCharts] unvalid series data!');
  9174. }
  9175. limit = limit || 10;
  9176. type = type ? type : 'upper';
  9177. var multiple = 1;
  9178. while (limit < 1) {
  9179. limit *= 10;
  9180. multiple *= 10;
  9181. }
  9182. if (type === 'upper') {
  9183. num = Math.ceil(num * multiple);
  9184. } else {
  9185. num = Math.floor(num * multiple);
  9186. }
  9187. while (num % limit !== 0) {
  9188. if (type === 'upper') {
  9189. num++;
  9190. } else {
  9191. num--;
  9192. }
  9193. }
  9194. return num / multiple;
  9195. }
  9196. function calCandleMA(dayArr, nameArr, colorArr, kdata) {
  9197. var seriesTemp = [];
  9198. for (var k = 0; k < dayArr.length; k++) {
  9199. var seriesItem = {
  9200. data: [],
  9201. name: nameArr[k],
  9202. color: colorArr[k] };
  9203. for (var i = 0, len = kdata.length; i < len; i++) {
  9204. if (i < dayArr[k]) {
  9205. seriesItem.data.push(null);
  9206. continue;
  9207. }
  9208. var sum = 0;
  9209. for (var j = 0; j < dayArr[k]; j++) {
  9210. sum += kdata[i - j][1];
  9211. }
  9212. seriesItem.data.push(+(sum / dayArr[k]).toFixed(3));
  9213. }
  9214. seriesTemp.push(seriesItem);
  9215. }
  9216. return seriesTemp;
  9217. }
  9218. function calValidDistance(self, distance, chartData, config, opts) {
  9219. var dataChartAreaWidth = opts.width - opts.area[1] - opts.area[3];
  9220. var dataChartWidth = chartData.eachSpacing * (opts.chartData.xAxisData.xAxisPoints.length - 1);
  9221. var validDistance = distance;
  9222. if (distance >= 0) {
  9223. validDistance = 0;
  9224. self.event.trigger('scrollLeft');
  9225. } else if (Math.abs(distance) >= dataChartWidth - dataChartAreaWidth) {
  9226. validDistance = dataChartAreaWidth - dataChartWidth;
  9227. self.event.trigger('scrollRight');
  9228. }
  9229. return validDistance;
  9230. }
  9231. function isInAngleRange(angle, startAngle, endAngle) {
  9232. function adjust(angle) {
  9233. while (angle < 0) {
  9234. angle += 2 * Math.PI;
  9235. }
  9236. while (angle > 2 * Math.PI) {
  9237. angle -= 2 * Math.PI;
  9238. }
  9239. return angle;
  9240. }
  9241. angle = adjust(angle);
  9242. startAngle = adjust(startAngle);
  9243. endAngle = adjust(endAngle);
  9244. if (startAngle > endAngle) {
  9245. endAngle += 2 * Math.PI;
  9246. if (angle < startAngle) {
  9247. angle += 2 * Math.PI;
  9248. }
  9249. }
  9250. return angle >= startAngle && angle <= endAngle;
  9251. }
  9252. function calRotateTranslate(x, y, h) {
  9253. var xv = x;
  9254. var yv = h - y;
  9255. var transX = xv + (h - yv - xv) / Math.sqrt(2);
  9256. transX *= -1;
  9257. var transY = (h - yv) * (Math.sqrt(2) - 1) - (h - yv - xv) / Math.sqrt(2);
  9258. return {
  9259. transX: transX,
  9260. transY: transY };
  9261. }
  9262. function createCurveControlPoints(points, i) {
  9263. function isNotMiddlePoint(points, i) {
  9264. if (points[i - 1] && points[i + 1]) {
  9265. 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);
  9266. } else {
  9267. return false;
  9268. }
  9269. }
  9270. function isNotMiddlePointX(points, i) {
  9271. if (points[i - 1] && points[i + 1]) {
  9272. 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);
  9273. } else {
  9274. return false;
  9275. }
  9276. }
  9277. var a = 0.2;
  9278. var b = 0.2;
  9279. var pAx = null;
  9280. var pAy = null;
  9281. var pBx = null;
  9282. var pBy = null;
  9283. if (i < 1) {
  9284. pAx = points[0].x + (points[1].x - points[0].x) * a;
  9285. pAy = points[0].y + (points[1].y - points[0].y) * a;
  9286. } else {
  9287. pAx = points[i].x + (points[i + 1].x - points[i - 1].x) * a;
  9288. pAy = points[i].y + (points[i + 1].y - points[i - 1].y) * a;
  9289. }
  9290. if (i > points.length - 3) {
  9291. var last = points.length - 1;
  9292. pBx = points[last].x - (points[last].x - points[last - 1].x) * b;
  9293. pBy = points[last].y - (points[last].y - points[last - 1].y) * b;
  9294. } else {
  9295. pBx = points[i + 1].x - (points[i + 2].x - points[i].x) * b;
  9296. pBy = points[i + 1].y - (points[i + 2].y - points[i].y) * b;
  9297. }
  9298. if (isNotMiddlePoint(points, i + 1)) {
  9299. pBy = points[i + 1].y;
  9300. }
  9301. if (isNotMiddlePoint(points, i)) {
  9302. pAy = points[i].y;
  9303. }
  9304. if (isNotMiddlePointX(points, i + 1)) {
  9305. pBx = points[i + 1].x;
  9306. }
  9307. if (isNotMiddlePointX(points, i)) {
  9308. pAx = points[i].x;
  9309. }
  9310. if (pAy >= Math.max(points[i].y, points[i + 1].y) || pAy <= Math.min(points[i].y, points[i + 1].y)) {
  9311. pAy = points[i].y;
  9312. }
  9313. if (pBy >= Math.max(points[i].y, points[i + 1].y) || pBy <= Math.min(points[i].y, points[i + 1].y)) {
  9314. pBy = points[i + 1].y;
  9315. }
  9316. if (pAx >= Math.max(points[i].x, points[i + 1].x) || pAx <= Math.min(points[i].x, points[i + 1].x)) {
  9317. pAx = points[i].x;
  9318. }
  9319. if (pBx >= Math.max(points[i].x, points[i + 1].x) || pBx <= Math.min(points[i].x, points[i + 1].x)) {
  9320. pBx = points[i + 1].x;
  9321. }
  9322. return {
  9323. ctrA: {
  9324. x: pAx,
  9325. y: pAy },
  9326. ctrB: {
  9327. x: pBx,
  9328. y: pBy } };
  9329. }
  9330. function convertCoordinateOrigin(x, y, center) {
  9331. return {
  9332. x: center.x + x,
  9333. y: center.y - y };
  9334. }
  9335. function avoidCollision(obj, target) {
  9336. if (target) {
  9337. // is collision test
  9338. while (util.isCollision(obj, target)) {
  9339. if (obj.start.x > 0) {
  9340. obj.start.y--;
  9341. } else if (obj.start.x < 0) {
  9342. obj.start.y++;
  9343. } else {
  9344. if (obj.start.y > 0) {
  9345. obj.start.y++;
  9346. } else {
  9347. obj.start.y--;
  9348. }
  9349. }
  9350. }
  9351. }
  9352. return obj;
  9353. }
  9354. function fillSeries(series, opts, config) {
  9355. var index = 0;
  9356. return series.map(function (item) {
  9357. if (!item.color) {
  9358. item.color = config.colors[index];
  9359. index = (index + 1) % config.colors.length;
  9360. }
  9361. if (!item.index) {
  9362. item.index = 0;
  9363. }
  9364. if (!item.type) {
  9365. item.type = opts.type;
  9366. }
  9367. if (typeof item.show == "undefined") {
  9368. item.show = true;
  9369. }
  9370. if (!item.type) {
  9371. item.type = opts.type;
  9372. }
  9373. if (!item.pointShape) {
  9374. item.pointShape = "circle";
  9375. }
  9376. if (!item.legendShape) {
  9377. switch (item.type) {
  9378. case 'line':
  9379. item.legendShape = "line";
  9380. break;
  9381. case 'column':
  9382. item.legendShape = "rect";
  9383. break;
  9384. case 'area':
  9385. item.legendShape = "triangle";
  9386. break;
  9387. default:
  9388. item.legendShape = "circle";}
  9389. }
  9390. return item;
  9391. });
  9392. }
  9393. function getDataRange(minData, maxData) {
  9394. var limit = 0;
  9395. var range = maxData - minData;
  9396. if (range >= 10000) {
  9397. limit = 1000;
  9398. } else if (range >= 1000) {
  9399. limit = 100;
  9400. } else if (range >= 100) {
  9401. limit = 10;
  9402. } else if (range >= 10) {
  9403. limit = 5;
  9404. } else if (range >= 1) {
  9405. limit = 1;
  9406. } else if (range >= 0.1) {
  9407. limit = 0.1;
  9408. } else if (range >= 0.01) {
  9409. limit = 0.01;
  9410. } else if (range >= 0.001) {
  9411. limit = 0.001;
  9412. } else if (range >= 0.0001) {
  9413. limit = 0.0001;
  9414. } else if (range >= 0.00001) {
  9415. limit = 0.00001;
  9416. } else {
  9417. limit = 0.000001;
  9418. }
  9419. return {
  9420. minRange: findRange(minData, 'lower', limit),
  9421. maxRange: findRange(maxData, 'upper', limit) };
  9422. }
  9423. function measureText(text) {
  9424. var fontSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : config.fontSize;
  9425. text = String(text);
  9426. var text = text.split('');
  9427. var width = 0;
  9428. for (var i = 0; i < text.length; i++) {
  9429. var item = text[i];
  9430. if (/[a-zA-Z]/.test(item)) {
  9431. width += 7;
  9432. } else if (/[0-9]/.test(item)) {
  9433. width += 5.5;
  9434. } else if (/\./.test(item)) {
  9435. width += 2.7;
  9436. } else if (/-/.test(item)) {
  9437. width += 3.25;
  9438. } else if (/[\u4e00-\u9fa5]/.test(item)) {
  9439. width += 10;
  9440. } else if (/\(|\)/.test(item)) {
  9441. width += 3.73;
  9442. } else if (/\s/.test(item)) {
  9443. width += 2.5;
  9444. } else if (/%/.test(item)) {
  9445. width += 8;
  9446. } else {
  9447. width += 10;
  9448. }
  9449. }
  9450. return width * fontSize / 10;
  9451. }
  9452. function dataCombine(series) {
  9453. return series.reduce(function (a, b) {
  9454. return (a.data ? a.data : a).concat(b.data);
  9455. }, []);
  9456. }
  9457. function dataCombineStack(series, len) {
  9458. var sum = new Array(len);
  9459. for (var j = 0; j < sum.length; j++) {
  9460. sum[j] = 0;
  9461. }
  9462. for (var i = 0; i < series.length; i++) {
  9463. for (var j = 0; j < sum.length; j++) {
  9464. sum[j] += series[i].data[j];
  9465. }
  9466. }
  9467. return series.reduce(function (a, b) {
  9468. return (a.data ? a.data : a).concat(b.data).concat(sum);
  9469. }, []);
  9470. }
  9471. function getTouches(touches, opts, e) {
  9472. var x, y;
  9473. if (touches.clientX) {
  9474. if (opts.rotate) {
  9475. y = opts.height - touches.clientX * opts.pixelRatio;
  9476. x = (touches.pageY - e.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;
  9477. } else {
  9478. x = touches.clientX * opts.pixelRatio;
  9479. y = (touches.pageY - e.currentTarget.offsetTop - opts.height / opts.pixelRatio / 2 * (opts.pixelRatio - 1)) * opts.pixelRatio;
  9480. }
  9481. } else {
  9482. if (opts.rotate) {
  9483. y = opts.height - touches.x * opts.pixelRatio;
  9484. x = touches.y * opts.pixelRatio;
  9485. } else {
  9486. x = touches.x * opts.pixelRatio;
  9487. y = touches.y * opts.pixelRatio;
  9488. }
  9489. }
  9490. return {
  9491. x: x,
  9492. y: y };
  9493. }
  9494. function getSeriesDataItem(series, index) {
  9495. var data = [];
  9496. for (var i = 0; i < series.length; i++) {
  9497. var item = series[i];
  9498. if (item.data[index] !== null && typeof item.data[index] !== 'undefined' && item.show) {
  9499. var seriesItem = {};
  9500. seriesItem.color = item.color;
  9501. seriesItem.type = item.type;
  9502. seriesItem.style = item.style;
  9503. seriesItem.pointShape = item.pointShape;
  9504. seriesItem.disableLegend = item.disableLegend;
  9505. seriesItem.name = item.name;
  9506. seriesItem.show = item.show;
  9507. seriesItem.data = item.format ? item.format(item.data[index]) : item.data[index];
  9508. data.push(seriesItem);
  9509. }
  9510. }
  9511. return data;
  9512. }
  9513. function getMaxTextListLength(list) {
  9514. var lengthList = list.map(function (item) {
  9515. return measureText(item);
  9516. });
  9517. return Math.max.apply(null, lengthList);
  9518. }
  9519. function getRadarCoordinateSeries(length) {
  9520. var eachAngle = 2 * Math.PI / length;
  9521. var CoordinateSeries = [];
  9522. for (var i = 0; i < length; i++) {
  9523. CoordinateSeries.push(eachAngle * i);
  9524. }
  9525. return CoordinateSeries.map(function (item) {
  9526. return -1 * item + Math.PI / 2;
  9527. });
  9528. }
  9529. function getToolTipData(seriesData, calPoints, index, categories) {
  9530. var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  9531. var textList = seriesData.map(function (item) {
  9532. var titleText = [];
  9533. if (categories) {
  9534. titleText = categories;
  9535. } else {
  9536. titleText = item.data;
  9537. }
  9538. return {
  9539. text: option.format ? option.format(item, titleText[index]) : item.name + ': ' + item.data,
  9540. color: item.color };
  9541. });
  9542. var validCalPoints = [];
  9543. var offset = {
  9544. x: 0,
  9545. y: 0 };
  9546. for (var i = 0; i < calPoints.length; i++) {
  9547. var points = calPoints[i];
  9548. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  9549. validCalPoints.push(points[index]);
  9550. }
  9551. }
  9552. for (var _i = 0; _i < validCalPoints.length; _i++) {
  9553. var item = validCalPoints[_i];
  9554. offset.x = Math.round(item.x);
  9555. offset.y += item.y;
  9556. }
  9557. offset.y /= validCalPoints.length;
  9558. return {
  9559. textList: textList,
  9560. offset: offset };
  9561. }
  9562. function getMixToolTipData(seriesData, calPoints, index, categories) {
  9563. var option = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
  9564. var textList = seriesData.map(function (item) {
  9565. return {
  9566. text: option.format ? option.format(item, categories[index]) : item.name + ': ' + item.data,
  9567. color: item.color,
  9568. disableLegend: item.disableLegend ? true : false };
  9569. });
  9570. textList = textList.filter(function (item) {
  9571. if (item.disableLegend !== true) {
  9572. return item;
  9573. }
  9574. });
  9575. var validCalPoints = [];
  9576. var offset = {
  9577. x: 0,
  9578. y: 0 };
  9579. for (var i = 0; i < calPoints.length; i++) {
  9580. var points = calPoints[i];
  9581. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  9582. validCalPoints.push(points[index]);
  9583. }
  9584. }
  9585. for (var _i2 = 0; _i2 < validCalPoints.length; _i2++) {
  9586. var item = validCalPoints[_i2];
  9587. offset.x = Math.round(item.x);
  9588. offset.y += item.y;
  9589. }
  9590. offset.y /= validCalPoints.length;
  9591. return {
  9592. textList: textList,
  9593. offset: offset };
  9594. }
  9595. function getCandleToolTipData(series, seriesData, calPoints, index, categories, extra) {
  9596. var option = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : {};
  9597. var upColor = extra.color.upFill;
  9598. var downColor = extra.color.downFill;
  9599. //颜色顺序为开盘,收盘,最低,最高
  9600. var color = [upColor, upColor, downColor, upColor];
  9601. var textList = [];
  9602. var text0 = {
  9603. text: categories[index],
  9604. color: null };
  9605. textList.push(text0);
  9606. seriesData.map(function (item) {
  9607. if (index == 0) {
  9608. if (item.data[1] - item.data[0] < 0) {
  9609. color[1] = downColor;
  9610. } else {
  9611. color[1] = upColor;
  9612. }
  9613. } else {
  9614. if (item.data[0] < series[index - 1][1]) {
  9615. color[0] = downColor;
  9616. }
  9617. if (item.data[1] < item.data[0]) {
  9618. color[1] = downColor;
  9619. }
  9620. if (item.data[2] > series[index - 1][1]) {
  9621. color[2] = upColor;
  9622. }
  9623. if (item.data[3] < series[index - 1][1]) {
  9624. color[3] = downColor;
  9625. }
  9626. }
  9627. var text1 = {
  9628. text: '开盘:' + item.data[0],
  9629. color: color[0] };
  9630. var text2 = {
  9631. text: '收盘:' + item.data[1],
  9632. color: color[1] };
  9633. var text3 = {
  9634. text: '最低:' + item.data[2],
  9635. color: color[2] };
  9636. var text4 = {
  9637. text: '最高:' + item.data[3],
  9638. color: color[3] };
  9639. textList.push(text1, text2, text3, text4);
  9640. });
  9641. var validCalPoints = [];
  9642. var offset = {
  9643. x: 0,
  9644. y: 0 };
  9645. for (var i = 0; i < calPoints.length; i++) {
  9646. var points = calPoints[i];
  9647. if (typeof points[index] !== 'undefined' && points[index] !== null) {
  9648. validCalPoints.push(points[index]);
  9649. }
  9650. }
  9651. offset.x = Math.round(validCalPoints[0][0].x);
  9652. return {
  9653. textList: textList,
  9654. offset: offset };
  9655. }
  9656. function filterSeries(series) {
  9657. var tempSeries = [];
  9658. for (var i = 0; i < series.length; i++) {
  9659. if (series[i].show == true) {
  9660. tempSeries.push(series[i]);
  9661. }
  9662. }
  9663. return tempSeries;
  9664. }
  9665. function findCurrentIndex(currentPoints, calPoints, opts, config) {
  9666. var offset = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
  9667. var currentIndex = -1;
  9668. var spacing = opts.chartData.eachSpacing / 2;
  9669. var xAxisPoints = [];
  9670. if (calPoints && calPoints.length > 0) {
  9671. for (var i = 1; i < opts.chartData.xAxisPoints.length; i++) {
  9672. xAxisPoints.push(opts.chartData.xAxisPoints[i] - spacing);
  9673. }
  9674. if ((opts.type == 'line' || opts.type == 'area') && opts.xAxis.boundaryGap == 'justify') {
  9675. spacing = opts.chartData.eachSpacing / 2;
  9676. }
  9677. if (!opts.categories) {
  9678. spacing = 0;
  9679. }
  9680. if (isInExactChartArea(currentPoints, opts, config)) {
  9681. xAxisPoints.forEach(function (item, index) {
  9682. if (currentPoints.x + offset + spacing > item) {
  9683. currentIndex = index;
  9684. }
  9685. });
  9686. }
  9687. }
  9688. return currentIndex;
  9689. }
  9690. function findLegendIndex(currentPoints, legendData, opts) {
  9691. var currentIndex = -1;
  9692. if (isInExactLegendArea(currentPoints, legendData.area)) {
  9693. var points = legendData.points;
  9694. var index = -1;
  9695. for (var i = 0, len = points.length; i < len; i++) {
  9696. var item = points[i];
  9697. for (var j = 0; j < item.length; j++) {
  9698. index += 1;
  9699. var area = item[j]['area'];
  9700. if (currentPoints.x > area[0] && currentPoints.x < area[2] && currentPoints.y > area[1] && currentPoints.y < area[3]) {
  9701. currentIndex = index;
  9702. break;
  9703. }
  9704. }
  9705. }
  9706. return currentIndex;
  9707. }
  9708. return currentIndex;
  9709. }
  9710. function isInExactLegendArea(currentPoints, area) {
  9711. return currentPoints.x > area.start.x && currentPoints.x < area.end.x && currentPoints.y > area.start.y &&
  9712. currentPoints.y < area.end.y;
  9713. }
  9714. function isInExactChartArea(currentPoints, opts, config) {
  9715. 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];
  9716. }
  9717. function findRadarChartCurrentIndex(currentPoints, radarData, count) {
  9718. var eachAngleArea = 2 * Math.PI / count;
  9719. var currentIndex = -1;
  9720. if (isInExactPieChartArea(currentPoints, radarData.center, radarData.radius)) {
  9721. var fixAngle = function fixAngle(angle) {
  9722. if (angle < 0) {
  9723. angle += 2 * Math.PI;
  9724. }
  9725. if (angle > 2 * Math.PI) {
  9726. angle -= 2 * Math.PI;
  9727. }
  9728. return angle;
  9729. };
  9730. var angle = Math.atan2(radarData.center.y - currentPoints.y, currentPoints.x - radarData.center.x);
  9731. angle = -1 * angle;
  9732. if (angle < 0) {
  9733. angle += 2 * Math.PI;
  9734. }
  9735. var angleList = radarData.angleList.map(function (item) {
  9736. item = fixAngle(-1 * item);
  9737. return item;
  9738. });
  9739. angleList.forEach(function (item, index) {
  9740. var rangeStart = fixAngle(item - eachAngleArea / 2);
  9741. var rangeEnd = fixAngle(item + eachAngleArea / 2);
  9742. if (rangeEnd < rangeStart) {
  9743. rangeEnd += 2 * Math.PI;
  9744. }
  9745. if (angle >= rangeStart && angle <= rangeEnd || angle + 2 * Math.PI >= rangeStart && angle + 2 * Math.PI <=
  9746. rangeEnd) {
  9747. currentIndex = index;
  9748. }
  9749. });
  9750. }
  9751. return currentIndex;
  9752. }
  9753. function findFunnelChartCurrentIndex(currentPoints, funnelData) {
  9754. var currentIndex = -1;
  9755. for (var i = 0, len = funnelData.series.length; i < len; i++) {
  9756. var item = funnelData.series[i];
  9757. if (currentPoints.x > item.funnelArea[0] && currentPoints.x < item.funnelArea[2] && currentPoints.y > item.funnelArea[1] && currentPoints.y < item.funnelArea[3]) {
  9758. currentIndex = i;
  9759. break;
  9760. }
  9761. }
  9762. return currentIndex;
  9763. }
  9764. function findWordChartCurrentIndex(currentPoints, wordData) {
  9765. var currentIndex = -1;
  9766. for (var i = 0, len = wordData.length; i < len; i++) {
  9767. var item = wordData[i];
  9768. if (currentPoints.x > item.area[0] && currentPoints.x < item.area[2] && currentPoints.y > item.area[1] && currentPoints.y < item.area[3]) {
  9769. currentIndex = i;
  9770. break;
  9771. }
  9772. }
  9773. return currentIndex;
  9774. }
  9775. function findMapChartCurrentIndex(currentPoints, opts) {
  9776. var currentIndex = -1;
  9777. var cData = opts.chartData.mapData;
  9778. var data = opts.series;
  9779. var tmp = pointToCoordinate(currentPoints.y, currentPoints.x, cData.bounds, cData.scale, cData.xoffset, cData.yoffset);
  9780. var poi = [tmp.x, tmp.y];
  9781. for (var i = 0, len = data.length; i < len; i++) {
  9782. var item = data[i].geometry.coordinates;
  9783. if (isPoiWithinPoly(poi, item)) {
  9784. currentIndex = i;
  9785. break;
  9786. }
  9787. }
  9788. return currentIndex;
  9789. }
  9790. function findPieChartCurrentIndex(currentPoints, pieData) {
  9791. var currentIndex = -1;
  9792. if (isInExactPieChartArea(currentPoints, pieData.center, pieData.radius)) {
  9793. var angle = Math.atan2(pieData.center.y - currentPoints.y, currentPoints.x - pieData.center.x);
  9794. angle = -angle;
  9795. for (var i = 0, len = pieData.series.length; i < len; i++) {
  9796. var item = pieData.series[i];
  9797. if (isInAngleRange(angle, item._start_, item._start_ + item._proportion_ * 2 * Math.PI)) {
  9798. currentIndex = i;
  9799. break;
  9800. }
  9801. }
  9802. }
  9803. return currentIndex;
  9804. }
  9805. function isInExactPieChartArea(currentPoints, center, radius) {
  9806. return Math.pow(currentPoints.x - center.x, 2) + Math.pow(currentPoints.y - center.y, 2) <= Math.pow(radius, 2);
  9807. }
  9808. function splitPoints(points) {
  9809. var newPoints = [];
  9810. var items = [];
  9811. points.forEach(function (item, index) {
  9812. if (item !== null) {
  9813. items.push(item);
  9814. } else {
  9815. if (items.length) {
  9816. newPoints.push(items);
  9817. }
  9818. items = [];
  9819. }
  9820. });
  9821. if (items.length) {
  9822. newPoints.push(items);
  9823. }
  9824. return newPoints;
  9825. }
  9826. function calLegendData(series, opts, config, chartData) {
  9827. var legendData = {
  9828. area: {
  9829. start: {
  9830. x: 0,
  9831. y: 0 },
  9832. end: {
  9833. x: 0,
  9834. y: 0 },
  9835. width: 0,
  9836. height: 0,
  9837. wholeWidth: 0,
  9838. wholeHeight: 0 },
  9839. points: [],
  9840. widthArr: [],
  9841. heightArr: [] };
  9842. if (opts.legend.show === false) {
  9843. chartData.legendData = legendData;
  9844. return legendData;
  9845. }
  9846. var padding = opts.legend.padding;
  9847. var margin = opts.legend.margin;
  9848. var fontSize = opts.legend.fontSize;
  9849. var shapeWidth = 15 * opts.pixelRatio;
  9850. var shapeRight = 5 * opts.pixelRatio;
  9851. var lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
  9852. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  9853. var legendList = [];
  9854. var widthCount = 0;
  9855. var widthCountArr = [];
  9856. var currentRow = [];
  9857. for (var i = 0; i < series.length; i++) {
  9858. var item = series[i];
  9859. var itemWidth = shapeWidth + shapeRight + measureText(item.name || 'undefined', fontSize) + opts.legend.itemGap;
  9860. if (widthCount + itemWidth > opts.width - opts.padding[1] - opts.padding[3]) {
  9861. legendList.push(currentRow);
  9862. widthCountArr.push(widthCount - opts.legend.itemGap);
  9863. widthCount = itemWidth;
  9864. currentRow = [item];
  9865. } else {
  9866. widthCount += itemWidth;
  9867. currentRow.push(item);
  9868. }
  9869. }
  9870. if (currentRow.length) {
  9871. legendList.push(currentRow);
  9872. widthCountArr.push(widthCount - opts.legend.itemGap);
  9873. legendData.widthArr = widthCountArr;
  9874. var legendWidth = Math.max.apply(null, widthCountArr);
  9875. switch (opts.legend.float) {
  9876. case 'left':
  9877. legendData.area.start.x = opts.padding[3];
  9878. legendData.area.end.x = opts.padding[3] + 2 * padding;
  9879. break;
  9880. case 'right':
  9881. legendData.area.start.x = opts.width - opts.padding[1] - legendWidth - 2 * padding;
  9882. legendData.area.end.x = opts.width - opts.padding[1];
  9883. break;
  9884. default:
  9885. legendData.area.start.x = (opts.width - legendWidth) / 2 - padding;
  9886. legendData.area.end.x = (opts.width + legendWidth) / 2 + padding;}
  9887. legendData.area.width = legendWidth + 2 * padding;
  9888. legendData.area.wholeWidth = legendWidth + 2 * padding;
  9889. legendData.area.height = legendList.length * lineHeight + 2 * padding;
  9890. legendData.area.wholeHeight = legendList.length * lineHeight + 2 * padding + 2 * margin;
  9891. legendData.points = legendList;
  9892. }
  9893. } else {
  9894. var len = series.length;
  9895. var maxHeight = opts.height - opts.padding[0] - opts.padding[2] - 2 * margin - 2 * padding;
  9896. var maxLength = Math.min(Math.floor(maxHeight / lineHeight), len);
  9897. legendData.area.height = maxLength * lineHeight + padding * 2;
  9898. legendData.area.wholeHeight = maxLength * lineHeight + padding * 2;
  9899. switch (opts.legend.float) {
  9900. case 'top':
  9901. legendData.area.start.y = opts.padding[0] + margin;
  9902. legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
  9903. break;
  9904. case 'bottom':
  9905. legendData.area.start.y = opts.height - opts.padding[2] - margin - legendData.area.height;
  9906. legendData.area.end.y = opts.height - opts.padding[2] - margin;
  9907. break;
  9908. default:
  9909. legendData.area.start.y = (opts.height - legendData.area.height) / 2;
  9910. legendData.area.end.y = (opts.height + legendData.area.height) / 2;}
  9911. var lineNum = len % maxLength === 0 ? len / maxLength : Math.floor(len / maxLength + 1);
  9912. var _currentRow = [];
  9913. for (var _i3 = 0; _i3 < lineNum; _i3++) {
  9914. var temp = series.slice(_i3 * maxLength, _i3 * maxLength + maxLength);
  9915. _currentRow.push(temp);
  9916. }
  9917. legendData.points = _currentRow;
  9918. if (_currentRow.length) {
  9919. for (var _i4 = 0; _i4 < _currentRow.length; _i4++) {
  9920. var _item = _currentRow[_i4];
  9921. var maxWidth = 0;
  9922. for (var j = 0; j < _item.length; j++) {
  9923. var _itemWidth = shapeWidth + shapeRight + measureText(_item[j].name || 'undefined', fontSize) + opts.legend.itemGap;
  9924. if (_itemWidth > maxWidth) {
  9925. maxWidth = _itemWidth;
  9926. }
  9927. }
  9928. legendData.widthArr.push(maxWidth);
  9929. legendData.heightArr.push(_item.length * lineHeight + padding * 2);
  9930. }
  9931. var _legendWidth = 0;
  9932. for (var _i5 = 0; _i5 < legendData.widthArr.length; _i5++) {
  9933. _legendWidth += legendData.widthArr[_i5];
  9934. }
  9935. legendData.area.width = _legendWidth - opts.legend.itemGap + 2 * padding;
  9936. legendData.area.wholeWidth = legendData.area.width + padding;
  9937. }
  9938. }
  9939. switch (opts.legend.position) {
  9940. case 'top':
  9941. legendData.area.start.y = opts.padding[0] + margin;
  9942. legendData.area.end.y = opts.padding[0] + margin + legendData.area.height;
  9943. break;
  9944. case 'bottom':
  9945. legendData.area.start.y = opts.height - opts.padding[2] - legendData.area.height - margin;
  9946. legendData.area.end.y = opts.height - opts.padding[2] - margin;
  9947. break;
  9948. case 'left':
  9949. legendData.area.start.x = opts.padding[3];
  9950. legendData.area.end.x = opts.padding[3] + legendData.area.width;
  9951. break;
  9952. case 'right':
  9953. legendData.area.start.x = opts.width - opts.padding[1] - legendData.area.width;
  9954. legendData.area.end.x = opts.width - opts.padding[1];
  9955. break;}
  9956. chartData.legendData = legendData;
  9957. return legendData;
  9958. }
  9959. function calCategoriesData(categories, opts, config, eachSpacing) {
  9960. var result = {
  9961. angle: 0,
  9962. xAxisHeight: config.xAxisHeight };
  9963. var categoriesTextLenth = categories.map(function (item) {
  9964. return measureText(item, opts.xAxis.fontSize || config.fontSize);
  9965. });
  9966. var maxTextLength = Math.max.apply(this, categoriesTextLenth);
  9967. if (opts.xAxis.rotateLabel == true && maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
  9968. result.angle = 45 * Math.PI / 180;
  9969. result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
  9970. }
  9971. return result;
  9972. }
  9973. function getXAxisTextList(series, opts, config) {
  9974. var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
  9975. var data = dataCombine(series);
  9976. var sorted = [];
  9977. // remove null from data
  9978. data = data.filter(function (item) {
  9979. //return item !== null;
  9980. if (typeof item === 'object' && item !== null) {
  9981. if (item.constructor.toString().indexOf('Array') > -1) {
  9982. return item !== null;
  9983. } else {
  9984. return item.value !== null;
  9985. }
  9986. } else {
  9987. return item !== null;
  9988. }
  9989. });
  9990. data.map(function (item) {
  9991. if (typeof item === 'object') {
  9992. if (item.constructor.toString().indexOf('Array') > -1) {
  9993. if (opts.type == 'candle') {
  9994. item.map(function (subitem) {
  9995. sorted.push(subitem);
  9996. });
  9997. } else {
  9998. sorted.push(item[0]);
  9999. }
  10000. } else {
  10001. sorted.push(item.value);
  10002. }
  10003. } else {
  10004. sorted.push(item);
  10005. }
  10006. });
  10007. var minData = 0;
  10008. var maxData = 0;
  10009. if (sorted.length > 0) {
  10010. minData = Math.min.apply(this, sorted);
  10011. maxData = Math.max.apply(this, sorted);
  10012. }
  10013. //为了兼容v1.9.0之前的项目
  10014. if (index > -1) {
  10015. if (typeof opts.xAxis.data[index].min === 'number') {
  10016. minData = Math.min(opts.xAxis.data[index].min, minData);
  10017. }
  10018. if (typeof opts.xAxis.data[index].max === 'number') {
  10019. maxData = Math.max(opts.xAxis.data[index].max, maxData);
  10020. }
  10021. } else {
  10022. if (typeof opts.xAxis.min === 'number') {
  10023. minData = Math.min(opts.xAxis.min, minData);
  10024. }
  10025. if (typeof opts.xAxis.max === 'number') {
  10026. maxData = Math.max(opts.xAxis.max, maxData);
  10027. }
  10028. }
  10029. if (minData === maxData) {
  10030. var rangeSpan = maxData || 10;
  10031. maxData += rangeSpan;
  10032. }
  10033. //var dataRange = getDataRange(minData, maxData);
  10034. var minRange = minData;
  10035. var maxRange = maxData;
  10036. var range = [];
  10037. var eachRange = (maxRange - minRange) / opts.xAxis.splitNumber;
  10038. for (var i = 0; i <= opts.xAxis.splitNumber; i++) {
  10039. range.push(minRange + eachRange * i);
  10040. }
  10041. return range;
  10042. }
  10043. function calXAxisData(series, opts, config) {
  10044. var result = {
  10045. angle: 0,
  10046. xAxisHeight: config.xAxisHeight };
  10047. result.ranges = getXAxisTextList(series, opts, config);
  10048. result.rangesFormat = result.ranges.map(function (item) {
  10049. item = opts.xAxis.format ? opts.xAxis.format(item) : util.toFixed(item, 2);
  10050. return item;
  10051. });
  10052. var xAxisScaleValues = result.ranges.map(function (item) {
  10053. // 如果刻度值是浮点数,则保留两位小数
  10054. item = util.toFixed(item, 2);
  10055. // 若有自定义格式则调用自定义的格式化函数
  10056. item = opts.xAxis.format ? opts.xAxis.format(Number(item)) : item;
  10057. return item;
  10058. });
  10059. result = Object.assign(result, getXAxisPoints(xAxisScaleValues, opts, config));
  10060. // 计算X轴刻度的属性譬如每个刻度的间隔,刻度的起始点\结束点以及总长
  10061. var eachSpacing = result.eachSpacing;
  10062. var textLength = xAxisScaleValues.map(function (item) {
  10063. return measureText(item);
  10064. });
  10065. // get max length of categories text
  10066. var maxTextLength = Math.max.apply(this, textLength);
  10067. // 如果刻度值文本内容过长,则将其逆时针旋转45°
  10068. if (maxTextLength + 2 * config.xAxisTextPadding > eachSpacing) {
  10069. result.angle = 45 * Math.PI / 180;
  10070. result.xAxisHeight = 2 * config.xAxisTextPadding + maxTextLength * Math.sin(result.angle);
  10071. }
  10072. if (opts.xAxis.disabled === true) {
  10073. result.xAxisHeight = 0;
  10074. }
  10075. return result;
  10076. }
  10077. function getRadarDataPoints(angleList, center, radius, series, opts) {
  10078. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  10079. var radarOption = opts.extra.radar || {};
  10080. radarOption.max = radarOption.max || 0;
  10081. var maxData = Math.max(radarOption.max, Math.max.apply(null, dataCombine(series)));
  10082. var data = [];var _loop2 = function _loop2(
  10083. i) {
  10084. var each = series[i];
  10085. var listItem = {};
  10086. listItem.color = each.color;
  10087. listItem.legendShape = each.legendShape;
  10088. listItem.pointShape = each.pointShape;
  10089. listItem.data = [];
  10090. each.data.forEach(function (item, index) {
  10091. var tmp = {};
  10092. tmp.angle = angleList[index];
  10093. tmp.proportion = item / maxData;
  10094. tmp.position = convertCoordinateOrigin(radius * tmp.proportion * process * Math.cos(tmp.angle), radius * tmp.proportion *
  10095. process * Math.sin(tmp.angle), center);
  10096. listItem.data.push(tmp);
  10097. });
  10098. data.push(listItem);};for (var i = 0; i < series.length; i++) {_loop2(i);
  10099. }
  10100. return data;
  10101. }
  10102. function getPieDataPoints(series, radius) {
  10103. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  10104. var count = 0;
  10105. var _start_ = 0;
  10106. for (var i = 0; i < series.length; i++) {
  10107. var item = series[i];
  10108. item.data = item.data === null ? 0 : item.data;
  10109. count += item.data;
  10110. }
  10111. for (var _i6 = 0; _i6 < series.length; _i6++) {
  10112. var _item2 = series[_i6];
  10113. _item2.data = _item2.data === null ? 0 : _item2.data;
  10114. if (count === 0) {
  10115. _item2._proportion_ = 1 / series.length * process;
  10116. } else {
  10117. _item2._proportion_ = _item2.data / count * process;
  10118. }
  10119. _item2._radius_ = radius;
  10120. }
  10121. for (var _i7 = 0; _i7 < series.length; _i7++) {
  10122. var _item3 = series[_i7];
  10123. _item3._start_ = _start_;
  10124. _start_ += 2 * _item3._proportion_ * Math.PI;
  10125. }
  10126. return series;
  10127. }
  10128. function getFunnelDataPoints(series, radius) {
  10129. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  10130. series = series.sort(function (a, b) {return parseInt(b.data) - parseInt(a.data);});
  10131. for (var i = 0; i < series.length; i++) {
  10132. series[i].radius = series[i].data / series[0].data * radius * process;
  10133. series[i]._proportion_ = series[i].data / series[0].data;
  10134. }
  10135. return series.reverse();
  10136. }
  10137. function getRoseDataPoints(series, type, minRadius, radius) {
  10138. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  10139. var count = 0;
  10140. var _start_ = 0;
  10141. var dataArr = [];
  10142. for (var i = 0; i < series.length; i++) {
  10143. var item = series[i];
  10144. item.data = item.data === null ? 0 : item.data;
  10145. count += item.data;
  10146. dataArr.push(item.data);
  10147. }
  10148. var minData = Math.min.apply(null, dataArr);
  10149. var maxData = Math.max.apply(null, dataArr);
  10150. var radiusLength = radius - minRadius;
  10151. for (var _i8 = 0; _i8 < series.length; _i8++) {
  10152. var _item4 = series[_i8];
  10153. _item4.data = _item4.data === null ? 0 : _item4.data;
  10154. if (count === 0 || type == 'area') {
  10155. _item4._proportion_ = _item4.data / count * process;
  10156. _item4._rose_proportion_ = 1 / series.length * process;
  10157. } else {
  10158. _item4._proportion_ = _item4.data / count * process;
  10159. _item4._rose_proportion_ = _item4.data / count * process;
  10160. }
  10161. _item4._radius_ = minRadius + radiusLength * ((_item4.data - minData) / (maxData - minData));
  10162. }
  10163. for (var _i9 = 0; _i9 < series.length; _i9++) {
  10164. var _item5 = series[_i9];
  10165. _item5._start_ = _start_;
  10166. _start_ += 2 * _item5._rose_proportion_ * Math.PI;
  10167. }
  10168. return series;
  10169. }
  10170. function getArcbarDataPoints(series, arcbarOption) {
  10171. var process = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
  10172. if (process == 1) {
  10173. process = 0.999999;
  10174. }
  10175. for (var i = 0; i < series.length; i++) {
  10176. var item = series[i];
  10177. item.data = item.data === null ? 0 : item.data;
  10178. var totalAngle = void 0;
  10179. if (arcbarOption.type == 'circle') {
  10180. totalAngle = 2;
  10181. } else {
  10182. if (arcbarOption.endAngle < arcbarOption.startAngle) {
  10183. totalAngle = 2 + arcbarOption.endAngle - arcbarOption.startAngle;
  10184. } else {
  10185. totalAngle = arcbarOption.startAngle - arcbarOption.endAngle;
  10186. }
  10187. }
  10188. item._proportion_ = totalAngle * item.data * process + arcbarOption.startAngle;
  10189. if (item._proportion_ >= 2) {
  10190. item._proportion_ = item._proportion_ % 2;
  10191. }
  10192. }
  10193. return series;
  10194. }
  10195. function getGaugeAxisPoints(categories, startAngle, endAngle) {
  10196. var totalAngle = startAngle - endAngle + 1;
  10197. var tempStartAngle = startAngle;
  10198. for (var i = 0; i < categories.length; i++) {
  10199. categories[i].value = categories[i].value === null ? 0 : categories[i].value;
  10200. categories[i]._startAngle_ = tempStartAngle;
  10201. categories[i]._endAngle_ = totalAngle * categories[i].value + startAngle;
  10202. if (categories[i]._endAngle_ >= 2) {
  10203. categories[i]._endAngle_ = categories[i]._endAngle_ % 2;
  10204. }
  10205. tempStartAngle = categories[i]._endAngle_;
  10206. }
  10207. return categories;
  10208. }
  10209. function getGaugeDataPoints(series, categories, gaugeOption) {
  10210. var process = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
  10211. for (var i = 0; i < series.length; i++) {
  10212. var item = series[i];
  10213. item.data = item.data === null ? 0 : item.data;
  10214. if (gaugeOption.pointer.color == 'auto') {
  10215. for (var _i10 = 0; _i10 < categories.length; _i10++) {
  10216. if (item.data <= categories[_i10].value) {
  10217. item.color = categories[_i10].color;
  10218. break;
  10219. }
  10220. }
  10221. } else {
  10222. item.color = gaugeOption.pointer.color;
  10223. }
  10224. var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  10225. item._endAngle_ = totalAngle * item.data + gaugeOption.startAngle;
  10226. item._oldAngle_ = gaugeOption.oldAngle;
  10227. if (gaugeOption.oldAngle < gaugeOption.endAngle) {
  10228. item._oldAngle_ += 2;
  10229. }
  10230. if (item.data >= gaugeOption.oldData) {
  10231. item._proportion_ = (item._endAngle_ - item._oldAngle_) * process + gaugeOption.oldAngle;
  10232. } else {
  10233. item._proportion_ = item._oldAngle_ - (item._oldAngle_ - item._endAngle_) * process;
  10234. }
  10235. if (item._proportion_ >= 2) {
  10236. item._proportion_ = item._proportion_ % 2;
  10237. }
  10238. }
  10239. return series;
  10240. }
  10241. function getPieTextMaxLength(series) {
  10242. series = getPieDataPoints(series);
  10243. var maxLength = 0;
  10244. for (var i = 0; i < series.length; i++) {
  10245. var item = series[i];
  10246. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
  10247. maxLength = Math.max(maxLength, measureText(text));
  10248. }
  10249. return maxLength;
  10250. }
  10251. function fixColumeData(points, eachSpacing, columnLen, index, config, opts) {
  10252. return points.map(function (item) {
  10253. if (item === null) {
  10254. return null;
  10255. }
  10256. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / columnLen);
  10257. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  10258. item.width = Math.min(item.width, +opts.extra.column.width);
  10259. }
  10260. if (item.width <= 0) {
  10261. item.width = 1;
  10262. }
  10263. item.x += (index + 0.5 - columnLen / 2) * item.width;
  10264. return item;
  10265. });
  10266. }
  10267. function fixColumeMeterData(points, eachSpacing, columnLen, index, config, opts, border) {
  10268. return points.map(function (item) {
  10269. if (item === null) {
  10270. return null;
  10271. }
  10272. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
  10273. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  10274. item.width = Math.min(item.width, +opts.extra.column.width);
  10275. }
  10276. if (index > 0) {
  10277. item.width -= 2 * border;
  10278. }
  10279. return item;
  10280. });
  10281. }
  10282. function fixColumeStackData(points, eachSpacing, columnLen, index, config, opts, series) {
  10283. return points.map(function (item, indexn) {
  10284. if (item === null) {
  10285. return null;
  10286. }
  10287. item.width = Math.ceil((eachSpacing - 2 * config.columePadding) / 2);
  10288. if (opts.extra.column && opts.extra.column.width && +opts.extra.column.width > 0) {
  10289. item.width = Math.min(item.width, +opts.extra.column.width);
  10290. }
  10291. return item;
  10292. });
  10293. }
  10294. function getXAxisPoints(categories, opts, config) {
  10295. var spacingValid = opts.width - opts.area[1] - opts.area[3];
  10296. var dataCount = opts.enableScroll ? Math.min(opts.xAxis.itemCount, categories.length) : categories.length;
  10297. if ((opts.type == 'line' || opts.type == 'area') && dataCount > 1 && opts.xAxis.boundaryGap == 'justify') {
  10298. dataCount -= 1;
  10299. }
  10300. var eachSpacing = spacingValid / dataCount;
  10301. var xAxisPoints = [];
  10302. var startX = opts.area[3];
  10303. var endX = opts.width - opts.area[1];
  10304. categories.forEach(function (item, index) {
  10305. xAxisPoints.push(startX + index * eachSpacing);
  10306. });
  10307. if (opts.xAxis.boundaryGap !== 'justify') {
  10308. if (opts.enableScroll === true) {
  10309. xAxisPoints.push(startX + categories.length * eachSpacing);
  10310. } else {
  10311. xAxisPoints.push(endX);
  10312. }
  10313. }
  10314. return {
  10315. xAxisPoints: xAxisPoints,
  10316. startX: startX,
  10317. endX: endX,
  10318. eachSpacing: eachSpacing };
  10319. }
  10320. function getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
  10321. var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
  10322. var points = [];
  10323. var validHeight = opts.height - opts.area[0] - opts.area[2];
  10324. data.forEach(function (item, index) {
  10325. if (item === null) {
  10326. points.push(null);
  10327. } else {
  10328. var cPoints = [];
  10329. item.forEach(function (items, indexs) {
  10330. var point = {};
  10331. point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
  10332. var value = items.value || items;
  10333. var height = validHeight * (value - minRange) / (maxRange - minRange);
  10334. height *= process;
  10335. point.y = opts.height - Math.round(height) - opts.area[2];
  10336. cPoints.push(point);
  10337. });
  10338. points.push(cPoints);
  10339. }
  10340. });
  10341. return points;
  10342. }
  10343. function getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config) {
  10344. var process = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 1;
  10345. var boundaryGap = 'center';
  10346. if (opts.type == 'line' || opts.type == 'area') {
  10347. boundaryGap = opts.xAxis.boundaryGap;
  10348. }
  10349. var points = [];
  10350. var validHeight = opts.height - opts.area[0] - opts.area[2];
  10351. var validWidth = opts.width - opts.area[1] - opts.area[3];
  10352. data.forEach(function (item, index) {
  10353. if (item === null) {
  10354. points.push(null);
  10355. } else {
  10356. var point = {};
  10357. point.color = item.color;
  10358. point.x = xAxisPoints[index];
  10359. var value = item;
  10360. if (typeof item === 'object' && item !== null) {
  10361. if (item.constructor.toString().indexOf('Array') > -1) {
  10362. var xranges, xminRange, xmaxRange;
  10363. xranges = [].concat(opts.chartData.xAxisData.ranges);
  10364. xminRange = xranges.shift();
  10365. xmaxRange = xranges.pop();
  10366. value = item[1];
  10367. point.x = opts.area[3] + validWidth * (item[0] - xminRange) / (xmaxRange - xminRange);
  10368. } else {
  10369. value = item.value;
  10370. }
  10371. }
  10372. if (boundaryGap == 'center') {
  10373. point.x += Math.round(eachSpacing / 2);
  10374. }
  10375. var height = validHeight * (value - minRange) / (maxRange - minRange);
  10376. height *= process;
  10377. point.y = opts.height - Math.round(height) - opts.area[2];
  10378. points.push(point);
  10379. }
  10380. });
  10381. return points;
  10382. }
  10383. function getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, stackSeries) {
  10384. var process = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 1;
  10385. var points = [];
  10386. var validHeight = opts.height - opts.area[0] - opts.area[2];
  10387. data.forEach(function (item, index) {
  10388. if (item === null) {
  10389. points.push(null);
  10390. } else {
  10391. var point = {};
  10392. point.color = item.color;
  10393. point.x = xAxisPoints[index] + Math.round(eachSpacing / 2);
  10394. if (seriesIndex > 0) {
  10395. var value = 0;
  10396. for (var i = 0; i <= seriesIndex; i++) {
  10397. value += stackSeries[i].data[index];
  10398. }
  10399. var value0 = value - item;
  10400. var height = validHeight * (value - minRange) / (maxRange - minRange);
  10401. var height0 = validHeight * (value0 - minRange) / (maxRange - minRange);
  10402. } else {
  10403. var value = item;
  10404. var height = validHeight * (value - minRange) / (maxRange - minRange);
  10405. var height0 = 0;
  10406. }
  10407. var heightc = height0;
  10408. height *= process;
  10409. heightc *= process;
  10410. point.y = opts.height - Math.round(height) - opts.area[2];
  10411. point.y0 = opts.height - Math.round(heightc) - opts.area[2];
  10412. points.push(point);
  10413. }
  10414. });
  10415. return points;
  10416. }
  10417. function getYAxisTextList(series, opts, config, stack) {
  10418. var index = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;
  10419. var data;
  10420. if (stack == 'stack') {
  10421. data = dataCombineStack(series, opts.categories.length);
  10422. } else {
  10423. data = dataCombine(series);
  10424. }
  10425. var sorted = [];
  10426. // remove null from data
  10427. data = data.filter(function (item) {
  10428. //return item !== null;
  10429. if (typeof item === 'object' && item !== null) {
  10430. if (item.constructor.toString().indexOf('Array') > -1) {
  10431. return item !== null;
  10432. } else {
  10433. return item.value !== null;
  10434. }
  10435. } else {
  10436. return item !== null;
  10437. }
  10438. });
  10439. data.map(function (item) {
  10440. if (typeof item === 'object') {
  10441. if (item.constructor.toString().indexOf('Array') > -1) {
  10442. if (opts.type == 'candle') {
  10443. item.map(function (subitem) {
  10444. sorted.push(subitem);
  10445. });
  10446. } else {
  10447. sorted.push(item[1]);
  10448. }
  10449. } else {
  10450. sorted.push(item.value);
  10451. }
  10452. } else {
  10453. sorted.push(item);
  10454. }
  10455. });
  10456. var minData = 0;
  10457. var maxData = 0;
  10458. if (sorted.length > 0) {
  10459. minData = Math.min.apply(this, sorted);
  10460. maxData = Math.max.apply(this, sorted);
  10461. }
  10462. //为了兼容v1.9.0之前的项目
  10463. if (index > -1) {
  10464. if (typeof opts.yAxis.data[index].min === 'number') {
  10465. minData = Math.min(opts.yAxis.data[index].min, minData);
  10466. }
  10467. if (typeof opts.yAxis.data[index].max === 'number') {
  10468. maxData = Math.max(opts.yAxis.data[index].max, maxData);
  10469. }
  10470. } else {
  10471. if (typeof opts.yAxis.min === 'number') {
  10472. minData = Math.min(opts.yAxis.min, minData);
  10473. }
  10474. if (typeof opts.yAxis.max === 'number') {
  10475. maxData = Math.max(opts.yAxis.max, maxData);
  10476. }
  10477. }
  10478. if (minData === maxData) {
  10479. var rangeSpan = maxData || 10;
  10480. maxData += rangeSpan;
  10481. }
  10482. var dataRange = getDataRange(minData, maxData);
  10483. var minRange = dataRange.minRange;
  10484. var maxRange = dataRange.maxRange;
  10485. var range = [];
  10486. var eachRange = (maxRange - minRange) / opts.yAxis.splitNumber;
  10487. for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
  10488. range.push(minRange + eachRange * i);
  10489. }
  10490. return range.reverse();
  10491. }
  10492. function calYAxisData(series, opts, config) {
  10493. //堆叠图重算Y轴
  10494. var columnstyle = assign({}, {
  10495. type: "" },
  10496. opts.extra.column);
  10497. //如果是多Y轴,重新计算
  10498. var YLength = opts.yAxis.data.length;
  10499. var newSeries = new Array(YLength);
  10500. if (YLength > 0) {
  10501. for (var i = 0; i < YLength; i++) {
  10502. newSeries[i] = [];
  10503. for (var j = 0; j < series.length; j++) {
  10504. if (series[j].index == i) {
  10505. newSeries[i].push(series[j]);
  10506. }
  10507. }
  10508. }
  10509. var rangesArr = new Array(YLength);
  10510. var rangesFormatArr = new Array(YLength);
  10511. var yAxisWidthArr = new Array(YLength);var _loop3 = function _loop3(
  10512. _i11) {
  10513. var yData = opts.yAxis.data[_i11];
  10514. //如果总开关不显示,强制每个Y轴为不显示
  10515. if (opts.yAxis.disabled == true) {
  10516. yData.disabled = true;
  10517. }
  10518. rangesArr[_i11] = getYAxisTextList(newSeries[_i11], opts, config, columnstyle.type, _i11);
  10519. var yAxisFontSizes = yData.fontSize || config.fontSize;
  10520. yAxisWidthArr[_i11] = { position: yData.position ? yData.position : 'left', width: 0 };
  10521. rangesFormatArr[_i11] = rangesArr[_i11].map(function (items) {
  10522. items = util.toFixed(items, 6);
  10523. items = yData.format ? yData.format(Number(items)) : items;
  10524. yAxisWidthArr[_i11].width = Math.max(yAxisWidthArr[_i11].width, measureText(items, yAxisFontSizes) + 5);
  10525. return items;
  10526. });
  10527. var calibration = yData.calibration ? 4 * opts.pixelRatio : 0;
  10528. yAxisWidthArr[_i11].width += calibration + 3 * opts.pixelRatio;
  10529. if (yData.disabled === true) {
  10530. yAxisWidthArr[_i11].width = 0;
  10531. }};for (var _i11 = 0; _i11 < YLength; _i11++) {_loop3(_i11);
  10532. }
  10533. } else {
  10534. var rangesArr = new Array(1);
  10535. var rangesFormatArr = new Array(1);
  10536. var yAxisWidthArr = new Array(1);
  10537. rangesArr[0] = getYAxisTextList(series, opts, config, columnstyle.type);
  10538. yAxisWidthArr[0] = { position: 'left', width: 0 };
  10539. var yAxisFontSize = opts.yAxis.fontSize || config.fontSize;
  10540. rangesFormatArr[0] = rangesArr[0].map(function (item) {
  10541. item = util.toFixed(item, 6);
  10542. item = opts.yAxis.format ? opts.yAxis.format(Number(item)) : item;
  10543. yAxisWidthArr[0].width = Math.max(yAxisWidthArr[0].width, measureText(item, yAxisFontSize) + 5);
  10544. return item;
  10545. });
  10546. yAxisWidthArr[0].width += 3 * opts.pixelRatio;
  10547. if (opts.yAxis.disabled === true) {
  10548. yAxisWidthArr[0] = { position: 'left', width: 0 };
  10549. opts.yAxis.data[0] = { disabled: true };
  10550. } else {
  10551. opts.yAxis.data[0] = { disabled: false, position: 'left', max: opts.yAxis.max, min: opts.yAxis.min, format: opts.yAxis.format };
  10552. }
  10553. }
  10554. return {
  10555. rangesFormat: rangesFormatArr,
  10556. ranges: rangesArr,
  10557. yAxisWidth: yAxisWidthArr };
  10558. }
  10559. function calTooltipYAxisData(point, series, opts, config, eachSpacing) {
  10560. var ranges = [].concat(opts.chartData.yAxisData.ranges);
  10561. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  10562. var minAxis = opts.area[0];
  10563. var items = [];
  10564. for (var i = 0; i < ranges.length; i++) {
  10565. var maxVal = ranges[i].shift();
  10566. var minVal = ranges[i].pop();
  10567. var item = maxVal - (maxVal - minVal) * (point - minAxis) / spacingValid;
  10568. item = opts.yAxis.data[i].format ? opts.yAxis.data[i].format(Number(item)) : item.toFixed(0);
  10569. items.push(String(item));
  10570. }
  10571. return items;
  10572. }
  10573. function calMarkLineData(points, opts) {
  10574. var minRange, maxRange;
  10575. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  10576. for (var i = 0; i < points.length; i++) {
  10577. points[i].yAxisIndex = points[i].yAxisIndex ? points[i].yAxisIndex : 0;
  10578. var range = [].concat(opts.chartData.yAxisData.ranges[points[i].yAxisIndex]);
  10579. minRange = range.pop();
  10580. maxRange = range.shift();
  10581. var height = spacingValid * (points[i].value - minRange) / (maxRange - minRange);
  10582. points[i].y = opts.height - Math.round(height) - opts.area[2];
  10583. }
  10584. return points;
  10585. }
  10586. function contextRotate(context, opts) {
  10587. if (opts.rotateLock !== true) {
  10588. context.translate(opts.height, 0);
  10589. context.rotate(90 * Math.PI / 180);
  10590. } else if (opts._rotate_ !== true) {
  10591. context.translate(opts.height, 0);
  10592. context.rotate(90 * Math.PI / 180);
  10593. opts._rotate_ = true;
  10594. }
  10595. }
  10596. function drawPointShape(points, color, shape, context, opts) {
  10597. context.beginPath();
  10598. if (opts.dataPointShapeType == 'hollow') {
  10599. context.setStrokeStyle(color);
  10600. context.setFillStyle(opts.background);
  10601. context.setLineWidth(2 * opts.pixelRatio);
  10602. } else {
  10603. context.setStrokeStyle("#ffffff");
  10604. context.setFillStyle(color);
  10605. context.setLineWidth(1 * opts.pixelRatio);
  10606. }
  10607. if (shape === 'diamond') {
  10608. points.forEach(function (item, index) {
  10609. if (item !== null) {
  10610. context.moveTo(item.x, item.y - 4.5);
  10611. context.lineTo(item.x - 4.5, item.y);
  10612. context.lineTo(item.x, item.y + 4.5);
  10613. context.lineTo(item.x + 4.5, item.y);
  10614. context.lineTo(item.x, item.y - 4.5);
  10615. }
  10616. });
  10617. } else if (shape === 'circle') {
  10618. points.forEach(function (item, index) {
  10619. if (item !== null) {
  10620. context.moveTo(item.x + 2.5 * opts.pixelRatio, item.y);
  10621. context.arc(item.x, item.y, 3 * opts.pixelRatio, 0, 2 * Math.PI, false);
  10622. }
  10623. });
  10624. } else if (shape === 'rect') {
  10625. points.forEach(function (item, index) {
  10626. if (item !== null) {
  10627. context.moveTo(item.x - 3.5, item.y - 3.5);
  10628. context.rect(item.x - 3.5, item.y - 3.5, 7, 7);
  10629. }
  10630. });
  10631. } else if (shape === 'triangle') {
  10632. points.forEach(function (item, index) {
  10633. if (item !== null) {
  10634. context.moveTo(item.x, item.y - 4.5);
  10635. context.lineTo(item.x - 4.5, item.y + 4.5);
  10636. context.lineTo(item.x + 4.5, item.y + 4.5);
  10637. context.lineTo(item.x, item.y - 4.5);
  10638. }
  10639. });
  10640. }
  10641. context.closePath();
  10642. context.fill();
  10643. context.stroke();
  10644. }
  10645. function drawRingTitle(opts, config, context, center) {
  10646. var titlefontSize = opts.title.fontSize || config.titleFontSize;
  10647. var subtitlefontSize = opts.subtitle.fontSize || config.subtitleFontSize;
  10648. var title = opts.title.name || '';
  10649. var subtitle = opts.subtitle.name || '';
  10650. var titleFontColor = opts.title.color || config.titleColor;
  10651. var subtitleFontColor = opts.subtitle.color || config.subtitleColor;
  10652. var titleHeight = title ? titlefontSize : 0;
  10653. var subtitleHeight = subtitle ? subtitlefontSize : 0;
  10654. var margin = 5;
  10655. if (subtitle) {
  10656. var textWidth = measureText(subtitle, subtitlefontSize);
  10657. var startX = center.x - textWidth / 2 + (opts.subtitle.offsetX || 0);
  10658. var startY = center.y + subtitlefontSize / 2 + (opts.subtitle.offsetY || 0);
  10659. if (title) {
  10660. startY += (titleHeight + margin) / 2;
  10661. }
  10662. context.beginPath();
  10663. context.setFontSize(subtitlefontSize);
  10664. context.setFillStyle(subtitleFontColor);
  10665. context.fillText(subtitle, startX, startY);
  10666. context.closePath();
  10667. context.stroke();
  10668. }
  10669. if (title) {
  10670. var _textWidth = measureText(title, titlefontSize);
  10671. var _startX = center.x - _textWidth / 2 + (opts.title.offsetX || 0);
  10672. var _startY = center.y + titlefontSize / 2 + (opts.title.offsetY || 0);
  10673. if (subtitle) {
  10674. _startY -= (subtitleHeight + margin) / 2;
  10675. }
  10676. context.beginPath();
  10677. context.setFontSize(titlefontSize);
  10678. context.setFillStyle(titleFontColor);
  10679. context.fillText(title, _startX, _startY);
  10680. context.closePath();
  10681. context.stroke();
  10682. }
  10683. }
  10684. function drawPointText(points, series, config, context) {
  10685. // 绘制数据文案
  10686. var data = series.data;
  10687. points.forEach(function (item, index) {
  10688. if (item !== null) {
  10689. //var formatVal = series.format ? series.format(data[index]) : data[index];
  10690. context.beginPath();
  10691. context.setFontSize(series.textSize || config.fontSize);
  10692. context.setFillStyle(series.textColor || '#666666');
  10693. var value = data[index];
  10694. if (typeof data[index] === 'object' && data[index] !== null) {
  10695. if (data[index].constructor == Array) {
  10696. value = data[index][1];
  10697. } else {
  10698. value = data[index].value;
  10699. }
  10700. }
  10701. var formatVal = series.format ? series.format(value) : value;
  10702. context.fillText(String(formatVal), item.x - measureText(formatVal, series.textSize || config.fontSize) / 2, item.y - 4);
  10703. context.closePath();
  10704. context.stroke();
  10705. }
  10706. });
  10707. }
  10708. function drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context) {
  10709. radius -= gaugeOption.width / 2 + config.gaugeLabelTextMargin;
  10710. var totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  10711. var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  10712. var totalNumber = gaugeOption.endNumber - gaugeOption.startNumber;
  10713. var splitNumber = totalNumber / gaugeOption.splitLine.splitNumber;
  10714. var nowAngle = gaugeOption.startAngle;
  10715. var nowNumber = gaugeOption.startNumber;
  10716. for (var i = 0; i < gaugeOption.splitLine.splitNumber + 1; i++) {
  10717. var pos = {
  10718. x: radius * Math.cos(nowAngle * Math.PI),
  10719. y: radius * Math.sin(nowAngle * Math.PI) };
  10720. var labelText = gaugeOption.labelFormat ? gaugeOption.labelFormat(nowNumber) : nowNumber;
  10721. pos.x += centerPosition.x - measureText(labelText) / 2;
  10722. pos.y += centerPosition.y;
  10723. var startX = pos.x;
  10724. var startY = pos.y;
  10725. context.beginPath();
  10726. context.setFontSize(config.fontSize);
  10727. context.setFillStyle(gaugeOption.labelColor || '#666666');
  10728. context.fillText(labelText, startX, startY + config.fontSize / 2);
  10729. context.closePath();
  10730. context.stroke();
  10731. nowAngle += splitAngle;
  10732. if (nowAngle >= 2) {
  10733. nowAngle = nowAngle % 2;
  10734. }
  10735. nowNumber += splitNumber;
  10736. }
  10737. }
  10738. function drawRadarLabel(angleList, radius, centerPosition, opts, config, context) {
  10739. var radarOption = opts.extra.radar || {};
  10740. radius += config.radarLabelTextMargin;
  10741. angleList.forEach(function (angle, index) {
  10742. var pos = {
  10743. x: radius * Math.cos(angle),
  10744. y: radius * Math.sin(angle) };
  10745. var posRelativeCanvas = convertCoordinateOrigin(pos.x, pos.y, centerPosition);
  10746. var startX = posRelativeCanvas.x;
  10747. var startY = posRelativeCanvas.y;
  10748. if (util.approximatelyEqual(pos.x, 0)) {
  10749. startX -= measureText(opts.categories[index] || '') / 2;
  10750. } else if (pos.x < 0) {
  10751. startX -= measureText(opts.categories[index] || '');
  10752. }
  10753. context.beginPath();
  10754. context.setFontSize(config.fontSize);
  10755. context.setFillStyle(radarOption.labelColor || '#666666');
  10756. context.fillText(opts.categories[index] || '', startX, startY + config.fontSize / 2);
  10757. context.closePath();
  10758. context.stroke();
  10759. });
  10760. }
  10761. function drawPieText(series, opts, config, context, radius, center) {
  10762. var lineRadius = config.pieChartLinePadding;
  10763. var textObjectCollection = [];
  10764. var lastTextObject = null;
  10765. var seriesConvert = series.map(function (item) {
  10766. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_.toFixed(4) * 100) + '%';
  10767. if (item._rose_proportion_) item._proportion_ = item._rose_proportion_;
  10768. var arc = 2 * Math.PI - (item._start_ + 2 * Math.PI * item._proportion_ / 2);
  10769. var color = item.color;
  10770. var radius = item._radius_;
  10771. return {
  10772. arc: arc,
  10773. text: text,
  10774. color: color,
  10775. radius: radius,
  10776. textColor: item.textColor,
  10777. textSize: item.textSize };
  10778. });
  10779. for (var i = 0; i < seriesConvert.length; i++) {
  10780. var item = seriesConvert[i];
  10781. // line end
  10782. var orginX1 = Math.cos(item.arc) * (item.radius + lineRadius);
  10783. var orginY1 = Math.sin(item.arc) * (item.radius + lineRadius);
  10784. // line start
  10785. var orginX2 = Math.cos(item.arc) * item.radius;
  10786. var orginY2 = Math.sin(item.arc) * item.radius;
  10787. // text start
  10788. var orginX3 = orginX1 >= 0 ? orginX1 + config.pieChartTextPadding : orginX1 - config.pieChartTextPadding;
  10789. var orginY3 = orginY1;
  10790. var textWidth = measureText(item.text, item.textSize || config.fontSize);
  10791. var startY = orginY3;
  10792. if (lastTextObject && util.isSameXCoordinateArea(lastTextObject.start, {
  10793. x: orginX3 }))
  10794. {
  10795. if (orginX3 > 0) {
  10796. startY = Math.min(orginY3, lastTextObject.start.y);
  10797. } else if (orginX1 < 0) {
  10798. startY = Math.max(orginY3, lastTextObject.start.y);
  10799. } else {
  10800. if (orginY3 > 0) {
  10801. startY = Math.max(orginY3, lastTextObject.start.y);
  10802. } else {
  10803. startY = Math.min(orginY3, lastTextObject.start.y);
  10804. }
  10805. }
  10806. }
  10807. if (orginX3 < 0) {
  10808. orginX3 -= textWidth;
  10809. }
  10810. var textObject = {
  10811. lineStart: {
  10812. x: orginX2,
  10813. y: orginY2 },
  10814. lineEnd: {
  10815. x: orginX1,
  10816. y: orginY1 },
  10817. start: {
  10818. x: orginX3,
  10819. y: startY },
  10820. width: textWidth,
  10821. height: config.fontSize,
  10822. text: item.text,
  10823. color: item.color,
  10824. textColor: item.textColor,
  10825. textSize: item.textSize };
  10826. lastTextObject = avoidCollision(textObject, lastTextObject);
  10827. textObjectCollection.push(lastTextObject);
  10828. }
  10829. for (var _i12 = 0; _i12 < textObjectCollection.length; _i12++) {
  10830. var _item6 = textObjectCollection[_i12];
  10831. var lineStartPoistion = convertCoordinateOrigin(_item6.lineStart.x, _item6.lineStart.y, center);
  10832. var lineEndPoistion = convertCoordinateOrigin(_item6.lineEnd.x, _item6.lineEnd.y, center);
  10833. var textPosition = convertCoordinateOrigin(_item6.start.x, _item6.start.y, center);
  10834. context.setLineWidth(1 * opts.pixelRatio);
  10835. context.setFontSize(config.fontSize);
  10836. context.beginPath();
  10837. context.setStrokeStyle(_item6.color);
  10838. context.setFillStyle(_item6.color);
  10839. context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
  10840. var curveStartX = _item6.start.x < 0 ? textPosition.x + _item6.width : textPosition.x;
  10841. var textStartX = _item6.start.x < 0 ? textPosition.x - 5 : textPosition.x + 5;
  10842. context.quadraticCurveTo(lineEndPoistion.x, lineEndPoistion.y, curveStartX, textPosition.y);
  10843. context.moveTo(lineStartPoistion.x, lineStartPoistion.y);
  10844. context.stroke();
  10845. context.closePath();
  10846. context.beginPath();
  10847. context.moveTo(textPosition.x + _item6.width, textPosition.y);
  10848. context.arc(curveStartX, textPosition.y, 2, 0, 2 * Math.PI);
  10849. context.closePath();
  10850. context.fill();
  10851. context.beginPath();
  10852. context.setFontSize(_item6.textSize || config.fontSize);
  10853. context.setFillStyle(_item6.textColor || '#666666');
  10854. context.fillText(_item6.text, textStartX, textPosition.y + 3);
  10855. context.closePath();
  10856. context.stroke();
  10857. context.closePath();
  10858. }
  10859. }
  10860. function drawToolTipSplitLine(offsetX, opts, config, context) {
  10861. var toolTipOption = opts.extra.tooltip || {};
  10862. toolTipOption.gridType = toolTipOption.gridType == undefined ? 'solid' : toolTipOption.gridType;
  10863. toolTipOption.dashLength = toolTipOption.dashLength == undefined ? 4 : toolTipOption.dashLength;
  10864. var startY = opts.area[0];
  10865. var endY = opts.height - opts.area[2];
  10866. if (toolTipOption.gridType == 'dash') {
  10867. context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
  10868. }
  10869. context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
  10870. context.setLineWidth(1 * opts.pixelRatio);
  10871. context.beginPath();
  10872. context.moveTo(offsetX, startY);
  10873. context.lineTo(offsetX, endY);
  10874. context.stroke();
  10875. context.setLineDash([]);
  10876. if (toolTipOption.xAxisLabel) {
  10877. var labelText = opts.categories[opts.tooltip.index];
  10878. context.setFontSize(config.fontSize);
  10879. var textWidth = measureText(labelText, config.fontSize);
  10880. var textX = offsetX - 0.5 * textWidth;
  10881. var textY = endY;
  10882. context.beginPath();
  10883. context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
  10884. context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
  10885. context.setLineWidth(1 * opts.pixelRatio);
  10886. context.rect(textX - config.toolTipPadding, textY, textWidth + 2 * config.toolTipPadding, config.fontSize + 2 * config.toolTipPadding);
  10887. context.closePath();
  10888. context.stroke();
  10889. context.fill();
  10890. context.beginPath();
  10891. context.setFontSize(config.fontSize);
  10892. context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
  10893. context.fillText(String(labelText), textX, textY + config.toolTipPadding + config.fontSize);
  10894. context.closePath();
  10895. context.stroke();
  10896. }
  10897. }
  10898. function drawMarkLine(opts, config, context) {
  10899. var markLineOption = assign({}, {
  10900. type: 'solid',
  10901. dashLength: 4,
  10902. data: [] },
  10903. opts.extra.markLine);
  10904. var startX = opts.area[3];
  10905. var endX = opts.width - opts.area[1];
  10906. var points = calMarkLineData(markLineOption.data, opts);
  10907. for (var i = 0; i < points.length; i++) {
  10908. var item = assign({}, {
  10909. lineColor: '#DE4A42',
  10910. showLabel: false,
  10911. labelFontColor: '#666666',
  10912. labelBgColor: '#DFE8FF',
  10913. labelBgOpacity: 0.8,
  10914. yAxisIndex: 0 },
  10915. points[i]);
  10916. if (markLineOption.type == 'dash') {
  10917. context.setLineDash([markLineOption.dashLength, markLineOption.dashLength]);
  10918. }
  10919. context.setStrokeStyle(item.lineColor);
  10920. context.setLineWidth(1 * opts.pixelRatio);
  10921. context.beginPath();
  10922. context.moveTo(startX, item.y);
  10923. context.lineTo(endX, item.y);
  10924. context.stroke();
  10925. context.setLineDash([]);
  10926. if (item.showLabel) {
  10927. var labelText = opts.yAxis.format ? opts.yAxis.format(Number(item.value)) : item.value;
  10928. context.setFontSize(config.fontSize);
  10929. var textWidth = measureText(labelText, config.fontSize);
  10930. var bgStartX = opts.padding[3] + config.yAxisTitleWidth - config.toolTipPadding;
  10931. var bgEndX = Math.max(opts.area[3], textWidth + config.toolTipPadding * 2);
  10932. var bgWidth = bgEndX - bgStartX;
  10933. var textX = bgStartX + (bgWidth - textWidth) / 2;
  10934. var textY = item.y;
  10935. context.setFillStyle(hexToRgb(item.labelBgColor, item.labelBgOpacity));
  10936. context.setStrokeStyle(item.labelBgColor);
  10937. context.setLineWidth(1 * opts.pixelRatio);
  10938. context.beginPath();
  10939. context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
  10940. context.closePath();
  10941. context.stroke();
  10942. context.fill();
  10943. context.beginPath();
  10944. context.setFontSize(config.fontSize);
  10945. context.setFillStyle(item.labelFontColor);
  10946. context.fillText(String(labelText), textX, textY + 0.5 * config.fontSize);
  10947. context.stroke();
  10948. }
  10949. }
  10950. }
  10951. function drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints) {
  10952. var toolTipOption = assign({}, {
  10953. gridType: 'solid',
  10954. dashLength: 4 },
  10955. opts.extra.tooltip);
  10956. var startX = opts.area[3];
  10957. var endX = opts.width - opts.area[1];
  10958. if (toolTipOption.gridType == 'dash') {
  10959. context.setLineDash([toolTipOption.dashLength, toolTipOption.dashLength]);
  10960. }
  10961. context.setStrokeStyle(toolTipOption.gridColor || '#cccccc');
  10962. context.setLineWidth(1 * opts.pixelRatio);
  10963. context.beginPath();
  10964. context.moveTo(startX, opts.tooltip.offset.y);
  10965. context.lineTo(endX, opts.tooltip.offset.y);
  10966. context.stroke();
  10967. context.setLineDash([]);
  10968. if (toolTipOption.yAxisLabel) {
  10969. var labelText = calTooltipYAxisData(opts.tooltip.offset.y, opts.series, opts, config, eachSpacing);
  10970. var widthArr = opts.chartData.yAxisData.yAxisWidth;
  10971. var tStartLeft = opts.area[3];
  10972. var tStartRight = opts.width - opts.area[1];
  10973. for (var i = 0; i < labelText.length; i++) {
  10974. context.setFontSize(config.fontSize);
  10975. var textWidth = measureText(labelText[i], config.fontSize);
  10976. var bgStartX = void 0,bgEndX = void 0,bgWidth = void 0;
  10977. if (widthArr[i].position == 'left') {
  10978. bgStartX = tStartLeft - widthArr[i].width;
  10979. bgEndX = Math.max(bgStartX, bgStartX + textWidth + config.toolTipPadding * 2);
  10980. } else {
  10981. bgStartX = tStartRight;
  10982. bgEndX = Math.max(bgStartX + widthArr[i].width, bgStartX + textWidth + config.toolTipPadding * 2);
  10983. }
  10984. bgWidth = bgEndX - bgStartX;
  10985. var textX = bgStartX + (bgWidth - textWidth) / 2;
  10986. var textY = opts.tooltip.offset.y;
  10987. context.beginPath();
  10988. context.setFillStyle(hexToRgb(toolTipOption.labelBgColor || config.toolTipBackground, toolTipOption.labelBgOpacity || config.toolTipOpacity));
  10989. context.setStrokeStyle(toolTipOption.labelBgColor || config.toolTipBackground);
  10990. context.setLineWidth(1 * opts.pixelRatio);
  10991. context.rect(bgStartX, textY - 0.5 * config.fontSize - config.toolTipPadding, bgWidth, config.fontSize + 2 * config.toolTipPadding);
  10992. context.closePath();
  10993. context.stroke();
  10994. context.fill();
  10995. context.beginPath();
  10996. context.setFontSize(config.fontSize);
  10997. context.setFillStyle(toolTipOption.labelFontColor || config.fontColor);
  10998. context.fillText(labelText[i], textX, textY + 0.5 * config.fontSize);
  10999. context.closePath();
  11000. context.stroke();
  11001. if (widthArr[i].position == 'left') {
  11002. tStartLeft -= widthArr[i].width + opts.yAxis.padding;
  11003. } else {
  11004. tStartRight += widthArr[i].width + opts.yAxis.padding;
  11005. }
  11006. }
  11007. }
  11008. }
  11009. function drawToolTipSplitArea(offsetX, opts, config, context, eachSpacing) {
  11010. var toolTipOption = assign({}, {
  11011. activeBgColor: '#000000',
  11012. activeBgOpacity: 0.08 },
  11013. opts.extra.tooltip);
  11014. var startY = opts.area[0];
  11015. var endY = opts.height - opts.area[2];
  11016. context.beginPath();
  11017. context.setFillStyle(hexToRgb(toolTipOption.activeBgColor, toolTipOption.activeBgOpacity));
  11018. context.rect(offsetX - eachSpacing / 2, startY, eachSpacing, endY - startY);
  11019. context.closePath();
  11020. context.fill();
  11021. }
  11022. function drawToolTip(textList, offset, opts, config, context, eachSpacing, xAxisPoints) {
  11023. var toolTipOption = assign({}, {
  11024. showBox: true,
  11025. bgColor: '#000000',
  11026. bgOpacity: 0.7,
  11027. fontColor: '#FFFFFF' },
  11028. opts.extra.tooltip);
  11029. var legendWidth = 4 * opts.pixelRatio;
  11030. var legendMarginRight = 5 * opts.pixelRatio;
  11031. var arrowWidth = 8 * opts.pixelRatio;
  11032. var isOverRightBorder = false;
  11033. if (opts.type == 'line' || opts.type == 'area' || opts.type == 'candle' || opts.type == 'mix') {
  11034. drawToolTipSplitLine(opts.tooltip.offset.x, opts, config, context);
  11035. }
  11036. offset = assign({
  11037. x: 0,
  11038. y: 0 },
  11039. offset);
  11040. offset.y -= 8 * opts.pixelRatio;
  11041. var textWidth = textList.map(function (item) {
  11042. return measureText(item.text, config.fontSize);
  11043. });
  11044. var toolTipWidth = legendWidth + legendMarginRight + 4 * config.toolTipPadding + Math.max.apply(null, textWidth);
  11045. var toolTipHeight = 2 * config.toolTipPadding + textList.length * config.toolTipLineHeight;
  11046. if (toolTipOption.showBox == false) {return;}
  11047. // if beyond the right border
  11048. if (offset.x - Math.abs(opts._scrollDistance_) + arrowWidth + toolTipWidth > opts.width) {
  11049. isOverRightBorder = true;
  11050. }
  11051. if (toolTipHeight + offset.y > opts.height) {
  11052. offset.y = opts.height - toolTipHeight;
  11053. }
  11054. // draw background rect
  11055. context.beginPath();
  11056. context.setFillStyle(hexToRgb(toolTipOption.bgColor || config.toolTipBackground, toolTipOption.bgOpacity || config.toolTipOpacity));
  11057. if (isOverRightBorder) {
  11058. context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
  11059. context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
  11060. context.lineTo(offset.x - arrowWidth, offset.y);
  11061. context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y);
  11062. context.lineTo(offset.x - arrowWidth - Math.round(toolTipWidth), offset.y + toolTipHeight);
  11063. context.lineTo(offset.x - arrowWidth, offset.y + toolTipHeight);
  11064. context.lineTo(offset.x - arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
  11065. context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
  11066. } else {
  11067. context.moveTo(offset.x, offset.y + 10 * opts.pixelRatio);
  11068. context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio - 5 * opts.pixelRatio);
  11069. context.lineTo(offset.x + arrowWidth, offset.y);
  11070. context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y);
  11071. context.lineTo(offset.x + arrowWidth + Math.round(toolTipWidth), offset.y + toolTipHeight);
  11072. context.lineTo(offset.x + arrowWidth, offset.y + toolTipHeight);
  11073. context.lineTo(offset.x + arrowWidth, offset.y + 10 * opts.pixelRatio + 5 * opts.pixelRatio);
  11074. context.lineTo(offset.x, offset.y + 10 * opts.pixelRatio);
  11075. }
  11076. context.closePath();
  11077. context.fill();
  11078. // draw legend
  11079. textList.forEach(function (item, index) {
  11080. if (item.color !== null) {
  11081. context.beginPath();
  11082. context.setFillStyle(item.color);
  11083. var startX = offset.x + arrowWidth + 2 * config.toolTipPadding;
  11084. var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
  11085. config.toolTipPadding + 1;
  11086. if (isOverRightBorder) {
  11087. startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding;
  11088. }
  11089. context.fillRect(startX, startY, legendWidth, config.fontSize);
  11090. context.closePath();
  11091. }
  11092. });
  11093. // draw text list
  11094. textList.forEach(function (item, index) {
  11095. var startX = offset.x + arrowWidth + 2 * config.toolTipPadding + legendWidth + legendMarginRight;
  11096. if (isOverRightBorder) {
  11097. startX = offset.x - toolTipWidth - arrowWidth + 2 * config.toolTipPadding + +legendWidth + legendMarginRight;
  11098. }
  11099. var startY = offset.y + (config.toolTipLineHeight - config.fontSize) / 2 + config.toolTipLineHeight * index +
  11100. config.toolTipPadding;
  11101. context.beginPath();
  11102. context.setFontSize(config.fontSize);
  11103. context.setFillStyle(toolTipOption.fontColor);
  11104. context.fillText(item.text, startX, startY + config.fontSize);
  11105. context.closePath();
  11106. context.stroke();
  11107. });
  11108. }
  11109. function drawYAxisTitle(title, opts, config, context) {
  11110. var startX = config.xAxisHeight + (opts.height - config.xAxisHeight - measureText(title)) / 2;
  11111. context.save();
  11112. context.beginPath();
  11113. context.setFontSize(config.fontSize);
  11114. context.setFillStyle(opts.yAxis.titleFontColor || '#333333');
  11115. context.translate(0, opts.height);
  11116. context.rotate(-90 * Math.PI / 180);
  11117. context.fillText(title, startX, opts.padding[3] + 0.5 * config.fontSize);
  11118. context.closePath();
  11119. context.stroke();
  11120. context.restore();
  11121. }
  11122. function drawColumnDataPoints(series, opts, config, context) {
  11123. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  11124. var xAxisData = opts.chartData.xAxisData,
  11125. xAxisPoints = xAxisData.xAxisPoints,
  11126. eachSpacing = xAxisData.eachSpacing;
  11127. var columnOption = assign({}, {
  11128. type: 'group',
  11129. width: eachSpacing / 2,
  11130. meter: {
  11131. border: 4,
  11132. fillColor: '#FFFFFF' } },
  11133. opts.extra.column);
  11134. var calPoints = [];
  11135. context.save();
  11136. var leftNum = -2;
  11137. var rightNum = xAxisPoints.length + 2;
  11138. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11139. context.translate(opts._scrollDistance_, 0);
  11140. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  11141. rightNum = leftNum + opts.xAxis.itemCount + 4;
  11142. }
  11143. if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
  11144. drawToolTipSplitArea(opts.tooltip.offset.x, opts, config, context, eachSpacing);
  11145. }
  11146. series.forEach(function (eachSeries, seriesIndex) {
  11147. var ranges, minRange, maxRange;
  11148. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11149. minRange = ranges.pop();
  11150. maxRange = ranges.shift();
  11151. var data = eachSeries.data;
  11152. switch (columnOption.type) {
  11153. case 'group':
  11154. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11155. var tooltipPoints = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  11156. calPoints.push(tooltipPoints);
  11157. points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
  11158. for (var i = 0; i < points.length; i++) {
  11159. var item = points[i];
  11160. if (item !== null && i > leftNum && i < rightNum) {
  11161. context.beginPath();
  11162. context.setStrokeStyle(item.color || eachSeries.color);
  11163. context.setLineWidth(1);
  11164. context.setFillStyle(item.color || eachSeries.color);
  11165. var startX = item.x - item.width / 2;
  11166. var height = opts.height - item.y - opts.area[2];
  11167. context.moveTo(startX, item.y);
  11168. context.lineTo(startX + item.width - 2, item.y);
  11169. context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
  11170. context.lineTo(startX, opts.height - opts.area[2]);
  11171. context.lineTo(startX, item.y);
  11172. context.closePath();
  11173. context.stroke();
  11174. context.fill();
  11175. }
  11176. };
  11177. break;
  11178. case 'stack':
  11179. // 绘制堆叠数据图
  11180. var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  11181. calPoints.push(points);
  11182. points = fixColumeStackData(points, eachSpacing, series.length, seriesIndex, config, opts, series);
  11183. for (var _i13 = 0; _i13 < points.length; _i13++) {
  11184. var _item7 = points[_i13];
  11185. if (_item7 !== null && _i13 > leftNum && _i13 < rightNum) {
  11186. context.beginPath();
  11187. context.setFillStyle(_item7.color || eachSeries.color);
  11188. var startX = _item7.x - _item7.width / 2 + 1;
  11189. var height = opts.height - _item7.y - opts.area[2];
  11190. var height0 = opts.height - _item7.y0 - opts.area[2];
  11191. if (seriesIndex > 0) {
  11192. height -= height0;
  11193. }
  11194. context.moveTo(startX, _item7.y);
  11195. context.fillRect(startX, _item7.y, _item7.width - 2, height);
  11196. context.closePath();
  11197. context.fill();
  11198. }
  11199. };
  11200. break;
  11201. case 'meter':
  11202. // 绘制温度计数据图
  11203. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11204. calPoints.push(points);
  11205. points = fixColumeMeterData(points, eachSpacing, series.length, seriesIndex, config, opts, columnOption.meter.border);
  11206. if (seriesIndex == 0) {
  11207. for (var _i14 = 0; _i14 < points.length; _i14++) {
  11208. var _item8 = points[_i14];
  11209. if (_item8 !== null && _i14 > leftNum && _i14 < rightNum) {
  11210. //画背景颜色
  11211. context.beginPath();
  11212. context.setFillStyle(columnOption.meter.fillColor);
  11213. var startX = _item8.x - _item8.width / 2;
  11214. var height = opts.height - _item8.y - opts.area[2];
  11215. context.moveTo(startX, _item8.y);
  11216. context.fillRect(startX, _item8.y, _item8.width, height);
  11217. context.closePath();
  11218. context.fill();
  11219. //画边框线
  11220. if (columnOption.meter.border > 0) {
  11221. context.beginPath();
  11222. context.setStrokeStyle(eachSeries.color);
  11223. context.setLineWidth(columnOption.meter.border * opts.pixelRatio);
  11224. context.moveTo(startX + columnOption.meter.border * 0.5, _item8.y + height);
  11225. context.lineTo(startX + columnOption.meter.border * 0.5, _item8.y + columnOption.meter.border * 0.5);
  11226. context.lineTo(startX + _item8.width - columnOption.meter.border * 0.5, _item8.y + columnOption.meter.border * 0.5);
  11227. context.lineTo(startX + _item8.width - columnOption.meter.border * 0.5, _item8.y + height);
  11228. context.stroke();
  11229. }
  11230. }
  11231. };
  11232. } else {
  11233. for (var _i15 = 0; _i15 < points.length; _i15++) {
  11234. var _item9 = points[_i15];
  11235. if (_item9 !== null && _i15 > leftNum && _i15 < rightNum) {
  11236. context.beginPath();
  11237. context.setFillStyle(_item9.color || eachSeries.color);
  11238. var startX = _item9.x - _item9.width / 2;
  11239. var height = opts.height - _item9.y - opts.area[2];
  11240. context.moveTo(startX, _item9.y);
  11241. context.fillRect(startX, _item9.y, _item9.width, height);
  11242. context.closePath();
  11243. context.fill();
  11244. }
  11245. };
  11246. }
  11247. break;}
  11248. });
  11249. if (opts.dataLabel !== false && process === 1) {
  11250. series.forEach(function (eachSeries, seriesIndex) {
  11251. var ranges, minRange, maxRange;
  11252. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11253. minRange = ranges.pop();
  11254. maxRange = ranges.shift();
  11255. var data = eachSeries.data;
  11256. switch (columnOption.type) {
  11257. case 'group':
  11258. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11259. points = fixColumeData(points, eachSpacing, series.length, seriesIndex, config, opts);
  11260. drawPointText(points, eachSeries, config, context);
  11261. break;
  11262. case 'stack':
  11263. var points = getStackDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, seriesIndex, series, process);
  11264. drawPointText(points, eachSeries, config, context);
  11265. break;
  11266. case 'meter':
  11267. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11268. drawPointText(points, eachSeries, config, context);
  11269. break;}
  11270. });
  11271. }
  11272. context.restore();
  11273. return {
  11274. xAxisPoints: xAxisPoints,
  11275. calPoints: calPoints,
  11276. eachSpacing: eachSpacing };
  11277. }
  11278. function drawCandleDataPoints(series, seriesMA, opts, config, context) {
  11279. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  11280. var candleOption = assign({}, {
  11281. color: {},
  11282. average: {} },
  11283. opts.extra.candle);
  11284. candleOption.color = assign({}, {
  11285. upLine: '#f04864',
  11286. upFill: '#f04864',
  11287. downLine: '#2fc25b',
  11288. downFill: '#2fc25b' },
  11289. candleOption.color);
  11290. candleOption.average = assign({}, {
  11291. show: false,
  11292. name: [],
  11293. day: [],
  11294. color: config.colors },
  11295. candleOption.average);
  11296. opts.extra.candle = candleOption;
  11297. var xAxisData = opts.chartData.xAxisData,
  11298. xAxisPoints = xAxisData.xAxisPoints,
  11299. eachSpacing = xAxisData.eachSpacing;
  11300. var calPoints = [];
  11301. context.save();
  11302. var leftNum = -2;
  11303. var rightNum = xAxisPoints.length + 2;
  11304. var leftSpace = 0;
  11305. var rightSpace = opts.width + eachSpacing;
  11306. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11307. context.translate(opts._scrollDistance_, 0);
  11308. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  11309. rightNum = leftNum + opts.xAxis.itemCount + 4;
  11310. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  11311. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  11312. }
  11313. //画均线
  11314. if (candleOption.average.show || seriesMA) {//Merge pull request !12 from 邱贵翔
  11315. seriesMA.forEach(function (eachSeries, seriesIndex) {
  11316. var ranges, minRange, maxRange;
  11317. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11318. minRange = ranges.pop();
  11319. maxRange = ranges.shift();
  11320. var data = eachSeries.data;
  11321. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11322. var splitPointList = splitPoints(points);
  11323. for (var i = 0; i < splitPointList.length; i++) {
  11324. var _points = splitPointList[i];
  11325. context.beginPath();
  11326. context.setStrokeStyle(eachSeries.color);
  11327. context.setLineWidth(1);
  11328. if (_points.length === 1) {
  11329. context.moveTo(_points[0].x, _points[0].y);
  11330. context.arc(_points[0].x, _points[0].y, 1, 0, 2 * Math.PI);
  11331. } else {
  11332. context.moveTo(_points[0].x, _points[0].y);
  11333. var startPoint = 0;
  11334. for (var j = 0; j < _points.length; j++) {
  11335. var item = _points[j];
  11336. if (startPoint == 0 && item.x > leftSpace) {
  11337. context.moveTo(item.x, item.y);
  11338. startPoint = 1;
  11339. }
  11340. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  11341. var ctrlPoint = createCurveControlPoints(_points, j - 1);
  11342. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  11343. }
  11344. }
  11345. context.moveTo(_points[0].x, _points[0].y);
  11346. }
  11347. context.closePath();
  11348. context.stroke();
  11349. }
  11350. });
  11351. }
  11352. //画K线
  11353. series.forEach(function (eachSeries, seriesIndex) {
  11354. var ranges, minRange, maxRange;
  11355. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11356. minRange = ranges.pop();
  11357. maxRange = ranges.shift();
  11358. var data = eachSeries.data;
  11359. var points = getCandleDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11360. calPoints.push(points);
  11361. var splitPointList = splitPoints(points);
  11362. for (var i = 0; i < splitPointList[0].length; i++) {
  11363. if (i > leftNum && i < rightNum) {
  11364. var item = splitPointList[0][i];
  11365. context.beginPath();
  11366. //如果上涨
  11367. if (data[i][1] - data[i][0] > 0) {
  11368. context.setStrokeStyle(candleOption.color.upLine);
  11369. context.setFillStyle(candleOption.color.upFill);
  11370. context.setLineWidth(1 * opts.pixelRatio);
  11371. context.moveTo(item[3].x, item[3].y); //顶点
  11372. context.lineTo(item[1].x, item[1].y); //收盘中间点
  11373. context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
  11374. context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
  11375. context.lineTo(item[0].x, item[0].y); //开盘中间点
  11376. context.lineTo(item[2].x, item[2].y); //底点
  11377. context.lineTo(item[0].x, item[0].y); //开盘中间点
  11378. context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
  11379. context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
  11380. context.lineTo(item[1].x, item[1].y); //收盘中间点
  11381. context.moveTo(item[3].x, item[3].y); //顶点
  11382. } else {
  11383. context.setStrokeStyle(candleOption.color.downLine);
  11384. context.setFillStyle(candleOption.color.downFill);
  11385. context.setLineWidth(1 * opts.pixelRatio);
  11386. context.moveTo(item[3].x, item[3].y); //顶点
  11387. context.lineTo(item[0].x, item[0].y); //开盘中间点
  11388. context.lineTo(item[0].x - eachSpacing / 4, item[0].y); //开盘左侧点
  11389. context.lineTo(item[1].x - eachSpacing / 4, item[1].y); //收盘左侧点
  11390. context.lineTo(item[1].x, item[1].y); //收盘中间点
  11391. context.lineTo(item[2].x, item[2].y); //底点
  11392. context.lineTo(item[1].x, item[1].y); //收盘中间点
  11393. context.lineTo(item[1].x + eachSpacing / 4, item[1].y); //收盘右侧点
  11394. context.lineTo(item[0].x + eachSpacing / 4, item[0].y); //开盘右侧点
  11395. context.lineTo(item[0].x, item[0].y); //开盘中间点
  11396. context.moveTo(item[3].x, item[3].y); //顶点
  11397. }
  11398. context.closePath();
  11399. context.fill();
  11400. context.stroke();
  11401. }
  11402. }
  11403. });
  11404. context.restore();
  11405. return {
  11406. xAxisPoints: xAxisPoints,
  11407. calPoints: calPoints,
  11408. eachSpacing: eachSpacing };
  11409. }
  11410. function drawAreaDataPoints(series, opts, config, context) {
  11411. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  11412. var areaOption = assign({}, {
  11413. type: 'straight',
  11414. opacity: 0.2,
  11415. addLine: false,
  11416. width: 2,
  11417. gradient: false },
  11418. opts.extra.area);
  11419. var xAxisData = opts.chartData.xAxisData,
  11420. xAxisPoints = xAxisData.xAxisPoints,
  11421. eachSpacing = xAxisData.eachSpacing;
  11422. var endY = opts.height - opts.area[2];
  11423. var calPoints = [];
  11424. context.save();
  11425. var leftSpace = 0;
  11426. var rightSpace = opts.width + eachSpacing;
  11427. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11428. context.translate(opts._scrollDistance_, 0);
  11429. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  11430. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  11431. }
  11432. series.forEach(function (eachSeries, seriesIndex) {
  11433. var ranges, minRange, maxRange;
  11434. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11435. minRange = ranges.pop();
  11436. maxRange = ranges.shift();
  11437. var data = eachSeries.data;
  11438. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11439. calPoints.push(points);
  11440. var splitPointList = splitPoints(points);
  11441. for (var i = 0; i < splitPointList.length; i++) {
  11442. var _points2 = splitPointList[i];
  11443. // 绘制区域数
  11444. context.beginPath();
  11445. context.setStrokeStyle(hexToRgb(eachSeries.color, areaOption.opacity));
  11446. if (areaOption.gradient) {
  11447. var gradient = context.createLinearGradient(0, opts.area[0], 0, opts.height - opts.area[2]);
  11448. gradient.addColorStop('0', hexToRgb(eachSeries.color, areaOption.opacity));
  11449. gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
  11450. context.setFillStyle(gradient);
  11451. } else {
  11452. context.setFillStyle(hexToRgb(eachSeries.color, areaOption.opacity));
  11453. }
  11454. context.setLineWidth(areaOption.width * opts.pixelRatio);
  11455. if (_points2.length > 1) {
  11456. var firstPoint = _points2[0];
  11457. var lastPoint = _points2[_points2.length - 1];
  11458. context.moveTo(firstPoint.x, firstPoint.y);
  11459. var startPoint = 0;
  11460. if (areaOption.type === 'curve') {
  11461. for (var j = 0; j < _points2.length; j++) {
  11462. var item = _points2[j];
  11463. if (startPoint == 0 && item.x > leftSpace) {
  11464. context.moveTo(item.x, item.y);
  11465. startPoint = 1;
  11466. }
  11467. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  11468. var ctrlPoint = createCurveControlPoints(_points2, j - 1);
  11469. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  11470. }
  11471. };
  11472. } else {
  11473. for (var _j = 0; _j < _points2.length; _j++) {
  11474. var _item10 = _points2[_j];
  11475. if (startPoint == 0 && _item10.x > leftSpace) {
  11476. context.moveTo(_item10.x, _item10.y);
  11477. startPoint = 1;
  11478. }
  11479. if (_j > 0 && _item10.x > leftSpace && _item10.x < rightSpace) {
  11480. context.lineTo(_item10.x, _item10.y);
  11481. }
  11482. };
  11483. }
  11484. context.lineTo(lastPoint.x, endY);
  11485. context.lineTo(firstPoint.x, endY);
  11486. context.lineTo(firstPoint.x, firstPoint.y);
  11487. } else {
  11488. var _item11 = _points2[0];
  11489. context.moveTo(_item11.x - eachSpacing / 2, _item11.y);
  11490. context.lineTo(_item11.x + eachSpacing / 2, _item11.y);
  11491. context.lineTo(_item11.x + eachSpacing / 2, endY);
  11492. context.lineTo(_item11.x - eachSpacing / 2, endY);
  11493. context.moveTo(_item11.x - eachSpacing / 2, _item11.y);
  11494. }
  11495. context.closePath();
  11496. context.fill();
  11497. //画连线
  11498. if (areaOption.addLine) {
  11499. if (eachSeries.lineType == 'dash') {
  11500. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  11501. dashLength *= opts.pixelRatio;
  11502. context.setLineDash([dashLength, dashLength]);
  11503. }
  11504. context.beginPath();
  11505. context.setStrokeStyle(eachSeries.color);
  11506. context.setLineWidth(areaOption.width * opts.pixelRatio);
  11507. if (_points2.length === 1) {
  11508. context.moveTo(_points2[0].x, _points2[0].y);
  11509. context.arc(_points2[0].x, _points2[0].y, 1, 0, 2 * Math.PI);
  11510. } else {
  11511. context.moveTo(_points2[0].x, _points2[0].y);
  11512. var _startPoint = 0;
  11513. if (areaOption.type === 'curve') {
  11514. for (var _j2 = 0; _j2 < _points2.length; _j2++) {
  11515. var _item12 = _points2[_j2];
  11516. if (_startPoint == 0 && _item12.x > leftSpace) {
  11517. context.moveTo(_item12.x, _item12.y);
  11518. _startPoint = 1;
  11519. }
  11520. if (_j2 > 0 && _item12.x > leftSpace && _item12.x < rightSpace) {
  11521. var _ctrlPoint = createCurveControlPoints(_points2, _j2 - 1);
  11522. context.bezierCurveTo(_ctrlPoint.ctrA.x, _ctrlPoint.ctrA.y, _ctrlPoint.ctrB.x, _ctrlPoint.ctrB.y, _item12.x, _item12.y);
  11523. }
  11524. };
  11525. } else {
  11526. for (var _j3 = 0; _j3 < _points2.length; _j3++) {
  11527. var _item13 = _points2[_j3];
  11528. if (_startPoint == 0 && _item13.x > leftSpace) {
  11529. context.moveTo(_item13.x, _item13.y);
  11530. _startPoint = 1;
  11531. }
  11532. if (_j3 > 0 && _item13.x > leftSpace && _item13.x < rightSpace) {
  11533. context.lineTo(_item13.x, _item13.y);
  11534. }
  11535. };
  11536. }
  11537. context.moveTo(_points2[0].x, _points2[0].y);
  11538. }
  11539. context.stroke();
  11540. context.setLineDash([]);
  11541. }
  11542. }
  11543. //画点
  11544. if (opts.dataPointShape !== false) {
  11545. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  11546. }
  11547. });
  11548. if (opts.dataLabel !== false && process === 1) {
  11549. series.forEach(function (eachSeries, seriesIndex) {
  11550. var ranges, minRange, maxRange;
  11551. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11552. minRange = ranges.pop();
  11553. maxRange = ranges.shift();
  11554. var data = eachSeries.data;
  11555. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11556. drawPointText(points, eachSeries, config, context);
  11557. });
  11558. }
  11559. context.restore();
  11560. return {
  11561. xAxisPoints: xAxisPoints,
  11562. calPoints: calPoints,
  11563. eachSpacing: eachSpacing };
  11564. }
  11565. function drawLineDataPoints(series, opts, config, context) {
  11566. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  11567. var lineOption = assign({}, {
  11568. type: 'straight',
  11569. width: 2 },
  11570. opts.extra.line);
  11571. lineOption.width *= opts.pixelRatio;
  11572. var xAxisData = opts.chartData.xAxisData,
  11573. xAxisPoints = xAxisData.xAxisPoints,
  11574. eachSpacing = xAxisData.eachSpacing;
  11575. var calPoints = [];
  11576. context.save();
  11577. var leftSpace = 0;
  11578. var rightSpace = opts.width + eachSpacing;
  11579. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11580. context.translate(opts._scrollDistance_, 0);
  11581. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  11582. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  11583. }
  11584. series.forEach(function (eachSeries, seriesIndex) {
  11585. var ranges, minRange, maxRange;
  11586. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11587. minRange = ranges.pop();
  11588. maxRange = ranges.shift();
  11589. var data = eachSeries.data;
  11590. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11591. calPoints.push(points);
  11592. var splitPointList = splitPoints(points);
  11593. if (eachSeries.lineType == 'dash') {
  11594. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  11595. dashLength *= opts.pixelRatio;
  11596. context.setLineDash([dashLength, dashLength]);
  11597. }
  11598. context.beginPath();
  11599. context.setStrokeStyle(eachSeries.color);
  11600. context.setLineWidth(lineOption.width);
  11601. splitPointList.forEach(function (points, index) {
  11602. if (points.length === 1) {
  11603. context.moveTo(points[0].x, points[0].y);
  11604. context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
  11605. } else {
  11606. context.moveTo(points[0].x, points[0].y);
  11607. var startPoint = 0;
  11608. if (lineOption.type === 'curve') {
  11609. for (var j = 0; j < points.length; j++) {
  11610. var item = points[j];
  11611. if (startPoint == 0 && item.x > leftSpace) {
  11612. context.moveTo(item.x, item.y);
  11613. startPoint = 1;
  11614. }
  11615. if (j > 0 && item.x > leftSpace && item.x < rightSpace) {
  11616. var ctrlPoint = createCurveControlPoints(points, j - 1);
  11617. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, item.x, item.y);
  11618. }
  11619. };
  11620. }
  11621. if (lineOption.type === 'straight') {
  11622. for (var _j4 = 0; _j4 < points.length; _j4++) {
  11623. var _item14 = points[_j4];
  11624. if (startPoint == 0 && _item14.x > leftSpace) {
  11625. context.moveTo(_item14.x, _item14.y);
  11626. startPoint = 1;
  11627. }
  11628. if (_j4 > 0 && _item14.x > leftSpace && _item14.x < rightSpace) {
  11629. context.lineTo(_item14.x, _item14.y);
  11630. }
  11631. };
  11632. }
  11633. if (lineOption.type === 'step') {
  11634. for (var _j5 = 0; _j5 < points.length; _j5++) {
  11635. var _item15 = points[_j5];
  11636. if (startPoint == 0 && _item15.x > leftSpace) {
  11637. context.moveTo(_item15.x, _item15.y);
  11638. startPoint = 1;
  11639. }
  11640. if (_j5 > 0 && _item15.x > leftSpace && _item15.x < rightSpace) {
  11641. context.lineTo(_item15.x, points[_j5 - 1].y);
  11642. context.lineTo(_item15.x, _item15.y);
  11643. }
  11644. };
  11645. }
  11646. context.moveTo(points[0].x, points[0].y);
  11647. }
  11648. });
  11649. context.stroke();
  11650. context.setLineDash([]);
  11651. if (opts.dataPointShape !== false) {
  11652. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  11653. }
  11654. });
  11655. if (opts.dataLabel !== false && process === 1) {
  11656. series.forEach(function (eachSeries, seriesIndex) {
  11657. var ranges, minRange, maxRange;
  11658. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11659. minRange = ranges.pop();
  11660. maxRange = ranges.shift();
  11661. var data = eachSeries.data;
  11662. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11663. drawPointText(points, eachSeries, config, context);
  11664. });
  11665. }
  11666. context.restore();
  11667. return {
  11668. xAxisPoints: xAxisPoints,
  11669. calPoints: calPoints,
  11670. eachSpacing: eachSpacing };
  11671. }
  11672. function drawMixDataPoints(series, opts, config, context) {
  11673. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  11674. var xAxisData = opts.chartData.xAxisData,
  11675. xAxisPoints = xAxisData.xAxisPoints,
  11676. eachSpacing = xAxisData.eachSpacing;
  11677. var endY = opts.height - opts.area[2];
  11678. var calPoints = [];
  11679. var columnIndex = 0;
  11680. var columnLength = 0;
  11681. series.forEach(function (eachSeries, seriesIndex) {
  11682. if (eachSeries.type == 'column') {
  11683. columnLength += 1;
  11684. }
  11685. });
  11686. context.save();
  11687. var leftNum = -2;
  11688. var rightNum = xAxisPoints.length + 2;
  11689. var leftSpace = 0;
  11690. var rightSpace = opts.width + eachSpacing;
  11691. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11692. context.translate(opts._scrollDistance_, 0);
  11693. leftNum = Math.floor(-opts._scrollDistance_ / eachSpacing) - 2;
  11694. rightNum = leftNum + opts.xAxis.itemCount + 4;
  11695. leftSpace = -opts._scrollDistance_ - eachSpacing + opts.area[3];
  11696. rightSpace = leftSpace + (opts.xAxis.itemCount + 4) * eachSpacing;
  11697. }
  11698. series.forEach(function (eachSeries, seriesIndex) {
  11699. var ranges, minRange, maxRange;
  11700. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11701. minRange = ranges.pop();
  11702. maxRange = ranges.shift();
  11703. var data = eachSeries.data;
  11704. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11705. calPoints.push(points);
  11706. // 绘制柱状数据图
  11707. if (eachSeries.type == 'column') {
  11708. points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
  11709. for (var i = 0; i < points.length; i++) {
  11710. var item = points[i];
  11711. if (item !== null && i > leftNum && i < rightNum) {
  11712. context.beginPath();
  11713. context.setStrokeStyle(item.color || eachSeries.color);
  11714. context.setLineWidth(1);
  11715. context.setFillStyle(item.color || eachSeries.color);
  11716. var startX = item.x - item.width / 2;
  11717. var height = opts.height - item.y - opts.area[2];
  11718. context.moveTo(startX, item.y);
  11719. context.moveTo(startX, item.y);
  11720. context.lineTo(startX + item.width - 2, item.y);
  11721. context.lineTo(startX + item.width - 2, opts.height - opts.area[2]);
  11722. context.lineTo(startX, opts.height - opts.area[2]);
  11723. context.lineTo(startX, item.y);
  11724. context.closePath();
  11725. context.stroke();
  11726. context.fill();
  11727. context.closePath();
  11728. context.fill();
  11729. }
  11730. }
  11731. columnIndex += 1;
  11732. }
  11733. //绘制区域图数据
  11734. if (eachSeries.type == 'area') {
  11735. var _splitPointList = splitPoints(points);
  11736. for (var _i16 = 0; _i16 < _splitPointList.length; _i16++) {
  11737. var _points3 = _splitPointList[_i16];
  11738. // 绘制区域数据
  11739. context.beginPath();
  11740. context.setStrokeStyle(eachSeries.color);
  11741. context.setFillStyle(hexToRgb(eachSeries.color, 0.2));
  11742. context.setLineWidth(2 * opts.pixelRatio);
  11743. if (_points3.length > 1) {
  11744. var firstPoint = _points3[0];
  11745. var lastPoint = _points3[_points3.length - 1];
  11746. context.moveTo(firstPoint.x, firstPoint.y);
  11747. var startPoint = 0;
  11748. if (eachSeries.style === 'curve') {
  11749. for (var j = 0; j < _points3.length; j++) {
  11750. var _item16 = _points3[j];
  11751. if (startPoint == 0 && _item16.x > leftSpace) {
  11752. context.moveTo(_item16.x, _item16.y);
  11753. startPoint = 1;
  11754. }
  11755. if (j > 0 && _item16.x > leftSpace && _item16.x < rightSpace) {
  11756. var ctrlPoint = createCurveControlPoints(_points3, j - 1);
  11757. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, _item16.x, _item16.y);
  11758. }
  11759. };
  11760. } else {
  11761. for (var _j6 = 0; _j6 < _points3.length; _j6++) {
  11762. var _item17 = _points3[_j6];
  11763. if (startPoint == 0 && _item17.x > leftSpace) {
  11764. context.moveTo(_item17.x, _item17.y);
  11765. startPoint = 1;
  11766. }
  11767. if (_j6 > 0 && _item17.x > leftSpace && _item17.x < rightSpace) {
  11768. context.lineTo(_item17.x, _item17.y);
  11769. }
  11770. };
  11771. }
  11772. context.lineTo(lastPoint.x, endY);
  11773. context.lineTo(firstPoint.x, endY);
  11774. context.lineTo(firstPoint.x, firstPoint.y);
  11775. } else {
  11776. var _item18 = _points3[0];
  11777. context.moveTo(_item18.x - eachSpacing / 2, _item18.y);
  11778. context.lineTo(_item18.x + eachSpacing / 2, _item18.y);
  11779. context.lineTo(_item18.x + eachSpacing / 2, endY);
  11780. context.lineTo(_item18.x - eachSpacing / 2, endY);
  11781. context.moveTo(_item18.x - eachSpacing / 2, _item18.y);
  11782. }
  11783. context.closePath();
  11784. context.fill();
  11785. }
  11786. }
  11787. // 绘制折线数据图
  11788. if (eachSeries.type == 'line') {
  11789. var splitPointList = splitPoints(points);
  11790. splitPointList.forEach(function (points, index) {
  11791. if (eachSeries.lineType == 'dash') {
  11792. var dashLength = eachSeries.dashLength ? eachSeries.dashLength : 8;
  11793. dashLength *= opts.pixelRatio;
  11794. context.setLineDash([dashLength, dashLength]);
  11795. }
  11796. context.beginPath();
  11797. context.setStrokeStyle(eachSeries.color);
  11798. context.setLineWidth(2 * opts.pixelRatio);
  11799. if (points.length === 1) {
  11800. context.moveTo(points[0].x, points[0].y);
  11801. context.arc(points[0].x, points[0].y, 1, 0, 2 * Math.PI);
  11802. } else {
  11803. context.moveTo(points[0].x, points[0].y);
  11804. var _startPoint2 = 0;
  11805. if (eachSeries.style == 'curve') {
  11806. for (var _j7 = 0; _j7 < points.length; _j7++) {
  11807. var _item19 = points[_j7];
  11808. if (_startPoint2 == 0 && _item19.x > leftSpace) {
  11809. context.moveTo(_item19.x, _item19.y);
  11810. _startPoint2 = 1;
  11811. }
  11812. if (_j7 > 0 && _item19.x > leftSpace && _item19.x < rightSpace) {
  11813. var ctrlPoint = createCurveControlPoints(points, _j7 - 1);
  11814. context.bezierCurveTo(ctrlPoint.ctrA.x, ctrlPoint.ctrA.y, ctrlPoint.ctrB.x, ctrlPoint.ctrB.y, _item19.x, _item19.y);
  11815. }
  11816. }
  11817. } else {
  11818. for (var _j8 = 0; _j8 < points.length; _j8++) {
  11819. var _item20 = points[_j8];
  11820. if (_startPoint2 == 0 && _item20.x > leftSpace) {
  11821. context.moveTo(_item20.x, _item20.y);
  11822. _startPoint2 = 1;
  11823. }
  11824. if (_j8 > 0 && _item20.x > leftSpace && _item20.x < rightSpace) {
  11825. context.lineTo(_item20.x, _item20.y);
  11826. }
  11827. }
  11828. }
  11829. context.moveTo(points[0].x, points[0].y);
  11830. }
  11831. context.stroke();
  11832. context.setLineDash([]);
  11833. });
  11834. }
  11835. // 绘制点数据图
  11836. if (eachSeries.type == 'point') {
  11837. eachSeries.addPoint = true;
  11838. }
  11839. if (eachSeries.addPoint == true && eachSeries.type !== 'column') {
  11840. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  11841. }
  11842. });
  11843. if (opts.dataLabel !== false && process === 1) {
  11844. var columnIndex = 0;
  11845. series.forEach(function (eachSeries, seriesIndex) {
  11846. var ranges, minRange, maxRange;
  11847. ranges = [].concat(opts.chartData.yAxisData.ranges[eachSeries.index]);
  11848. minRange = ranges.pop();
  11849. maxRange = ranges.shift();
  11850. var data = eachSeries.data;
  11851. var points = getDataPoints(data, minRange, maxRange, xAxisPoints, eachSpacing, opts, config, process);
  11852. if (eachSeries.type !== 'column') {
  11853. drawPointText(points, eachSeries, config, context);
  11854. } else {
  11855. points = fixColumeData(points, eachSpacing, columnLength, columnIndex, config, opts);
  11856. drawPointText(points, eachSeries, config, context);
  11857. columnIndex += 1;
  11858. }
  11859. });
  11860. }
  11861. context.restore();
  11862. return {
  11863. xAxisPoints: xAxisPoints,
  11864. calPoints: calPoints,
  11865. eachSpacing: eachSpacing };
  11866. }
  11867. function drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints) {
  11868. var toolTipOption = opts.extra.tooltip || {};
  11869. if (toolTipOption.horizentalLine && opts.tooltip && process === 1 && (opts.type == 'line' || opts.type == 'area' || opts.type == 'column' || opts.type == 'candle' || opts.type == 'mix')) {
  11870. drawToolTipHorizentalLine(opts, config, context, eachSpacing, xAxisPoints);
  11871. }
  11872. context.save();
  11873. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0 && opts.enableScroll === true) {
  11874. context.translate(opts._scrollDistance_, 0);
  11875. }
  11876. if (opts.tooltip && opts.tooltip.textList && opts.tooltip.textList.length && process === 1) {
  11877. drawToolTip(opts.tooltip.textList, opts.tooltip.offset, opts, config, context, eachSpacing, xAxisPoints);
  11878. }
  11879. context.restore();
  11880. }
  11881. function drawXAxis(categories, opts, config, context) {
  11882. var xAxisData = opts.chartData.xAxisData,
  11883. xAxisPoints = xAxisData.xAxisPoints,
  11884. startX = xAxisData.startX,
  11885. endX = xAxisData.endX,
  11886. eachSpacing = xAxisData.eachSpacing;
  11887. var boundaryGap = 'center';
  11888. if (opts.type == 'line' || opts.type == 'area') {
  11889. boundaryGap = opts.xAxis.boundaryGap;
  11890. }
  11891. var startY = opts.height - opts.area[2];
  11892. var endY = opts.area[0];
  11893. //绘制滚动条
  11894. if (opts.enableScroll && opts.xAxis.scrollShow) {
  11895. var scrollY = opts.height - opts.area[2] + config.xAxisHeight;
  11896. var scrollScreenWidth = endX - startX;
  11897. var scrollTotalWidth = eachSpacing * (xAxisPoints.length - 1);
  11898. var scrollWidth = scrollScreenWidth * scrollScreenWidth / scrollTotalWidth;
  11899. var scrollLeft = 0;
  11900. if (opts._scrollDistance_) {
  11901. scrollLeft = -opts._scrollDistance_ * scrollScreenWidth / scrollTotalWidth;
  11902. }
  11903. context.beginPath();
  11904. context.setLineCap('round');
  11905. context.setLineWidth(6 * opts.pixelRatio);
  11906. context.setStrokeStyle(opts.xAxis.scrollBackgroundColor || "#EFEBEF");
  11907. context.moveTo(startX, scrollY);
  11908. context.lineTo(endX, scrollY);
  11909. context.stroke();
  11910. context.closePath();
  11911. context.beginPath();
  11912. context.setLineCap('round');
  11913. context.setLineWidth(6 * opts.pixelRatio);
  11914. context.setStrokeStyle(opts.xAxis.scrollColor || "#A6A6A6");
  11915. context.moveTo(startX + scrollLeft, scrollY);
  11916. context.lineTo(startX + scrollLeft + scrollWidth, scrollY);
  11917. context.stroke();
  11918. context.closePath();
  11919. context.setLineCap('butt');
  11920. }
  11921. context.save();
  11922. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
  11923. context.translate(opts._scrollDistance_, 0);
  11924. }
  11925. //绘制X轴刻度线
  11926. if (opts.xAxis.calibration === true) {
  11927. context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
  11928. context.setLineCap('butt');
  11929. context.setLineWidth(1 * opts.pixelRatio);
  11930. xAxisPoints.forEach(function (item, index) {
  11931. if (index > 0) {
  11932. context.beginPath();
  11933. context.moveTo(item - eachSpacing / 2, startY);
  11934. context.lineTo(item - eachSpacing / 2, startY + 3 * opts.pixelRatio);
  11935. context.closePath();
  11936. context.stroke();
  11937. }
  11938. });
  11939. }
  11940. //绘制X轴网格
  11941. if (opts.xAxis.disableGrid !== true) {
  11942. context.setStrokeStyle(opts.xAxis.gridColor || "#cccccc");
  11943. context.setLineCap('butt');
  11944. context.setLineWidth(1 * opts.pixelRatio);
  11945. if (opts.xAxis.gridType == 'dash') {
  11946. context.setLineDash([opts.xAxis.dashLength, opts.xAxis.dashLength]);
  11947. }
  11948. opts.xAxis.gridEval = opts.xAxis.gridEval || 1;
  11949. xAxisPoints.forEach(function (item, index) {
  11950. if (index % opts.xAxis.gridEval == 0) {
  11951. context.beginPath();
  11952. context.moveTo(item, startY);
  11953. context.lineTo(item, endY);
  11954. context.stroke();
  11955. }
  11956. });
  11957. context.setLineDash([]);
  11958. }
  11959. //绘制X轴文案
  11960. if (opts.xAxis.disabled !== true) {
  11961. // 对X轴列表做抽稀处理
  11962. //默认全部显示X轴标签
  11963. var maxXAxisListLength = categories.length;
  11964. //如果设置了X轴单屏数量
  11965. if (opts.xAxis.labelCount) {
  11966. //如果设置X轴密度
  11967. if (opts.xAxis.itemCount) {
  11968. maxXAxisListLength = Math.ceil(categories.length / opts.xAxis.itemCount * opts.xAxis.labelCount);
  11969. } else {
  11970. maxXAxisListLength = opts.xAxis.labelCount;
  11971. }
  11972. maxXAxisListLength -= 1;
  11973. }
  11974. var ratio = Math.ceil(categories.length / maxXAxisListLength);
  11975. var newCategories = [];
  11976. var cgLength = categories.length;
  11977. for (var i = 0; i < cgLength; i++) {
  11978. if (i % ratio !== 0) {
  11979. newCategories.push("");
  11980. } else {
  11981. newCategories.push(categories[i]);
  11982. }
  11983. }
  11984. newCategories[cgLength - 1] = categories[cgLength - 1];
  11985. var xAxisFontSize = opts.xAxis.fontSize || config.fontSize;
  11986. if (config._xAxisTextAngle_ === 0) {
  11987. newCategories.forEach(function (item, index) {
  11988. var offset = -measureText(String(item), xAxisFontSize) / 2;
  11989. if (boundaryGap == 'center') {
  11990. offset += eachSpacing / 2;
  11991. }
  11992. var scrollHeight = 0;
  11993. if (opts.xAxis.scrollShow) {
  11994. scrollHeight = 6 * opts.pixelRatio;
  11995. }
  11996. context.beginPath();
  11997. context.setFontSize(xAxisFontSize);
  11998. context.setFillStyle(opts.xAxis.fontColor || '#666666');
  11999. context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + (config.xAxisHeight - scrollHeight - xAxisFontSize) / 2);
  12000. context.closePath();
  12001. context.stroke();
  12002. });
  12003. } else {
  12004. newCategories.forEach(function (item, index) {
  12005. context.save();
  12006. context.beginPath();
  12007. context.setFontSize(xAxisFontSize);
  12008. context.setFillStyle(opts.xAxis.fontColor || '#666666');
  12009. var textWidth = measureText(String(item), xAxisFontSize);
  12010. var offset = -textWidth;
  12011. if (boundaryGap == 'center') {
  12012. offset += eachSpacing / 2;
  12013. }
  12014. var _calRotateTranslate = calRotateTranslate(xAxisPoints[index] + eachSpacing / 2, startY + xAxisFontSize / 2 + 5, opts.height),
  12015. transX = _calRotateTranslate.transX,
  12016. transY = _calRotateTranslate.transY;
  12017. context.rotate(-1 * config._xAxisTextAngle_);
  12018. context.translate(transX, transY);
  12019. context.fillText(String(item), xAxisPoints[index] + offset, startY + xAxisFontSize + 5);
  12020. context.closePath();
  12021. context.stroke();
  12022. context.restore();
  12023. });
  12024. }
  12025. }
  12026. context.restore();
  12027. //绘制X轴轴线
  12028. if (opts.xAxis.axisLine) {
  12029. context.beginPath();
  12030. context.setStrokeStyle(opts.xAxis.axisLineColor);
  12031. context.setLineWidth(1 * opts.pixelRatio);
  12032. context.moveTo(startX, opts.height - opts.area[2]);
  12033. context.lineTo(endX, opts.height - opts.area[2]);
  12034. context.stroke();
  12035. }
  12036. }
  12037. function drawYAxisGrid(categories, opts, config, context) {
  12038. if (opts.yAxis.disableGrid === true) {
  12039. return;
  12040. }
  12041. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  12042. var eachSpacing = spacingValid / opts.yAxis.splitNumber;
  12043. var startX = opts.area[3];
  12044. var xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
  12045. xAxiseachSpacing = opts.chartData.xAxisData.eachSpacing;
  12046. var TotalWidth = xAxiseachSpacing * (xAxisPoints.length - 1);
  12047. var endX = startX + TotalWidth;
  12048. var points = [];
  12049. for (var i = 0; i < opts.yAxis.splitNumber + 1; i++) {
  12050. points.push(opts.height - opts.area[2] - eachSpacing * i);
  12051. }
  12052. context.save();
  12053. if (opts._scrollDistance_ && opts._scrollDistance_ !== 0) {
  12054. context.translate(opts._scrollDistance_, 0);
  12055. }
  12056. if (opts.yAxis.gridType == 'dash') {
  12057. context.setLineDash([opts.yAxis.dashLength, opts.yAxis.dashLength]);
  12058. }
  12059. context.setStrokeStyle(opts.yAxis.gridColor);
  12060. context.setLineWidth(1 * opts.pixelRatio);
  12061. points.forEach(function (item, index) {
  12062. context.beginPath();
  12063. context.moveTo(startX, item);
  12064. context.lineTo(endX, item);
  12065. context.stroke();
  12066. });
  12067. context.setLineDash([]);
  12068. context.restore();
  12069. }
  12070. function drawYAxis(series, opts, config, context) {
  12071. if (opts.yAxis.disabled === true) {
  12072. return;
  12073. }
  12074. var spacingValid = opts.height - opts.area[0] - opts.area[2];
  12075. var eachSpacing = spacingValid / opts.yAxis.splitNumber;
  12076. var startX = opts.area[3];
  12077. var endX = opts.width - opts.area[1];
  12078. var endY = opts.height - opts.area[2];
  12079. var fillEndY = endY + config.xAxisHeight;
  12080. if (opts.xAxis.scrollShow) {
  12081. fillEndY -= 3 * opts.pixelRatio;
  12082. }
  12083. if (opts.xAxis.rotateLabel) {
  12084. fillEndY = opts.height - opts.area[2] + 3;
  12085. }
  12086. // set YAxis background
  12087. context.beginPath();
  12088. context.setFillStyle(opts.background || '#ffffff');
  12089. if (opts._scrollDistance_ < 0) {
  12090. context.fillRect(0, 0, startX, fillEndY);
  12091. }
  12092. if (opts.enableScroll == true) {
  12093. context.fillRect(endX, 0, opts.width, fillEndY);
  12094. }
  12095. context.closePath();
  12096. context.stroke();
  12097. var points = [];
  12098. for (var i = 0; i <= opts.yAxis.splitNumber; i++) {
  12099. points.push(opts.area[0] + eachSpacing * i);
  12100. }
  12101. var tStartLeft = opts.area[3];
  12102. var tStartRight = opts.width - opts.area[1];var _loop4 = function _loop4(
  12103. _i17) {
  12104. var yData = opts.yAxis.data[_i17];
  12105. if (yData.disabled !== true) {
  12106. var rangesFormat = opts.chartData.yAxisData.rangesFormat[_i17];
  12107. var yAxisFontSize = yData.fontSize || config.fontSize;
  12108. var yAxisWidth = opts.chartData.yAxisData.yAxisWidth[_i17];
  12109. //画Y轴刻度及文案
  12110. rangesFormat.forEach(function (item, index) {
  12111. var pos = points[index] ? points[index] : endY;
  12112. context.beginPath();
  12113. context.setFontSize(yAxisFontSize);
  12114. context.setLineWidth(1 * opts.pixelRatio);
  12115. context.setStrokeStyle(yData.axisLineColor || '#cccccc');
  12116. context.setFillStyle(yData.fontColor || '#666666');
  12117. if (yAxisWidth.position == 'left') {
  12118. context.fillText(String(item), tStartLeft - yAxisWidth.width, pos + yAxisFontSize / 2);
  12119. //画刻度线
  12120. if (yData.calibration == true) {
  12121. context.moveTo(tStartLeft, pos);
  12122. context.lineTo(tStartLeft - 3 * opts.pixelRatio, pos);
  12123. }
  12124. } else {
  12125. context.fillText(String(item), tStartRight + 4 * opts.pixelRatio, pos + yAxisFontSize / 2);
  12126. //画刻度线
  12127. if (yData.calibration == true) {
  12128. context.moveTo(tStartRight, pos);
  12129. context.lineTo(tStartRight + 3 * opts.pixelRatio, pos);
  12130. }
  12131. }
  12132. context.closePath();
  12133. context.stroke();
  12134. });
  12135. //画Y轴轴线
  12136. if (yData.axisLine !== false) {
  12137. context.beginPath();
  12138. context.setStrokeStyle(yData.axisLineColor || '#cccccc');
  12139. context.setLineWidth(1 * opts.pixelRatio);
  12140. if (yAxisWidth.position == 'left') {
  12141. context.moveTo(tStartLeft, opts.height - opts.area[2]);
  12142. context.lineTo(tStartLeft, opts.area[0]);
  12143. } else {
  12144. context.moveTo(tStartRight, opts.height - opts.area[2]);
  12145. context.lineTo(tStartRight, opts.area[0]);
  12146. }
  12147. context.stroke();
  12148. }
  12149. //画Y轴标题
  12150. if (opts.yAxis.showTitle) {
  12151. var titleFontSize = yData.titleFontSize || config.fontSize;
  12152. var title = yData.title;
  12153. context.beginPath();
  12154. context.setFontSize(titleFontSize);
  12155. context.setFillStyle(yData.titleFontColor || '#666666');
  12156. if (yAxisWidth.position == 'left') {
  12157. context.fillText(title, tStartLeft - measureText(title, titleFontSize) / 2, opts.area[0] - 10 * opts.pixelRatio);
  12158. } else {
  12159. context.fillText(title, tStartRight - measureText(title, titleFontSize) / 2, opts.area[0] - 10 * opts.pixelRatio);
  12160. }
  12161. context.closePath();
  12162. context.stroke();
  12163. }
  12164. if (yAxisWidth.position == 'left') {
  12165. tStartLeft -= yAxisWidth.width + opts.yAxis.padding;
  12166. } else {
  12167. tStartRight += yAxisWidth.width + opts.yAxis.padding;
  12168. }
  12169. }};for (var _i17 = 0; _i17 < opts.yAxis.data.length; _i17++) {_loop4(_i17);
  12170. }
  12171. }
  12172. function drawLegend(series, opts, config, context, chartData) {
  12173. if (opts.legend.show === false) {
  12174. return;
  12175. }
  12176. var legendData = chartData.legendData;
  12177. var legendList = legendData.points;
  12178. var legendArea = legendData.area;
  12179. var padding = opts.legend.padding;
  12180. var fontSize = opts.legend.fontSize;
  12181. var shapeWidth = 15 * opts.pixelRatio;
  12182. var shapeRight = 5 * opts.pixelRatio;
  12183. var itemGap = opts.legend.itemGap;
  12184. var lineHeight = Math.max(opts.legend.lineHeight * opts.pixelRatio, fontSize);
  12185. //画背景及边框
  12186. context.beginPath();
  12187. context.setLineWidth(opts.legend.borderWidth);
  12188. context.setStrokeStyle(opts.legend.borderColor);
  12189. context.setFillStyle(opts.legend.backgroundColor);
  12190. context.moveTo(legendArea.start.x, legendArea.start.y);
  12191. context.rect(legendArea.start.x, legendArea.start.y, legendArea.width, legendArea.height);
  12192. context.closePath();
  12193. context.fill();
  12194. context.stroke();
  12195. legendList.forEach(function (itemList, listIndex) {
  12196. var width = 0;
  12197. var height = 0;
  12198. width = legendData.widthArr[listIndex];
  12199. height = legendData.heightArr[listIndex];
  12200. var startX = 0;
  12201. var startY = 0;
  12202. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  12203. startX = legendArea.start.x + (legendArea.width - width) / 2;
  12204. startY = legendArea.start.y + padding + listIndex * lineHeight;
  12205. } else {
  12206. if (listIndex == 0) {
  12207. width = 0;
  12208. } else {
  12209. width = legendData.widthArr[listIndex - 1];
  12210. }
  12211. startX = legendArea.start.x + padding + width;
  12212. startY = legendArea.start.y + padding + (legendArea.height - height) / 2;
  12213. }
  12214. context.setFontSize(config.fontSize);
  12215. for (var i = 0; i < itemList.length; i++) {
  12216. var item = itemList[i];
  12217. item.area = [0, 0, 0, 0];
  12218. item.area[0] = startX;
  12219. item.area[1] = startY;
  12220. item.area[3] = startY + lineHeight;
  12221. context.beginPath();
  12222. context.setLineWidth(1 * opts.pixelRatio);
  12223. context.setStrokeStyle(item.show ? item.color : opts.legend.hiddenColor);
  12224. context.setFillStyle(item.show ? item.color : opts.legend.hiddenColor);
  12225. switch (item.legendShape) {
  12226. case 'line':
  12227. context.moveTo(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio);
  12228. context.fillRect(startX, startY + 0.5 * lineHeight - 2 * opts.pixelRatio, 15 * opts.pixelRatio, 4 * opts.pixelRatio);
  12229. break;
  12230. case 'triangle':
  12231. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12232. context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  12233. context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  12234. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12235. break;
  12236. case 'diamond':
  12237. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12238. context.lineTo(startX + 2.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  12239. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight + 5 * opts.pixelRatio);
  12240. context.lineTo(startX + 12.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  12241. context.lineTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12242. break;
  12243. case 'circle':
  12244. context.moveTo(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight);
  12245. context.arc(startX + 7.5 * opts.pixelRatio, startY + 0.5 * lineHeight, 5 * opts.pixelRatio, 0, 2 * Math.PI);
  12246. break;
  12247. case 'rect':
  12248. context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12249. context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);
  12250. break;
  12251. default:
  12252. context.moveTo(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio);
  12253. context.fillRect(startX, startY + 0.5 * lineHeight - 5 * opts.pixelRatio, 15 * opts.pixelRatio, 10 * opts.pixelRatio);}
  12254. context.closePath();
  12255. context.fill();
  12256. context.stroke();
  12257. startX += shapeWidth + shapeRight;
  12258. var fontTrans = 0.5 * lineHeight + 0.5 * fontSize - 2;
  12259. context.beginPath();
  12260. context.setFontSize(fontSize);
  12261. context.setFillStyle(item.show ? opts.legend.fontColor : opts.legend.hiddenColor);
  12262. context.fillText(item.name, startX, startY + fontTrans);
  12263. context.closePath();
  12264. context.stroke();
  12265. if (opts.legend.position == 'top' || opts.legend.position == 'bottom') {
  12266. startX += measureText(item.name, fontSize) + itemGap;
  12267. item.area[2] = startX;
  12268. } else {
  12269. item.area[2] = startX + measureText(item.name, fontSize) + itemGap;;
  12270. startX -= shapeWidth + shapeRight;
  12271. startY += lineHeight;
  12272. }
  12273. }
  12274. });
  12275. }
  12276. function drawPieDataPoints(series, opts, config, context) {
  12277. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  12278. var pieOption = assign({}, {
  12279. activeOpacity: 0.5,
  12280. activeRadius: 10 * opts.pixelRatio,
  12281. offsetAngle: 0,
  12282. labelWidth: 15 * opts.pixelRatio,
  12283. ringWidth: 0,
  12284. border: false,
  12285. borderWidth: 2,
  12286. borderColor: '#FFFFFF' },
  12287. opts.extra.pie);
  12288. var centerPosition = {
  12289. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  12290. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  12291. if (config.pieChartLinePadding == 0) {
  12292. config.pieChartLinePadding = pieOption.activeRadius;
  12293. }
  12294. 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);
  12295. series = getPieDataPoints(series, radius, process);
  12296. var activeRadius = pieOption.activeRadius;
  12297. series = series.map(function (eachSeries) {
  12298. eachSeries._start_ += pieOption.offsetAngle * Math.PI / 180;
  12299. return eachSeries;
  12300. });
  12301. series.forEach(function (eachSeries, seriesIndex) {
  12302. if (opts.tooltip) {
  12303. if (opts.tooltip.index == seriesIndex) {
  12304. context.beginPath();
  12305. context.setFillStyle(hexToRgb(eachSeries.color, opts.extra.pie.activeOpacity || 0.5));
  12306. context.moveTo(centerPosition.x, centerPosition.y);
  12307. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_ + activeRadius, eachSeries._start_,
  12308. eachSeries._start_ + 2 *
  12309. eachSeries._proportion_ * Math.PI);
  12310. context.closePath();
  12311. context.fill();
  12312. }
  12313. }
  12314. context.beginPath();
  12315. context.setLineWidth(pieOption.borderWidth * opts.pixelRatio);
  12316. context.lineJoin = "round";
  12317. context.setStrokeStyle(pieOption.borderColor);
  12318. context.setFillStyle(eachSeries.color);
  12319. context.moveTo(centerPosition.x, centerPosition.y);
  12320. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 * eachSeries._proportion_ * Math.PI);
  12321. context.closePath();
  12322. context.fill();
  12323. if (pieOption.border == true) {
  12324. context.stroke();
  12325. }
  12326. });
  12327. if (opts.type === 'ring') {
  12328. var innerPieWidth = radius * 0.6;
  12329. if (typeof opts.extra.pie.ringWidth === 'number' && opts.extra.pie.ringWidth > 0) {
  12330. innerPieWidth = Math.max(0, radius - opts.extra.pie.ringWidth);
  12331. }
  12332. context.beginPath();
  12333. context.setFillStyle(opts.background || '#ffffff');
  12334. context.moveTo(centerPosition.x, centerPosition.y);
  12335. context.arc(centerPosition.x, centerPosition.y, innerPieWidth, 0, 2 * Math.PI);
  12336. context.closePath();
  12337. context.fill();
  12338. }
  12339. if (opts.dataLabel !== false && process === 1) {
  12340. var valid = false;
  12341. for (var i = 0, len = series.length; i < len; i++) {
  12342. if (series[i].data > 0) {
  12343. valid = true;
  12344. break;
  12345. }
  12346. }
  12347. if (valid) {
  12348. drawPieText(series, opts, config, context, radius, centerPosition);
  12349. }
  12350. }
  12351. if (process === 1 && opts.type === 'ring') {
  12352. drawRingTitle(opts, config, context, centerPosition);
  12353. }
  12354. return {
  12355. center: centerPosition,
  12356. radius: radius,
  12357. series: series };
  12358. }
  12359. function drawRoseDataPoints(series, opts, config, context) {
  12360. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  12361. var roseOption = assign({}, {
  12362. type: 'area',
  12363. activeOpacity: 0.5,
  12364. activeRadius: 10 * opts.pixelRatio,
  12365. offsetAngle: 0,
  12366. labelWidth: 15 * opts.pixelRatio,
  12367. border: false,
  12368. borderWidth: 2,
  12369. borderColor: '#FFFFFF' },
  12370. opts.extra.rose);
  12371. if (config.pieChartLinePadding == 0) {
  12372. config.pieChartLinePadding = roseOption.activeRadius;
  12373. }
  12374. var centerPosition = {
  12375. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  12376. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  12377. 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);
  12378. var minRadius = roseOption.minRadius || radius * 0.5;
  12379. series = getRoseDataPoints(series, roseOption.type, minRadius, radius, process);
  12380. var activeRadius = roseOption.activeRadius;
  12381. series = series.map(function (eachSeries) {
  12382. eachSeries._start_ += (roseOption.offsetAngle || 0) * Math.PI / 180;
  12383. return eachSeries;
  12384. });
  12385. series.forEach(function (eachSeries, seriesIndex) {
  12386. if (opts.tooltip) {
  12387. if (opts.tooltip.index == seriesIndex) {
  12388. context.beginPath();
  12389. context.setFillStyle(hexToRgb(eachSeries.color, roseOption.activeOpacity || 0.5));
  12390. context.moveTo(centerPosition.x, centerPosition.y);
  12391. context.arc(centerPosition.x, centerPosition.y, activeRadius + eachSeries._radius_, eachSeries._start_,
  12392. eachSeries._start_ + 2 * eachSeries._rose_proportion_ * Math.PI);
  12393. context.closePath();
  12394. context.fill();
  12395. }
  12396. }
  12397. context.beginPath();
  12398. context.setLineWidth(roseOption.borderWidth * opts.pixelRatio);
  12399. context.lineJoin = "round";
  12400. context.setStrokeStyle(roseOption.borderColor);
  12401. context.setFillStyle(eachSeries.color);
  12402. context.moveTo(centerPosition.x, centerPosition.y);
  12403. context.arc(centerPosition.x, centerPosition.y, eachSeries._radius_, eachSeries._start_, eachSeries._start_ + 2 *
  12404. eachSeries._rose_proportion_ * Math.PI);
  12405. context.closePath();
  12406. context.fill();
  12407. if (roseOption.border == true) {
  12408. context.stroke();
  12409. }
  12410. });
  12411. if (opts.dataLabel !== false && process === 1) {
  12412. var valid = false;
  12413. for (var i = 0, len = series.length; i < len; i++) {
  12414. if (series[i].data > 0) {
  12415. valid = true;
  12416. break;
  12417. }
  12418. }
  12419. if (valid) {
  12420. drawPieText(series, opts, config, context, radius, centerPosition);
  12421. }
  12422. }
  12423. return {
  12424. center: centerPosition,
  12425. radius: radius,
  12426. series: series };
  12427. }
  12428. function drawArcbarDataPoints(series, opts, config, context) {
  12429. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  12430. var arcbarOption = assign({}, {
  12431. startAngle: 0.75,
  12432. endAngle: 0.25,
  12433. type: 'default',
  12434. width: 12 * opts.pixelRatio,
  12435. gap: 2 * opts.pixelRatio },
  12436. opts.extra.arcbar);
  12437. series = getArcbarDataPoints(series, arcbarOption, process);
  12438. var centerPosition;
  12439. if (arcbarOption.center) {
  12440. centerPosition = arcbarOption.center;
  12441. } else {
  12442. centerPosition = {
  12443. x: opts.width / 2,
  12444. y: opts.height / 2 };
  12445. }
  12446. var radius;
  12447. if (arcbarOption.radius) {
  12448. radius = arcbarOption.radius;
  12449. } else {
  12450. radius = Math.min(centerPosition.x, centerPosition.y);
  12451. radius -= 5 * opts.pixelRatio;
  12452. radius -= arcbarOption.width / 2;
  12453. }
  12454. for (var i = 0; i < series.length; i++) {
  12455. var eachSeries = series[i];
  12456. //背景颜色
  12457. context.setLineWidth(arcbarOption.width);
  12458. context.setStrokeStyle(arcbarOption.backgroundColor || '#E9E9E9');
  12459. context.setLineCap('round');
  12460. context.beginPath();
  12461. if (arcbarOption.type == 'default') {
  12462. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, arcbarOption.startAngle * Math.PI, arcbarOption.endAngle * Math.PI, false);
  12463. } else {
  12464. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, 0, 2 * Math.PI, false);
  12465. }
  12466. context.stroke();
  12467. //进度条
  12468. context.setLineWidth(arcbarOption.width);
  12469. context.setStrokeStyle(eachSeries.color);
  12470. context.setLineCap('round');
  12471. context.beginPath();
  12472. context.arc(centerPosition.x, centerPosition.y, radius - (arcbarOption.width + arcbarOption.gap) * i, arcbarOption.startAngle * Math.PI, eachSeries._proportion_ * Math.PI, false);
  12473. context.stroke();
  12474. }
  12475. drawRingTitle(opts, config, context, centerPosition);
  12476. return {
  12477. center: centerPosition,
  12478. radius: radius,
  12479. series: series };
  12480. }
  12481. function drawGaugeDataPoints(categories, series, opts, config, context) {
  12482. var process = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
  12483. var gaugeOption = assign({}, {
  12484. type: 'default',
  12485. startAngle: 0.75,
  12486. endAngle: 0.25,
  12487. width: 15,
  12488. splitLine: {
  12489. fixRadius: 0,
  12490. splitNumber: 10,
  12491. width: 15,
  12492. color: '#FFFFFF',
  12493. childNumber: 5,
  12494. childWidth: 5 },
  12495. pointer: {
  12496. width: 15,
  12497. color: 'auto' } },
  12498. opts.extra.gauge);
  12499. if (gaugeOption.oldAngle == undefined) {
  12500. gaugeOption.oldAngle = gaugeOption.startAngle;
  12501. }
  12502. if (gaugeOption.oldData == undefined) {
  12503. gaugeOption.oldData = 0;
  12504. }
  12505. categories = getGaugeAxisPoints(categories, gaugeOption.startAngle, gaugeOption.endAngle);
  12506. var centerPosition = {
  12507. x: opts.width / 2,
  12508. y: opts.height / 2 };
  12509. var radius = Math.min(centerPosition.x, centerPosition.y);
  12510. radius -= 5 * opts.pixelRatio;
  12511. radius -= gaugeOption.width / 2;
  12512. var innerRadius = radius - gaugeOption.width;
  12513. var totalAngle = 0;
  12514. //判断仪表盘的样式:default百度样式,progress新样式
  12515. if (gaugeOption.type == 'progress') {
  12516. //## 第一步画中心圆形背景和进度条背景
  12517. //中心圆形背景
  12518. var pieRadius = radius - gaugeOption.width * 3;
  12519. context.beginPath();
  12520. var gradient = context.createLinearGradient(centerPosition.x, centerPosition.y - pieRadius, centerPosition.x, centerPosition.y + pieRadius);
  12521. //配置渐变填充(起点:中心点向上减半径;结束点中心点向下加半径)
  12522. gradient.addColorStop('0', hexToRgb(series[0].color, 0.3));
  12523. gradient.addColorStop('1.0', hexToRgb("#FFFFFF", 0.1));
  12524. context.setFillStyle(gradient);
  12525. context.arc(centerPosition.x, centerPosition.y, pieRadius, 0, 2 * Math.PI, false);
  12526. context.fill();
  12527. //画进度条背景
  12528. context.setLineWidth(gaugeOption.width);
  12529. context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
  12530. context.setLineCap('round');
  12531. context.beginPath();
  12532. context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, gaugeOption.endAngle * Math.PI, false);
  12533. context.stroke();
  12534. //## 第二步画刻度线
  12535. totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  12536. var splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  12537. var childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
  12538. var startX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
  12539. var endX = -radius - gaugeOption.width - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
  12540. context.save();
  12541. context.translate(centerPosition.x, centerPosition.y);
  12542. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  12543. var len = gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1;
  12544. var proc = series[0].data * process;
  12545. for (var i = 0; i < len; i++) {
  12546. context.beginPath();
  12547. //刻度线随进度变色
  12548. if (proc > i / len) {
  12549. context.setStrokeStyle(hexToRgb(series[0].color, 1));
  12550. } else {
  12551. context.setStrokeStyle(hexToRgb(series[0].color, 0.3));
  12552. }
  12553. context.setLineWidth(3 * opts.pixelRatio);
  12554. context.moveTo(startX, 0);
  12555. context.lineTo(endX, 0);
  12556. context.stroke();
  12557. context.rotate(childAngle * Math.PI);
  12558. }
  12559. context.restore();
  12560. //## 第三步画进度条
  12561. series = getArcbarDataPoints(series, gaugeOption, process);
  12562. context.setLineWidth(gaugeOption.width);
  12563. context.setStrokeStyle(series[0].color);
  12564. context.setLineCap('round');
  12565. context.beginPath();
  12566. context.arc(centerPosition.x, centerPosition.y, innerRadius, gaugeOption.startAngle * Math.PI, series[0]._proportion_ * Math.PI, false);
  12567. context.stroke();
  12568. //## 第四步画指针
  12569. var pointerRadius = radius - gaugeOption.width * 2.5;
  12570. context.save();
  12571. context.translate(centerPosition.x, centerPosition.y);
  12572. context.rotate((series[0]._proportion_ - 1) * Math.PI);
  12573. context.beginPath();
  12574. context.setLineWidth(gaugeOption.width / 3);
  12575. var gradient3 = context.createLinearGradient(0, -pointerRadius * 0.6, 0, pointerRadius * 0.6);
  12576. gradient3.addColorStop('0', hexToRgb('#FFFFFF', 0));
  12577. gradient3.addColorStop('0.5', hexToRgb(series[0].color, 1));
  12578. gradient3.addColorStop('1.0', hexToRgb('#FFFFFF', 0));
  12579. context.setStrokeStyle(gradient3);
  12580. context.arc(0, 0, pointerRadius, 0.85 * Math.PI, 1.15 * Math.PI, false);
  12581. context.stroke();
  12582. context.beginPath();
  12583. context.setLineWidth(1);
  12584. context.setStrokeStyle(series[0].color);
  12585. context.setFillStyle(series[0].color);
  12586. context.moveTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
  12587. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2 - 4, 0);
  12588. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, 4);
  12589. context.lineTo(-pointerRadius - gaugeOption.width / 3 / 2, -4);
  12590. context.stroke();
  12591. context.fill();
  12592. context.restore();
  12593. //default百度样式
  12594. } else {
  12595. //画背景
  12596. context.setLineWidth(gaugeOption.width);
  12597. context.setLineCap('butt');
  12598. for (var _i18 = 0; _i18 < categories.length; _i18++) {
  12599. var eachCategories = categories[_i18];
  12600. context.beginPath();
  12601. context.setStrokeStyle(eachCategories.color);
  12602. context.arc(centerPosition.x, centerPosition.y, radius, eachCategories._startAngle_ * Math.PI, eachCategories._endAngle_ * Math.PI, false);
  12603. context.stroke();
  12604. }
  12605. context.save();
  12606. //画刻度线
  12607. totalAngle = gaugeOption.startAngle - gaugeOption.endAngle + 1;
  12608. var _splitAngle = totalAngle / gaugeOption.splitLine.splitNumber;
  12609. var _childAngle = totalAngle / gaugeOption.splitLine.splitNumber / gaugeOption.splitLine.childNumber;
  12610. var _startX2 = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius;
  12611. var _endX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.width;
  12612. var childendX = -radius - gaugeOption.width * 0.5 - gaugeOption.splitLine.fixRadius + gaugeOption.splitLine.childWidth;
  12613. context.translate(centerPosition.x, centerPosition.y);
  12614. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  12615. for (var _i19 = 0; _i19 < gaugeOption.splitLine.splitNumber + 1; _i19++) {
  12616. context.beginPath();
  12617. context.setStrokeStyle(gaugeOption.splitLine.color);
  12618. context.setLineWidth(2 * opts.pixelRatio);
  12619. context.moveTo(_startX2, 0);
  12620. context.lineTo(_endX, 0);
  12621. context.stroke();
  12622. context.rotate(_splitAngle * Math.PI);
  12623. }
  12624. context.restore();
  12625. context.save();
  12626. context.translate(centerPosition.x, centerPosition.y);
  12627. context.rotate((gaugeOption.startAngle - 1) * Math.PI);
  12628. for (var _i20 = 0; _i20 < gaugeOption.splitLine.splitNumber * gaugeOption.splitLine.childNumber + 1; _i20++) {
  12629. context.beginPath();
  12630. context.setStrokeStyle(gaugeOption.splitLine.color);
  12631. context.setLineWidth(1 * opts.pixelRatio);
  12632. context.moveTo(_startX2, 0);
  12633. context.lineTo(childendX, 0);
  12634. context.stroke();
  12635. context.rotate(_childAngle * Math.PI);
  12636. }
  12637. context.restore();
  12638. //画指针
  12639. series = getGaugeDataPoints(series, categories, gaugeOption, process);
  12640. for (var _i21 = 0; _i21 < series.length; _i21++) {
  12641. var eachSeries = series[_i21];
  12642. context.save();
  12643. context.translate(centerPosition.x, centerPosition.y);
  12644. context.rotate((eachSeries._proportion_ - 1) * Math.PI);
  12645. context.beginPath();
  12646. context.setFillStyle(eachSeries.color);
  12647. context.moveTo(gaugeOption.pointer.width, 0);
  12648. context.lineTo(0, -gaugeOption.pointer.width / 2);
  12649. context.lineTo(-innerRadius, 0);
  12650. context.lineTo(0, gaugeOption.pointer.width / 2);
  12651. context.lineTo(gaugeOption.pointer.width, 0);
  12652. context.closePath();
  12653. context.fill();
  12654. context.beginPath();
  12655. context.setFillStyle('#FFFFFF');
  12656. context.arc(0, 0, gaugeOption.pointer.width / 6, 0, 2 * Math.PI, false);
  12657. context.fill();
  12658. context.restore();
  12659. }
  12660. if (opts.dataLabel !== false) {
  12661. drawGaugeLabel(gaugeOption, radius, centerPosition, opts, config, context);
  12662. }
  12663. }
  12664. //画仪表盘标题,副标题
  12665. drawRingTitle(opts, config, context, centerPosition);
  12666. if (process === 1 && opts.type === 'gauge') {
  12667. opts.extra.gauge.oldAngle = series[0]._proportion_;
  12668. opts.extra.gauge.oldData = series[0].data;
  12669. }
  12670. return {
  12671. center: centerPosition,
  12672. radius: radius,
  12673. innerRadius: innerRadius,
  12674. categories: categories,
  12675. totalAngle: totalAngle };
  12676. }
  12677. function drawRadarDataPoints(series, opts, config, context) {
  12678. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  12679. var radarOption = assign({}, {
  12680. gridColor: '#cccccc',
  12681. gridType: 'radar',
  12682. labelColor: '#666666',
  12683. opacity: 0.2,
  12684. gridCount: 3 },
  12685. opts.extra.radar);
  12686. var coordinateAngle = getRadarCoordinateSeries(opts.categories.length);
  12687. var centerPosition = {
  12688. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  12689. y: opts.area[0] + (opts.height - opts.area[0] - opts.area[2]) / 2 };
  12690. var radius = Math.min(centerPosition.x - (getMaxTextListLength(opts.categories) + config.radarLabelTextMargin), centerPosition.y - config.radarLabelTextMargin);
  12691. //TODO逻辑不对
  12692. radius -= opts.padding[1];
  12693. // 画分割线
  12694. context.beginPath();
  12695. context.setLineWidth(1 * opts.pixelRatio);
  12696. context.setStrokeStyle(radarOption.gridColor);
  12697. coordinateAngle.forEach(function (angle) {
  12698. var pos = convertCoordinateOrigin(radius * Math.cos(angle), radius * Math.sin(angle), centerPosition);
  12699. context.moveTo(centerPosition.x, centerPosition.y);
  12700. context.lineTo(pos.x, pos.y);
  12701. });
  12702. context.stroke();
  12703. context.closePath();
  12704. // 画背景网格
  12705. var _loop = function _loop(i) {
  12706. var startPos = {};
  12707. context.beginPath();
  12708. context.setLineWidth(1 * opts.pixelRatio);
  12709. context.setStrokeStyle(radarOption.gridColor);
  12710. if (radarOption.gridType == 'radar') {
  12711. coordinateAngle.forEach(function (angle, index) {
  12712. var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(angle), radius / radarOption.gridCount * i * Math.sin(angle), centerPosition);
  12713. if (index === 0) {
  12714. startPos = pos;
  12715. context.moveTo(pos.x, pos.y);
  12716. } else {
  12717. context.lineTo(pos.x, pos.y);
  12718. }
  12719. });
  12720. context.lineTo(startPos.x, startPos.y);
  12721. } else {
  12722. var pos = convertCoordinateOrigin(radius / radarOption.gridCount * i * Math.cos(1.5), radius / radarOption.gridCount * i * Math.sin(1.5), centerPosition);
  12723. context.arc(centerPosition.x, centerPosition.y, centerPosition.y - pos.y, 0, 2 * Math.PI, false);
  12724. }
  12725. context.stroke();
  12726. context.closePath();
  12727. };
  12728. for (var i = 1; i <= radarOption.gridCount; i++) {
  12729. _loop(i);
  12730. }
  12731. var radarDataPoints = getRadarDataPoints(coordinateAngle, centerPosition, radius, series, opts, process);
  12732. radarDataPoints.forEach(function (eachSeries, seriesIndex) {
  12733. // 绘制区域数据
  12734. context.beginPath();
  12735. context.setFillStyle(hexToRgb(eachSeries.color, radarOption.opacity));
  12736. eachSeries.data.forEach(function (item, index) {
  12737. if (index === 0) {
  12738. context.moveTo(item.position.x, item.position.y);
  12739. } else {
  12740. context.lineTo(item.position.x, item.position.y);
  12741. }
  12742. });
  12743. context.closePath();
  12744. context.fill();
  12745. if (opts.dataPointShape !== false) {
  12746. var points = eachSeries.data.map(function (item) {
  12747. return item.position;
  12748. });
  12749. drawPointShape(points, eachSeries.color, eachSeries.pointShape, context, opts);
  12750. }
  12751. });
  12752. // draw label text
  12753. drawRadarLabel(coordinateAngle, radius, centerPosition, opts, config, context);
  12754. return {
  12755. center: centerPosition,
  12756. radius: radius,
  12757. angleList: coordinateAngle };
  12758. }
  12759. function normalInt(min, max, iter) {
  12760. iter = iter == 0 ? 1 : iter;
  12761. var arr = [];
  12762. for (var i = 0; i < iter; i++) {
  12763. arr[i] = Math.random();
  12764. };
  12765. return Math.floor(arr.reduce(function (i, j) {return i + j;}) / iter * (max - min)) + min;
  12766. };
  12767. function collisionNew(area, points, width, height) {
  12768. var isIn = false;
  12769. for (var i = 0; i < points.length; i++) {
  12770. if (points[i].area) {
  12771. 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]) {
  12772. if (area[0] < 0 || area[1] < 0 || area[2] > width || area[3] > height) {
  12773. isIn = true;
  12774. break;
  12775. } else {
  12776. isIn = false;
  12777. }
  12778. } else {
  12779. isIn = true;
  12780. break;
  12781. }
  12782. }
  12783. }
  12784. return isIn;
  12785. };
  12786. function getBoundingBox(data) {
  12787. var bounds = {},coords;
  12788. bounds.xMin = 180;
  12789. bounds.xMax = 0;
  12790. bounds.yMin = 90;
  12791. bounds.yMax = 0;
  12792. for (var i = 0; i < data.length; i++) {
  12793. var coorda = data[i].geometry.coordinates;
  12794. for (var k = 0; k < coorda.length; k++) {
  12795. coords = coorda[k];
  12796. if (coords.length == 1) {
  12797. coords = coords[0];
  12798. }
  12799. for (var j = 0; j < coords.length; j++) {
  12800. var longitude = coords[j][0];
  12801. var latitude = coords[j][1];
  12802. var point = {
  12803. x: longitude,
  12804. y: latitude };
  12805. bounds.xMin = bounds.xMin < point.x ? bounds.xMin : point.x;
  12806. bounds.xMax = bounds.xMax > point.x ? bounds.xMax : point.x;
  12807. bounds.yMin = bounds.yMin < point.y ? bounds.yMin : point.y;
  12808. bounds.yMax = bounds.yMax > point.y ? bounds.yMax : point.y;
  12809. }
  12810. }
  12811. }
  12812. return bounds;
  12813. }
  12814. function coordinateToPoint(latitude, longitude, bounds, scale, xoffset, yoffset) {
  12815. return {
  12816. x: (longitude - bounds.xMin) * scale + xoffset,
  12817. y: (bounds.yMax - latitude) * scale + yoffset };
  12818. }
  12819. function pointToCoordinate(pointY, pointX, bounds, scale, xoffset, yoffset) {
  12820. return {
  12821. x: (pointX - xoffset) / scale + bounds.xMin,
  12822. y: bounds.yMax - (pointY - yoffset) / scale };
  12823. }
  12824. function isRayIntersectsSegment(poi, s_poi, e_poi) {
  12825. if (s_poi[1] == e_poi[1]) {return false;}
  12826. if (s_poi[1] > poi[1] && e_poi[1] > poi[1]) {return false;}
  12827. if (s_poi[1] < poi[1] && e_poi[1] < poi[1]) {return false;}
  12828. if (s_poi[1] == poi[1] && e_poi[1] > poi[1]) {return false;}
  12829. if (e_poi[1] == poi[1] && s_poi[1] > poi[1]) {return false;}
  12830. if (s_poi[0] < poi[0] && e_poi[1] < poi[1]) {return false;}
  12831. var xseg = e_poi[0] - (e_poi[0] - s_poi[0]) * (e_poi[1] - poi[1]) / (e_poi[1] - s_poi[1]);
  12832. if (xseg < poi[0]) {
  12833. return false;
  12834. } else {
  12835. return true;
  12836. }
  12837. }
  12838. function isPoiWithinPoly(poi, poly) {
  12839. var sinsc = 0;
  12840. for (var i = 0; i < poly.length; i++) {
  12841. var epoly = poly[i][0];
  12842. if (poly.length == 1) {
  12843. epoly = poly[i][0];
  12844. }
  12845. for (var j = 0; j < epoly.length - 1; j++) {
  12846. var s_poi = epoly[j];
  12847. var e_poi = epoly[j + 1];
  12848. if (isRayIntersectsSegment(poi, s_poi, e_poi)) {
  12849. sinsc += 1;
  12850. }
  12851. }
  12852. }
  12853. if (sinsc % 2 == 1) {
  12854. return true;
  12855. } else {
  12856. return false;
  12857. }
  12858. }
  12859. function drawMapDataPoints(series, opts, config, context) {
  12860. var mapOption = assign({}, {
  12861. border: true,
  12862. borderWidth: 1,
  12863. borderColor: '#666666',
  12864. fillOpacity: 0.6,
  12865. activeBorderColor: '#f04864',
  12866. activeFillColor: '#facc14',
  12867. activeFillOpacity: 1 },
  12868. opts.extra.map);
  12869. var coords, point;
  12870. var data = series;
  12871. var bounds = getBoundingBox(data);
  12872. var xScale = opts.width / Math.abs(bounds.xMax - bounds.xMin);
  12873. var yScale = opts.height / Math.abs(bounds.yMax - bounds.yMin);
  12874. var scale = xScale < yScale ? xScale : yScale;
  12875. var xoffset = opts.width / 2 - Math.abs(bounds.xMax - bounds.xMin) / 2 * scale;
  12876. var yoffset = opts.height / 2 - Math.abs(bounds.yMax - bounds.yMin) / 2 * scale;
  12877. context.beginPath();
  12878. context.clearRect(0, 0, opts.width, opts.height);
  12879. context.setFillStyle(opts.background || '#FFFFFF');
  12880. context.rect(0, 0, opts.width, opts.height);
  12881. context.fill();
  12882. for (var i = 0; i < data.length; i++) {
  12883. context.beginPath();
  12884. context.setLineWidth(mapOption.borderWidth * opts.pixelRatio);
  12885. context.setStrokeStyle(mapOption.borderColor);
  12886. context.setFillStyle(hexToRgb(series[i].color, mapOption.fillOpacity));
  12887. if (opts.tooltip) {
  12888. if (opts.tooltip.index == i) {
  12889. context.setStrokeStyle(mapOption.activeBorderColor);
  12890. context.setFillStyle(hexToRgb(mapOption.activeFillColor, mapOption.activeFillOpacity));
  12891. }
  12892. }
  12893. var coorda = data[i].geometry.coordinates;
  12894. for (var k = 0; k < coorda.length; k++) {
  12895. coords = coorda[k];
  12896. if (coords.length == 1) {
  12897. coords = coords[0];
  12898. }
  12899. for (var j = 0; j < coords.length; j++) {
  12900. point = coordinateToPoint(coords[j][1], coords[j][0], bounds, scale, xoffset, yoffset);
  12901. if (j === 0) {
  12902. context.beginPath();
  12903. context.moveTo(point.x, point.y);
  12904. } else {
  12905. context.lineTo(point.x, point.y);
  12906. }
  12907. }
  12908. context.fill();
  12909. if (mapOption.border == true) {
  12910. context.stroke();
  12911. }
  12912. }
  12913. if (opts.dataLabel == true) {
  12914. var centerPoint = data[i].properties.centroid;
  12915. if (centerPoint) {
  12916. point = coordinateToPoint(centerPoint[1], centerPoint[0], bounds, scale, xoffset, yoffset);
  12917. var fontSize = data[i].textSize || config.fontSize;
  12918. var text = data[i].properties.name;
  12919. context.beginPath();
  12920. context.setFontSize(fontSize);
  12921. context.setFillStyle(data[i].textColor || '#666666');
  12922. context.fillText(text, point.x - measureText(text, fontSize) / 2, point.y + fontSize / 2);
  12923. context.closePath();
  12924. context.stroke();
  12925. }
  12926. }
  12927. }
  12928. opts.chartData.mapData = {
  12929. bounds: bounds,
  12930. scale: scale,
  12931. xoffset: xoffset,
  12932. yoffset: yoffset };
  12933. drawToolTipBridge(opts, config, context, 1);
  12934. context.draw();
  12935. }
  12936. function getWordCloudPoint(opts, type) {
  12937. var points = opts.series.sort(function (a, b) {return parseInt(b.textSize) - parseInt(a.textSize);});
  12938. switch (type) {
  12939. case 'normal':
  12940. for (var i = 0; i < points.length; i++) {
  12941. var text = points[i].name;
  12942. var tHeight = points[i].textSize;
  12943. var tWidth = measureText(text, tHeight);
  12944. var x = void 0,y = void 0;
  12945. var area = void 0;
  12946. var breaknum = 0;
  12947. while (true) {
  12948. breaknum++;
  12949. x = normalInt(-opts.width / 2, opts.width / 2, 5) - tWidth / 2;
  12950. y = normalInt(-opts.height / 2, opts.height / 2, 5) + tHeight / 2;
  12951. area = [x - 5 + opts.width / 2, y - 5 - tHeight + opts.height / 2, x + tWidth + 5 + opts.width / 2, y + 5 + opts.height / 2];
  12952. var isCollision = collisionNew(area, points, opts.width, opts.height);
  12953. if (!isCollision) break;
  12954. if (breaknum == 1000) {
  12955. area = [-100, -100, -100, -100];
  12956. break;
  12957. }
  12958. };
  12959. points[i].area = area;
  12960. }
  12961. break;
  12962. case 'vertical':var
  12963. Spin = function Spin() {
  12964. //获取均匀随机值,是否旋转,旋转的概率为(1-0.5)
  12965. if (Math.random() > 0.7) {
  12966. return true;
  12967. } else {return false;};
  12968. };;
  12969. for (var _i22 = 0; _i22 < points.length; _i22++) {
  12970. var _text = points[_i22].name;
  12971. var _tHeight = points[_i22].textSize;
  12972. var _tWidth = measureText(_text, _tHeight);
  12973. var isSpin = Spin();
  12974. var _x = void 0,_y = void 0,_area = void 0,areav = void 0;
  12975. var _breaknum = 0;
  12976. while (true) {
  12977. _breaknum++;
  12978. var _isCollision = void 0;
  12979. if (isSpin) {
  12980. _x = normalInt(-opts.width / 2, opts.width / 2, 5) - _tWidth / 2;
  12981. _y = normalInt(-opts.height / 2, opts.height / 2, 5) + _tHeight / 2;
  12982. _area = [_y - 5 - _tWidth + opts.width / 2, -_x - 5 + opts.height / 2, _y + 5 + opts.width / 2, -_x + _tHeight + 5 + opts.height / 2];
  12983. 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];
  12984. _isCollision = collisionNew(areav, points, opts.height, opts.width);
  12985. } else {
  12986. _x = normalInt(-opts.width / 2, opts.width / 2, 5) - _tWidth / 2;
  12987. _y = normalInt(-opts.height / 2, opts.height / 2, 5) + _tHeight / 2;
  12988. _area = [_x - 5 + opts.width / 2, _y - 5 - _tHeight + opts.height / 2, _x + _tWidth + 5 + opts.width / 2, _y + 5 + opts.height / 2];
  12989. _isCollision = collisionNew(_area, points, opts.width, opts.height);
  12990. }
  12991. if (!_isCollision) break;
  12992. if (_breaknum == 1000) {
  12993. _area = [-1000, -1000, -1000, -1000];
  12994. break;
  12995. }
  12996. };
  12997. if (isSpin) {
  12998. points[_i22].area = areav;
  12999. points[_i22].areav = _area;
  13000. } else {
  13001. points[_i22].area = _area;
  13002. }
  13003. points[_i22].rotate = isSpin;
  13004. };
  13005. break;}
  13006. return points;
  13007. }
  13008. function drawWordCloudDataPoints(series, opts, config, context) {
  13009. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  13010. var wordOption = assign({}, {
  13011. type: 'normal',
  13012. autoColors: true },
  13013. opts.extra.word);
  13014. context.beginPath();
  13015. context.setFillStyle(opts.background || '#FFFFFF');
  13016. context.rect(0, 0, opts.width, opts.height);
  13017. context.fill();
  13018. context.save();
  13019. var points = opts.chartData.wordCloudData;
  13020. context.translate(opts.width / 2, opts.height / 2);
  13021. for (var i = 0; i < points.length; i++) {
  13022. context.save();
  13023. if (points[i].rotate) {
  13024. context.rotate(90 * Math.PI / 180);
  13025. }
  13026. var text = points[i].name;
  13027. var tHeight = points[i].textSize;
  13028. var tWidth = measureText(text, tHeight);
  13029. context.beginPath();
  13030. context.setStrokeStyle(points[i].color);
  13031. context.setFillStyle(points[i].color);
  13032. context.setFontSize(tHeight);
  13033. if (points[i].rotate) {
  13034. if (points[i].areav[0] > 0) {
  13035. if (opts.tooltip) {
  13036. if (opts.tooltip.index == i) {
  13037. 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);
  13038. } else {
  13039. 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);
  13040. }
  13041. } else {
  13042. 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);
  13043. }
  13044. }
  13045. } else {
  13046. if (points[i].area[0] > 0) {
  13047. if (opts.tooltip) {
  13048. if (opts.tooltip.index == i) {
  13049. 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);
  13050. } else {
  13051. 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);
  13052. }
  13053. } else {
  13054. 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);
  13055. }
  13056. }
  13057. }
  13058. context.stroke();
  13059. context.restore();
  13060. }
  13061. context.restore();
  13062. }
  13063. function drawFunnelDataPoints(series, opts, config, context) {
  13064. var process = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
  13065. var funnelOption = assign({}, {
  13066. activeWidth: 10,
  13067. activeOpacity: 0.3,
  13068. border: false,
  13069. borderWidth: 2,
  13070. borderColor: '#FFFFFF',
  13071. fillOpacity: 1,
  13072. labelAlign: 'right' },
  13073. opts.extra.funnel);
  13074. var eachSpacing = (opts.height - opts.area[0] - opts.area[2]) / series.length;
  13075. var centerPosition = {
  13076. x: opts.area[3] + (opts.width - opts.area[1] - opts.area[3]) / 2,
  13077. y: opts.height - opts.area[2] };
  13078. var activeWidth = funnelOption.activeWidth;
  13079. var radius = Math.min((opts.width - opts.area[1] - opts.area[3]) / 2 - activeWidth, (opts.height - opts.area[0] - opts.area[2]) / 2 - activeWidth);
  13080. series = getFunnelDataPoints(series, radius, process);
  13081. context.save();
  13082. context.translate(centerPosition.x, centerPosition.y);
  13083. for (var i = 0; i < series.length; i++) {
  13084. if (i == 0) {
  13085. if (opts.tooltip) {
  13086. if (opts.tooltip.index == i) {
  13087. context.beginPath();
  13088. context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
  13089. context.moveTo(-activeWidth, 0);
  13090. context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
  13091. context.lineTo(series[i].radius + activeWidth, -eachSpacing);
  13092. context.lineTo(activeWidth, 0);
  13093. context.lineTo(-activeWidth, 0);
  13094. context.closePath();
  13095. context.fill();
  13096. }
  13097. }
  13098. series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing, centerPosition.x + series[i].radius, centerPosition.y];
  13099. context.beginPath();
  13100. context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio);
  13101. context.setStrokeStyle(funnelOption.borderColor);
  13102. context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity));
  13103. context.moveTo(0, 0);
  13104. context.lineTo(-series[i].radius, -eachSpacing);
  13105. context.lineTo(series[i].radius, -eachSpacing);
  13106. context.lineTo(0, 0);
  13107. context.closePath();
  13108. context.fill();
  13109. if (funnelOption.border == true) {
  13110. context.stroke();
  13111. }
  13112. } else {
  13113. if (opts.tooltip) {
  13114. if (opts.tooltip.index == i) {
  13115. context.beginPath();
  13116. context.setFillStyle(hexToRgb(series[i].color, funnelOption.activeOpacity));
  13117. context.moveTo(0, 0);
  13118. context.lineTo(-series[i - 1].radius - activeWidth, 0);
  13119. context.lineTo(-series[i].radius - activeWidth, -eachSpacing);
  13120. context.lineTo(series[i].radius + activeWidth, -eachSpacing);
  13121. context.lineTo(series[i - 1].radius + activeWidth, 0);
  13122. context.lineTo(0, 0);
  13123. context.closePath();
  13124. context.fill();
  13125. }
  13126. }
  13127. series[i].funnelArea = [centerPosition.x - series[i].radius, centerPosition.y - eachSpacing * (i + 1), centerPosition.x + series[i].radius, centerPosition.y - eachSpacing * i];
  13128. context.beginPath();
  13129. context.setLineWidth(funnelOption.borderWidth * opts.pixelRatio);
  13130. context.setStrokeStyle(funnelOption.borderColor);
  13131. context.setFillStyle(hexToRgb(series[i].color, funnelOption.fillOpacity));
  13132. context.moveTo(0, 0);
  13133. context.lineTo(-series[i - 1].radius, 0);
  13134. context.lineTo(-series[i].radius, -eachSpacing);
  13135. context.lineTo(series[i].radius, -eachSpacing);
  13136. context.lineTo(series[i - 1].radius, 0);
  13137. context.lineTo(0, 0);
  13138. context.closePath();
  13139. context.fill();
  13140. if (funnelOption.border == true) {
  13141. context.stroke();
  13142. }
  13143. }
  13144. context.translate(0, -eachSpacing);
  13145. }
  13146. context.restore();
  13147. if (opts.dataLabel !== false && process === 1) {
  13148. drawFunnelText(series, opts, context, eachSpacing, funnelOption.labelAlign, activeWidth, centerPosition);
  13149. }
  13150. return {
  13151. center: centerPosition,
  13152. radius: radius,
  13153. series: series };
  13154. }
  13155. function drawFunnelText(series, opts, context, eachSpacing, labelAlign, activeWidth, centerPosition) {
  13156. for (var i = 0; i < series.length; i++) {
  13157. var item = series[i];
  13158. var startX = void 0,endX = void 0,startY = void 0,fontSize = void 0;
  13159. var text = item.format ? item.format(+item._proportion_.toFixed(2)) : util.toFixed(item._proportion_ * 100) + '%';
  13160. if (labelAlign == 'right') {
  13161. if (i == 0) {
  13162. startX = (item.funnelArea[2] + centerPosition.x) / 2;
  13163. } else {
  13164. startX = (item.funnelArea[2] + series[i - 1].funnelArea[2]) / 2;
  13165. }
  13166. endX = startX + activeWidth * 2;
  13167. startY = item.funnelArea[1] + eachSpacing / 2;
  13168. fontSize = item.textSize || opts.fontSize;
  13169. context.setLineWidth(1 * opts.pixelRatio);
  13170. context.setStrokeStyle(item.color);
  13171. context.setFillStyle(item.color);
  13172. context.beginPath();
  13173. context.moveTo(startX, startY);
  13174. context.lineTo(endX, startY);
  13175. context.stroke();
  13176. context.closePath();
  13177. context.beginPath();
  13178. context.moveTo(endX, startY);
  13179. context.arc(endX, startY, 2, 0, 2 * Math.PI);
  13180. context.closePath();
  13181. context.fill();
  13182. context.beginPath();
  13183. context.setFontSize(fontSize);
  13184. context.setFillStyle(item.textColor || '#666666');
  13185. context.fillText(text, endX + 5, startY + fontSize / 2 - 2);
  13186. context.closePath();
  13187. context.stroke();
  13188. context.closePath();
  13189. } else {
  13190. if (i == 0) {
  13191. startX = (item.funnelArea[0] + centerPosition.x) / 2;
  13192. } else {
  13193. startX = (item.funnelArea[0] + series[i - 1].funnelArea[0]) / 2;
  13194. }
  13195. endX = startX - activeWidth * 2;
  13196. startY = item.funnelArea[1] + eachSpacing / 2;
  13197. fontSize = item.textSize || opts.fontSize;
  13198. context.setLineWidth(1 * opts.pixelRatio);
  13199. context.setStrokeStyle(item.color);
  13200. context.setFillStyle(item.color);
  13201. context.beginPath();
  13202. context.moveTo(startX, startY);
  13203. context.lineTo(endX, startY);
  13204. context.stroke();
  13205. context.closePath();
  13206. context.beginPath();
  13207. context.moveTo(endX, startY);
  13208. context.arc(endX, startY, 2, 0, 2 * Math.PI);
  13209. context.closePath();
  13210. context.fill();
  13211. context.beginPath();
  13212. context.setFontSize(fontSize);
  13213. context.setFillStyle(item.textColor || '#666666');
  13214. context.fillText(text, endX - 5 - measureText(text), startY + fontSize / 2 - 2);
  13215. context.closePath();
  13216. context.stroke();
  13217. context.closePath();
  13218. }
  13219. }
  13220. }
  13221. function drawCanvas(opts, context) {
  13222. context.draw();
  13223. }
  13224. var Timing = {
  13225. easeIn: function easeIn(pos) {
  13226. return Math.pow(pos, 3);
  13227. },
  13228. easeOut: function easeOut(pos) {
  13229. return Math.pow(pos - 1, 3) + 1;
  13230. },
  13231. easeInOut: function easeInOut(pos) {
  13232. if ((pos /= 0.5) < 1) {
  13233. return 0.5 * Math.pow(pos, 3);
  13234. } else {
  13235. return 0.5 * (Math.pow(pos - 2, 3) + 2);
  13236. }
  13237. },
  13238. linear: function linear(pos) {
  13239. return pos;
  13240. } };
  13241. function Animation(opts) {
  13242. this.isStop = false;
  13243. opts.duration = typeof opts.duration === 'undefined' ? 1000 : opts.duration;
  13244. opts.timing = opts.timing || 'linear';
  13245. var delay = 17;
  13246. function createAnimationFrame() {
  13247. if (typeof setTimeout !== 'undefined') {
  13248. return function (step, delay) {
  13249. setTimeout(function () {
  13250. var timeStamp = +new Date();
  13251. step(timeStamp);
  13252. }, delay);
  13253. };
  13254. } else if (typeof requestAnimationFrame !== 'undefined') {
  13255. return requestAnimationFrame;
  13256. } else {
  13257. return function (step) {
  13258. step(null);
  13259. };
  13260. }
  13261. };
  13262. var animationFrame = createAnimationFrame();
  13263. var startTimeStamp = null;
  13264. var _step = function step(timestamp) {
  13265. if (timestamp === null || this.isStop === true) {
  13266. opts.onProcess && opts.onProcess(1);
  13267. opts.onAnimationFinish && opts.onAnimationFinish();
  13268. return;
  13269. }
  13270. if (startTimeStamp === null) {
  13271. startTimeStamp = timestamp;
  13272. }
  13273. if (timestamp - startTimeStamp < opts.duration) {
  13274. var process = (timestamp - startTimeStamp) / opts.duration;
  13275. var timingFunction = Timing[opts.timing];
  13276. process = timingFunction(process);
  13277. opts.onProcess && opts.onProcess(process);
  13278. animationFrame(_step, delay);
  13279. } else {
  13280. opts.onProcess && opts.onProcess(1);
  13281. opts.onAnimationFinish && opts.onAnimationFinish();
  13282. }
  13283. };
  13284. _step = _step.bind(this);
  13285. animationFrame(_step, delay);
  13286. }
  13287. // stop animation immediately
  13288. // and tigger onAnimationFinish
  13289. Animation.prototype.stop = function () {
  13290. this.isStop = true;
  13291. };
  13292. function drawCharts(type, opts, config, context) {
  13293. var _this = this;
  13294. var series = opts.series;
  13295. var categories = opts.categories;
  13296. series = fillSeries(series, opts, config);
  13297. var duration = opts.animation ? opts.duration : 0;
  13298. _this.animationInstance && _this.animationInstance.stop();
  13299. var seriesMA = null;
  13300. if (type == 'candle') {
  13301. var average = assign({}, opts.extra.candle.average);
  13302. if (average.show) {
  13303. seriesMA = calCandleMA(average.day, average.name, average.color, series[0].data);
  13304. seriesMA = fillSeries(seriesMA, opts, config);
  13305. opts.seriesMA = seriesMA;
  13306. } else if (opts.seriesMA) {
  13307. seriesMA = opts.seriesMA = fillSeries(opts.seriesMA, opts, config);
  13308. } else {
  13309. seriesMA = series;
  13310. }
  13311. } else {
  13312. seriesMA = series;
  13313. }
  13314. /* 过滤掉show=false的series */
  13315. opts._series_ = series = filterSeries(series);
  13316. //重新计算图表区域
  13317. opts.area = new Array(4);
  13318. //复位绘图区域
  13319. for (var j = 0; j < 4; j++) {
  13320. opts.area[j] = opts.padding[j];
  13321. }
  13322. //通过计算三大区域:图例、X轴、Y轴的大小,确定绘图区域
  13323. var _calLegendData = calLegendData(seriesMA, opts, config, opts.chartData),
  13324. legendHeight = _calLegendData.area.wholeHeight,
  13325. legendWidth = _calLegendData.area.wholeWidth;
  13326. switch (opts.legend.position) {
  13327. case 'top':
  13328. opts.area[0] += legendHeight;
  13329. break;
  13330. case 'bottom':
  13331. opts.area[2] += legendHeight;
  13332. break;
  13333. case 'left':
  13334. opts.area[3] += legendWidth;
  13335. break;
  13336. case 'right':
  13337. opts.area[1] += legendWidth;
  13338. break;}
  13339. var _calYAxisData = {},yAxisWidth = 0;
  13340. if (opts.type === 'line' || opts.type === 'column' || opts.type === 'area' || opts.type === 'mix' || opts.type === 'candle') {
  13341. _calYAxisData = calYAxisData(series, opts, config);
  13342. yAxisWidth = _calYAxisData.yAxisWidth;
  13343. //如果显示Y轴标题
  13344. if (opts.yAxis.showTitle) {
  13345. var maxTitleHeight = 0;
  13346. for (var i = 0; i < opts.yAxis.data.length; i++) {
  13347. maxTitleHeight = Math.max(maxTitleHeight, opts.yAxis.data[i].titleFontSize ? opts.yAxis.data[i].titleFontSize : config.fontSize);
  13348. }
  13349. opts.area[0] += (maxTitleHeight + 6) * opts.pixelRatio;
  13350. }
  13351. var rightIndex = 0,leftIndex = 0;
  13352. //计算主绘图区域左右位置
  13353. for (var _i23 = 0; _i23 < yAxisWidth.length; _i23++) {
  13354. if (yAxisWidth[_i23].position == 'left') {
  13355. if (leftIndex > 0) {
  13356. opts.area[3] += yAxisWidth[_i23].width + opts.yAxis.padding;
  13357. } else {
  13358. opts.area[3] += yAxisWidth[_i23].width;
  13359. }
  13360. leftIndex += 1;
  13361. } else {
  13362. if (rightIndex > 0) {
  13363. opts.area[1] += yAxisWidth[_i23].width + opts.yAxis.padding;
  13364. } else {
  13365. opts.area[1] += yAxisWidth[_i23].width;
  13366. }
  13367. rightIndex += 1;
  13368. }
  13369. }
  13370. } else {
  13371. config.yAxisWidth = yAxisWidth;
  13372. }
  13373. opts.chartData.yAxisData = _calYAxisData;
  13374. if (opts.categories && opts.categories.length) {
  13375. opts.chartData.xAxisData = getXAxisPoints(opts.categories, opts, config);
  13376. var _calCategoriesData = calCategoriesData(opts.categories, opts, config, opts.chartData.xAxisData.eachSpacing),
  13377. xAxisHeight = _calCategoriesData.xAxisHeight,
  13378. angle = _calCategoriesData.angle;
  13379. config.xAxisHeight = xAxisHeight;
  13380. config._xAxisTextAngle_ = angle;
  13381. opts.area[2] += xAxisHeight;
  13382. opts.chartData.categoriesData = _calCategoriesData;
  13383. } else {
  13384. if (opts.type === 'line' || opts.type === 'area' || opts.type === 'points') {
  13385. opts.chartData.xAxisData = calXAxisData(series, opts, config);
  13386. categories = opts.chartData.xAxisData.rangesFormat;
  13387. var _calCategoriesData2 = calCategoriesData(categories, opts, config, opts.chartData.xAxisData.eachSpacing),
  13388. _xAxisHeight = _calCategoriesData2.xAxisHeight,
  13389. _angle = _calCategoriesData2.angle;
  13390. config.xAxisHeight = _xAxisHeight;
  13391. config._xAxisTextAngle_ = _angle;
  13392. opts.area[2] += _xAxisHeight;
  13393. opts.chartData.categoriesData = _calCategoriesData2;
  13394. } else {
  13395. opts.chartData.xAxisData = {
  13396. xAxisPoints: [] };
  13397. }
  13398. }
  13399. //计算右对齐偏移距离
  13400. if (opts.enableScroll && opts.xAxis.scrollAlign == 'right' && opts._scrollDistance_ === undefined) {
  13401. var offsetLeft = 0,
  13402. xAxisPoints = opts.chartData.xAxisData.xAxisPoints,
  13403. startX = opts.chartData.xAxisData.startX,
  13404. endX = opts.chartData.xAxisData.endX,
  13405. eachSpacing = opts.chartData.xAxisData.eachSpacing;
  13406. var totalWidth = eachSpacing * (xAxisPoints.length - 1);
  13407. var screenWidth = endX - startX;
  13408. offsetLeft = screenWidth - totalWidth;
  13409. _this.scrollOption = {
  13410. currentOffset: offsetLeft,
  13411. startTouchX: offsetLeft,
  13412. distance: 0,
  13413. lastMoveTime: 0 };
  13414. opts._scrollDistance_ = offsetLeft;
  13415. }
  13416. if (type === 'pie' || type === 'ring' || type === 'rose') {
  13417. config._pieTextMaxLength_ = opts.dataLabel === false ? 0 : getPieTextMaxLength(seriesMA);
  13418. }
  13419. switch (type) {
  13420. case 'word':
  13421. var wordOption = assign({}, {
  13422. type: 'normal',
  13423. autoColors: true },
  13424. opts.extra.word);
  13425. if (opts.updateData == true || opts.updateData == undefined) {
  13426. opts.chartData.wordCloudData = getWordCloudPoint(opts, wordOption.type);
  13427. }
  13428. this.animationInstance = new Animation({
  13429. timing: 'easeInOut',
  13430. duration: duration,
  13431. onProcess: function onProcess(process) {
  13432. context.clearRect(0, 0, opts.width, opts.height);
  13433. if (opts.rotate) {
  13434. contextRotate(context, opts);
  13435. }
  13436. drawWordCloudDataPoints(series, opts, config, context, process);
  13437. drawCanvas(opts, context);
  13438. },
  13439. onAnimationFinish: function onAnimationFinish() {
  13440. _this.event.trigger('renderComplete');
  13441. } });
  13442. break;
  13443. case 'map':
  13444. context.clearRect(0, 0, opts.width, opts.height);
  13445. drawMapDataPoints(series, opts, config, context);
  13446. break;
  13447. case 'funnel':
  13448. this.animationInstance = new Animation({
  13449. timing: 'easeInOut',
  13450. duration: duration,
  13451. onProcess: function onProcess(process) {
  13452. context.clearRect(0, 0, opts.width, opts.height);
  13453. if (opts.rotate) {
  13454. contextRotate(context, opts);
  13455. }
  13456. opts.chartData.funnelData = drawFunnelDataPoints(series, opts, config, context, process);
  13457. drawLegend(opts.series, opts, config, context, opts.chartData);
  13458. drawToolTipBridge(opts, config, context, process);
  13459. drawCanvas(opts, context);
  13460. },
  13461. onAnimationFinish: function onAnimationFinish() {
  13462. _this.event.trigger('renderComplete');
  13463. } });
  13464. break;
  13465. case 'line':
  13466. this.animationInstance = new Animation({
  13467. timing: 'easeIn',
  13468. duration: duration,
  13469. onProcess: function onProcess(process) {
  13470. context.clearRect(0, 0, opts.width, opts.height);
  13471. if (opts.rotate) {
  13472. contextRotate(context, opts);
  13473. }
  13474. drawYAxisGrid(categories, opts, config, context);
  13475. drawXAxis(categories, opts, config, context);
  13476. var _drawLineDataPoints = drawLineDataPoints(series, opts, config, context, process),
  13477. xAxisPoints = _drawLineDataPoints.xAxisPoints,
  13478. calPoints = _drawLineDataPoints.calPoints,
  13479. eachSpacing = _drawLineDataPoints.eachSpacing;
  13480. opts.chartData.xAxisPoints = xAxisPoints;
  13481. opts.chartData.calPoints = calPoints;
  13482. opts.chartData.eachSpacing = eachSpacing;
  13483. drawYAxis(series, opts, config, context);
  13484. if (opts.enableMarkLine !== false && process === 1) {
  13485. drawMarkLine(opts, config, context);
  13486. }
  13487. drawLegend(opts.series, opts, config, context, opts.chartData);
  13488. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  13489. drawCanvas(opts, context);
  13490. },
  13491. onAnimationFinish: function onAnimationFinish() {
  13492. _this.event.trigger('renderComplete');
  13493. } });
  13494. break;
  13495. case 'mix':
  13496. this.animationInstance = new Animation({
  13497. timing: 'easeIn',
  13498. duration: duration,
  13499. onProcess: function onProcess(process) {
  13500. context.clearRect(0, 0, opts.width, opts.height);
  13501. if (opts.rotate) {
  13502. contextRotate(context, opts);
  13503. }
  13504. drawYAxisGrid(categories, opts, config, context);
  13505. drawXAxis(categories, opts, config, context);
  13506. var _drawMixDataPoints = drawMixDataPoints(series, opts, config, context, process),
  13507. xAxisPoints = _drawMixDataPoints.xAxisPoints,
  13508. calPoints = _drawMixDataPoints.calPoints,
  13509. eachSpacing = _drawMixDataPoints.eachSpacing;
  13510. opts.chartData.xAxisPoints = xAxisPoints;
  13511. opts.chartData.calPoints = calPoints;
  13512. opts.chartData.eachSpacing = eachSpacing;
  13513. drawYAxis(series, opts, config, context);
  13514. if (opts.enableMarkLine !== false && process === 1) {
  13515. drawMarkLine(opts, config, context);
  13516. }
  13517. drawLegend(opts.series, opts, config, context, opts.chartData);
  13518. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  13519. drawCanvas(opts, context);
  13520. },
  13521. onAnimationFinish: function onAnimationFinish() {
  13522. _this.event.trigger('renderComplete');
  13523. } });
  13524. break;
  13525. case 'column':
  13526. this.animationInstance = new Animation({
  13527. timing: 'easeIn',
  13528. duration: duration,
  13529. onProcess: function onProcess(process) {
  13530. context.clearRect(0, 0, opts.width, opts.height);
  13531. if (opts.rotate) {
  13532. contextRotate(context, opts);
  13533. }
  13534. drawYAxisGrid(categories, opts, config, context);
  13535. drawXAxis(categories, opts, config, context);
  13536. var _drawColumnDataPoints = drawColumnDataPoints(series, opts, config, context, process),
  13537. xAxisPoints = _drawColumnDataPoints.xAxisPoints,
  13538. calPoints = _drawColumnDataPoints.calPoints,
  13539. eachSpacing = _drawColumnDataPoints.eachSpacing;
  13540. opts.chartData.xAxisPoints = xAxisPoints;
  13541. opts.chartData.calPoints = calPoints;
  13542. opts.chartData.eachSpacing = eachSpacing;
  13543. drawYAxis(series, opts, config, context);
  13544. if (opts.enableMarkLine !== false && process === 1) {
  13545. drawMarkLine(opts, config, context);
  13546. }
  13547. drawLegend(opts.series, opts, config, context, opts.chartData);
  13548. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  13549. drawCanvas(opts, context);
  13550. },
  13551. onAnimationFinish: function onAnimationFinish() {
  13552. _this.event.trigger('renderComplete');
  13553. } });
  13554. break;
  13555. case 'area':
  13556. this.animationInstance = new Animation({
  13557. timing: 'easeIn',
  13558. duration: duration,
  13559. onProcess: function onProcess(process) {
  13560. context.clearRect(0, 0, opts.width, opts.height);
  13561. if (opts.rotate) {
  13562. contextRotate(context, opts);
  13563. }
  13564. drawYAxisGrid(categories, opts, config, context);
  13565. drawXAxis(categories, opts, config, context);
  13566. var _drawAreaDataPoints = drawAreaDataPoints(series, opts, config, context, process),
  13567. xAxisPoints = _drawAreaDataPoints.xAxisPoints,
  13568. calPoints = _drawAreaDataPoints.calPoints,
  13569. eachSpacing = _drawAreaDataPoints.eachSpacing;
  13570. opts.chartData.xAxisPoints = xAxisPoints;
  13571. opts.chartData.calPoints = calPoints;
  13572. opts.chartData.eachSpacing = eachSpacing;
  13573. drawYAxis(series, opts, config, context);
  13574. if (opts.enableMarkLine !== false && process === 1) {
  13575. drawMarkLine(opts, config, context);
  13576. }
  13577. drawLegend(opts.series, opts, config, context, opts.chartData);
  13578. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  13579. drawCanvas(opts, context);
  13580. },
  13581. onAnimationFinish: function onAnimationFinish() {
  13582. _this.event.trigger('renderComplete');
  13583. } });
  13584. break;
  13585. case 'ring':
  13586. case 'pie':
  13587. this.animationInstance = new Animation({
  13588. timing: 'easeInOut',
  13589. duration: duration,
  13590. onProcess: function onProcess(process) {
  13591. context.clearRect(0, 0, opts.width, opts.height);
  13592. if (opts.rotate) {
  13593. contextRotate(context, opts);
  13594. }
  13595. opts.chartData.pieData = drawPieDataPoints(series, opts, config, context, process);
  13596. drawLegend(opts.series, opts, config, context, opts.chartData);
  13597. drawToolTipBridge(opts, config, context, process);
  13598. drawCanvas(opts, context);
  13599. },
  13600. onAnimationFinish: function onAnimationFinish() {
  13601. _this.event.trigger('renderComplete');
  13602. } });
  13603. break;
  13604. case 'rose':
  13605. this.animationInstance = new Animation({
  13606. timing: 'easeInOut',
  13607. duration: duration,
  13608. onProcess: function onProcess(process) {
  13609. context.clearRect(0, 0, opts.width, opts.height);
  13610. if (opts.rotate) {
  13611. contextRotate(context, opts);
  13612. }
  13613. opts.chartData.pieData = drawRoseDataPoints(series, opts, config, context, process);
  13614. drawLegend(opts.series, opts, config, context, opts.chartData);
  13615. drawToolTipBridge(opts, config, context, process);
  13616. drawCanvas(opts, context);
  13617. },
  13618. onAnimationFinish: function onAnimationFinish() {
  13619. _this.event.trigger('renderComplete');
  13620. } });
  13621. break;
  13622. case 'radar':
  13623. this.animationInstance = new Animation({
  13624. timing: 'easeInOut',
  13625. duration: duration,
  13626. onProcess: function onProcess(process) {
  13627. context.clearRect(0, 0, opts.width, opts.height);
  13628. if (opts.rotate) {
  13629. contextRotate(context, opts);
  13630. }
  13631. opts.chartData.radarData = drawRadarDataPoints(series, opts, config, context, process);
  13632. drawLegend(opts.series, opts, config, context, opts.chartData);
  13633. drawToolTipBridge(opts, config, context, process);
  13634. drawCanvas(opts, context);
  13635. },
  13636. onAnimationFinish: function onAnimationFinish() {
  13637. _this.event.trigger('renderComplete');
  13638. } });
  13639. break;
  13640. case 'arcbar':
  13641. this.animationInstance = new Animation({
  13642. timing: 'easeInOut',
  13643. duration: duration,
  13644. onProcess: function onProcess(process) {
  13645. context.clearRect(0, 0, opts.width, opts.height);
  13646. if (opts.rotate) {
  13647. contextRotate(context, opts);
  13648. }
  13649. opts.chartData.arcbarData = drawArcbarDataPoints(series, opts, config, context, process);
  13650. drawCanvas(opts, context);
  13651. },
  13652. onAnimationFinish: function onAnimationFinish() {
  13653. _this.event.trigger('renderComplete');
  13654. } });
  13655. break;
  13656. case 'gauge':
  13657. this.animationInstance = new Animation({
  13658. timing: 'easeInOut',
  13659. duration: duration,
  13660. onProcess: function onProcess(process) {
  13661. context.clearRect(0, 0, opts.width, opts.height);
  13662. if (opts.rotate) {
  13663. contextRotate(context, opts);
  13664. }
  13665. opts.chartData.gaugeData = drawGaugeDataPoints(categories, series, opts, config, context, process);
  13666. drawCanvas(opts, context);
  13667. },
  13668. onAnimationFinish: function onAnimationFinish() {
  13669. _this.event.trigger('renderComplete');
  13670. } });
  13671. break;
  13672. case 'candle':
  13673. this.animationInstance = new Animation({
  13674. timing: 'easeIn',
  13675. duration: duration,
  13676. onProcess: function onProcess(process) {
  13677. context.clearRect(0, 0, opts.width, opts.height);
  13678. if (opts.rotate) {
  13679. contextRotate(context, opts);
  13680. }
  13681. drawYAxisGrid(categories, opts, config, context);
  13682. drawXAxis(categories, opts, config, context);
  13683. var _drawCandleDataPoints = drawCandleDataPoints(series, seriesMA, opts, config, context, process),
  13684. xAxisPoints = _drawCandleDataPoints.xAxisPoints,
  13685. calPoints = _drawCandleDataPoints.calPoints,
  13686. eachSpacing = _drawCandleDataPoints.eachSpacing;
  13687. opts.chartData.xAxisPoints = xAxisPoints;
  13688. opts.chartData.calPoints = calPoints;
  13689. opts.chartData.eachSpacing = eachSpacing;
  13690. drawYAxis(series, opts, config, context);
  13691. if (opts.enableMarkLine !== false && process === 1) {
  13692. drawMarkLine(opts, config, context);
  13693. }
  13694. if (seriesMA) {
  13695. drawLegend(seriesMA, opts, config, context, opts.chartData);
  13696. } else {
  13697. drawLegend(opts.series, opts, config, context, opts.chartData);
  13698. }
  13699. drawToolTipBridge(opts, config, context, process, eachSpacing, xAxisPoints);
  13700. drawCanvas(opts, context);
  13701. },
  13702. onAnimationFinish: function onAnimationFinish() {
  13703. _this.event.trigger('renderComplete');
  13704. } });
  13705. break;}
  13706. }
  13707. // simple event implement
  13708. function Event() {
  13709. this.events = {};
  13710. }
  13711. Event.prototype.addEventListener = function (type, listener) {
  13712. this.events[type] = this.events[type] || [];
  13713. this.events[type].push(listener);
  13714. };
  13715. Event.prototype.delEventListener = function (type) {
  13716. this.events[type] = [];
  13717. };
  13718. Event.prototype.trigger = function () {
  13719. for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
  13720. args[_key] = arguments[_key];
  13721. }
  13722. var type = args[0];
  13723. var params = args.slice(1);
  13724. if (!!this.events[type]) {
  13725. this.events[type].forEach(function (listener) {
  13726. try {
  13727. listener.apply(null, params);
  13728. } catch (e) {
  13729. console.error(e);
  13730. }
  13731. });
  13732. }
  13733. };
  13734. var Charts = function Charts(opts) {
  13735. opts.pixelRatio = opts.pixelRatio ? opts.pixelRatio : 1;
  13736. opts.fontSize = opts.fontSize ? opts.fontSize * opts.pixelRatio : 13 * opts.pixelRatio;
  13737. opts.title = assign({}, opts.title);
  13738. opts.subtitle = assign({}, opts.subtitle);
  13739. opts.duration = opts.duration ? opts.duration : 1000;
  13740. opts.yAxis = assign({}, {
  13741. data: [],
  13742. showTitle: false,
  13743. disabled: false,
  13744. disableGrid: false,
  13745. splitNumber: 5,
  13746. gridType: 'solid',
  13747. dashLength: 4 * opts.pixelRatio,
  13748. gridColor: '#cccccc',
  13749. padding: 10,
  13750. fontColor: '#666666' },
  13751. opts.yAxis);
  13752. opts.yAxis.dashLength *= opts.pixelRatio;
  13753. opts.yAxis.padding *= opts.pixelRatio;
  13754. opts.xAxis = assign({}, {
  13755. rotateLabel: false,
  13756. type: 'calibration',
  13757. gridType: 'solid',
  13758. dashLength: 4,
  13759. scrollAlign: 'left',
  13760. boundaryGap: 'center',
  13761. axisLine: true,
  13762. axisLineColor: '#cccccc' },
  13763. opts.xAxis);
  13764. opts.xAxis.dashLength *= opts.pixelRatio;
  13765. opts.legend = assign({}, {
  13766. show: true,
  13767. position: 'bottom',
  13768. float: 'center',
  13769. backgroundColor: 'rgba(0,0,0,0)',
  13770. borderColor: 'rgba(0,0,0,0)',
  13771. borderWidth: 0,
  13772. padding: 5,
  13773. margin: 5,
  13774. itemGap: 10,
  13775. fontSize: opts.fontSize,
  13776. lineHeight: opts.fontSize,
  13777. fontColor: '#333333',
  13778. format: {},
  13779. hiddenColor: '#CECECE' },
  13780. opts.legend);
  13781. opts.legend.borderWidth = opts.legend.borderWidth * opts.pixelRatio;
  13782. opts.legend.itemGap = opts.legend.itemGap * opts.pixelRatio;
  13783. opts.legend.padding = opts.legend.padding * opts.pixelRatio;
  13784. opts.legend.margin = opts.legend.margin * opts.pixelRatio;
  13785. opts.extra = assign({}, opts.extra);
  13786. opts.rotate = opts.rotate ? true : false;
  13787. opts.animation = opts.animation ? true : false;
  13788. opts.rotate = opts.rotate ? true : false;
  13789. opts.canvas2d = opts.canvas2d ? true : false;
  13790. var config$$1 = JSON.parse(JSON.stringify(config));
  13791. config$$1.colors = opts.colors ? opts.colors : config$$1.colors;
  13792. config$$1.yAxisTitleWidth = opts.yAxis.disabled !== true && opts.yAxis.title ? config$$1.yAxisTitleWidth : 0;
  13793. if (opts.type == 'pie' || opts.type == 'ring') {
  13794. config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.pie.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio;
  13795. }
  13796. if (opts.type == 'rose') {
  13797. config$$1.pieChartLinePadding = opts.dataLabel === false ? 0 : opts.extra.rose.labelWidth * opts.pixelRatio || config$$1.pieChartLinePadding * opts.pixelRatio;
  13798. }
  13799. config$$1.pieChartTextPadding = opts.dataLabel === false ? 0 : config$$1.pieChartTextPadding * opts.pixelRatio;
  13800. config$$1.yAxisSplit = opts.yAxis.splitNumber ? opts.yAxis.splitNumber : config.yAxisSplit;
  13801. //屏幕旋转
  13802. config$$1.rotate = opts.rotate;
  13803. if (opts.rotate) {
  13804. var tempWidth = opts.width;
  13805. var tempHeight = opts.height;
  13806. opts.width = tempHeight;
  13807. opts.height = tempWidth;
  13808. }
  13809. //适配高分屏
  13810. opts.padding = opts.padding ? opts.padding : config$$1.padding;
  13811. for (var i = 0; i < 4; i++) {
  13812. opts.padding[i] *= opts.pixelRatio;
  13813. }
  13814. config$$1.yAxisWidth = config.yAxisWidth * opts.pixelRatio;
  13815. config$$1.xAxisHeight = config.xAxisHeight * opts.pixelRatio;
  13816. if (opts.enableScroll && opts.xAxis.scrollShow) {
  13817. config$$1.xAxisHeight += 6 * opts.pixelRatio;
  13818. }
  13819. config$$1.xAxisLineHeight = config.xAxisLineHeight * opts.pixelRatio;
  13820. config$$1.fontSize = opts.fontSize;
  13821. config$$1.titleFontSize = config.titleFontSize * opts.pixelRatio;
  13822. config$$1.subtitleFontSize = config.subtitleFontSize * opts.pixelRatio;
  13823. config$$1.toolTipPadding = config.toolTipPadding * opts.pixelRatio;
  13824. config$$1.toolTipLineHeight = config.toolTipLineHeight * opts.pixelRatio;
  13825. config$$1.columePadding = config.columePadding * opts.pixelRatio;
  13826. this.context = opts.context ? opts.context : uni.createCanvasContext(opts.canvasId, opts.$this);
  13827. if (opts.canvas2d) {
  13828. this.context.setStrokeStyle = function (e) {return this.strokeStyle = e;};
  13829. this.context.setLineWidth = function (e) {return this.lineWidth = e;};
  13830. this.context.setLineCap = function (e) {return this.lineCap = e;};
  13831. this.context.setFontSize = function (e) {return this.font = e + "px sans-serif";};
  13832. this.context.setFillStyle = function (e) {return this.fillStyle = e;};
  13833. this.context.draw = function () {};
  13834. }
  13835. /* 兼容原生H5
  13836. this.context = document.getElementById(opts.canvasId).getContext("2d");
  13837. this.context.setStrokeStyle = function(e){ return this.strokeStyle=e; }
  13838. this.context.setLineWidth = function(e){ return this.lineWidth=e; }
  13839. this.context.setLineCap = function(e){ return this.lineCap=e; }
  13840. this.context.setFontSize = function(e){ return this.font=e+"px sans-serif"; }
  13841. this.context.setFillStyle = function(e){ return this.fillStyle=e; }
  13842. this.context.draw = function(){ }
  13843. */
  13844. opts.chartData = {};
  13845. this.event = new Event();
  13846. this.scrollOption = {
  13847. currentOffset: 0,
  13848. startTouchX: 0,
  13849. distance: 0,
  13850. lastMoveTime: 0 };
  13851. this.opts = opts;
  13852. this.config = config$$1;
  13853. drawCharts.call(this, opts.type, opts, config$$1, this.context);
  13854. };
  13855. Charts.prototype.updateData = function () {
  13856. var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  13857. this.opts = assign({}, this.opts, data);
  13858. this.opts.updateData = true;
  13859. var scrollPosition = data.scrollPosition || 'current';
  13860. switch (scrollPosition) {
  13861. case 'current':
  13862. this.opts._scrollDistance_ = this.scrollOption.currentOffset;
  13863. break;
  13864. case 'left':
  13865. this.opts._scrollDistance_ = 0;
  13866. this.scrollOption = {
  13867. currentOffset: 0,
  13868. startTouchX: 0,
  13869. distance: 0,
  13870. lastMoveTime: 0 };
  13871. break;
  13872. case 'right':
  13873. var _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
  13874. yAxisWidth = _calYAxisData.yAxisWidth;
  13875. this.config.yAxisWidth = yAxisWidth;
  13876. var offsetLeft = 0;
  13877. var _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
  13878. xAxisPoints = _getXAxisPoints0.xAxisPoints,
  13879. startX = _getXAxisPoints0.startX,
  13880. endX = _getXAxisPoints0.endX,
  13881. eachSpacing = _getXAxisPoints0.eachSpacing;
  13882. var totalWidth = eachSpacing * (xAxisPoints.length - 1);
  13883. var screenWidth = endX - startX;
  13884. offsetLeft = screenWidth - totalWidth;
  13885. this.scrollOption = {
  13886. currentOffset: offsetLeft,
  13887. startTouchX: offsetLeft,
  13888. distance: 0,
  13889. lastMoveTime: 0 };
  13890. this.opts._scrollDistance_ = offsetLeft;
  13891. break;}
  13892. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  13893. };
  13894. Charts.prototype.zoom = function () {
  13895. var val = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.opts.xAxis.itemCount;
  13896. if (this.opts.enableScroll !== true) {
  13897. console.log('请启用滚动条后使用!');
  13898. return;
  13899. }
  13900. //当前屏幕中间点
  13901. var centerPoint = Math.round(Math.abs(this.scrollOption.currentOffset) / this.opts.chartData.eachSpacing) + Math.round(
  13902. this.opts.xAxis.itemCount / 2);
  13903. this.opts.animation = false;
  13904. this.opts.xAxis.itemCount = val.itemCount;
  13905. //重新计算x轴偏移距离
  13906. var _calYAxisData = calYAxisData(this.opts.series, this.opts, this.config),
  13907. yAxisWidth = _calYAxisData.yAxisWidth;
  13908. this.config.yAxisWidth = yAxisWidth;
  13909. var offsetLeft = 0;
  13910. var _getXAxisPoints0 = getXAxisPoints(this.opts.categories, this.opts, this.config),
  13911. xAxisPoints = _getXAxisPoints0.xAxisPoints,
  13912. startX = _getXAxisPoints0.startX,
  13913. endX = _getXAxisPoints0.endX,
  13914. eachSpacing = _getXAxisPoints0.eachSpacing;
  13915. var centerLeft = eachSpacing * centerPoint;
  13916. var screenWidth = endX - startX;
  13917. var MaxLeft = screenWidth - eachSpacing * (xAxisPoints.length - 1);
  13918. offsetLeft = screenWidth / 2 - centerLeft;
  13919. if (offsetLeft > 0) {
  13920. offsetLeft = 0;
  13921. }
  13922. if (offsetLeft < MaxLeft) {
  13923. offsetLeft = MaxLeft;
  13924. }
  13925. this.scrollOption = {
  13926. currentOffset: offsetLeft,
  13927. startTouchX: offsetLeft,
  13928. distance: 0,
  13929. lastMoveTime: 0 };
  13930. this.opts._scrollDistance_ = offsetLeft;
  13931. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  13932. };
  13933. Charts.prototype.stopAnimation = function () {
  13934. this.animationInstance && this.animationInstance.stop();
  13935. };
  13936. Charts.prototype.addEventListener = function (type, listener) {
  13937. this.event.addEventListener(type, listener);
  13938. };
  13939. Charts.prototype.delEventListener = function (type) {
  13940. this.event.delEventListener(type);
  13941. };
  13942. Charts.prototype.getCurrentDataIndex = function (e) {
  13943. var touches = null;
  13944. if (e.changedTouches) {
  13945. touches = e.changedTouches[0];
  13946. } else {
  13947. touches = e.mp.changedTouches[0];
  13948. }
  13949. if (touches) {
  13950. var _touches$ = getTouches(touches, this.opts, e);
  13951. if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose') {
  13952. return findPieChartCurrentIndex({
  13953. x: _touches$.x,
  13954. y: _touches$.y },
  13955. this.opts.chartData.pieData);
  13956. } else if (this.opts.type === 'radar') {
  13957. return findRadarChartCurrentIndex({
  13958. x: _touches$.x,
  13959. y: _touches$.y },
  13960. this.opts.chartData.radarData, this.opts.categories.length);
  13961. } else if (this.opts.type === 'funnel') {
  13962. return findFunnelChartCurrentIndex({
  13963. x: _touches$.x,
  13964. y: _touches$.y },
  13965. this.opts.chartData.funnelData);
  13966. } else if (this.opts.type === 'map') {
  13967. return findMapChartCurrentIndex({
  13968. x: _touches$.x,
  13969. y: _touches$.y },
  13970. this.opts);
  13971. } else if (this.opts.type === 'word') {
  13972. return findWordChartCurrentIndex({
  13973. x: _touches$.x,
  13974. y: _touches$.y },
  13975. this.opts.chartData.wordCloudData);
  13976. } else {
  13977. return findCurrentIndex({
  13978. x: _touches$.x,
  13979. y: _touches$.y },
  13980. this.opts.chartData.calPoints, this.opts, this.config, Math.abs(this.scrollOption.currentOffset));
  13981. }
  13982. }
  13983. return -1;
  13984. };
  13985. Charts.prototype.getLegendDataIndex = function (e) {
  13986. var touches = null;
  13987. if (e.changedTouches) {
  13988. touches = e.changedTouches[0];
  13989. } else {
  13990. touches = e.mp.changedTouches[0];
  13991. }
  13992. if (touches) {
  13993. var _touches$ = getTouches(touches, this.opts, e);
  13994. return findLegendIndex({
  13995. x: _touches$.x,
  13996. y: _touches$.y },
  13997. this.opts.chartData.legendData);
  13998. }
  13999. return -1;
  14000. };
  14001. Charts.prototype.touchLegend = function (e) {
  14002. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  14003. var touches = null;
  14004. if (e.changedTouches) {
  14005. touches = e.changedTouches[0];
  14006. } else {
  14007. touches = e.mp.changedTouches[0];
  14008. }
  14009. if (touches) {
  14010. var _touches$ = getTouches(touches, this.opts, e);
  14011. var index = this.getLegendDataIndex(e);
  14012. if (index >= 0) {
  14013. this.opts.series[index].show = !this.opts.series[index].show;
  14014. this.opts.animation = option.animation ? true : false;
  14015. this.opts._scrollDistance_ = this.scrollOption.currentOffset;
  14016. drawCharts.call(this, this.opts.type, this.opts, this.config, this.context);
  14017. }
  14018. }
  14019. };
  14020. Charts.prototype.showToolTip = function (e) {
  14021. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  14022. var touches = null;
  14023. if (e.changedTouches) {
  14024. touches = e.changedTouches[0];
  14025. } else {
  14026. touches = e.mp.changedTouches[0];
  14027. }
  14028. if (!touches) {
  14029. console.log("touchError");
  14030. }
  14031. var _touches$ = getTouches(touches, this.opts, e);
  14032. var currentOffset = this.scrollOption.currentOffset;
  14033. var opts = assign({}, this.opts, {
  14034. _scrollDistance_: currentOffset,
  14035. animation: false });
  14036. if (this.opts.type === 'line' || this.opts.type === 'area' || this.opts.type === 'column') {
  14037. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14038. if (index > -1) {
  14039. var seriesData = getSeriesDataItem(this.opts.series, index);
  14040. if (seriesData.length !== 0) {
  14041. var _getToolTipData = getToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories, option),
  14042. textList = _getToolTipData.textList,
  14043. offset = _getToolTipData.offset;
  14044. offset.y = _touches$.y;
  14045. opts.tooltip = {
  14046. textList: option.textList ? option.textList : textList,
  14047. offset: offset,
  14048. option: option,
  14049. index: index };
  14050. }
  14051. }
  14052. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14053. }
  14054. if (this.opts.type === 'mix') {
  14055. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14056. if (index > -1) {
  14057. var currentOffset = this.scrollOption.currentOffset;
  14058. var opts = assign({}, this.opts, {
  14059. _scrollDistance_: currentOffset,
  14060. animation: false });
  14061. var seriesData = getSeriesDataItem(this.opts.series, index);
  14062. if (seriesData.length !== 0) {
  14063. var _getMixToolTipData = getMixToolTipData(seriesData, this.opts.chartData.calPoints, index, this.opts.categories, option),
  14064. textList = _getMixToolTipData.textList,
  14065. offset = _getMixToolTipData.offset;
  14066. offset.y = _touches$.y;
  14067. opts.tooltip = {
  14068. textList: option.textList ? option.textList : textList,
  14069. offset: offset,
  14070. option: option,
  14071. index: index };
  14072. }
  14073. }
  14074. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14075. }
  14076. if (this.opts.type === 'candle') {
  14077. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14078. if (index > -1) {
  14079. var currentOffset = this.scrollOption.currentOffset;
  14080. var opts = assign({}, this.opts, {
  14081. _scrollDistance_: currentOffset,
  14082. animation: false });
  14083. var seriesData = getSeriesDataItem(this.opts.series, index);
  14084. if (seriesData.length !== 0) {
  14085. var _getToolTipData = getCandleToolTipData(this.opts.series[0].data, seriesData, this.opts.chartData.calPoints,
  14086. index, this.opts.categories, this.opts.extra.candle, option),
  14087. textList = _getToolTipData.textList,
  14088. offset = _getToolTipData.offset;
  14089. offset.y = _touches$.y;
  14090. opts.tooltip = {
  14091. textList: option.textList ? option.textList : textList,
  14092. offset: offset,
  14093. option: option,
  14094. index: index };
  14095. }
  14096. }
  14097. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14098. }
  14099. if (this.opts.type === 'pie' || this.opts.type === 'ring' || this.opts.type === 'rose' || this.opts.type === 'funnel') {
  14100. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14101. if (index > -1) {
  14102. var currentOffset = this.scrollOption.currentOffset;
  14103. var opts = assign({}, this.opts, {
  14104. _scrollDistance_: currentOffset,
  14105. animation: false });
  14106. var seriesData = this.opts._series_[index];
  14107. var textList = [{
  14108. text: option.format ? option.format(seriesData) : seriesData.name + ': ' + seriesData.data,
  14109. color: seriesData.color }];
  14110. var offset = {
  14111. x: _touches$.x,
  14112. y: _touches$.y };
  14113. opts.tooltip = {
  14114. textList: option.textList ? option.textList : textList,
  14115. offset: offset,
  14116. option: option,
  14117. index: index };
  14118. }
  14119. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14120. }
  14121. if (this.opts.type === 'map' || this.opts.type === 'word') {
  14122. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14123. if (index > -1) {
  14124. var currentOffset = this.scrollOption.currentOffset;
  14125. var opts = assign({}, this.opts, {
  14126. _scrollDistance_: currentOffset,
  14127. animation: false });
  14128. var seriesData = this.opts._series_[index];
  14129. var textList = [{
  14130. text: option.format ? option.format(seriesData) : seriesData.properties.name, color: seriesData.color }];
  14131. var offset = {
  14132. x: _touches$.x,
  14133. y: _touches$.y };
  14134. opts.tooltip = {
  14135. textList: option.textList ? option.textList : textList,
  14136. offset: offset,
  14137. option: option,
  14138. index: index };
  14139. }
  14140. opts.updateData = false;
  14141. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14142. }
  14143. if (this.opts.type === 'radar') {
  14144. var index = option.index == undefined ? this.getCurrentDataIndex(e) : option.index;
  14145. if (index > -1) {
  14146. var currentOffset = this.scrollOption.currentOffset;
  14147. var opts = assign({}, this.opts, {
  14148. _scrollDistance_: currentOffset,
  14149. animation: false });
  14150. var seriesData = getSeriesDataItem(this.opts.series, index);
  14151. if (seriesData.length !== 0) {
  14152. var textList = seriesData.map(function (item) {
  14153. return {
  14154. text: option.format ? option.format(item) : item.name + ': ' + item.data, color: item.color };
  14155. });
  14156. var offset = {
  14157. x: _touches$.x,
  14158. y: _touches$.y };
  14159. opts.tooltip = {
  14160. textList: option.textList ? option.textList : textList,
  14161. offset: offset,
  14162. option: option,
  14163. index: index };
  14164. }
  14165. }
  14166. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14167. }
  14168. };
  14169. Charts.prototype.translate = function (distance) {
  14170. this.scrollOption = {
  14171. currentOffset: distance,
  14172. startTouchX: distance,
  14173. distance: 0,
  14174. lastMoveTime: 0 };
  14175. var opts = assign({}, this.opts, {
  14176. _scrollDistance_: distance,
  14177. animation: false });
  14178. drawCharts.call(this, this.opts.type, opts, this.config, this.context);
  14179. };
  14180. Charts.prototype.scrollStart = function (e) {
  14181. var touches = null;
  14182. if (e.changedTouches) {
  14183. touches = e.changedTouches[0];
  14184. } else {
  14185. touches = e.mp.changedTouches[0];
  14186. }
  14187. var _touches$ = getTouches(touches, this.opts, e);
  14188. if (touches && this.opts.enableScroll === true) {
  14189. this.scrollOption.startTouchX = _touches$.x;
  14190. }
  14191. };
  14192. Charts.prototype.scroll = function (e) {
  14193. if (this.scrollOption.lastMoveTime === 0) {
  14194. this.scrollOption.lastMoveTime = Date.now();
  14195. }
  14196. var Limit = this.opts.extra.touchMoveLimit || 20;
  14197. var currMoveTime = Date.now();
  14198. var duration = currMoveTime - this.scrollOption.lastMoveTime;
  14199. if (duration < Math.floor(1000 / Limit)) return;
  14200. this.scrollOption.lastMoveTime = currMoveTime;
  14201. var touches = null;
  14202. if (e.changedTouches) {
  14203. touches = e.changedTouches[0];
  14204. } else {
  14205. touches = e.mp.changedTouches[0];
  14206. }
  14207. if (touches && this.opts.enableScroll === true) {
  14208. var _touches$ = getTouches(touches, this.opts, e);
  14209. var _distance;
  14210. _distance = _touches$.x - this.scrollOption.startTouchX;
  14211. var currentOffset = this.scrollOption.currentOffset;
  14212. var validDistance = calValidDistance(this, currentOffset + _distance, this.opts.chartData, this.config, this.opts);
  14213. this.scrollOption.distance = _distance = validDistance - currentOffset;
  14214. var opts = assign({}, this.opts, {
  14215. _scrollDistance_: currentOffset + _distance,
  14216. animation: false });
  14217. drawCharts.call(this, opts.type, opts, this.config, this.context);
  14218. return currentOffset + _distance;
  14219. }
  14220. };
  14221. Charts.prototype.scrollEnd = function (e) {
  14222. if (this.opts.enableScroll === true) {
  14223. var _scrollOption = this.scrollOption,
  14224. currentOffset = _scrollOption.currentOffset,
  14225. distance = _scrollOption.distance;
  14226. this.scrollOption.currentOffset = currentOffset + distance;
  14227. this.scrollOption.distance = 0;
  14228. }
  14229. };
  14230. if ( true && typeof module.exports === "object") {
  14231. module.exports = Charts;
  14232. //export default Charts;//建议使用nodejs的module导出方式,如报错请使用export方式导出
  14233. }
  14234. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  14235. /***/ }),
  14236. /***/ 35:
  14237. /*!***************************************************!*\
  14238. !*** E:/bigDataApp/uview-ui/libs/function/sys.js ***!
  14239. \***************************************************/
  14240. /*! no static exports found */
  14241. /***/ (function(module, exports, __webpack_require__) {
  14242. "use strict";
  14243. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.os = os;exports.sys = sys;function os() {
  14244. return uni.getSystemInfoSync().platform;
  14245. };
  14246. function sys() {
  14247. return uni.getSystemInfoSync();
  14248. }
  14249. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  14250. /***/ }),
  14251. /***/ 36:
  14252. /*!********************************************************!*\
  14253. !*** E:/bigDataApp/uview-ui/libs/function/debounce.js ***!
  14254. \********************************************************/
  14255. /*! no static exports found */
  14256. /***/ (function(module, exports, __webpack_require__) {
  14257. "use strict";
  14258. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var timeout = null;
  14259. /**
  14260. * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数
  14261. *
  14262. * @param {Function} func 要执行的回调函数
  14263. * @param {Number} wait 延时的时间
  14264. * @param {Boolean} immediate 是否立即执行
  14265. * @return null
  14266. */
  14267. 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;
  14268. // 清除定时器
  14269. if (timeout !== null) clearTimeout(timeout);
  14270. // 立即执行,此类情况一般用不到
  14271. if (immediate) {
  14272. var callNow = !timeout;
  14273. timeout = setTimeout(function () {
  14274. timeout = null;
  14275. }, wait);
  14276. if (callNow) typeof func === 'function' && func();
  14277. } else {
  14278. // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法
  14279. timeout = setTimeout(function () {
  14280. typeof func === 'function' && func();
  14281. }, wait);
  14282. }
  14283. }var _default =
  14284. debounce;exports.default = _default;
  14285. /***/ }),
  14286. /***/ 37:
  14287. /*!********************************************************!*\
  14288. !*** E:/bigDataApp/uview-ui/libs/function/throttle.js ***!
  14289. \********************************************************/
  14290. /*! no static exports found */
  14291. /***/ (function(module, exports, __webpack_require__) {
  14292. "use strict";
  14293. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var timer, flag;
  14294. /**
  14295. * 节流原理:在一定时间内,只能触发一次
  14296. *
  14297. * @param {Function} func 要执行的回调函数
  14298. * @param {Number} wait 延时的时间
  14299. * @param {Boolean} immediate 是否立即执行
  14300. * @return null
  14301. */
  14302. 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;
  14303. if (immediate) {
  14304. if (!flag) {
  14305. flag = true;
  14306. // 如果是立即执行,则在wait毫秒内开始时执行
  14307. typeof func === 'function' && func();
  14308. timer = setTimeout(function () {
  14309. flag = false;
  14310. }, wait);
  14311. }
  14312. } else {
  14313. if (!flag) {
  14314. flag = true;
  14315. // 如果是非立即执行,则在wait毫秒内的结束处执行
  14316. timer = setTimeout(function () {
  14317. flag = false;
  14318. typeof func === 'function' && func();
  14319. }, wait);
  14320. }
  14321. }
  14322. };var _default =
  14323. throttle;exports.default = _default;
  14324. /***/ }),
  14325. /***/ 38:
  14326. /*!****************************************************!*\
  14327. !*** E:/bigDataApp/uview-ui/libs/config/config.js ***!
  14328. \****************************************************/
  14329. /*! no static exports found */
  14330. /***/ (function(module, exports, __webpack_require__) {
  14331. "use strict";
  14332. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 此版本发布于2020-11-16
  14333. var version = '1.8.1';var _default =
  14334. {
  14335. v: version,
  14336. version: version,
  14337. // 主题名称
  14338. type: [
  14339. 'primary',
  14340. 'success',
  14341. 'info',
  14342. 'error',
  14343. 'warning'] };exports.default = _default;
  14344. /***/ }),
  14345. /***/ 39:
  14346. /*!****************************************************!*\
  14347. !*** E:/bigDataApp/uview-ui/libs/config/zIndex.js ***!
  14348. \****************************************************/
  14349. /*! no static exports found */
  14350. /***/ (function(module, exports, __webpack_require__) {
  14351. "use strict";
  14352. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // uniapp在H5中各API的z-index值如下:
  14353. /**
  14354. * actionsheet: 999
  14355. * modal: 999
  14356. * navigate: 998
  14357. * tabbar: 998
  14358. * toast: 999
  14359. */var _default =
  14360. {
  14361. toast: 10090,
  14362. noNetwork: 10080,
  14363. // popup包含popup,actionsheet,keyboard,picker的值
  14364. popup: 10075,
  14365. mask: 10070,
  14366. navbar: 980,
  14367. topTips: 975,
  14368. sticky: 970,
  14369. indexListSticky: 965 };exports.default = _default;
  14370. /***/ }),
  14371. /***/ 4:
  14372. /*!********************************!*\
  14373. !*** E:/bigDataApp/pages.json ***!
  14374. \********************************/
  14375. /*! no static exports found */
  14376. /***/ (function(module, exports) {
  14377. /***/ }),
  14378. /***/ 40:
  14379. /*!*********************************!*\
  14380. !*** E:/bigDataApp/util/api.js ***!
  14381. \*********************************/
  14382. /*! no static exports found */
  14383. /***/ (function(module, exports, __webpack_require__) {
  14384. "use strict";
  14385. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.myRequest = void 0; // const BASE_URL='http://8.136.98.49:8002'
  14386. var BASE_URL = '';
  14387. var myRequest = function myRequest(options) {
  14388. BASE_URL = uni.getStorageSync('http');
  14389. if (BASE_URL == '') {
  14390. BASE_URL = 'http://8.136.98.49:8002';
  14391. }
  14392. console.log(BASE_URL);
  14393. var session_key = "";
  14394. session_key = uni.getStorageSync('session_key');
  14395. var url = options.url;
  14396. var data = options.data || {};
  14397. if (url != 'user.login.login_user' && url != 'pest.pests.insect_discern' &&
  14398. url != 'pest.pests.plant_discern' &&
  14399. url != 'pest.pests.pests_contrast' && url != 'pest.pests.pests_expert_img' &&
  14400. url != 'pest.pests.pests_img' && url != 'recognizationSys' &&
  14401. url != 'base.bases.base_photo' && url != 'pest.warning_record.rolemanage_img' &&
  14402. url != 'home.homes.personal_photo' && url != 'ascend.ascend_manage.product_info' &&
  14403. url != 'ascend.ascend_manage.quality_info' && url != 'ascend.ascend_manage.grow_info' &&
  14404. url != 'ascend.ascend_manage.all_ascend' && url != 'after_sale.after_sale_manage.device_check' &&
  14405. url != 'after_sale.after_sale_manage.aftersale_apply') {
  14406. data.token = session_key;
  14407. }
  14408. return new Promise(function (resolve, reject) {
  14409. uni.request({
  14410. url: BASE_URL + options.url,
  14411. method: options.method || 'POST',
  14412. header: {
  14413. "Content-Type": "application/x-www-form-urlencoded" },
  14414. data: data,
  14415. success: function success(res) {
  14416. if (res.data.message != "") {
  14417. return uni.showToast({
  14418. title: res.data.message,
  14419. icon: "none" });
  14420. }
  14421. resolve(res.data.data);
  14422. },
  14423. fail: function fail(err) {
  14424. uni.showToast({
  14425. title: '请求接口失败' });
  14426. reject(err);
  14427. } });
  14428. });
  14429. };exports.myRequest = myRequest;
  14430. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-weixin/dist/index.js */ 1)["default"]))
  14431. /***/ }),
  14432. /***/ 426:
  14433. /*!*****************************************************!*\
  14434. !*** E:/bigDataApp/static/data/cbd_pest_library.js ***!
  14435. \*****************************************************/
  14436. /*! no static exports found */
  14437. /***/ (function(module, exports, __webpack_require__) {
  14438. "use strict";
  14439. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; // 害虫库
  14440. var insect_dict = { '1': '金龟子',
  14441. '2': '夜蛾',
  14442. '3': '二点委夜蛾',
  14443. '4': '梨剑纹夜蛾',
  14444. '5': '杨扇舟蛾',
  14445. '6': '舟蛾',
  14446. '7': '旋幽夜蛾',
  14447. '8': '蝼蛄',
  14448. '9': '步甲',
  14449. '10': '螟蛾',
  14450. '11': '毛黄鳃金龟',
  14451. '12': '尺蛾',
  14452. '13': '剑纹夜蛾',
  14453. '14': '粉缘钻夜蛾',
  14454. '15': '夜蛾科',
  14455. '16': '七星瓢虫',
  14456. '17': '棉铃虫',
  14457. '18': '蜻蜓',
  14458. '19': '蚊',
  14459. '20': '东方粘虫',
  14460. '21': '叶蝉',
  14461. '22': '春尺蠖',
  14462. '23': '雄性春尺蠖',
  14463. '24': '杨小舟蛾',
  14464. '25': '甘蓝夜蛾',
  14465. '26': '小地老虎',
  14466. '27': '两点尼夜蛾',
  14467. '28': '柳阴翅斑螟',
  14468. '29': '桑褶翅尺蛾',
  14469. '30': '宽胫夜蛾',
  14470. '31': '尺蠖',
  14471. '32': '一点钻夜蛾',
  14472. '33': '天蛾',
  14473. '34': '裳夜蛾',
  14474. '35': '灯蛾',
  14475. '36': '美国白蛾',
  14476. '37': '八字白眉天蛾',
  14477. '38': '陌夜蛾',
  14478. '39': '豆天蛾',
  14479. '40': '麦蛾',
  14480. '41': '围连环夜蛾',
  14481. '42': '亚美尺蛾',
  14482. '43': '梨星毛虫',
  14483. '44': '银锭夜蛾',
  14484. '45': '黄臀灯蛾',
  14485. '46': '大螟',
  14486. '47': '燕尾舟蛾',
  14487. '48': '榆津尺蛾',
  14488. '49': '朽木夜蛾',
  14489. '50': '黄地老虎',
  14490. '51': '白钩粘夜蛾',
  14491. '52': '桃蛀螟',
  14492. '53': '甜菜夜蛾',
  14493. '54': '斜纹夜蛾',
  14494. '55': '蚀夜蛾',
  14495. '56': '淡银锭夜蛾',
  14496. '57': '齿美冬夜蛾',
  14497. '58': '一点金刚钻',
  14498. '59': '胡桃豹夜蛾',
  14499. '60': '桑剑纹夜蛾',
  14500. '61': '蓝目天蛾',
  14501. '62': '黑绒绢金龟',
  14502. '63': '烟青虫',
  14503. '64': '暗黑鳃金龟',
  14504. '65': '中华绒金龟',
  14505. '66': '八字地老虎',
  14506. '67': '榆绿天蛾',
  14507. '68': '红星雪灯蛾',
  14508. '69': '雀纹天蛾',
  14509. '70': '铜绿丽金龟',
  14510. '71': '水龟虫',
  14511. '72': '曲线尼夜蛾',
  14512. '73': '粘虫',
  14513. '74': '瘦银锭夜蛾',
  14514. '75': '红天蛾',
  14515. '76': '鳃金龟',
  14516. '77': '大黑鳃金龟',
  14517. '78': '大地老虎',
  14518. '79': '玉米螟',
  14519. '80': '赤角盲蝽',
  14520. '81': '槐尺蛾',
  14521. '82': '银纹夜蛾',
  14522. '83': '天牛',
  14523. '84': '乏夜蛾',
  14524. '85': '丁香天蛾',
  14525. '86': '构月天蛾',
  14526. '87': '虎甲',
  14527. '88': '劳氏粘虫',
  14528. '89': '白薯天蛾',
  14529. '90': '广鹿蛾',
  14530. '91': '二十八星瓢虫',
  14531. '92': '腮金龟',
  14532. '93': '人纹污夜蛾',
  14533. '94': '叩甲',
  14534. '95': '楸蠹野螟',
  14535. '96': '丝绵木金星尺蛾',
  14536. '97': '红缘灯蛾',
  14537. '98': '黄褐丽金龟',
  14538. '99': '螟蛾科',
  14539. '100': '红棕灰夜蛾',
  14540. '101': '黑绒绢金龟',
  14541. '102': '广鹿灯蛾',
  14542. '103': '蝽',
  14543. '104': '蜂',
  14544. '105': '大造桥虫',
  14545. '106': '童剑纹夜蛾',
  14546. '107': '晃剑纹夜蛾',
  14547. '108': '钩粘虫',
  14548. '109': '直影夜蛾',
  14549. '110': '毛黄绢金龟',
  14550. '111': '乌氏小尾天蚕蛾',
  14551. '112': '褐边绿刺蛾',
  14552. '113': '广鹿舟蛾',
  14553. '114': '颜倾城',
  14554. '115': '龙虱',
  14555. '116': '双带盘瓢虫',
  14556. '117': '槲犹冬夜蛾',
  14557. '118': '洋槐天蛾',
  14558. '119': '弧角散纹夜蛾',
  14559. '120': '黄脉天蛾',
  14560. '121': '葡萄天蛾',
  14561. '122': '桃六点天蛾',
  14562. '123': '异色瓢虫',
  14563. '124': '榆黄足毒蛾',
  14564. '125': '客来夜蛾',
  14565. '126': '桦尺蛾',
  14566. '127': '草地螟',
  14567. '128': '细条纹野螟',
  14568. '129': '污灯蛾属',
  14569. '130': '杨二尾舟蛾',
  14570. '131': '克什杆野螟',
  14571. '132': '筱客来夜蛾',
  14572. '133': '栗六点天蛾',
  14573. '134': '紫光盾天蛾',
  14574. '135': '款冬玉米螟',
  14575. '136': '草蛉',
  14576. '137': '亚麻篱灯蛾',
  14577. '138': '扁连环夜蛾',
  14578. '139': '圣蜣螂',
  14579. '140': '白钩粘虫',
  14580. '141': '苇实夜蛾',
  14581. '142': '姬蜂',
  14582. '143': '秘夜蛾',
  14583. '144': '织网夜蛾',
  14584. '145': '深色白眉天蛾',
  14585. '146': '短扇舟蛾',
  14586. '147': '白须天蛾',
  14587. '148': '歌梦尼夜蛾',
  14588. '149': '海安夜蛾',
  14589. '150': '满丫纹夜蛾',
  14590. '151': '蟋蟀',
  14591. '152': '双斑青步甲',
  14592. '153': '白条夜蛾',
  14593. '154': '蟪蛄',
  14594. '155': '负子蝽',
  14595. '156': '脊青步甲',
  14596. '157': '宽斑青步甲',
  14597. '158': '稻从卷叶螟',
  14598. '159': '淡剑夜蛾',
  14599. '160': '甜菜白带野螟',
  14600. '161': '樗蚕',
  14601. '162': '蒙古寒蝉',
  14602. '163': '中带三角夜蛾',
  14603. '164': '蝗虫',
  14604. '165': '多色异丽金龟',
  14605. '166': '白色小卷蛾',
  14606. '167': '狭边青步甲',
  14607. '168': '棉卷叶野螟',
  14608. '169': '豆荚野螟',
  14609. '170': '麻小食心虫',
  14610. '171': '星斑虎甲',
  14611. '172': '黄缘龙虱',
  14612. '173': '无斑弧丽金龟',
  14613. '174': '白额鹰翅天蛾',
  14614. '175': '日本真龙虱',
  14615. '176': '山东云斑螟',
  14616. '177': '小文夜蛾',
  14617. '178': '三条蛀野螟',
  14618. '179': '榆掌舟蛾',
  14619. '180': '刺槐掌舟蛾',
  14620. '181': '星绒天蛾',
  14621. '182': '杨剑舟蛾',
  14622. '183': '刀夜蛾',
  14623. '184': '红节天蛾',
  14624. '185': '星白雪灯蛾',
  14625. '186': '桃剑纹夜蛾',
  14626. '187': '谐夜蛾',
  14627. '188': '小剑纹夜蛾',
  14628. '189': '鸣鸣蝉',
  14629. '190': '姬夜蛾',
  14630. '191': '落叶松毛虫',
  14631. '192': '苹六点天蛾',
  14632. '193': '四斑绢野螟',
  14633. '194': '甘薯天蛾',
  14634. '195': '小线角木蠹蛾',
  14635. '196': '三斑蕊夜蛾',
  14636. '197': '白雪灯蛾',
  14637. '198': '黄刺蛾',
  14638. '199': '茶翅蝽',
  14639. '200': '杨树枯叶蛾',
  14640. "201": "标瑙夜蛾",
  14641. "202": "瓜绢野螟",
  14642. "203": "稻绿蝽",
  14643. "204": "杨雪毒蛾",
  14644. "205": "榆白边舟蛾",
  14645. "206": "扁刺蛾",
  14646. "207": "绒黏夜蛾",
  14647. "208": "庸肖毛翅夜蛾",
  14648. "209": "中华婪步甲",
  14649. "210": "褐黄前锹甲",
  14650. "211": "旱柳原野螟",
  14651. "212": "巨影夜蛾",
  14652. "213": "食蚜蝇",
  14653. "214": "双斑葬甲",
  14654. "215": "黄毒蛾",
  14655. "216": "婪步甲",
  14656. "217": "土甲",
  14657. "218": "中华真地鳖",
  14658. "219": "紫线夜蛾",
  14659. "220": "小黄鳃金龟",
  14660. "221": "中华真土鳖",
  14661. "222": "云斑虎甲",
  14662. "223": "中华黧尺蛾",
  14663. "224": "中华绿刺蛾",
  14664. "225": "巨豹纹尺蛾",
  14665. "226": "多斑豹蠹蛾",
  14666. "227": "桑尺蛾",
  14667. "228": "灰直纹螟",
  14668. "229": "中国绿刺蛾",
  14669. "230": "云杉梢斑螟",
  14670. "231": "桑绢野螟",
  14671. "232": "黄杨绢野螟",
  14672. "233": "突背斑红蝽",
  14673. "234": "高粱条螟",
  14674. "235": "小麦负泥虫",
  14675. "236": "苹掌舟蛾",
  14676. "237": "绒粘夜蛾",
  14677. "238": "灰白灯蛾",
  14678. "239": "隐丫纹夜蛾",
  14679. "240": "满纹夜蛾",
  14680. "241": "黑剑狼夜蛾",
  14681. "242": "蜣螂",
  14682. "243": "福婆鳃金龟",
  14683. "244": "雨尺蛾",
  14684. "245": "优美苔蛾",
  14685. "246": "黄斑野螟",
  14686. "247": "疆夜蛾",
  14687. "248": "六点天蛾",
  14688. "249": "斜线夜蛾",
  14689. "250": "石榴巾夜蛾",
  14690. "251": "绒星天蛾",
  14691. "252": "霜天蛾",
  14692. "253": "大田鳖",
  14693. "254": "灰双纹螟",
  14694. "255": "青尺蛾",
  14695. "256": "二线绿尺蛾",
  14696. "257": "散纹夜蛾",
  14697. "258": "红双线尺蛾",
  14698. "259": "胞短栉夜蛾",
  14699. "260": "飞虱科",
  14700. "261": "桃多斑野螟",
  14701. "262": "甜菜青野螟",
  14702. "263": "核桃鹰翅天蛾",
  14703. "264": "角顶尺蛾",
  14704. "265": "葡萄缺角天蛾",
  14705. "266": "绿尾大蚕蛾",
  14706. "267": "杨褐枯叶蝶",
  14707. "268": "双云尺蛾",
  14708. "269": "斑拟兜夜蛾",
  14709. "270": "阿莎尺蛾",
  14710. "271": "榄绿岐角螟",
  14711. "272": "青革土蝽",
  14712. "273": "核桃美舟蛾",
  14713. "274": "斑点卷叶螟",
  14714. "275": "黄褐箩纹蛾",
  14715. "276": "白环红天蛾",
  14716. "277": "白腹网丛螟",
  14717. "278": "枯叶蛾",
  14718. "279": "丹日明夜蛾",
  14719. "280": "仿白边舟蛾",
  14720. "281": "槐羽舟蛾",
  14721. "282": "草地贪夜蛾",
  14722. "283": "环夜蛾",
  14723. "284": "尘尺蛾",
  14724. "285": "黄二星舟蛾",
  14725. "286": "榆木蠹蛾",
  14726. "287": "水黾",
  14727. "288": "银装冬夜蛾",
  14728. "289": "饰奇尺蛾",
  14729. "290": "枯叶蝶",
  14730. "291": "步甲",
  14731. "292": "阔胸禾犀金龟",
  14732. "293": "眼斑钩蛾",
  14733. "294": "三开蜣螂",
  14734. "295": "金星步甲",
  14735. "296": "残夜蛾",
  14736. "297": "野蚕蛾",
  14737. "298": "芦苇豹蠹蛾",
  14738. "299": "华晓扁犀金龟",
  14739. "300": "灰胸突鳃金龟",
  14740. "301": "龟纹瓢虫",
  14741. "302": "麻皮蝽",
  14742. "303": "斑须蝽",
  14743. "304": "斜斑虎甲",
  14744. "305": "地鳖",
  14745. "306": "叶甲",
  14746. "307": "燕夜蛾",
  14747. "308": "黑纹北灯蛾",
  14748. "309": "网夜蛾",
  14749. "310": "棘翅夜蛾",
  14750. "311": "规尺蛾",
  14751. "312": "苜蓿银纹夜蛾",
  14752. "313": "拟扇舟蛾",
  14753. "314": "丁目大蚕蛾",
  14754. "315": "金黄蛾",
  14755. "316": "黄星雪灯蛾",
  14756. "317": "暗纹紫褐螟",
  14757. "318": "白眉天蛾",
  14758. "319": "黄板盘瓢虫",
  14759. "320": "玫岐角螟",
  14760. "321": "枯黄贡尺蛾",
  14761. "322": "小豆长喙天蛾",
  14762. "323": "橙拟灯蛾",
  14763. "324": "粉蝶灯蛾",
  14764. "325": "纹散丽灯蛾",
  14765. "326": "雪尾尺蛾",
  14766. "327": "鹰翅天蛾",
  14767. "328": "波纹蛾",
  14768. "329": "黑条灰灯蛾",
  14769. "330": "八点灰灯蛾",
  14770. "331": "间纹弦夜蛾",
  14771. "332": "缤夜蛾" };var _default =
  14772. insect_dict;exports.default = _default;
  14773. /***/ }),
  14774. /***/ 537:
  14775. /*!***************************************************!*\
  14776. !*** E:/bigDataApp/uview-ui/libs/util/emitter.js ***!
  14777. \***************************************************/
  14778. /*! no static exports found */
  14779. /***/ (function(module, exports, __webpack_require__) {
  14780. "use strict";
  14781. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0; /**
  14782. * 递归使用 call 方式this指向
  14783. * @param componentName // 需要找的组件的名称
  14784. * @param eventName // 事件名称
  14785. * @param params // 需要传递的参数
  14786. */
  14787. function _broadcast(componentName, eventName, params) {
  14788. // 循环子节点找到名称一样的子节点 否则 递归 当前子节点
  14789. this.$children.map(function (child) {
  14790. if (componentName === child.$options.name) {
  14791. child.$emit.apply(child, [eventName].concat(params));
  14792. } else {
  14793. _broadcast.apply(child, [componentName, eventName].concat(params));
  14794. }
  14795. });
  14796. }var _default =
  14797. {
  14798. methods: {
  14799. /**
  14800. * 派发 (向上查找) (一个)
  14801. * @param componentName // 需要找的组件的名称
  14802. * @param eventName // 事件名称
  14803. * @param params // 需要传递的参数
  14804. */
  14805. dispatch: function dispatch(componentName, eventName, params) {
  14806. var parent = this.$parent || this.$root; //$parent 找到最近的父节点 $root 根节点
  14807. var name = parent.$options.name; // 获取当前组件实例的name
  14808. // 如果当前有节点 && 当前没名称 且 当前名称等于需要传进来的名称的时候就去查找当前的节点
  14809. // 循环出当前名称的一样的组件实例
  14810. while (parent && (!name || name !== componentName)) {
  14811. parent = parent.$parent;
  14812. if (parent) {
  14813. name = parent.$options.name;
  14814. }
  14815. }
  14816. // 有节点表示当前找到了name一样的实例
  14817. if (parent) {
  14818. parent.$emit.apply(parent, [eventName].concat(params));
  14819. }
  14820. },
  14821. /**
  14822. * 广播 (向下查找) (广播多个)
  14823. * @param componentName // 需要找的组件的名称
  14824. * @param eventName // 事件名称
  14825. * @param params // 需要传递的参数
  14826. */
  14827. broadcast: function broadcast(componentName, eventName, params) {
  14828. _broadcast.call(this, componentName, eventName, params);
  14829. } } };exports.default = _default;
  14830. /***/ }),
  14831. /***/ 657:
  14832. /*!***********************************************************!*\
  14833. !*** E:/bigDataApp/uview-ui/libs/util/async-validator.js ***!
  14834. \***********************************************************/
  14835. /*! no static exports found */
  14836. /***/ (function(module, exports, __webpack_require__) {
  14837. "use strict";
  14838. /* WEBPACK VAR INJECTION */(function(process) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;function _extends() {
  14839. _extends = Object.assign || function (target) {
  14840. for (var i = 1; i < arguments.length; i++) {
  14841. var source = arguments[i];
  14842. for (var key in source) {
  14843. if (Object.prototype.hasOwnProperty.call(source, key)) {
  14844. target[key] = source[key];
  14845. }
  14846. }
  14847. }
  14848. return target;
  14849. };
  14850. return _extends.apply(this, arguments);
  14851. }
  14852. /* eslint no-console:0 */
  14853. var formatRegExp = /%[sdj%]/g;
  14854. var warning = function warning() {}; // don't print warning message when in production env or node runtime
  14855. if (typeof process !== 'undefined' && Object({"VUE_APP_NAME":"大数据平台APP","VUE_APP_PLATFORM":"mp-weixin","NODE_ENV":"development","BASE_URL":"/"}) && "development" !== 'production' && typeof window !==
  14856. 'undefined' && typeof document !== 'undefined') {
  14857. warning = function warning(type, errors) {
  14858. if (typeof console !== 'undefined' && console.warn) {
  14859. if (errors.every(function (e) {
  14860. return typeof e === 'string';
  14861. })) {
  14862. console.warn(type, errors);
  14863. }
  14864. }
  14865. };
  14866. }
  14867. function convertFieldsError(errors) {
  14868. if (!errors || !errors.length) return null;
  14869. var fields = {};
  14870. errors.forEach(function (error) {
  14871. var field = error.field;
  14872. fields[field] = fields[field] || [];
  14873. fields[field].push(error);
  14874. });
  14875. return fields;
  14876. }
  14877. function format() {
  14878. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  14879. args[_key] = arguments[_key];
  14880. }
  14881. var i = 1;
  14882. var f = args[0];
  14883. var len = args.length;
  14884. if (typeof f === 'function') {
  14885. return f.apply(null, args.slice(1));
  14886. }
  14887. if (typeof f === 'string') {
  14888. var str = String(f).replace(formatRegExp, function (x) {
  14889. if (x === '%%') {
  14890. return '%';
  14891. }
  14892. if (i >= len) {
  14893. return x;
  14894. }
  14895. switch (x) {
  14896. case '%s':
  14897. return String(args[i++]);
  14898. case '%d':
  14899. return Number(args[i++]);
  14900. case '%j':
  14901. try {
  14902. return JSON.stringify(args[i++]);
  14903. } catch (_) {
  14904. return '[Circular]';
  14905. }
  14906. break;
  14907. default:
  14908. return x;}
  14909. });
  14910. for (var arg = args[i]; i < len; arg = args[++i]) {
  14911. str += " " + arg;
  14912. }
  14913. return str;
  14914. }
  14915. return f;
  14916. }
  14917. function isNativeStringType(type) {
  14918. return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'pattern';
  14919. }
  14920. function isEmptyValue(value, type) {
  14921. if (value === undefined || value === null) {
  14922. return true;
  14923. }
  14924. if (type === 'array' && Array.isArray(value) && !value.length) {
  14925. return true;
  14926. }
  14927. if (isNativeStringType(type) && typeof value === 'string' && !value) {
  14928. return true;
  14929. }
  14930. return false;
  14931. }
  14932. function asyncParallelArray(arr, func, callback) {
  14933. var results = [];
  14934. var total = 0;
  14935. var arrLength = arr.length;
  14936. function count(errors) {
  14937. results.push.apply(results, errors);
  14938. total++;
  14939. if (total === arrLength) {
  14940. callback(results);
  14941. }
  14942. }
  14943. arr.forEach(function (a) {
  14944. func(a, count);
  14945. });
  14946. }
  14947. function asyncSerialArray(arr, func, callback) {
  14948. var index = 0;
  14949. var arrLength = arr.length;
  14950. function next(errors) {
  14951. if (errors && errors.length) {
  14952. callback(errors);
  14953. return;
  14954. }
  14955. var original = index;
  14956. index = index + 1;
  14957. if (original < arrLength) {
  14958. func(arr[original], next);
  14959. } else {
  14960. callback([]);
  14961. }
  14962. }
  14963. next([]);
  14964. }
  14965. function flattenObjArr(objArr) {
  14966. var ret = [];
  14967. Object.keys(objArr).forEach(function (k) {
  14968. ret.push.apply(ret, objArr[k]);
  14969. });
  14970. return ret;
  14971. }
  14972. function asyncMap(objArr, option, func, callback) {
  14973. if (option.first) {
  14974. var _pending = new Promise(function (resolve, reject) {
  14975. var next = function next(errors) {
  14976. callback(errors);
  14977. return errors.length ? reject({
  14978. errors: errors,
  14979. fields: convertFieldsError(errors) }) :
  14980. resolve();
  14981. };
  14982. var flattenArr = flattenObjArr(objArr);
  14983. asyncSerialArray(flattenArr, func, next);
  14984. });
  14985. _pending["catch"](function (e) {
  14986. return e;
  14987. });
  14988. return _pending;
  14989. }
  14990. var firstFields = option.firstFields || [];
  14991. if (firstFields === true) {
  14992. firstFields = Object.keys(objArr);
  14993. }
  14994. var objArrKeys = Object.keys(objArr);
  14995. var objArrLength = objArrKeys.length;
  14996. var total = 0;
  14997. var results = [];
  14998. var pending = new Promise(function (resolve, reject) {
  14999. var next = function next(errors) {
  15000. results.push.apply(results, errors);
  15001. total++;
  15002. if (total === objArrLength) {
  15003. callback(results);
  15004. return results.length ? reject({
  15005. errors: results,
  15006. fields: convertFieldsError(results) }) :
  15007. resolve();
  15008. }
  15009. };
  15010. if (!objArrKeys.length) {
  15011. callback(results);
  15012. resolve();
  15013. }
  15014. objArrKeys.forEach(function (key) {
  15015. var arr = objArr[key];
  15016. if (firstFields.indexOf(key) !== -1) {
  15017. asyncSerialArray(arr, func, next);
  15018. } else {
  15019. asyncParallelArray(arr, func, next);
  15020. }
  15021. });
  15022. });
  15023. pending["catch"](function (e) {
  15024. return e;
  15025. });
  15026. return pending;
  15027. }
  15028. function complementError(rule) {
  15029. return function (oe) {
  15030. if (oe && oe.message) {
  15031. oe.field = oe.field || rule.fullField;
  15032. return oe;
  15033. }
  15034. return {
  15035. message: typeof oe === 'function' ? oe() : oe,
  15036. field: oe.field || rule.fullField };
  15037. };
  15038. }
  15039. function deepMerge(target, source) {
  15040. if (source) {
  15041. for (var s in source) {
  15042. if (source.hasOwnProperty(s)) {
  15043. var value = source[s];
  15044. if (typeof value === 'object' && typeof target[s] === 'object') {
  15045. target[s] = _extends({}, target[s], {}, value);
  15046. } else {
  15047. target[s] = value;
  15048. }
  15049. }
  15050. }
  15051. }
  15052. return target;
  15053. }
  15054. /**
  15055. * Rule for validating required fields.
  15056. *
  15057. * @param rule The validation rule.
  15058. * @param value The value of the field on the source object.
  15059. * @param source The source object being validated.
  15060. * @param errors An array of errors that this rule may add
  15061. * validation errors to.
  15062. * @param options The validation options.
  15063. * @param options.messages The validation messages.
  15064. */
  15065. function required(rule, value, source, errors, options, type) {
  15066. if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
  15067. errors.push(format(options.messages.required, rule.fullField));
  15068. }
  15069. }
  15070. /**
  15071. * Rule for validating whitespace.
  15072. *
  15073. * @param rule The validation rule.
  15074. * @param value The value of the field on the source object.
  15075. * @param source The source object being validated.
  15076. * @param errors An array of errors that this rule may add
  15077. * validation errors to.
  15078. * @param options The validation options.
  15079. * @param options.messages The validation messages.
  15080. */
  15081. function whitespace(rule, value, source, errors, options) {
  15082. if (/^\s+$/.test(value) || value === '') {
  15083. errors.push(format(options.messages.whitespace, rule.fullField));
  15084. }
  15085. }
  15086. /* eslint max-len:0 */
  15087. var pattern = {
  15088. // http://emailregex.com/
  15089. 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,}))$/,
  15090. url: new RegExp(
  15091. "^(?!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]*)?$",
  15092. 'i'),
  15093. hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i };
  15094. var types = {
  15095. integer: function integer(value) {
  15096. return types.number(value) && parseInt(value, 10) === value;
  15097. },
  15098. "float": function _float(value) {
  15099. return types.number(value) && !types.integer(value);
  15100. },
  15101. array: function array(value) {
  15102. return Array.isArray(value);
  15103. },
  15104. regexp: function regexp(value) {
  15105. if (value instanceof RegExp) {
  15106. return true;
  15107. }
  15108. try {
  15109. return !!new RegExp(value);
  15110. } catch (e) {
  15111. return false;
  15112. }
  15113. },
  15114. date: function date(value) {
  15115. return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear ===
  15116. 'function';
  15117. },
  15118. number: function number(value) {
  15119. if (isNaN(value)) {
  15120. return false;
  15121. }
  15122. // 修改源码,将字符串数值先转为数值
  15123. return typeof +value === 'number';
  15124. },
  15125. object: function object(value) {
  15126. return typeof value === 'object' && !types.array(value);
  15127. },
  15128. method: function method(value) {
  15129. return typeof value === 'function';
  15130. },
  15131. email: function email(value) {
  15132. return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
  15133. },
  15134. url: function url(value) {
  15135. return typeof value === 'string' && !!value.match(pattern.url);
  15136. },
  15137. hex: function hex(value) {
  15138. return typeof value === 'string' && !!value.match(pattern.hex);
  15139. } };
  15140. /**
  15141. * Rule for validating the type of a value.
  15142. *
  15143. * @param rule The validation rule.
  15144. * @param value The value of the field on the source object.
  15145. * @param source The source object being validated.
  15146. * @param errors An array of errors that this rule may add
  15147. * validation errors to.
  15148. * @param options The validation options.
  15149. * @param options.messages The validation messages.
  15150. */
  15151. function type(rule, value, source, errors, options) {
  15152. if (rule.required && value === undefined) {
  15153. required(rule, value, source, errors, options);
  15154. return;
  15155. }
  15156. var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
  15157. var ruleType = rule.type;
  15158. if (custom.indexOf(ruleType) > -1) {
  15159. if (!types[ruleType](value)) {
  15160. errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  15161. } // straight typeof check
  15162. } else if (ruleType && typeof value !== rule.type) {
  15163. errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
  15164. }
  15165. }
  15166. /**
  15167. * Rule for validating minimum and maximum allowed values.
  15168. *
  15169. * @param rule The validation rule.
  15170. * @param value The value of the field on the source object.
  15171. * @param source The source object being validated.
  15172. * @param errors An array of errors that this rule may add
  15173. * validation errors to.
  15174. * @param options The validation options.
  15175. * @param options.messages The validation messages.
  15176. */
  15177. function range(rule, value, source, errors, options) {
  15178. var len = typeof rule.len === 'number';
  15179. var min = typeof rule.min === 'number';
  15180. var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
  15181. var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
  15182. var val = value;
  15183. var key = null;
  15184. var num = typeof value === 'number';
  15185. var str = typeof value === 'string';
  15186. var arr = Array.isArray(value);
  15187. if (num) {
  15188. key = 'number';
  15189. } else if (str) {
  15190. key = 'string';
  15191. } else if (arr) {
  15192. key = 'array';
  15193. } // if the value is not of a supported type for range validation
  15194. // the validation rule rule should use the
  15195. // type property to also test for a particular type
  15196. if (!key) {
  15197. return false;
  15198. }
  15199. if (arr) {
  15200. val = value.length;
  15201. }
  15202. if (str) {
  15203. // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
  15204. val = value.replace(spRegexp, '_').length;
  15205. }
  15206. if (len) {
  15207. if (val !== rule.len) {
  15208. errors.push(format(options.messages[key].len, rule.fullField, rule.len));
  15209. }
  15210. } else if (min && !max && val < rule.min) {
  15211. errors.push(format(options.messages[key].min, rule.fullField, rule.min));
  15212. } else if (max && !min && val > rule.max) {
  15213. errors.push(format(options.messages[key].max, rule.fullField, rule.max));
  15214. } else if (min && max && (val < rule.min || val > rule.max)) {
  15215. errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
  15216. }
  15217. }
  15218. var ENUM = 'enum';
  15219. /**
  15220. * Rule for validating a value exists in an enumerable list.
  15221. *
  15222. * @param rule The validation rule.
  15223. * @param value The value of the field on the source object.
  15224. * @param source The source object being validated.
  15225. * @param errors An array of errors that this rule may add
  15226. * validation errors to.
  15227. * @param options The validation options.
  15228. * @param options.messages The validation messages.
  15229. */
  15230. function enumerable(rule, value, source, errors, options) {
  15231. rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];
  15232. if (rule[ENUM].indexOf(value) === -1) {
  15233. errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', ')));
  15234. }
  15235. }
  15236. /**
  15237. * Rule for validating a regular expression pattern.
  15238. *
  15239. * @param rule The validation rule.
  15240. * @param value The value of the field on the source object.
  15241. * @param source The source object being validated.
  15242. * @param errors An array of errors that this rule may add
  15243. * validation errors to.
  15244. * @param options The validation options.
  15245. * @param options.messages The validation messages.
  15246. */
  15247. function pattern$1(rule, value, source, errors, options) {
  15248. if (rule.pattern) {
  15249. if (rule.pattern instanceof RegExp) {
  15250. // if a RegExp instance is passed, reset `lastIndex` in case its `global`
  15251. // flag is accidentally set to `true`, which in a validation scenario
  15252. // is not necessary and the result might be misleading
  15253. rule.pattern.lastIndex = 0;
  15254. if (!rule.pattern.test(value)) {
  15255. errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  15256. }
  15257. } else if (typeof rule.pattern === 'string') {
  15258. var _pattern = new RegExp(rule.pattern);
  15259. if (!_pattern.test(value)) {
  15260. errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
  15261. }
  15262. }
  15263. }
  15264. }
  15265. var rules = {
  15266. required: required,
  15267. whitespace: whitespace,
  15268. type: type,
  15269. range: range,
  15270. "enum": enumerable,
  15271. pattern: pattern$1 };
  15272. /**
  15273. * Performs validation for string types.
  15274. *
  15275. * @param rule The validation rule.
  15276. * @param value The value of the field on the source object.
  15277. * @param callback The callback function.
  15278. * @param source The source object being validated.
  15279. * @param options The validation options.
  15280. * @param options.messages The validation messages.
  15281. */
  15282. function string(rule, value, callback, source, options) {
  15283. var errors = [];
  15284. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15285. if (validate) {
  15286. if (isEmptyValue(value, 'string') && !rule.required) {
  15287. return callback();
  15288. }
  15289. rules.required(rule, value, source, errors, options, 'string');
  15290. if (!isEmptyValue(value, 'string')) {
  15291. rules.type(rule, value, source, errors, options);
  15292. rules.range(rule, value, source, errors, options);
  15293. rules.pattern(rule, value, source, errors, options);
  15294. if (rule.whitespace === true) {
  15295. rules.whitespace(rule, value, source, errors, options);
  15296. }
  15297. }
  15298. }
  15299. callback(errors);
  15300. }
  15301. /**
  15302. * Validates a function.
  15303. *
  15304. * @param rule The validation rule.
  15305. * @param value The value of the field on the source object.
  15306. * @param callback The callback function.
  15307. * @param source The source object being validated.
  15308. * @param options The validation options.
  15309. * @param options.messages The validation messages.
  15310. */
  15311. function method(rule, value, callback, source, options) {
  15312. var errors = [];
  15313. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15314. if (validate) {
  15315. if (isEmptyValue(value) && !rule.required) {
  15316. return callback();
  15317. }
  15318. rules.required(rule, value, source, errors, options);
  15319. if (value !== undefined) {
  15320. rules.type(rule, value, source, errors, options);
  15321. }
  15322. }
  15323. callback(errors);
  15324. }
  15325. /**
  15326. * Validates a number.
  15327. *
  15328. * @param rule The validation rule.
  15329. * @param value The value of the field on the source object.
  15330. * @param callback The callback function.
  15331. * @param source The source object being validated.
  15332. * @param options The validation options.
  15333. * @param options.messages The validation messages.
  15334. */
  15335. function number(rule, value, callback, source, options) {
  15336. var errors = [];
  15337. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15338. if (validate) {
  15339. if (value === '') {
  15340. value = undefined;
  15341. }
  15342. if (isEmptyValue(value) && !rule.required) {
  15343. return callback();
  15344. }
  15345. rules.required(rule, value, source, errors, options);
  15346. if (value !== undefined) {
  15347. rules.type(rule, value, source, errors, options);
  15348. rules.range(rule, value, source, errors, options);
  15349. }
  15350. }
  15351. callback(errors);
  15352. }
  15353. /**
  15354. * Validates a boolean.
  15355. *
  15356. * @param rule The validation rule.
  15357. * @param value The value of the field on the source object.
  15358. * @param callback The callback function.
  15359. * @param source The source object being validated.
  15360. * @param options The validation options.
  15361. * @param options.messages The validation messages.
  15362. */
  15363. function _boolean(rule, value, callback, source, options) {
  15364. var errors = [];
  15365. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15366. if (validate) {
  15367. if (isEmptyValue(value) && !rule.required) {
  15368. return callback();
  15369. }
  15370. rules.required(rule, value, source, errors, options);
  15371. if (value !== undefined) {
  15372. rules.type(rule, value, source, errors, options);
  15373. }
  15374. }
  15375. callback(errors);
  15376. }
  15377. /**
  15378. * Validates the regular expression type.
  15379. *
  15380. * @param rule The validation rule.
  15381. * @param value The value of the field on the source object.
  15382. * @param callback The callback function.
  15383. * @param source The source object being validated.
  15384. * @param options The validation options.
  15385. * @param options.messages The validation messages.
  15386. */
  15387. function regexp(rule, value, callback, source, options) {
  15388. var errors = [];
  15389. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15390. if (validate) {
  15391. if (isEmptyValue(value) && !rule.required) {
  15392. return callback();
  15393. }
  15394. rules.required(rule, value, source, errors, options);
  15395. if (!isEmptyValue(value)) {
  15396. rules.type(rule, value, source, errors, options);
  15397. }
  15398. }
  15399. callback(errors);
  15400. }
  15401. /**
  15402. * Validates a number is an integer.
  15403. *
  15404. * @param rule The validation rule.
  15405. * @param value The value of the field on the source object.
  15406. * @param callback The callback function.
  15407. * @param source The source object being validated.
  15408. * @param options The validation options.
  15409. * @param options.messages The validation messages.
  15410. */
  15411. function integer(rule, value, callback, source, options) {
  15412. var errors = [];
  15413. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15414. if (validate) {
  15415. if (isEmptyValue(value) && !rule.required) {
  15416. return callback();
  15417. }
  15418. rules.required(rule, value, source, errors, options);
  15419. if (value !== undefined) {
  15420. rules.type(rule, value, source, errors, options);
  15421. rules.range(rule, value, source, errors, options);
  15422. }
  15423. }
  15424. callback(errors);
  15425. }
  15426. /**
  15427. * Validates a number is a floating point number.
  15428. *
  15429. * @param rule The validation rule.
  15430. * @param value The value of the field on the source object.
  15431. * @param callback The callback function.
  15432. * @param source The source object being validated.
  15433. * @param options The validation options.
  15434. * @param options.messages The validation messages.
  15435. */
  15436. function floatFn(rule, value, callback, source, options) {
  15437. var errors = [];
  15438. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15439. if (validate) {
  15440. if (isEmptyValue(value) && !rule.required) {
  15441. return callback();
  15442. }
  15443. rules.required(rule, value, source, errors, options);
  15444. if (value !== undefined) {
  15445. rules.type(rule, value, source, errors, options);
  15446. rules.range(rule, value, source, errors, options);
  15447. }
  15448. }
  15449. callback(errors);
  15450. }
  15451. /**
  15452. * Validates an array.
  15453. *
  15454. * @param rule The validation rule.
  15455. * @param value The value of the field on the source object.
  15456. * @param callback The callback function.
  15457. * @param source The source object being validated.
  15458. * @param options The validation options.
  15459. * @param options.messages The validation messages.
  15460. */
  15461. function array(rule, value, callback, source, options) {
  15462. var errors = [];
  15463. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15464. if (validate) {
  15465. if (isEmptyValue(value, 'array') && !rule.required) {
  15466. return callback();
  15467. }
  15468. rules.required(rule, value, source, errors, options, 'array');
  15469. if (!isEmptyValue(value, 'array')) {
  15470. rules.type(rule, value, source, errors, options);
  15471. rules.range(rule, value, source, errors, options);
  15472. }
  15473. }
  15474. callback(errors);
  15475. }
  15476. /**
  15477. * Validates an object.
  15478. *
  15479. * @param rule The validation rule.
  15480. * @param value The value of the field on the source object.
  15481. * @param callback The callback function.
  15482. * @param source The source object being validated.
  15483. * @param options The validation options.
  15484. * @param options.messages The validation messages.
  15485. */
  15486. function object(rule, value, callback, source, options) {
  15487. var errors = [];
  15488. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15489. if (validate) {
  15490. if (isEmptyValue(value) && !rule.required) {
  15491. return callback();
  15492. }
  15493. rules.required(rule, value, source, errors, options);
  15494. if (value !== undefined) {
  15495. rules.type(rule, value, source, errors, options);
  15496. }
  15497. }
  15498. callback(errors);
  15499. }
  15500. var ENUM$1 = 'enum';
  15501. /**
  15502. * Validates an enumerable list.
  15503. *
  15504. * @param rule The validation rule.
  15505. * @param value The value of the field on the source object.
  15506. * @param callback The callback function.
  15507. * @param source The source object being validated.
  15508. * @param options The validation options.
  15509. * @param options.messages The validation messages.
  15510. */
  15511. function enumerable$1(rule, value, callback, source, options) {
  15512. var errors = [];
  15513. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15514. if (validate) {
  15515. if (isEmptyValue(value) && !rule.required) {
  15516. return callback();
  15517. }
  15518. rules.required(rule, value, source, errors, options);
  15519. if (value !== undefined) {
  15520. rules[ENUM$1](rule, value, source, errors, options);
  15521. }
  15522. }
  15523. callback(errors);
  15524. }
  15525. /**
  15526. * Validates a regular expression pattern.
  15527. *
  15528. * Performs validation when a rule only contains
  15529. * a pattern property but is not declared as a string type.
  15530. *
  15531. * @param rule The validation rule.
  15532. * @param value The value of the field on the source object.
  15533. * @param callback The callback function.
  15534. * @param source The source object being validated.
  15535. * @param options The validation options.
  15536. * @param options.messages The validation messages.
  15537. */
  15538. function pattern$2(rule, value, callback, source, options) {
  15539. var errors = [];
  15540. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15541. if (validate) {
  15542. if (isEmptyValue(value, 'string') && !rule.required) {
  15543. return callback();
  15544. }
  15545. rules.required(rule, value, source, errors, options);
  15546. if (!isEmptyValue(value, 'string')) {
  15547. rules.pattern(rule, value, source, errors, options);
  15548. }
  15549. }
  15550. callback(errors);
  15551. }
  15552. function date(rule, value, callback, source, options) {
  15553. var errors = [];
  15554. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15555. if (validate) {
  15556. if (isEmptyValue(value) && !rule.required) {
  15557. return callback();
  15558. }
  15559. rules.required(rule, value, source, errors, options);
  15560. if (!isEmptyValue(value)) {
  15561. var dateObject;
  15562. if (typeof value === 'number') {
  15563. dateObject = new Date(value);
  15564. } else {
  15565. dateObject = value;
  15566. }
  15567. rules.type(rule, dateObject, source, errors, options);
  15568. if (dateObject) {
  15569. rules.range(rule, dateObject.getTime(), source, errors, options);
  15570. }
  15571. }
  15572. }
  15573. callback(errors);
  15574. }
  15575. function required$1(rule, value, callback, source, options) {
  15576. var errors = [];
  15577. var type = Array.isArray(value) ? 'array' : typeof value;
  15578. rules.required(rule, value, source, errors, options, type);
  15579. callback(errors);
  15580. }
  15581. function type$1(rule, value, callback, source, options) {
  15582. var ruleType = rule.type;
  15583. var errors = [];
  15584. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15585. if (validate) {
  15586. if (isEmptyValue(value, ruleType) && !rule.required) {
  15587. return callback();
  15588. }
  15589. rules.required(rule, value, source, errors, options, ruleType);
  15590. if (!isEmptyValue(value, ruleType)) {
  15591. rules.type(rule, value, source, errors, options);
  15592. }
  15593. }
  15594. callback(errors);
  15595. }
  15596. /**
  15597. * Performs validation for any type.
  15598. *
  15599. * @param rule The validation rule.
  15600. * @param value The value of the field on the source object.
  15601. * @param callback The callback function.
  15602. * @param source The source object being validated.
  15603. * @param options The validation options.
  15604. * @param options.messages The validation messages.
  15605. */
  15606. function any(rule, value, callback, source, options) {
  15607. var errors = [];
  15608. var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
  15609. if (validate) {
  15610. if (isEmptyValue(value) && !rule.required) {
  15611. return callback();
  15612. }
  15613. rules.required(rule, value, source, errors, options);
  15614. }
  15615. callback(errors);
  15616. }
  15617. var validators = {
  15618. string: string,
  15619. method: method,
  15620. number: number,
  15621. "boolean": _boolean,
  15622. regexp: regexp,
  15623. integer: integer,
  15624. "float": floatFn,
  15625. array: array,
  15626. object: object,
  15627. "enum": enumerable$1,
  15628. pattern: pattern$2,
  15629. date: date,
  15630. url: type$1,
  15631. hex: type$1,
  15632. email: type$1,
  15633. required: required$1,
  15634. any: any };
  15635. function newMessages() {
  15636. return {
  15637. "default": 'Validation error on field %s',
  15638. required: '%s is required',
  15639. "enum": '%s must be one of %s',
  15640. whitespace: '%s cannot be empty',
  15641. date: {
  15642. format: '%s date %s is invalid for format %s',
  15643. parse: '%s date could not be parsed, %s is invalid ',
  15644. invalid: '%s date %s is invalid' },
  15645. types: {
  15646. string: '%s is not a %s',
  15647. method: '%s is not a %s (function)',
  15648. array: '%s is not an %s',
  15649. object: '%s is not an %s',
  15650. number: '%s is not a %s',
  15651. date: '%s is not a %s',
  15652. "boolean": '%s is not a %s',
  15653. integer: '%s is not an %s',
  15654. "float": '%s is not a %s',
  15655. regexp: '%s is not a valid %s',
  15656. email: '%s is not a valid %s',
  15657. url: '%s is not a valid %s',
  15658. hex: '%s is not a valid %s' },
  15659. string: {
  15660. len: '%s must be exactly %s characters',
  15661. min: '%s must be at least %s characters',
  15662. max: '%s cannot be longer than %s characters',
  15663. range: '%s must be between %s and %s characters' },
  15664. number: {
  15665. len: '%s must equal %s',
  15666. min: '%s cannot be less than %s',
  15667. max: '%s cannot be greater than %s',
  15668. range: '%s must be between %s and %s' },
  15669. array: {
  15670. len: '%s must be exactly %s in length',
  15671. min: '%s cannot be less than %s in length',
  15672. max: '%s cannot be greater than %s in length',
  15673. range: '%s must be between %s and %s in length' },
  15674. pattern: {
  15675. mismatch: '%s value %s does not match pattern %s' },
  15676. clone: function clone() {
  15677. var cloned = JSON.parse(JSON.stringify(this));
  15678. cloned.clone = this.clone;
  15679. return cloned;
  15680. } };
  15681. }
  15682. var messages = newMessages();
  15683. /**
  15684. * Encapsulates a validation schema.
  15685. *
  15686. * @param descriptor An object declaring validation rules
  15687. * for this schema.
  15688. */
  15689. function Schema(descriptor) {
  15690. this.rules = null;
  15691. this._messages = messages;
  15692. this.define(descriptor);
  15693. }
  15694. Schema.prototype = {
  15695. messages: function messages(_messages) {
  15696. if (_messages) {
  15697. this._messages = deepMerge(newMessages(), _messages);
  15698. }
  15699. return this._messages;
  15700. },
  15701. define: function define(rules) {
  15702. if (!rules) {
  15703. throw new Error('Cannot configure a schema with no rules');
  15704. }
  15705. if (typeof rules !== 'object' || Array.isArray(rules)) {
  15706. throw new Error('Rules must be an object');
  15707. }
  15708. this.rules = {};
  15709. var z;
  15710. var item;
  15711. for (z in rules) {
  15712. if (rules.hasOwnProperty(z)) {
  15713. item = rules[z];
  15714. this.rules[z] = Array.isArray(item) ? item : [item];
  15715. }
  15716. }
  15717. },
  15718. validate: function validate(source_, o, oc) {
  15719. var _this = this;
  15720. if (o === void 0) {
  15721. o = {};
  15722. }
  15723. if (oc === void 0) {
  15724. oc = function oc() {};
  15725. }
  15726. var source = source_;
  15727. var options = o;
  15728. var callback = oc;
  15729. if (typeof options === 'function') {
  15730. callback = options;
  15731. options = {};
  15732. }
  15733. if (!this.rules || Object.keys(this.rules).length === 0) {
  15734. if (callback) {
  15735. callback();
  15736. }
  15737. return Promise.resolve();
  15738. }
  15739. function complete(results) {
  15740. var i;
  15741. var errors = [];
  15742. var fields = {};
  15743. function add(e) {
  15744. if (Array.isArray(e)) {
  15745. var _errors;
  15746. errors = (_errors = errors).concat.apply(_errors, e);
  15747. } else {
  15748. errors.push(e);
  15749. }
  15750. }
  15751. for (i = 0; i < results.length; i++) {
  15752. add(results[i]);
  15753. }
  15754. if (!errors.length) {
  15755. errors = null;
  15756. fields = null;
  15757. } else {
  15758. fields = convertFieldsError(errors);
  15759. }
  15760. callback(errors, fields);
  15761. }
  15762. if (options.messages) {
  15763. var messages$1 = this.messages();
  15764. if (messages$1 === messages) {
  15765. messages$1 = newMessages();
  15766. }
  15767. deepMerge(messages$1, options.messages);
  15768. options.messages = messages$1;
  15769. } else {
  15770. options.messages = this.messages();
  15771. }
  15772. var arr;
  15773. var value;
  15774. var series = {};
  15775. var keys = options.keys || Object.keys(this.rules);
  15776. keys.forEach(function (z) {
  15777. arr = _this.rules[z];
  15778. value = source[z];
  15779. arr.forEach(function (r) {
  15780. var rule = r;
  15781. if (typeof rule.transform === 'function') {
  15782. if (source === source_) {
  15783. source = _extends({}, source);
  15784. }
  15785. value = source[z] = rule.transform(value);
  15786. }
  15787. if (typeof rule === 'function') {
  15788. rule = {
  15789. validator: rule };
  15790. } else {
  15791. rule = _extends({}, rule);
  15792. }
  15793. rule.validator = _this.getValidationMethod(rule);
  15794. rule.field = z;
  15795. rule.fullField = rule.fullField || z;
  15796. rule.type = _this.getType(rule);
  15797. if (!rule.validator) {
  15798. return;
  15799. }
  15800. series[z] = series[z] || [];
  15801. series[z].push({
  15802. rule: rule,
  15803. value: value,
  15804. source: source,
  15805. field: z });
  15806. });
  15807. });
  15808. var errorFields = {};
  15809. return asyncMap(series, options, function (data, doIt) {
  15810. var rule = data.rule;
  15811. var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField ===
  15812. 'object');
  15813. deep = deep && (rule.required || !rule.required && data.value);
  15814. rule.field = data.field;
  15815. function addFullfield(key, schema) {
  15816. return _extends({}, schema, {
  15817. fullField: rule.fullField + "." + key });
  15818. }
  15819. function cb(e) {
  15820. if (e === void 0) {
  15821. e = [];
  15822. }
  15823. var errors = e;
  15824. if (!Array.isArray(errors)) {
  15825. errors = [errors];
  15826. }
  15827. if (!options.suppressWarning && errors.length) {
  15828. Schema.warning('async-validator:', errors);
  15829. }
  15830. if (errors.length && rule.message) {
  15831. errors = [].concat(rule.message);
  15832. }
  15833. errors = errors.map(complementError(rule));
  15834. if (options.first && errors.length) {
  15835. errorFields[rule.field] = 1;
  15836. return doIt(errors);
  15837. }
  15838. if (!deep) {
  15839. doIt(errors);
  15840. } else {
  15841. // if rule is required but the target object
  15842. // does not exist fail at the rule level and don't
  15843. // go deeper
  15844. if (rule.required && !data.value) {
  15845. if (rule.message) {
  15846. errors = [].concat(rule.message).map(complementError(rule));
  15847. } else if (options.error) {
  15848. errors = [options.error(rule, format(options.messages.required, rule.field))];
  15849. } else {
  15850. errors = [];
  15851. }
  15852. return doIt(errors);
  15853. }
  15854. var fieldsSchema = {};
  15855. if (rule.defaultField) {
  15856. for (var k in data.value) {
  15857. if (data.value.hasOwnProperty(k)) {
  15858. fieldsSchema[k] = rule.defaultField;
  15859. }
  15860. }
  15861. }
  15862. fieldsSchema = _extends({}, fieldsSchema, {}, data.rule.fields);
  15863. for (var f in fieldsSchema) {
  15864. if (fieldsSchema.hasOwnProperty(f)) {
  15865. var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]];
  15866. fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));
  15867. }
  15868. }
  15869. var schema = new Schema(fieldsSchema);
  15870. schema.messages(options.messages);
  15871. if (data.rule.options) {
  15872. data.rule.options.messages = options.messages;
  15873. data.rule.options.error = options.error;
  15874. }
  15875. schema.validate(data.value, data.rule.options || options, function (errs) {
  15876. var finalErrors = [];
  15877. if (errors && errors.length) {
  15878. finalErrors.push.apply(finalErrors, errors);
  15879. }
  15880. if (errs && errs.length) {
  15881. finalErrors.push.apply(finalErrors, errs);
  15882. }
  15883. doIt(finalErrors.length ? finalErrors : null);
  15884. });
  15885. }
  15886. }
  15887. var res;
  15888. if (rule.asyncValidator) {
  15889. res = rule.asyncValidator(rule, data.value, cb, data.source, options);
  15890. } else if (rule.validator) {
  15891. res = rule.validator(rule, data.value, cb, data.source, options);
  15892. if (res === true) {
  15893. cb();
  15894. } else if (res === false) {
  15895. cb(rule.message || rule.field + " fails");
  15896. } else if (res instanceof Array) {
  15897. cb(res);
  15898. } else if (res instanceof Error) {
  15899. cb(res.message);
  15900. }
  15901. }
  15902. if (res && res.then) {
  15903. res.then(function () {
  15904. return cb();
  15905. }, function (e) {
  15906. return cb(e);
  15907. });
  15908. }
  15909. }, function (results) {
  15910. complete(results);
  15911. });
  15912. },
  15913. getType: function getType(rule) {
  15914. if (rule.type === undefined && rule.pattern instanceof RegExp) {
  15915. rule.type = 'pattern';
  15916. }
  15917. if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
  15918. throw new Error(format('Unknown rule type %s', rule.type));
  15919. }
  15920. return rule.type || 'string';
  15921. },
  15922. getValidationMethod: function getValidationMethod(rule) {
  15923. if (typeof rule.validator === 'function') {
  15924. return rule.validator;
  15925. }
  15926. var keys = Object.keys(rule);
  15927. var messageIndex = keys.indexOf('message');
  15928. if (messageIndex !== -1) {
  15929. keys.splice(messageIndex, 1);
  15930. }
  15931. if (keys.length === 1 && keys[0] === 'required') {
  15932. return validators.required;
  15933. }
  15934. return validators[this.getType(rule)] || false;
  15935. } };
  15936. Schema.register = function register(type, validator) {
  15937. if (typeof validator !== 'function') {
  15938. throw new Error('Cannot register a validator by type, validator is not a function');
  15939. }
  15940. validators[type] = validator;
  15941. };
  15942. Schema.warning = warning;
  15943. Schema.messages = messages;var _default =
  15944. Schema;exports.default = _default;
  15945. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/node-libs-browser/mock/process.js */ 658)))
  15946. /***/ }),
  15947. /***/ 658:
  15948. /*!********************************************************!*\
  15949. !*** ./node_modules/node-libs-browser/mock/process.js ***!
  15950. \********************************************************/
  15951. /*! no static exports found */
  15952. /***/ (function(module, exports, __webpack_require__) {
  15953. exports.nextTick = function nextTick(fn) {
  15954. var args = Array.prototype.slice.call(arguments);
  15955. args.shift();
  15956. setTimeout(function () {
  15957. fn.apply(null, args);
  15958. }, 0);
  15959. };
  15960. exports.platform = exports.arch =
  15961. exports.execPath = exports.title = 'browser';
  15962. exports.pid = 1;
  15963. exports.browser = true;
  15964. exports.env = {};
  15965. exports.argv = [];
  15966. exports.binding = function (name) {
  15967. throw new Error('No such module. (Possibly not yet loaded)')
  15968. };
  15969. (function () {
  15970. var cwd = '/';
  15971. var path;
  15972. exports.cwd = function () { return cwd };
  15973. exports.chdir = function (dir) {
  15974. if (!path) path = __webpack_require__(/*! path */ 659);
  15975. cwd = path.resolve(dir, cwd);
  15976. };
  15977. })();
  15978. exports.exit = exports.kill =
  15979. exports.umask = exports.dlopen =
  15980. exports.uptime = exports.memoryUsage =
  15981. exports.uvCounters = function() {};
  15982. exports.features = {};
  15983. /***/ }),
  15984. /***/ 659:
  15985. /*!***********************************************!*\
  15986. !*** ./node_modules/path-browserify/index.js ***!
  15987. \***********************************************/
  15988. /*! no static exports found */
  15989. /***/ (function(module, exports, __webpack_require__) {
  15990. /* WEBPACK VAR INJECTION */(function(process) {// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,
  15991. // backported and transplited with Babel, with backwards-compat fixes
  15992. // Copyright Joyent, Inc. and other Node contributors.
  15993. //
  15994. // Permission is hereby granted, free of charge, to any person obtaining a
  15995. // copy of this software and associated documentation files (the
  15996. // "Software"), to deal in the Software without restriction, including
  15997. // without limitation the rights to use, copy, modify, merge, publish,
  15998. // distribute, sublicense, and/or sell copies of the Software, and to permit
  15999. // persons to whom the Software is furnished to do so, subject to the
  16000. // following conditions:
  16001. //
  16002. // The above copyright notice and this permission notice shall be included
  16003. // in all copies or substantial portions of the Software.
  16004. //
  16005. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  16006. // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  16007. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  16008. // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  16009. // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  16010. // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  16011. // USE OR OTHER DEALINGS IN THE SOFTWARE.
  16012. // resolves . and .. elements in a path array with directory names there
  16013. // must be no slashes, empty elements, or device names (c:\) in the array
  16014. // (so also no leading and trailing slashes - it does not distinguish
  16015. // relative and absolute paths)
  16016. function normalizeArray(parts, allowAboveRoot) {
  16017. // if the path tries to go above the root, `up` ends up > 0
  16018. var up = 0;
  16019. for (var i = parts.length - 1; i >= 0; i--) {
  16020. var last = parts[i];
  16021. if (last === '.') {
  16022. parts.splice(i, 1);
  16023. } else if (last === '..') {
  16024. parts.splice(i, 1);
  16025. up++;
  16026. } else if (up) {
  16027. parts.splice(i, 1);
  16028. up--;
  16029. }
  16030. }
  16031. // if the path is allowed to go above the root, restore leading ..s
  16032. if (allowAboveRoot) {
  16033. for (; up--; up) {
  16034. parts.unshift('..');
  16035. }
  16036. }
  16037. return parts;
  16038. }
  16039. // path.resolve([from ...], to)
  16040. // posix version
  16041. exports.resolve = function() {
  16042. var resolvedPath = '',
  16043. resolvedAbsolute = false;
  16044. for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
  16045. var path = (i >= 0) ? arguments[i] : process.cwd();
  16046. // Skip empty and invalid entries
  16047. if (typeof path !== 'string') {
  16048. throw new TypeError('Arguments to path.resolve must be strings');
  16049. } else if (!path) {
  16050. continue;
  16051. }
  16052. resolvedPath = path + '/' + resolvedPath;
  16053. resolvedAbsolute = path.charAt(0) === '/';
  16054. }
  16055. // At this point the path should be resolved to a full absolute path, but
  16056. // handle relative paths to be safe (might happen when process.cwd() fails)
  16057. // Normalize the path
  16058. resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {
  16059. return !!p;
  16060. }), !resolvedAbsolute).join('/');
  16061. return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';
  16062. };
  16063. // path.normalize(path)
  16064. // posix version
  16065. exports.normalize = function(path) {
  16066. var isAbsolute = exports.isAbsolute(path),
  16067. trailingSlash = substr(path, -1) === '/';
  16068. // Normalize the path
  16069. path = normalizeArray(filter(path.split('/'), function(p) {
  16070. return !!p;
  16071. }), !isAbsolute).join('/');
  16072. if (!path && !isAbsolute) {
  16073. path = '.';
  16074. }
  16075. if (path && trailingSlash) {
  16076. path += '/';
  16077. }
  16078. return (isAbsolute ? '/' : '') + path;
  16079. };
  16080. // posix version
  16081. exports.isAbsolute = function(path) {
  16082. return path.charAt(0) === '/';
  16083. };
  16084. // posix version
  16085. exports.join = function() {
  16086. var paths = Array.prototype.slice.call(arguments, 0);
  16087. return exports.normalize(filter(paths, function(p, index) {
  16088. if (typeof p !== 'string') {
  16089. throw new TypeError('Arguments to path.join must be strings');
  16090. }
  16091. return p;
  16092. }).join('/'));
  16093. };
  16094. // path.relative(from, to)
  16095. // posix version
  16096. exports.relative = function(from, to) {
  16097. from = exports.resolve(from).substr(1);
  16098. to = exports.resolve(to).substr(1);
  16099. function trim(arr) {
  16100. var start = 0;
  16101. for (; start < arr.length; start++) {
  16102. if (arr[start] !== '') break;
  16103. }
  16104. var end = arr.length - 1;
  16105. for (; end >= 0; end--) {
  16106. if (arr[end] !== '') break;
  16107. }
  16108. if (start > end) return [];
  16109. return arr.slice(start, end - start + 1);
  16110. }
  16111. var fromParts = trim(from.split('/'));
  16112. var toParts = trim(to.split('/'));
  16113. var length = Math.min(fromParts.length, toParts.length);
  16114. var samePartsLength = length;
  16115. for (var i = 0; i < length; i++) {
  16116. if (fromParts[i] !== toParts[i]) {
  16117. samePartsLength = i;
  16118. break;
  16119. }
  16120. }
  16121. var outputParts = [];
  16122. for (var i = samePartsLength; i < fromParts.length; i++) {
  16123. outputParts.push('..');
  16124. }
  16125. outputParts = outputParts.concat(toParts.slice(samePartsLength));
  16126. return outputParts.join('/');
  16127. };
  16128. exports.sep = '/';
  16129. exports.delimiter = ':';
  16130. exports.dirname = function (path) {
  16131. if (typeof path !== 'string') path = path + '';
  16132. if (path.length === 0) return '.';
  16133. var code = path.charCodeAt(0);
  16134. var hasRoot = code === 47 /*/*/;
  16135. var end = -1;
  16136. var matchedSlash = true;
  16137. for (var i = path.length - 1; i >= 1; --i) {
  16138. code = path.charCodeAt(i);
  16139. if (code === 47 /*/*/) {
  16140. if (!matchedSlash) {
  16141. end = i;
  16142. break;
  16143. }
  16144. } else {
  16145. // We saw the first non-path separator
  16146. matchedSlash = false;
  16147. }
  16148. }
  16149. if (end === -1) return hasRoot ? '/' : '.';
  16150. if (hasRoot && end === 1) {
  16151. // return '//';
  16152. // Backwards-compat fix:
  16153. return '/';
  16154. }
  16155. return path.slice(0, end);
  16156. };
  16157. function basename(path) {
  16158. if (typeof path !== 'string') path = path + '';
  16159. var start = 0;
  16160. var end = -1;
  16161. var matchedSlash = true;
  16162. var i;
  16163. for (i = path.length - 1; i >= 0; --i) {
  16164. if (path.charCodeAt(i) === 47 /*/*/) {
  16165. // If we reached a path separator that was not part of a set of path
  16166. // separators at the end of the string, stop now
  16167. if (!matchedSlash) {
  16168. start = i + 1;
  16169. break;
  16170. }
  16171. } else if (end === -1) {
  16172. // We saw the first non-path separator, mark this as the end of our
  16173. // path component
  16174. matchedSlash = false;
  16175. end = i + 1;
  16176. }
  16177. }
  16178. if (end === -1) return '';
  16179. return path.slice(start, end);
  16180. }
  16181. // Uses a mixed approach for backwards-compatibility, as ext behavior changed
  16182. // in new Node.js versions, so only basename() above is backported here
  16183. exports.basename = function (path, ext) {
  16184. var f = basename(path);
  16185. if (ext && f.substr(-1 * ext.length) === ext) {
  16186. f = f.substr(0, f.length - ext.length);
  16187. }
  16188. return f;
  16189. };
  16190. exports.extname = function (path) {
  16191. if (typeof path !== 'string') path = path + '';
  16192. var startDot = -1;
  16193. var startPart = 0;
  16194. var end = -1;
  16195. var matchedSlash = true;
  16196. // Track the state of characters (if any) we see before our first dot and
  16197. // after any path separator we find
  16198. var preDotState = 0;
  16199. for (var i = path.length - 1; i >= 0; --i) {
  16200. var code = path.charCodeAt(i);
  16201. if (code === 47 /*/*/) {
  16202. // If we reached a path separator that was not part of a set of path
  16203. // separators at the end of the string, stop now
  16204. if (!matchedSlash) {
  16205. startPart = i + 1;
  16206. break;
  16207. }
  16208. continue;
  16209. }
  16210. if (end === -1) {
  16211. // We saw the first non-path separator, mark this as the end of our
  16212. // extension
  16213. matchedSlash = false;
  16214. end = i + 1;
  16215. }
  16216. if (code === 46 /*.*/) {
  16217. // If this is our first dot, mark it as the start of our extension
  16218. if (startDot === -1)
  16219. startDot = i;
  16220. else if (preDotState !== 1)
  16221. preDotState = 1;
  16222. } else if (startDot !== -1) {
  16223. // We saw a non-dot and non-path separator before our dot, so we should
  16224. // have a good chance at having a non-empty extension
  16225. preDotState = -1;
  16226. }
  16227. }
  16228. if (startDot === -1 || end === -1 ||
  16229. // We saw a non-dot character immediately before the dot
  16230. preDotState === 0 ||
  16231. // The (right-most) trimmed path component is exactly '..'
  16232. preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
  16233. return '';
  16234. }
  16235. return path.slice(startDot, end);
  16236. };
  16237. function filter (xs, f) {
  16238. if (xs.filter) return xs.filter(f);
  16239. var res = [];
  16240. for (var i = 0; i < xs.length; i++) {
  16241. if (f(xs[i], i, xs)) res.push(xs[i]);
  16242. }
  16243. return res;
  16244. }
  16245. // String.prototype.substr - negative index don't work in IE8
  16246. var substr = 'ab'.substr(-1) === 'b'
  16247. ? function (str, start, len) { return str.substr(start, len) }
  16248. : function (str, start, len) {
  16249. if (start < 0) start = str.length + start;
  16250. return str.substr(start, len);
  16251. }
  16252. ;
  16253. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 658)))
  16254. /***/ }),
  16255. /***/ 681:
  16256. /*!***************************************************!*\
  16257. !*** E:/bigDataApp/components/uni-icons/icons.js ***!
  16258. \***************************************************/
  16259. /*! no static exports found */
  16260. /***/ (function(module, exports, __webpack_require__) {
  16261. "use strict";
  16262. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
  16263. 'contact': "\uE100",
  16264. 'person': "\uE101",
  16265. 'personadd': "\uE102",
  16266. 'contact-filled': "\uE130",
  16267. 'person-filled': "\uE131",
  16268. 'personadd-filled': "\uE132",
  16269. 'phone': "\uE200",
  16270. 'email': "\uE201",
  16271. 'chatbubble': "\uE202",
  16272. 'chatboxes': "\uE203",
  16273. 'phone-filled': "\uE230",
  16274. 'email-filled': "\uE231",
  16275. 'chatbubble-filled': "\uE232",
  16276. 'chatboxes-filled': "\uE233",
  16277. 'weibo': "\uE260",
  16278. 'weixin': "\uE261",
  16279. 'pengyouquan': "\uE262",
  16280. 'chat': "\uE263",
  16281. 'qq': "\uE264",
  16282. 'videocam': "\uE300",
  16283. 'camera': "\uE301",
  16284. 'mic': "\uE302",
  16285. 'location': "\uE303",
  16286. 'mic-filled': "\uE332",
  16287. 'speech': "\uE332",
  16288. 'location-filled': "\uE333",
  16289. 'micoff': "\uE360",
  16290. 'image': "\uE363",
  16291. 'map': "\uE364",
  16292. 'compose': "\uE400",
  16293. 'trash': "\uE401",
  16294. 'upload': "\uE402",
  16295. 'download': "\uE403",
  16296. 'close': "\uE404",
  16297. 'redo': "\uE405",
  16298. 'undo': "\uE406",
  16299. 'refresh': "\uE407",
  16300. 'star': "\uE408",
  16301. 'plus': "\uE409",
  16302. 'minus': "\uE410",
  16303. 'circle': "\uE411",
  16304. 'checkbox': "\uE411",
  16305. 'close-filled': "\uE434",
  16306. 'clear': "\uE434",
  16307. 'refresh-filled': "\uE437",
  16308. 'star-filled': "\uE438",
  16309. 'plus-filled': "\uE439",
  16310. 'minus-filled': "\uE440",
  16311. 'circle-filled': "\uE441",
  16312. 'checkbox-filled': "\uE442",
  16313. 'closeempty': "\uE460",
  16314. 'refreshempty': "\uE461",
  16315. 'reload': "\uE462",
  16316. 'starhalf': "\uE463",
  16317. 'spinner': "\uE464",
  16318. 'spinner-cycle': "\uE465",
  16319. 'search': "\uE466",
  16320. 'plusempty': "\uE468",
  16321. 'forward': "\uE470",
  16322. 'back': "\uE471",
  16323. 'left-nav': "\uE471",
  16324. 'checkmarkempty': "\uE472",
  16325. 'home': "\uE500",
  16326. 'navigate': "\uE501",
  16327. 'gear': "\uE502",
  16328. 'paperplane': "\uE503",
  16329. 'info': "\uE504",
  16330. 'help': "\uE505",
  16331. 'locked': "\uE506",
  16332. 'more': "\uE507",
  16333. 'flag': "\uE508",
  16334. 'home-filled': "\uE530",
  16335. 'gear-filled': "\uE532",
  16336. 'info-filled': "\uE534",
  16337. 'help-filled': "\uE535",
  16338. 'more-filled': "\uE537",
  16339. 'settings': "\uE560",
  16340. 'list': "\uE562",
  16341. 'bars': "\uE563",
  16342. 'loop': "\uE565",
  16343. 'paperclip': "\uE567",
  16344. 'eye': "\uE568",
  16345. 'arrowup': "\uE580",
  16346. 'arrowdown': "\uE581",
  16347. 'arrowleft': "\uE582",
  16348. 'arrowright': "\uE583",
  16349. 'arrowthinup': "\uE584",
  16350. 'arrowthindown': "\uE585",
  16351. 'arrowthinleft': "\uE586",
  16352. 'arrowthinright': "\uE587",
  16353. 'pulldown': "\uE588",
  16354. 'closefill': "\uE589",
  16355. 'sound': "\uE590",
  16356. 'scan': "\uE612" };exports.default = _default;
  16357. /***/ }),
  16358. /***/ 696:
  16359. /*!****************************************************!*\
  16360. !*** E:/bigDataApp/uview-ui/libs/util/province.js ***!
  16361. \****************************************************/
  16362. /*! no static exports found */
  16363. /***/ (function(module, exports, __webpack_require__) {
  16364. "use strict";
  16365. 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;
  16366. /***/ }),
  16367. /***/ 697:
  16368. /*!************************************************!*\
  16369. !*** E:/bigDataApp/uview-ui/libs/util/city.js ***!
  16370. \************************************************/
  16371. /*! no static exports found */
  16372. /***/ (function(module, exports, __webpack_require__) {
  16373. "use strict";
  16374. 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;
  16375. /***/ }),
  16376. /***/ 698:
  16377. /*!************************************************!*\
  16378. !*** E:/bigDataApp/uview-ui/libs/util/area.js ***!
  16379. \************************************************/
  16380. /*! no static exports found */
  16381. /***/ (function(module, exports, __webpack_require__) {
  16382. "use strict";
  16383. 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;
  16384. /***/ }),
  16385. /***/ 713:
  16386. /*!***************************************************************!*\
  16387. !*** E:/bigDataApp/components/bazaar-city_list/citylist.json ***!
  16388. \***************************************************************/
  16389. /*! exports provided: hotcity, city, default */
  16390. /***/ (function(module) {
  16391. 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\":[\"杂多县\",\"赞皇县\",\"枣强县\",\"枣阳市\",\"枣庄\",\"泽库县\",\"增城市\",\"曾都区\",\"泽普县\",\"泽州县\",\"札达县\",\"扎赉特旗\",\"扎兰屯市\",\"扎鲁特旗\",\"扎囊县\",\"张北县\",\"张店区\",\"章贡区\",\"张家港\",\"张家界\",\"张家口\",\"漳平市\",\"漳浦县\",\"章丘市\",\"樟树市\",\"张湾区\",\"彰武县\",\"漳县\",\"张掖\",\"漳州\",\"长子县\",\"湛河区\",\"湛江\",\"站前区\",\"沾益县\",\"诏安县\",\"召陵区\",\"昭平县\",\"肇庆\",\"昭通\",\"赵县\",\"昭阳区\",\"招远市\",\"肇源县\",\"肇州县\",\"柞水县\",\"柘城县\",\"浙江\",\"镇安县\",\"振安区\",\"镇巴县\",\"正安县\",\"正定县\",\"正定新区\",\"正蓝旗\",\"正宁县\",\"蒸湘区\",\"正镶白旗\",\"正阳县\",\"郑州\",\"镇海区\",\"镇江\",\"浈江区\",\"镇康县\",\"镇赉县\",\"镇平县\",\"振兴区\",\"镇雄县\",\"镇原县\",\"志丹县\",\"治多县\",\"芝罘区\",\"枝江市\",\"芷江侗族自治县\",\"织金县\",\"中方县\",\"中江县\",\"钟楼区\",\"中牟县\",\"中宁县\",\"中山\",\"中山区\",\"钟山区\",\"钟山县\",\"中卫\",\"钟祥市\",\"中阳县\",\"中原区\",\"周村区\",\"周口\",\"周宁县\",\"舟曲县\",\"舟山\",\"周至县\",\"庄河市\",\"诸城市\",\"珠海\",\"珠晖区\",\"诸暨市\",\"驻马店\",\"准格尔旗\",\"涿鹿县\",\"卓尼\",\"涿州市\",\"卓资县\",\"珠山区\",\"竹山县\",\"竹溪县\",\"株洲\",\"株洲县\",\"淄博\",\"子长县\",\"淄川区\",\"自贡\",\"秭归县\",\"紫金县\",\"自流井区\",\"资溪县\",\"资兴市\",\"资阳\"]}]}");
  16392. /***/ }),
  16393. /***/ 95:
  16394. /*!****************************************************!*\
  16395. !*** E:/bigDataApp/static/js/equipState_dict.json ***!
  16396. \****************************************************/
  16397. /*! 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 */
  16398. /***/ (function(module) {
  16399. 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卡状态\"}}");
  16400. /***/ })
  16401. }]);
  16402. //# sourceMappingURL=../../.sourcemap/mp-weixin/common/vendor.js.map