| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322 |
- (function(global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined'
- ? (module.exports = factory(require('mockjs'), require('moment')))
- : typeof define === 'function' && define.amd
- ? define(['mockjs', 'moment'], factory)
- : ((global = global || self), (global.mock = factory(global.mockjs, global.moment)));
- })(this, function(mockjs, moment) {
- 'use strict';
- mockjs = mockjs && mockjs.hasOwnProperty('default') ? mockjs['default'] : mockjs;
- moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
- 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 _objectSpread(target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i] != null ? arguments[i] : {};
- var ownKeys = Object.keys(source);
- if (typeof Object.getOwnPropertySymbols === 'function') {
- ownKeys = ownKeys.concat(
- Object.getOwnPropertySymbols(source).filter(function(sym) {
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
- }),
- );
- }
- ownKeys.forEach(function(key) {
- _defineProperty(target, key, source[key]);
- });
- }
- return target;
- }
- const titles = [
- 'Alipay',
- 'Angular',
- 'Ant Design',
- 'Ant Design Pro',
- 'Bootstrap',
- 'React',
- 'Vue',
- 'Webpack',
- ];
- const avatars = [
- 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', // Alipay
- 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', // Angular
- 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', // Ant Design
- 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', // Ant Design Pro
- 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', // Bootstrap
- 'https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png', // React
- 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', // Vue
- 'https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png',
- ];
- const avatars2 = [
- 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/cnrhVkzwxjPwAaCfPbdc.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/gaOngJwsRYRaVAuXXcmB.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/ubnKSIfAJTxIgXOKlciN.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/WhxKECPNujWoWEFNdnJE.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/psOgztMplJMGpVEqfcgF.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/ZpBqSxLxVEXfcUNoPKrz.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/laiEnJdGHVOhJrUShBaJ.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/UrQsqscbKEpNuJcvBZBu.png',
- ];
- const covers = [
- 'https://gw.alipayobjects.com/zos/rmsportal/uMfMFlvUuceEyPpotzlq.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/iZBVOIhGJiAnhplqjvZW.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/iXjVmWVHbCJAyqvDxdtx.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/gLaIAoVWTtLbBWZNYEMg.png',
- ];
- const desc = [
- '那是一种内在的东西, 他们到达不了,也无法触及的',
- '希望是一个好东西,也许是最好的,好东西是不会消亡的',
- '生命就像一盒巧克力,结果往往出人意料',
- '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
- '那时候我只会想自己想要什么,从不想自己拥有什么',
- ];
- const user = [
- '付小小',
- '曲丽丽',
- '林东东',
- '周星星',
- '吴加好',
- '朱偏右',
- '鱼酱',
- '乐哥',
- '谭小仪',
- '仲尼',
- ];
- function fakeList(count) {
- const list = [];
- for (let i = 0; i < count; i += 1) {
- list.push({
- id: `fake-list-${i}`,
- owner: user[i % 10],
- title: titles[i % 8],
- avatar: avatars[i % 8],
- cover: parseInt(i / 4, 10) % 2 === 0 ? covers[i % 4] : covers[3 - (i % 4)],
- status: ['active', 'exception', 'normal'][i % 3],
- percent: Math.ceil(Math.random() * 50) + 50,
- logo: avatars[i % 8],
- href: 'https://ant.design',
- updatedAt: new Date(new Date().getTime() - 1000 * 60 * 60 * 2 * i),
- createdAt: new Date(new Date().getTime() - 1000 * 60 * 60 * 2 * i),
- subDescription: desc[i % 5],
- description:
- '在中台产品的研发过程中,会出现不同的设计规范和实现方式,但其中往往存在很多类似的页面和组件,这些类似的组件会被抽离成一套标准规范。',
- activeUser: Math.ceil(Math.random() * 100000) + 100000,
- newUser: Math.ceil(Math.random() * 1000) + 1000,
- star: Math.ceil(Math.random() * 100) + 100,
- like: Math.ceil(Math.random() * 100) + 100,
- message: Math.ceil(Math.random() * 10) + 10,
- content:
- '段落示意:蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。蚂蚁金服设计平台 ant.design,用最小的工作量,无缝接入蚂蚁金服生态,提供跨越设计与开发的体验解决方案。',
- members: [
- {
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ZiESqWwCXBRQoaPONSJe.png',
- name: '曲丽丽',
- id: 'member1',
- },
- {
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/tBOxZPlITHqwlGjsJWaF.png',
- name: '王昭君',
- id: 'member2',
- },
- {
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/sBxjgqiuHMGRkIjqlQCd.png',
- name: '董娜娜',
- id: 'member3',
- },
- ],
- });
- }
- return list;
- }
- let sourceData;
- function getFakeList(req, res) {
- const params = req.query;
- const count = params.count * 1 || 20;
- const result = fakeList(count);
- sourceData = result;
- return res.json(result);
- }
- function postFakeList(req, res) {
- const {
- /* url = '', */
- body,
- } = req; // const params = getUrlParams(url);
- const { method, id } = body; // const count = (params.count * 1) || 20;
- let result = sourceData;
- switch (method) {
- case 'delete':
- result = result.filter(item => item.id !== id);
- break;
- case 'update':
- result.forEach((item, i) => {
- if (item.id === id) {
- result[i] = Object.assign(item, body);
- }
- });
- break;
- case 'post':
- result.unshift({
- body,
- id: `fake-list-${result.length}`,
- createdAt: new Date().getTime(),
- });
- break;
- default:
- break;
- }
- return res.json(result);
- }
- const getNotice = [
- {
- id: 'xxx1',
- title: titles[0],
- logo: avatars[0],
- description: '那是一种内在的东西,他们到达不了,也无法触及的',
- updatedAt: new Date(),
- member: '科学搬砖组',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx2',
- title: titles[1],
- logo: avatars[1],
- description: '希望是一个好东西,也许是最好的,好东西是不会消亡的',
- updatedAt: new Date('2017-07-24'),
- member: '全组都是吴彦祖',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx3',
- title: titles[2],
- logo: avatars[2],
- description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
- updatedAt: new Date(),
- member: '中二少女团',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx4',
- title: titles[3],
- logo: avatars[3],
- description: '那时候我只会想自己想要什么,从不想自己拥有什么',
- updatedAt: new Date('2017-07-23'),
- member: '程序员日常',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx5',
- title: titles[4],
- logo: avatars[4],
- description: '凛冬将至',
- updatedAt: new Date('2017-07-23'),
- member: '高逼格设计天团',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx6',
- title: titles[5],
- logo: avatars[5],
- description: '生命就像一盒巧克力,结果往往出人意料',
- updatedAt: new Date('2017-07-23'),
- member: '骗你来学计算机',
- href: '',
- memberLink: '',
- },
- ];
- const getActivities = [
- {
- id: 'trend-1',
- updatedAt: new Date(),
- user: {
- name: '曲丽丽',
- avatar: avatars2[0],
- },
- group: {
- name: '高逼格设计天团',
- link: 'http://github.com/',
- },
- project: {
- name: '六月迭代',
- link: 'http://github.com/',
- },
- template: '在 @{group} 新建项目 @{project}',
- },
- {
- id: 'trend-2',
- updatedAt: new Date(),
- user: {
- name: '付小小',
- avatar: avatars2[1],
- },
- group: {
- name: '高逼格设计天团',
- link: 'http://github.com/',
- },
- project: {
- name: '六月迭代',
- link: 'http://github.com/',
- },
- template: '在 @{group} 新建项目 @{project}',
- },
- {
- id: 'trend-3',
- updatedAt: new Date(),
- user: {
- name: '林东东',
- avatar: avatars2[2],
- },
- group: {
- name: '中二少女团',
- link: 'http://github.com/',
- },
- project: {
- name: '六月迭代',
- link: 'http://github.com/',
- },
- template: '在 @{group} 新建项目 @{project}',
- },
- {
- id: 'trend-4',
- updatedAt: new Date(),
- user: {
- name: '周星星',
- avatar: avatars2[4],
- },
- project: {
- name: '5 月日常迭代',
- link: 'http://github.com/',
- },
- template: '将 @{project} 更新至已发布状态',
- },
- {
- id: 'trend-5',
- updatedAt: new Date(),
- user: {
- name: '朱偏右',
- avatar: avatars2[3],
- },
- project: {
- name: '工程效能',
- link: 'http://github.com/',
- },
- comment: {
- name: '留言',
- link: 'http://github.com/',
- },
- template: '在 @{project} 发布了 @{comment}',
- },
- {
- id: 'trend-6',
- updatedAt: new Date(),
- user: {
- name: '乐哥',
- avatar: avatars2[5],
- },
- group: {
- name: '程序员日常',
- link: 'http://github.com/',
- },
- project: {
- name: '品牌迭代',
- link: 'http://github.com/',
- },
- template: '在 @{group} 新建项目 @{project}',
- },
- ];
- function getFakeCaptcha(req, res) {
- return res.json('captcha-xxx');
- }
- var api = {
- 'GET /api/project/notice': getNotice,
- 'GET /api/activities': getActivities,
- 'POST /api/forms': (req, res) => {
- res.send({
- message: 'Ok',
- });
- },
- 'GET /api/tags': mockjs.mock({
- 'list|100': [
- {
- name: '@city',
- 'value|1-100': 150,
- 'type|0-2': 1,
- },
- ],
- }),
- 'GET /api/fake_list': getFakeList,
- 'POST /api/fake_list': postFakeList,
- 'GET /api/captcha': getFakeCaptcha,
- };
- const visitData = [];
- const beginDay = new Date().getTime();
- const fakeY = [7, 5, 4, 2, 4, 7, 5, 6, 5, 9, 6, 3, 1, 5, 3, 6, 5];
- for (let i = 0; i < fakeY.length; i += 1) {
- visitData.push({
- x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
- y: fakeY[i],
- });
- }
- const visitData2 = [];
- const fakeY2 = [1, 6, 4, 8, 3, 7, 2];
- for (let i = 0; i < fakeY2.length; i += 1) {
- visitData2.push({
- x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format('YYYY-MM-DD'),
- y: fakeY2[i],
- });
- }
- const salesData = [];
- for (let i = 0; i < 12; i += 1) {
- salesData.push({
- x: `${i + 1}月`,
- y: Math.floor(Math.random() * 1000) + 200,
- });
- }
- const searchData = [];
- for (let i = 0; i < 50; i += 1) {
- searchData.push({
- index: i + 1,
- keyword: `搜索关键词-${i}`,
- count: Math.floor(Math.random() * 1000),
- range: Math.floor(Math.random() * 100),
- status: Math.floor((Math.random() * 10) % 2),
- });
- }
- const salesTypeData = [
- {
- x: '家用电器',
- y: 4544,
- },
- {
- x: '食用酒水',
- y: 3321,
- },
- {
- x: '个护健康',
- y: 3113,
- },
- {
- x: '服饰箱包',
- y: 2341,
- },
- {
- x: '母婴产品',
- y: 1231,
- },
- {
- x: '其他',
- y: 1231,
- },
- ];
- const salesTypeDataOnline = [
- {
- x: '家用电器',
- y: 244,
- },
- {
- x: '食用酒水',
- y: 321,
- },
- {
- x: '个护健康',
- y: 311,
- },
- {
- x: '服饰箱包',
- y: 41,
- },
- {
- x: '母婴产品',
- y: 121,
- },
- {
- x: '其他',
- y: 111,
- },
- ];
- const salesTypeDataOffline = [
- {
- x: '家用电器',
- y: 99,
- },
- {
- x: '食用酒水',
- y: 188,
- },
- {
- x: '个护健康',
- y: 344,
- },
- {
- x: '服饰箱包',
- y: 255,
- },
- {
- x: '其他',
- y: 65,
- },
- ];
- const offlineData = [];
- for (let i = 0; i < 10; i += 1) {
- offlineData.push({
- name: `Stores ${i}`,
- cvr: Math.ceil(Math.random() * 9) / 10,
- });
- }
- const offlineChartData = [];
- for (let i = 0; i < 20; i += 1) {
- offlineChartData.push({
- x: new Date().getTime() + 1000 * 60 * 30 * i,
- y1: Math.floor(Math.random() * 100) + 10,
- y2: Math.floor(Math.random() * 100) + 10,
- });
- }
- const radarOriginData = [
- {
- name: '个人',
- ref: 10,
- koubei: 8,
- output: 4,
- contribute: 5,
- hot: 7,
- },
- {
- name: '团队',
- ref: 3,
- koubei: 9,
- output: 6,
- contribute: 3,
- hot: 1,
- },
- {
- name: '部门',
- ref: 4,
- koubei: 1,
- output: 6,
- contribute: 5,
- hot: 7,
- },
- ];
- const radarData = [];
- const radarTitleMap = {
- ref: '引用',
- koubei: '口碑',
- output: '产量',
- contribute: '贡献',
- hot: '热度',
- };
- radarOriginData.forEach(item => {
- Object.keys(item).forEach(key => {
- if (key !== 'name') {
- radarData.push({
- name: item.name,
- label: radarTitleMap[key],
- value: item[key],
- });
- }
- });
- });
- const getFakeChartData = {
- visitData,
- visitData2,
- salesData,
- searchData,
- offlineData,
- offlineChartData,
- salesTypeData,
- salesTypeDataOnline,
- salesTypeDataOffline,
- radarData,
- };
- var chart = {
- 'GET /api/fake_chart_data': getFakeChartData,
- };
- var city = {
- '110000': [
- {
- province: '北京市',
- name: '市辖区',
- id: '110100',
- },
- ],
- '120000': [
- {
- province: '天津市',
- name: '市辖区',
- id: '120100',
- },
- ],
- '130000': [
- {
- province: '河北省',
- name: '石家庄市',
- id: '130100',
- },
- {
- province: '河北省',
- name: '唐山市',
- id: '130200',
- },
- {
- province: '河北省',
- name: '秦皇岛市',
- id: '130300',
- },
- {
- province: '河北省',
- name: '邯郸市',
- id: '130400',
- },
- {
- province: '河北省',
- name: '邢台市',
- id: '130500',
- },
- {
- province: '河北省',
- name: '保定市',
- id: '130600',
- },
- {
- province: '河北省',
- name: '张家口市',
- id: '130700',
- },
- {
- province: '河北省',
- name: '承德市',
- id: '130800',
- },
- {
- province: '河北省',
- name: '沧州市',
- id: '130900',
- },
- {
- province: '河北省',
- name: '廊坊市',
- id: '131000',
- },
- {
- province: '河北省',
- name: '衡水市',
- id: '131100',
- },
- {
- province: '河北省',
- name: '省直辖县级行政区划',
- id: '139000',
- },
- ],
- '140000': [
- {
- province: '山西省',
- name: '太原市',
- id: '140100',
- },
- {
- province: '山西省',
- name: '大同市',
- id: '140200',
- },
- {
- province: '山西省',
- name: '阳泉市',
- id: '140300',
- },
- {
- province: '山西省',
- name: '长治市',
- id: '140400',
- },
- {
- province: '山西省',
- name: '晋城市',
- id: '140500',
- },
- {
- province: '山西省',
- name: '朔州市',
- id: '140600',
- },
- {
- province: '山西省',
- name: '晋中市',
- id: '140700',
- },
- {
- province: '山西省',
- name: '运城市',
- id: '140800',
- },
- {
- province: '山西省',
- name: '忻州市',
- id: '140900',
- },
- {
- province: '山西省',
- name: '临汾市',
- id: '141000',
- },
- {
- province: '山西省',
- name: '吕梁市',
- id: '141100',
- },
- ],
- '150000': [
- {
- province: '内蒙古自治区',
- name: '呼和浩特市',
- id: '150100',
- },
- {
- province: '内蒙古自治区',
- name: '包头市',
- id: '150200',
- },
- {
- province: '内蒙古自治区',
- name: '乌海市',
- id: '150300',
- },
- {
- province: '内蒙古自治区',
- name: '赤峰市',
- id: '150400',
- },
- {
- province: '内蒙古自治区',
- name: '通辽市',
- id: '150500',
- },
- {
- province: '内蒙古自治区',
- name: '鄂尔多斯市',
- id: '150600',
- },
- {
- province: '内蒙古自治区',
- name: '呼伦贝尔市',
- id: '150700',
- },
- {
- province: '内蒙古自治区',
- name: '巴彦淖尔市',
- id: '150800',
- },
- {
- province: '内蒙古自治区',
- name: '乌兰察布市',
- id: '150900',
- },
- {
- province: '内蒙古自治区',
- name: '兴安盟',
- id: '152200',
- },
- {
- province: '内蒙古自治区',
- name: '锡林郭勒盟',
- id: '152500',
- },
- {
- province: '内蒙古自治区',
- name: '阿拉善盟',
- id: '152900',
- },
- ],
- '210000': [
- {
- province: '辽宁省',
- name: '沈阳市',
- id: '210100',
- },
- {
- province: '辽宁省',
- name: '大连市',
- id: '210200',
- },
- {
- province: '辽宁省',
- name: '鞍山市',
- id: '210300',
- },
- {
- province: '辽宁省',
- name: '抚顺市',
- id: '210400',
- },
- {
- province: '辽宁省',
- name: '本溪市',
- id: '210500',
- },
- {
- province: '辽宁省',
- name: '丹东市',
- id: '210600',
- },
- {
- province: '辽宁省',
- name: '锦州市',
- id: '210700',
- },
- {
- province: '辽宁省',
- name: '营口市',
- id: '210800',
- },
- {
- province: '辽宁省',
- name: '阜新市',
- id: '210900',
- },
- {
- province: '辽宁省',
- name: '辽阳市',
- id: '211000',
- },
- {
- province: '辽宁省',
- name: '盘锦市',
- id: '211100',
- },
- {
- province: '辽宁省',
- name: '铁岭市',
- id: '211200',
- },
- {
- province: '辽宁省',
- name: '朝阳市',
- id: '211300',
- },
- {
- province: '辽宁省',
- name: '葫芦岛市',
- id: '211400',
- },
- ],
- '220000': [
- {
- province: '吉林省',
- name: '长春市',
- id: '220100',
- },
- {
- province: '吉林省',
- name: '吉林市',
- id: '220200',
- },
- {
- province: '吉林省',
- name: '四平市',
- id: '220300',
- },
- {
- province: '吉林省',
- name: '辽源市',
- id: '220400',
- },
- {
- province: '吉林省',
- name: '通化市',
- id: '220500',
- },
- {
- province: '吉林省',
- name: '白山市',
- id: '220600',
- },
- {
- province: '吉林省',
- name: '松原市',
- id: '220700',
- },
- {
- province: '吉林省',
- name: '白城市',
- id: '220800',
- },
- {
- province: '吉林省',
- name: '延边朝鲜族自治州',
- id: '222400',
- },
- ],
- '230000': [
- {
- province: '黑龙江省',
- name: '哈尔滨市',
- id: '230100',
- },
- {
- province: '黑龙江省',
- name: '齐齐哈尔市',
- id: '230200',
- },
- {
- province: '黑龙江省',
- name: '鸡西市',
- id: '230300',
- },
- {
- province: '黑龙江省',
- name: '鹤岗市',
- id: '230400',
- },
- {
- province: '黑龙江省',
- name: '双鸭山市',
- id: '230500',
- },
- {
- province: '黑龙江省',
- name: '大庆市',
- id: '230600',
- },
- {
- province: '黑龙江省',
- name: '伊春市',
- id: '230700',
- },
- {
- province: '黑龙江省',
- name: '佳木斯市',
- id: '230800',
- },
- {
- province: '黑龙江省',
- name: '七台河市',
- id: '230900',
- },
- {
- province: '黑龙江省',
- name: '牡丹江市',
- id: '231000',
- },
- {
- province: '黑龙江省',
- name: '黑河市',
- id: '231100',
- },
- {
- province: '黑龙江省',
- name: '绥化市',
- id: '231200',
- },
- {
- province: '黑龙江省',
- name: '大兴安岭地区',
- id: '232700',
- },
- ],
- '310000': [
- {
- province: '上海市',
- name: '市辖区',
- id: '310100',
- },
- ],
- '320000': [
- {
- province: '江苏省',
- name: '南京市',
- id: '320100',
- },
- {
- province: '江苏省',
- name: '无锡市',
- id: '320200',
- },
- {
- province: '江苏省',
- name: '徐州市',
- id: '320300',
- },
- {
- province: '江苏省',
- name: '常州市',
- id: '320400',
- },
- {
- province: '江苏省',
- name: '苏州市',
- id: '320500',
- },
- {
- province: '江苏省',
- name: '南通市',
- id: '320600',
- },
- {
- province: '江苏省',
- name: '连云港市',
- id: '320700',
- },
- {
- province: '江苏省',
- name: '淮安市',
- id: '320800',
- },
- {
- province: '江苏省',
- name: '盐城市',
- id: '320900',
- },
- {
- province: '江苏省',
- name: '扬州市',
- id: '321000',
- },
- {
- province: '江苏省',
- name: '镇江市',
- id: '321100',
- },
- {
- province: '江苏省',
- name: '泰州市',
- id: '321200',
- },
- {
- province: '江苏省',
- name: '宿迁市',
- id: '321300',
- },
- ],
- '330000': [
- {
- province: '浙江省',
- name: '杭州市',
- id: '330100',
- },
- {
- province: '浙江省',
- name: '宁波市',
- id: '330200',
- },
- {
- province: '浙江省',
- name: '温州市',
- id: '330300',
- },
- {
- province: '浙江省',
- name: '嘉兴市',
- id: '330400',
- },
- {
- province: '浙江省',
- name: '湖州市',
- id: '330500',
- },
- {
- province: '浙江省',
- name: '绍兴市',
- id: '330600',
- },
- {
- province: '浙江省',
- name: '金华市',
- id: '330700',
- },
- {
- province: '浙江省',
- name: '衢州市',
- id: '330800',
- },
- {
- province: '浙江省',
- name: '舟山市',
- id: '330900',
- },
- {
- province: '浙江省',
- name: '台州市',
- id: '331000',
- },
- {
- province: '浙江省',
- name: '丽水市',
- id: '331100',
- },
- ],
- '340000': [
- {
- province: '安徽省',
- name: '合肥市',
- id: '340100',
- },
- {
- province: '安徽省',
- name: '芜湖市',
- id: '340200',
- },
- {
- province: '安徽省',
- name: '蚌埠市',
- id: '340300',
- },
- {
- province: '安徽省',
- name: '淮南市',
- id: '340400',
- },
- {
- province: '安徽省',
- name: '马鞍山市',
- id: '340500',
- },
- {
- province: '安徽省',
- name: '淮北市',
- id: '340600',
- },
- {
- province: '安徽省',
- name: '铜陵市',
- id: '340700',
- },
- {
- province: '安徽省',
- name: '安庆市',
- id: '340800',
- },
- {
- province: '安徽省',
- name: '黄山市',
- id: '341000',
- },
- {
- province: '安徽省',
- name: '滁州市',
- id: '341100',
- },
- {
- province: '安徽省',
- name: '阜阳市',
- id: '341200',
- },
- {
- province: '安徽省',
- name: '宿州市',
- id: '341300',
- },
- {
- province: '安徽省',
- name: '六安市',
- id: '341500',
- },
- {
- province: '安徽省',
- name: '亳州市',
- id: '341600',
- },
- {
- province: '安徽省',
- name: '池州市',
- id: '341700',
- },
- {
- province: '安徽省',
- name: '宣城市',
- id: '341800',
- },
- ],
- '350000': [
- {
- province: '福建省',
- name: '福州市',
- id: '350100',
- },
- {
- province: '福建省',
- name: '厦门市',
- id: '350200',
- },
- {
- province: '福建省',
- name: '莆田市',
- id: '350300',
- },
- {
- province: '福建省',
- name: '三明市',
- id: '350400',
- },
- {
- province: '福建省',
- name: '泉州市',
- id: '350500',
- },
- {
- province: '福建省',
- name: '漳州市',
- id: '350600',
- },
- {
- province: '福建省',
- name: '南平市',
- id: '350700',
- },
- {
- province: '福建省',
- name: '龙岩市',
- id: '350800',
- },
- {
- province: '福建省',
- name: '宁德市',
- id: '350900',
- },
- ],
- '360000': [
- {
- province: '江西省',
- name: '南昌市',
- id: '360100',
- },
- {
- province: '江西省',
- name: '景德镇市',
- id: '360200',
- },
- {
- province: '江西省',
- name: '萍乡市',
- id: '360300',
- },
- {
- province: '江西省',
- name: '九江市',
- id: '360400',
- },
- {
- province: '江西省',
- name: '新余市',
- id: '360500',
- },
- {
- province: '江西省',
- name: '鹰潭市',
- id: '360600',
- },
- {
- province: '江西省',
- name: '赣州市',
- id: '360700',
- },
- {
- province: '江西省',
- name: '吉安市',
- id: '360800',
- },
- {
- province: '江西省',
- name: '宜春市',
- id: '360900',
- },
- {
- province: '江西省',
- name: '抚州市',
- id: '361000',
- },
- {
- province: '江西省',
- name: '上饶市',
- id: '361100',
- },
- ],
- '370000': [
- {
- province: '山东省',
- name: '济南市',
- id: '370100',
- },
- {
- province: '山东省',
- name: '青岛市',
- id: '370200',
- },
- {
- province: '山东省',
- name: '淄博市',
- id: '370300',
- },
- {
- province: '山东省',
- name: '枣庄市',
- id: '370400',
- },
- {
- province: '山东省',
- name: '东营市',
- id: '370500',
- },
- {
- province: '山东省',
- name: '烟台市',
- id: '370600',
- },
- {
- province: '山东省',
- name: '潍坊市',
- id: '370700',
- },
- {
- province: '山东省',
- name: '济宁市',
- id: '370800',
- },
- {
- province: '山东省',
- name: '泰安市',
- id: '370900',
- },
- {
- province: '山东省',
- name: '威海市',
- id: '371000',
- },
- {
- province: '山东省',
- name: '日照市',
- id: '371100',
- },
- {
- province: '山东省',
- name: '莱芜市',
- id: '371200',
- },
- {
- province: '山东省',
- name: '临沂市',
- id: '371300',
- },
- {
- province: '山东省',
- name: '德州市',
- id: '371400',
- },
- {
- province: '山东省',
- name: '聊城市',
- id: '371500',
- },
- {
- province: '山东省',
- name: '滨州市',
- id: '371600',
- },
- {
- province: '山东省',
- name: '菏泽市',
- id: '371700',
- },
- ],
- '410000': [
- {
- province: '河南省',
- name: '郑州市',
- id: '410100',
- },
- {
- province: '河南省',
- name: '开封市',
- id: '410200',
- },
- {
- province: '河南省',
- name: '洛阳市',
- id: '410300',
- },
- {
- province: '河南省',
- name: '平顶山市',
- id: '410400',
- },
- {
- province: '河南省',
- name: '安阳市',
- id: '410500',
- },
- {
- province: '河南省',
- name: '鹤壁市',
- id: '410600',
- },
- {
- province: '河南省',
- name: '新乡市',
- id: '410700',
- },
- {
- province: '河南省',
- name: '焦作市',
- id: '410800',
- },
- {
- province: '河南省',
- name: '濮阳市',
- id: '410900',
- },
- {
- province: '河南省',
- name: '许昌市',
- id: '411000',
- },
- {
- province: '河南省',
- name: '漯河市',
- id: '411100',
- },
- {
- province: '河南省',
- name: '三门峡市',
- id: '411200',
- },
- {
- province: '河南省',
- name: '南阳市',
- id: '411300',
- },
- {
- province: '河南省',
- name: '商丘市',
- id: '411400',
- },
- {
- province: '河南省',
- name: '信阳市',
- id: '411500',
- },
- {
- province: '河南省',
- name: '周口市',
- id: '411600',
- },
- {
- province: '河南省',
- name: '驻马店市',
- id: '411700',
- },
- {
- province: '河南省',
- name: '省直辖县级行政区划',
- id: '419000',
- },
- ],
- '420000': [
- {
- province: '湖北省',
- name: '武汉市',
- id: '420100',
- },
- {
- province: '湖北省',
- name: '黄石市',
- id: '420200',
- },
- {
- province: '湖北省',
- name: '十堰市',
- id: '420300',
- },
- {
- province: '湖北省',
- name: '宜昌市',
- id: '420500',
- },
- {
- province: '湖北省',
- name: '襄阳市',
- id: '420600',
- },
- {
- province: '湖北省',
- name: '鄂州市',
- id: '420700',
- },
- {
- province: '湖北省',
- name: '荆门市',
- id: '420800',
- },
- {
- province: '湖北省',
- name: '孝感市',
- id: '420900',
- },
- {
- province: '湖北省',
- name: '荆州市',
- id: '421000',
- },
- {
- province: '湖北省',
- name: '黄冈市',
- id: '421100',
- },
- {
- province: '湖北省',
- name: '咸宁市',
- id: '421200',
- },
- {
- province: '湖北省',
- name: '随州市',
- id: '421300',
- },
- {
- province: '湖北省',
- name: '恩施土家族苗族自治州',
- id: '422800',
- },
- {
- province: '湖北省',
- name: '省直辖县级行政区划',
- id: '429000',
- },
- ],
- '430000': [
- {
- province: '湖南省',
- name: '长沙市',
- id: '430100',
- },
- {
- province: '湖南省',
- name: '株洲市',
- id: '430200',
- },
- {
- province: '湖南省',
- name: '湘潭市',
- id: '430300',
- },
- {
- province: '湖南省',
- name: '衡阳市',
- id: '430400',
- },
- {
- province: '湖南省',
- name: '邵阳市',
- id: '430500',
- },
- {
- province: '湖南省',
- name: '岳阳市',
- id: '430600',
- },
- {
- province: '湖南省',
- name: '常德市',
- id: '430700',
- },
- {
- province: '湖南省',
- name: '张家界市',
- id: '430800',
- },
- {
- province: '湖南省',
- name: '益阳市',
- id: '430900',
- },
- {
- province: '湖南省',
- name: '郴州市',
- id: '431000',
- },
- {
- province: '湖南省',
- name: '永州市',
- id: '431100',
- },
- {
- province: '湖南省',
- name: '怀化市',
- id: '431200',
- },
- {
- province: '湖南省',
- name: '娄底市',
- id: '431300',
- },
- {
- province: '湖南省',
- name: '湘西土家族苗族自治州',
- id: '433100',
- },
- ],
- '440000': [
- {
- province: '广东省',
- name: '广州市',
- id: '440100',
- },
- {
- province: '广东省',
- name: '韶关市',
- id: '440200',
- },
- {
- province: '广东省',
- name: '深圳市',
- id: '440300',
- },
- {
- province: '广东省',
- name: '珠海市',
- id: '440400',
- },
- {
- province: '广东省',
- name: '汕头市',
- id: '440500',
- },
- {
- province: '广东省',
- name: '佛山市',
- id: '440600',
- },
- {
- province: '广东省',
- name: '江门市',
- id: '440700',
- },
- {
- province: '广东省',
- name: '湛江市',
- id: '440800',
- },
- {
- province: '广东省',
- name: '茂名市',
- id: '440900',
- },
- {
- province: '广东省',
- name: '肇庆市',
- id: '441200',
- },
- {
- province: '广东省',
- name: '惠州市',
- id: '441300',
- },
- {
- province: '广东省',
- name: '梅州市',
- id: '441400',
- },
- {
- province: '广东省',
- name: '汕尾市',
- id: '441500',
- },
- {
- province: '广东省',
- name: '河源市',
- id: '441600',
- },
- {
- province: '广东省',
- name: '阳江市',
- id: '441700',
- },
- {
- province: '广东省',
- name: '清远市',
- id: '441800',
- },
- {
- province: '广东省',
- name: '东莞市',
- id: '441900',
- },
- {
- province: '广东省',
- name: '中山市',
- id: '442000',
- },
- {
- province: '广东省',
- name: '潮州市',
- id: '445100',
- },
- {
- province: '广东省',
- name: '揭阳市',
- id: '445200',
- },
- {
- province: '广东省',
- name: '云浮市',
- id: '445300',
- },
- ],
- '450000': [
- {
- province: '广西壮族自治区',
- name: '南宁市',
- id: '450100',
- },
- {
- province: '广西壮族自治区',
- name: '柳州市',
- id: '450200',
- },
- {
- province: '广西壮族自治区',
- name: '桂林市',
- id: '450300',
- },
- {
- province: '广西壮族自治区',
- name: '梧州市',
- id: '450400',
- },
- {
- province: '广西壮族自治区',
- name: '北海市',
- id: '450500',
- },
- {
- province: '广西壮族自治区',
- name: '防城港市',
- id: '450600',
- },
- {
- province: '广西壮族自治区',
- name: '钦州市',
- id: '450700',
- },
- {
- province: '广西壮族自治区',
- name: '贵港市',
- id: '450800',
- },
- {
- province: '广西壮族自治区',
- name: '玉林市',
- id: '450900',
- },
- {
- province: '广西壮族自治区',
- name: '百色市',
- id: '451000',
- },
- {
- province: '广西壮族自治区',
- name: '贺州市',
- id: '451100',
- },
- {
- province: '广西壮族自治区',
- name: '河池市',
- id: '451200',
- },
- {
- province: '广西壮族自治区',
- name: '来宾市',
- id: '451300',
- },
- {
- province: '广西壮族自治区',
- name: '崇左市',
- id: '451400',
- },
- ],
- '460000': [
- {
- province: '海南省',
- name: '海口市',
- id: '460100',
- },
- {
- province: '海南省',
- name: '三亚市',
- id: '460200',
- },
- {
- province: '海南省',
- name: '三沙市',
- id: '460300',
- },
- {
- province: '海南省',
- name: '儋州市',
- id: '460400',
- },
- {
- province: '海南省',
- name: '省直辖县级行政区划',
- id: '469000',
- },
- ],
- '500000': [
- {
- province: '重庆市',
- name: '市辖区',
- id: '500100',
- },
- {
- province: '重庆市',
- name: '县',
- id: '500200',
- },
- ],
- '510000': [
- {
- province: '四川省',
- name: '成都市',
- id: '510100',
- },
- {
- province: '四川省',
- name: '自贡市',
- id: '510300',
- },
- {
- province: '四川省',
- name: '攀枝花市',
- id: '510400',
- },
- {
- province: '四川省',
- name: '泸州市',
- id: '510500',
- },
- {
- province: '四川省',
- name: '德阳市',
- id: '510600',
- },
- {
- province: '四川省',
- name: '绵阳市',
- id: '510700',
- },
- {
- province: '四川省',
- name: '广元市',
- id: '510800',
- },
- {
- province: '四川省',
- name: '遂宁市',
- id: '510900',
- },
- {
- province: '四川省',
- name: '内江市',
- id: '511000',
- },
- {
- province: '四川省',
- name: '乐山市',
- id: '511100',
- },
- {
- province: '四川省',
- name: '南充市',
- id: '511300',
- },
- {
- province: '四川省',
- name: '眉山市',
- id: '511400',
- },
- {
- province: '四川省',
- name: '宜宾市',
- id: '511500',
- },
- {
- province: '四川省',
- name: '广安市',
- id: '511600',
- },
- {
- province: '四川省',
- name: '达州市',
- id: '511700',
- },
- {
- province: '四川省',
- name: '雅安市',
- id: '511800',
- },
- {
- province: '四川省',
- name: '巴中市',
- id: '511900',
- },
- {
- province: '四川省',
- name: '资阳市',
- id: '512000',
- },
- {
- province: '四川省',
- name: '阿坝藏族羌族自治州',
- id: '513200',
- },
- {
- province: '四川省',
- name: '甘孜藏族自治州',
- id: '513300',
- },
- {
- province: '四川省',
- name: '凉山彝族自治州',
- id: '513400',
- },
- ],
- '520000': [
- {
- province: '贵州省',
- name: '贵阳市',
- id: '520100',
- },
- {
- province: '贵州省',
- name: '六盘水市',
- id: '520200',
- },
- {
- province: '贵州省',
- name: '遵义市',
- id: '520300',
- },
- {
- province: '贵州省',
- name: '安顺市',
- id: '520400',
- },
- {
- province: '贵州省',
- name: '毕节市',
- id: '520500',
- },
- {
- province: '贵州省',
- name: '铜仁市',
- id: '520600',
- },
- {
- province: '贵州省',
- name: '黔西南布依族苗族自治州',
- id: '522300',
- },
- {
- province: '贵州省',
- name: '黔东南苗族侗族自治州',
- id: '522600',
- },
- {
- province: '贵州省',
- name: '黔南布依族苗族自治州',
- id: '522700',
- },
- ],
- '530000': [
- {
- province: '云南省',
- name: '昆明市',
- id: '530100',
- },
- {
- province: '云南省',
- name: '曲靖市',
- id: '530300',
- },
- {
- province: '云南省',
- name: '玉溪市',
- id: '530400',
- },
- {
- province: '云南省',
- name: '保山市',
- id: '530500',
- },
- {
- province: '云南省',
- name: '昭通市',
- id: '530600',
- },
- {
- province: '云南省',
- name: '丽江市',
- id: '530700',
- },
- {
- province: '云南省',
- name: '普洱市',
- id: '530800',
- },
- {
- province: '云南省',
- name: '临沧市',
- id: '530900',
- },
- {
- province: '云南省',
- name: '楚雄彝族自治州',
- id: '532300',
- },
- {
- province: '云南省',
- name: '红河哈尼族彝族自治州',
- id: '532500',
- },
- {
- province: '云南省',
- name: '文山壮族苗族自治州',
- id: '532600',
- },
- {
- province: '云南省',
- name: '西双版纳傣族自治州',
- id: '532800',
- },
- {
- province: '云南省',
- name: '大理白族自治州',
- id: '532900',
- },
- {
- province: '云南省',
- name: '德宏傣族景颇族自治州',
- id: '533100',
- },
- {
- province: '云南省',
- name: '怒江傈僳族自治州',
- id: '533300',
- },
- {
- province: '云南省',
- name: '迪庆藏族自治州',
- id: '533400',
- },
- ],
- '540000': [
- {
- province: '西藏自治区',
- name: '拉萨市',
- id: '540100',
- },
- {
- province: '西藏自治区',
- name: '日喀则市',
- id: '540200',
- },
- {
- province: '西藏自治区',
- name: '昌都市',
- id: '540300',
- },
- {
- province: '西藏自治区',
- name: '林芝市',
- id: '540400',
- },
- {
- province: '西藏自治区',
- name: '山南市',
- id: '540500',
- },
- {
- province: '西藏自治区',
- name: '那曲地区',
- id: '542400',
- },
- {
- province: '西藏自治区',
- name: '阿里地区',
- id: '542500',
- },
- ],
- '610000': [
- {
- province: '陕西省',
- name: '西安市',
- id: '610100',
- },
- {
- province: '陕西省',
- name: '铜川市',
- id: '610200',
- },
- {
- province: '陕西省',
- name: '宝鸡市',
- id: '610300',
- },
- {
- province: '陕西省',
- name: '咸阳市',
- id: '610400',
- },
- {
- province: '陕西省',
- name: '渭南市',
- id: '610500',
- },
- {
- province: '陕西省',
- name: '延安市',
- id: '610600',
- },
- {
- province: '陕西省',
- name: '汉中市',
- id: '610700',
- },
- {
- province: '陕西省',
- name: '榆林市',
- id: '610800',
- },
- {
- province: '陕西省',
- name: '安康市',
- id: '610900',
- },
- {
- province: '陕西省',
- name: '商洛市',
- id: '611000',
- },
- ],
- '620000': [
- {
- province: '甘肃省',
- name: '兰州市',
- id: '620100',
- },
- {
- province: '甘肃省',
- name: '嘉峪关市',
- id: '620200',
- },
- {
- province: '甘肃省',
- name: '金昌市',
- id: '620300',
- },
- {
- province: '甘肃省',
- name: '白银市',
- id: '620400',
- },
- {
- province: '甘肃省',
- name: '天水市',
- id: '620500',
- },
- {
- province: '甘肃省',
- name: '武威市',
- id: '620600',
- },
- {
- province: '甘肃省',
- name: '张掖市',
- id: '620700',
- },
- {
- province: '甘肃省',
- name: '平凉市',
- id: '620800',
- },
- {
- province: '甘肃省',
- name: '酒泉市',
- id: '620900',
- },
- {
- province: '甘肃省',
- name: '庆阳市',
- id: '621000',
- },
- {
- province: '甘肃省',
- name: '定西市',
- id: '621100',
- },
- {
- province: '甘肃省',
- name: '陇南市',
- id: '621200',
- },
- {
- province: '甘肃省',
- name: '临夏回族自治州',
- id: '622900',
- },
- {
- province: '甘肃省',
- name: '甘南藏族自治州',
- id: '623000',
- },
- ],
- '630000': [
- {
- province: '青海省',
- name: '西宁市',
- id: '630100',
- },
- {
- province: '青海省',
- name: '海东市',
- id: '630200',
- },
- {
- province: '青海省',
- name: '海北藏族自治州',
- id: '632200',
- },
- {
- province: '青海省',
- name: '黄南藏族自治州',
- id: '632300',
- },
- {
- province: '青海省',
- name: '海南藏族自治州',
- id: '632500',
- },
- {
- province: '青海省',
- name: '果洛藏族自治州',
- id: '632600',
- },
- {
- province: '青海省',
- name: '玉树藏族自治州',
- id: '632700',
- },
- {
- province: '青海省',
- name: '海西蒙古族藏族自治州',
- id: '632800',
- },
- ],
- '640000': [
- {
- province: '宁夏回族自治区',
- name: '银川市',
- id: '640100',
- },
- {
- province: '宁夏回族自治区',
- name: '石嘴山市',
- id: '640200',
- },
- {
- province: '宁夏回族自治区',
- name: '吴忠市',
- id: '640300',
- },
- {
- province: '宁夏回族自治区',
- name: '固原市',
- id: '640400',
- },
- {
- province: '宁夏回族自治区',
- name: '中卫市',
- id: '640500',
- },
- ],
- '650000': [
- {
- province: '新疆维吾尔自治区',
- name: '乌鲁木齐市',
- id: '650100',
- },
- {
- province: '新疆维吾尔自治区',
- name: '克拉玛依市',
- id: '650200',
- },
- {
- province: '新疆维吾尔自治区',
- name: '吐鲁番市',
- id: '650400',
- },
- {
- province: '新疆维吾尔自治区',
- name: '哈密市',
- id: '650500',
- },
- {
- province: '新疆维吾尔自治区',
- name: '昌吉回族自治州',
- id: '652300',
- },
- {
- province: '新疆维吾尔自治区',
- name: '博尔塔拉蒙古自治州',
- id: '652700',
- },
- {
- province: '新疆维吾尔自治区',
- name: '巴音郭楞蒙古自治州',
- id: '652800',
- },
- {
- province: '新疆维吾尔自治区',
- name: '阿克苏地区',
- id: '652900',
- },
- {
- province: '新疆维吾尔自治区',
- name: '克孜勒苏柯尔克孜自治州',
- id: '653000',
- },
- {
- province: '新疆维吾尔自治区',
- name: '喀什地区',
- id: '653100',
- },
- {
- province: '新疆维吾尔自治区',
- name: '和田地区',
- id: '653200',
- },
- {
- province: '新疆维吾尔自治区',
- name: '伊犁哈萨克自治州',
- id: '654000',
- },
- {
- province: '新疆维吾尔自治区',
- name: '塔城地区',
- id: '654200',
- },
- {
- province: '新疆维吾尔自治区',
- name: '阿勒泰地区',
- id: '654300',
- },
- {
- province: '新疆维吾尔自治区',
- name: '自治区直辖县级行政区划',
- id: '659000',
- },
- ],
- };
- var province = [
- {
- name: '北京市',
- id: '110000',
- },
- {
- name: '天津市',
- id: '120000',
- },
- {
- name: '河北省',
- id: '130000',
- },
- {
- name: '山西省',
- id: '140000',
- },
- {
- name: '内蒙古自治区',
- id: '150000',
- },
- {
- name: '辽宁省',
- id: '210000',
- },
- {
- name: '吉林省',
- id: '220000',
- },
- {
- name: '黑龙江省',
- id: '230000',
- },
- {
- name: '上海市',
- id: '310000',
- },
- {
- name: '江苏省',
- id: '320000',
- },
- {
- name: '浙江省',
- id: '330000',
- },
- {
- name: '安徽省',
- id: '340000',
- },
- {
- name: '福建省',
- id: '350000',
- },
- {
- name: '江西省',
- id: '360000',
- },
- {
- name: '山东省',
- id: '370000',
- },
- {
- name: '河南省',
- id: '410000',
- },
- {
- name: '湖北省',
- id: '420000',
- },
- {
- name: '湖南省',
- id: '430000',
- },
- {
- name: '广东省',
- id: '440000',
- },
- {
- name: '广西壮族自治区',
- id: '450000',
- },
- {
- name: '海南省',
- id: '460000',
- },
- {
- name: '重庆市',
- id: '500000',
- },
- {
- name: '四川省',
- id: '510000',
- },
- {
- name: '贵州省',
- id: '520000',
- },
- {
- name: '云南省',
- id: '530000',
- },
- {
- name: '西藏自治区',
- id: '540000',
- },
- {
- name: '陕西省',
- id: '610000',
- },
- {
- name: '甘肃省',
- id: '620000',
- },
- {
- name: '青海省',
- id: '630000',
- },
- {
- name: '宁夏回族自治区',
- id: '640000',
- },
- {
- name: '新疆维吾尔自治区',
- id: '650000',
- },
- {
- name: '台湾省',
- id: '710000',
- },
- {
- name: '香港特别行政区',
- id: '810000',
- },
- {
- name: '澳门特别行政区',
- id: '820000',
- },
- ];
- function getProvince(req, res) {
- return res.json(province);
- }
- function getCity(req, res) {
- return res.json(city[req.params.province]);
- }
- var geographic = {
- 'GET /api/geographic/province': getProvince,
- 'GET /api/geographic/city/:province': getCity,
- };
- const getNotices = (req, res) =>
- res.json([
- {
- id: '000000001',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
- title: '你收到了 14 份新周报',
- datetime: '2017-08-09',
- type: 'notification',
- },
- {
- id: '000000002',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/OKJXDXrmkNshAMvwtvhu.png',
- title: '你推荐的 曲妮妮 已通过第三轮面试',
- datetime: '2017-08-08',
- type: 'notification',
- },
- {
- id: '000000003',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/kISTdvpyTAhtGxpovNWd.png',
- title: '这种模板可以区分多种通知类型',
- datetime: '2017-08-07',
- read: true,
- type: 'notification',
- },
- {
- id: '000000004',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/GvqBnKhFgObvnSGkDsje.png',
- title: '左侧图标用于区分不同的类型',
- datetime: '2017-08-07',
- type: 'notification',
- },
- {
- id: '000000005',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
- title: '内容不要超过两行字,超出时自动截断',
- datetime: '2017-08-07',
- type: 'notification',
- },
- {
- id: '000000006',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
- title: '曲丽丽 评论了你',
- description: '描述信息描述信息描述信息',
- datetime: '2017-08-07',
- type: 'message',
- clickClose: true,
- },
- {
- id: '000000007',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
- title: '朱偏右 回复了你',
- description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
- datetime: '2017-08-07',
- type: 'message',
- clickClose: true,
- },
- {
- id: '000000008',
- avatar: 'https://gw.alipayobjects.com/zos/rmsportal/fcHMVNCjPOsbUGdEduuv.jpeg',
- title: '标题',
- description: '这种模板用于提醒谁与你发生了互动,左侧放『谁』的头像',
- datetime: '2017-08-07',
- type: 'message',
- clickClose: true,
- },
- {
- id: '000000009',
- title: '任务名称',
- description: '任务需要在 2017-01-12 20:00 前启动',
- extra: '未开始',
- status: 'todo',
- type: 'event',
- },
- {
- id: '000000010',
- title: '第三方紧急代码变更',
- description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
- extra: '马上到期',
- status: 'urgent',
- type: 'event',
- },
- {
- id: '000000011',
- title: '信息安全考试',
- description: '指派竹尔于 2017-01-09 前完成更新并发布',
- extra: '已耗时 8 天',
- status: 'doing',
- type: 'event',
- },
- {
- id: '000000012',
- title: 'ABCD 版本发布',
- description: '冠霖提交于 2017-01-06,需在 2017-01-07 前完成代码变更任务',
- extra: '进行中',
- status: 'processing',
- type: 'event',
- },
- ]);
- var notices = {
- 'GET /api/notices': getNotices,
- };
- const basicGoods = [
- {
- id: '1234561',
- name: '矿泉水 550ml',
- barcode: '12421432143214321',
- price: '2.00',
- num: '1',
- amount: '2.00',
- },
- {
- id: '1234562',
- name: '凉茶 300ml',
- barcode: '12421432143214322',
- price: '3.00',
- num: '2',
- amount: '6.00',
- },
- {
- id: '1234563',
- name: '好吃的薯片',
- barcode: '12421432143214323',
- price: '7.00',
- num: '4',
- amount: '28.00',
- },
- {
- id: '1234564',
- name: '特别好吃的蛋卷',
- barcode: '12421432143214324',
- price: '8.50',
- num: '3',
- amount: '25.50',
- },
- ];
- const basicProgress = [
- {
- key: '1',
- time: '2017-10-01 14:10',
- rate: '联系客户',
- status: 'processing',
- operator: '取货员 ID1234',
- cost: '5mins',
- },
- {
- key: '2',
- time: '2017-10-01 14:05',
- rate: '取货员出发',
- status: 'success',
- operator: '取货员 ID1234',
- cost: '1h',
- },
- {
- key: '3',
- time: '2017-10-01 13:05',
- rate: '取货员接单',
- status: 'success',
- operator: '取货员 ID1234',
- cost: '5mins',
- },
- {
- key: '4',
- time: '2017-10-01 13:00',
- rate: '申请审批通过',
- status: 'success',
- operator: '系统',
- cost: '1h',
- },
- {
- key: '5',
- time: '2017-10-01 12:00',
- rate: '发起退货申请',
- status: 'success',
- operator: '用户',
- cost: '5mins',
- },
- ];
- const advancedOperation1 = [
- {
- key: 'op1',
- type: '订购关系生效',
- name: '曲丽丽',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '-',
- },
- {
- key: 'op2',
- type: '财务复审',
- name: '付小小',
- status: 'reject',
- updatedAt: '2017-10-03 19:23:12',
- memo: '不通过原因',
- },
- {
- key: 'op3',
- type: '部门初审',
- name: '周毛毛',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '-',
- },
- {
- key: 'op4',
- type: '提交订单',
- name: '林东东',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '很棒',
- },
- {
- key: 'op5',
- type: '创建订单',
- name: '汗牙牙',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '-',
- },
- ];
- const advancedOperation2 = [
- {
- key: 'op1',
- type: '订购关系生效',
- name: '曲丽丽',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '-',
- },
- ];
- const advancedOperation3 = [
- {
- key: 'op1',
- type: '创建订单',
- name: '汗牙牙',
- status: 'agree',
- updatedAt: '2017-10-03 19:23:12',
- memo: '-',
- },
- ];
- const getProfileAdvancedData = {
- advancedOperation1,
- advancedOperation2,
- advancedOperation3,
- };
- const { Random } = mockjs;
- var profile = {
- 'GET /api/profile/advanced': getProfileAdvancedData,
- 'GET /api/profile/basic': (req, res) => {
- const { id } = req.query;
- const application = {
- id,
- status: '已取货',
- orderNo: Random.id(),
- childOrderNo: Random.id(),
- };
- const userInfo = {
- name: Random.cname(),
- tel: '18100000000',
- delivery: '菜鸟物流',
- addr: '浙江省杭州市西湖区万塘路18号',
- remark: '备注',
- };
- res.json({
- userInfo,
- application,
- basicGoods,
- basicProgress,
- });
- },
- };
- /*! https://mths.be/punycode v1.4.1 by @mathias */
- /** Highest positive signed 32-bit float value */
- var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1
- /** Bootstring parameters */
- var base = 36;
- var tMin = 1;
- var tMax = 26;
- var skew = 38;
- var damp = 700;
- var initialBias = 72;
- var initialN = 128; // 0x80
- var delimiter = '-'; // '\x2D'
- var regexNonASCII = /[^\x20-\x7E]/; // unprintable ASCII chars + non-ASCII chars
- var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
- /** Error messages */
- var errors = {
- overflow: 'Overflow: input needs wider integers to process',
- 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',
- 'invalid-input': 'Invalid input',
- };
- /** Convenience shortcuts */
- var baseMinusTMin = base - tMin;
- var floor = Math.floor;
- var stringFromCharCode = String.fromCharCode;
- /*--------------------------------------------------------------------------*/
- /**
- * A generic error utility function.
- * @private
- * @param {String} type The error type.
- * @returns {Error} Throws a `RangeError` with the applicable error message.
- */
- function error(type) {
- throw new RangeError(errors[type]);
- }
- /**
- * A generic `Array#map` utility function.
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} callback The function that gets called for every array
- * item.
- * @returns {Array} A new array of values returned by the callback function.
- */
- function map(array, fn) {
- var length = array.length;
- var result = [];
- while (length--) {
- result[length] = fn(array[length]);
- }
- return result;
- }
- /**
- * A simple `Array#map`-like wrapper to work with domain name strings or email
- * addresses.
- * @private
- * @param {String} domain The domain name or email address.
- * @param {Function} callback The function that gets called for every
- * character.
- * @returns {Array} A new string of characters returned by the callback
- * function.
- */
- function mapDomain(string, fn) {
- var parts = string.split('@');
- var result = '';
- if (parts.length > 1) {
- // In email addresses, only the domain name should be punycoded. Leave
- // the local part (i.e. everything up to `@`) intact.
- result = parts[0] + '@';
- string = parts[1];
- } // Avoid `split(regex)` for IE8 compatibility. See #17.
- string = string.replace(regexSeparators, '\x2E');
- var labels = string.split('.');
- var encoded = map(labels, fn).join('.');
- return result + encoded;
- }
- /**
- * Creates an array containing the numeric code points of each Unicode
- * character in the string. While JavaScript uses UCS-2 internally,
- * this function will convert a pair of surrogate halves (each of which
- * UCS-2 exposes as separate characters) into a single code point,
- * matching UTF-16.
- * @see `punycode.ucs2.encode`
- * @see <https://mathiasbynens.be/notes/javascript-encoding>
- * @memberOf punycode.ucs2
- * @name decode
- * @param {String} string The Unicode input string (UCS-2).
- * @returns {Array} The new array of code points.
- */
- function ucs2decode(string) {
- var output = [],
- counter = 0,
- length = string.length,
- value,
- extra;
- while (counter < length) {
- value = string.charCodeAt(counter++);
- if (value >= 0xd800 && value <= 0xdbff && counter < length) {
- // high surrogate, and there is a next character
- extra = string.charCodeAt(counter++);
- if ((extra & 0xfc00) == 0xdc00) {
- // low surrogate
- output.push(((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000);
- } else {
- // unmatched surrogate; only append this code unit, in case the next
- // code unit is the high surrogate of a surrogate pair
- output.push(value);
- counter--;
- }
- } else {
- output.push(value);
- }
- }
- return output;
- }
- /**
- * Converts a digit/integer into a basic code point.
- * @see `basicToDigit()`
- * @private
- * @param {Number} digit The numeric value of a basic code point.
- * @returns {Number} The basic code point whose value (when used for
- * representing integers) is `digit`, which needs to be in the range
- * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is
- * used; else, the lowercase form is used. The behavior is undefined
- * if `flag` is non-zero and `digit` has no uppercase form.
- */
- function digitToBasic(digit, flag) {
- // 0..25 map to ASCII a..z or A..Z
- // 26..35 map to ASCII 0..9
- return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
- }
- /**
- * Bias adaptation function as per section 3.4 of RFC 3492.
- * https://tools.ietf.org/html/rfc3492#section-3.4
- * @private
- */
- function adapt(delta, numPoints, firstTime) {
- var k = 0;
- delta = firstTime ? floor(delta / damp) : delta >> 1;
- delta += floor(delta / numPoints);
- for (
- ;
- /* no initialization */
- delta > (baseMinusTMin * tMax) >> 1;
- k += base
- ) {
- delta = floor(delta / baseMinusTMin);
- }
- return floor(k + ((baseMinusTMin + 1) * delta) / (delta + skew));
- }
- /**
- * Converts a string of Unicode symbols (e.g. a domain name label) to a
- * Punycode string of ASCII-only symbols.
- * @memberOf punycode
- * @param {String} input The string of Unicode symbols.
- * @returns {String} The resulting Punycode string of ASCII-only symbols.
- */
- function encode(input) {
- var n,
- delta,
- handledCPCount,
- basicLength,
- bias,
- j,
- m,
- q,
- k,
- t,
- currentValue,
- output = [],
- /** `inputLength` will hold the number of code points in `input`. */
- inputLength,
- /** Cached calculation results */
- handledCPCountPlusOne,
- baseMinusT,
- qMinusT; // Convert the input in UCS-2 to Unicode
- input = ucs2decode(input); // Cache the length
- inputLength = input.length; // Initialize the state
- n = initialN;
- delta = 0;
- bias = initialBias; // Handle the basic code points
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < 0x80) {
- output.push(stringFromCharCode(currentValue));
- }
- }
- handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;
- // `basicLength` is the number of basic code points.
- // Finish the basic string - if it is not empty - with a delimiter
- if (basicLength) {
- output.push(delimiter);
- } // Main encoding loop:
- while (handledCPCount < inputLength) {
- // All non-basic code points < n have been handled already. Find the next
- // larger one:
- for (m = maxInt, j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue >= n && currentValue < m) {
- m = currentValue;
- }
- } // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
- // but guard against overflow
- handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
- error('overflow');
- }
- delta += (m - n) * handledCPCountPlusOne;
- n = m;
- for (j = 0; j < inputLength; ++j) {
- currentValue = input[j];
- if (currentValue < n && ++delta > maxInt) {
- error('overflow');
- }
- if (currentValue == n) {
- // Represent delta as a generalized variable-length integer
- for (
- q = delta, k = base;
- ;
- /* no condition */
- k += base
- ) {
- t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
- if (q < t) {
- break;
- }
- qMinusT = q - t;
- baseMinusT = base - t;
- output.push(stringFromCharCode(digitToBasic(t + (qMinusT % baseMinusT), 0)));
- q = floor(qMinusT / baseMinusT);
- }
- output.push(stringFromCharCode(digitToBasic(q, 0)));
- bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
- delta = 0;
- ++handledCPCount;
- }
- }
- ++delta;
- ++n;
- }
- return output.join('');
- }
- /**
- * Converts a Unicode string representing a domain name or an email address to
- * Punycode. Only the non-ASCII parts of the domain name will be converted,
- * i.e. it doesn't matter if you call it with a domain that's already in
- * ASCII.
- * @memberOf punycode
- * @param {String} input The domain name or email address to convert, as a
- * Unicode string.
- * @returns {String} The Punycode representation of the given domain name or
- * email address.
- */
- function toASCII(input) {
- return mapDomain(input, function(string) {
- return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;
- });
- }
- // shim for using process in browser
- if (typeof global.setTimeout === 'function');
- if (typeof global.clearTimeout === 'function');
- var performance = global.performance || {};
- var performanceNow =
- performance.now ||
- performance.mozNow ||
- performance.msNow ||
- performance.oNow ||
- performance.webkitNow ||
- function() {
- return new Date().getTime();
- }; // generate timestamp or delta
- // Copyright Joyent, Inc. and other Node contributors.
- function isNull(arg) {
- return arg === null;
- }
- function isNullOrUndefined(arg) {
- return arg == null;
- }
- function isString(arg) {
- return typeof arg === 'string';
- }
- function isObject(arg) {
- return typeof arg === 'object' && arg !== null;
- }
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
- // If obj.hasOwnProperty has been overridden, then calling
- // obj.hasOwnProperty(prop) will break.
- // See: https://github.com/joyent/node/issues/1707
- function hasOwnProperty(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- }
- var isArray =
- Array.isArray ||
- function(xs) {
- return Object.prototype.toString.call(xs) === '[object Array]';
- };
- function stringifyPrimitive(v) {
- switch (typeof v) {
- case 'string':
- return v;
- case 'boolean':
- return v ? 'true' : 'false';
- case 'number':
- return isFinite(v) ? v : '';
- default:
- return '';
- }
- }
- function stringify(obj, sep, eq, name) {
- sep = sep || '&';
- eq = eq || '=';
- if (obj === null) {
- obj = undefined;
- }
- if (typeof obj === 'object') {
- return map$1(objectKeys(obj), function(k) {
- var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
- if (isArray(obj[k])) {
- return map$1(obj[k], function(v) {
- return ks + encodeURIComponent(stringifyPrimitive(v));
- }).join(sep);
- } else {
- return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
- }
- }).join(sep);
- }
- if (!name) return '';
- return (
- encodeURIComponent(stringifyPrimitive(name)) +
- eq +
- encodeURIComponent(stringifyPrimitive(obj))
- );
- }
- function map$1(xs, f) {
- if (xs.map) return xs.map(f);
- var res = [];
- for (var i = 0; i < xs.length; i++) {
- res.push(f(xs[i], i));
- }
- return res;
- }
- var objectKeys =
- Object.keys ||
- function(obj) {
- var res = [];
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
- }
- return res;
- };
- function parse(qs, sep, eq, options) {
- sep = sep || '&';
- eq = eq || '=';
- var obj = {};
- if (typeof qs !== 'string' || qs.length === 0) {
- return obj;
- }
- var regexp = /\+/g;
- qs = qs.split(sep);
- var maxKeys = 1000;
- if (options && typeof options.maxKeys === 'number') {
- maxKeys = options.maxKeys;
- }
- var len = qs.length; // maxKeys <= 0 means that we should not limit keys count
- if (maxKeys > 0 && len > maxKeys) {
- len = maxKeys;
- }
- for (var i = 0; i < len; ++i) {
- var x = qs[i].replace(regexp, '%20'),
- idx = x.indexOf(eq),
- kstr,
- vstr,
- k,
- v;
- if (idx >= 0) {
- kstr = x.substr(0, idx);
- vstr = x.substr(idx + 1);
- } else {
- kstr = x;
- vstr = '';
- }
- k = decodeURIComponent(kstr);
- v = decodeURIComponent(vstr);
- if (!hasOwnProperty(obj, k)) {
- obj[k] = v;
- } else if (isArray(obj[k])) {
- obj[k].push(v);
- } else {
- obj[k] = [obj[k], v];
- }
- }
- return obj;
- }
- // Copyright Joyent, Inc. and other Node contributors.
- function Url() {
- this.protocol = null;
- this.slashes = null;
- this.auth = null;
- this.host = null;
- this.port = null;
- this.hostname = null;
- this.hash = null;
- this.search = null;
- this.query = null;
- this.pathname = null;
- this.path = null;
- this.href = null;
- } // Reference: RFC 3986, RFC 1808, RFC 2396
- // define these here so at least they only have to be
- // compiled once on the first module load.
- var protocolPattern = /^([a-z0-9.+-]+:)/i,
- portPattern = /:[0-9]*$/,
- // Special case for a simple path URL
- simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
- // RFC 2396: characters reserved for delimiting URLs.
- // We actually just auto-escape these.
- delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],
- // RFC 2396: characters not allowed for various reasons.
- unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),
- // Allowed by RFCs, but cause of XSS attacks. Always escape these.
- autoEscape = ["'"].concat(unwise),
- // Characters that are never ever allowed in a hostname.
- // Note that any invalid chars are also handled, but these
- // are the ones that are *expected* to be seen, so we fast-path
- // them.
- nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),
- hostEndingChars = ['/', '?', '#'],
- hostnameMaxLen = 255,
- hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,
- hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,
- // protocols that can allow "unsafe" and "unwise" chars.
- unsafeProtocol = {
- javascript: true,
- 'javascript:': true,
- },
- // protocols that never have a hostname.
- hostlessProtocol = {
- javascript: true,
- 'javascript:': true,
- },
- // protocols that always contain a // bit.
- slashedProtocol = {
- http: true,
- https: true,
- ftp: true,
- gopher: true,
- file: true,
- 'http:': true,
- 'https:': true,
- 'ftp:': true,
- 'gopher:': true,
- 'file:': true,
- };
- function urlParse(url, parseQueryString, slashesDenoteHost) {
- if (url && isObject(url) && url instanceof Url) return url;
- var u = new Url();
- u.parse(url, parseQueryString, slashesDenoteHost);
- return u;
- }
- Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {
- return parse$1(this, url, parseQueryString, slashesDenoteHost);
- };
- function parse$1(self, url, parseQueryString, slashesDenoteHost) {
- if (!isString(url)) {
- throw new TypeError("Parameter 'url' must be a string, not " + typeof url);
- } // Copy chrome, IE, opera backslash-handling behavior.
- // Back slashes before the query string get converted to forward slashes
- // See: https://code.google.com/p/chromium/issues/detail?id=25916
- var queryIndex = url.indexOf('?'),
- splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',
- uSplit = url.split(splitter),
- slashRegex = /\\/g;
- uSplit[0] = uSplit[0].replace(slashRegex, '/');
- url = uSplit.join(splitter);
- var rest = url; // trim before proceeding.
- // This is to support parse stuff like " http://foo.com \n"
- rest = rest.trim();
- if (!slashesDenoteHost && url.split('#').length === 1) {
- // Try fast path regexp
- var simplePath = simplePathPattern.exec(rest);
- if (simplePath) {
- self.path = rest;
- self.href = rest;
- self.pathname = simplePath[1];
- if (simplePath[2]) {
- self.search = simplePath[2];
- if (parseQueryString) {
- self.query = parse(self.search.substr(1));
- } else {
- self.query = self.search.substr(1);
- }
- } else if (parseQueryString) {
- self.search = '';
- self.query = {};
- }
- return self;
- }
- }
- var proto = protocolPattern.exec(rest);
- if (proto) {
- proto = proto[0];
- var lowerProto = proto.toLowerCase();
- self.protocol = lowerProto;
- rest = rest.substr(proto.length);
- } // figure out if it's got a host
- // user@server is *always* interpreted as a hostname, and url
- // resolution will treat //foo/bar as host=foo,path=bar because that's
- // how the browser resolves relative URLs.
- if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {
- var slashes = rest.substr(0, 2) === '//';
- if (slashes && !(proto && hostlessProtocol[proto])) {
- rest = rest.substr(2);
- self.slashes = true;
- }
- }
- var i, hec, l, p;
- if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {
- // there's a hostname.
- // the first instance of /, ?, ;, or # ends the host.
- //
- // If there is an @ in the hostname, then non-host chars *are* allowed
- // to the left of the last @ sign, unless some host-ending character
- // comes *before* the @-sign.
- // URLs are obnoxious.
- //
- // ex:
- // http://a@b@c/ => user:a@b host:c
- // http://a@b?@c => user:a host:c path:/?@c
- // v0.12 TODO(isaacs): This is not quite how Chrome does things.
- // Review our test case against browsers more comprehensively.
- // find the first instance of any hostEndingChars
- var hostEnd = -1;
- for (i = 0; i < hostEndingChars.length; i++) {
- hec = rest.indexOf(hostEndingChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
- } // at this point, either we have an explicit point where the
- // auth portion cannot go past, or the last @ char is the decider.
- var auth, atSign;
- if (hostEnd === -1) {
- // atSign can be anywhere.
- atSign = rest.lastIndexOf('@');
- } else {
- // atSign must be in auth portion.
- // http://a@b/c@d => host:b auth:a path:/c@d
- atSign = rest.lastIndexOf('@', hostEnd);
- } // Now we have a portion which is definitely the auth.
- // Pull that off.
- if (atSign !== -1) {
- auth = rest.slice(0, atSign);
- rest = rest.slice(atSign + 1);
- self.auth = decodeURIComponent(auth);
- } // the host is the remaining to the left of the first non-host char
- hostEnd = -1;
- for (i = 0; i < nonHostChars.length; i++) {
- hec = rest.indexOf(nonHostChars[i]);
- if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;
- } // if we still have not hit it, then the entire thing is a host.
- if (hostEnd === -1) hostEnd = rest.length;
- self.host = rest.slice(0, hostEnd);
- rest = rest.slice(hostEnd); // pull out port.
- parseHost(self); // we've indicated that there is a hostname,
- // so even if it's empty, it has to be present.
- self.hostname = self.hostname || ''; // if hostname begins with [ and ends with ]
- // assume that it's an IPv6 address.
- var ipv6Hostname =
- self.hostname[0] === '[' && self.hostname[self.hostname.length - 1] === ']'; // validate a little.
- if (!ipv6Hostname) {
- var hostparts = self.hostname.split(/\./);
- for (i = 0, l = hostparts.length; i < l; i++) {
- var part = hostparts[i];
- if (!part) continue;
- if (!part.match(hostnamePartPattern)) {
- var newpart = '';
- for (var j = 0, k = part.length; j < k; j++) {
- if (part.charCodeAt(j) > 127) {
- // we replace non-ASCII char with a temporary placeholder
- // we need this to make sure size of hostname is not
- // broken by replacing non-ASCII by nothing
- newpart += 'x';
- } else {
- newpart += part[j];
- }
- } // we test again with ASCII char only
- if (!newpart.match(hostnamePartPattern)) {
- var validParts = hostparts.slice(0, i);
- var notHost = hostparts.slice(i + 1);
- var bit = part.match(hostnamePartStart);
- if (bit) {
- validParts.push(bit[1]);
- notHost.unshift(bit[2]);
- }
- if (notHost.length) {
- rest = '/' + notHost.join('.') + rest;
- }
- self.hostname = validParts.join('.');
- break;
- }
- }
- }
- }
- if (self.hostname.length > hostnameMaxLen) {
- self.hostname = '';
- } else {
- // hostnames are always lower case.
- self.hostname = self.hostname.toLowerCase();
- }
- if (!ipv6Hostname) {
- // IDNA Support: Returns a punycoded representation of "domain".
- // It only converts parts of the domain name that
- // have non-ASCII characters, i.e. it doesn't matter if
- // you call it with a domain that already is ASCII-only.
- self.hostname = toASCII(self.hostname);
- }
- p = self.port ? ':' + self.port : '';
- var h = self.hostname || '';
- self.host = h + p;
- self.href += self.host; // strip [ and ] from the hostname
- // the host field still retains them, though
- if (ipv6Hostname) {
- self.hostname = self.hostname.substr(1, self.hostname.length - 2);
- if (rest[0] !== '/') {
- rest = '/' + rest;
- }
- }
- } // now rest is set to the post-host stuff.
- // chop off any delim chars.
- if (!unsafeProtocol[lowerProto]) {
- // First, make 100% sure that any "autoEscape" chars get
- // escaped, even if encodeURIComponent doesn't think they
- // need to be.
- for (i = 0, l = autoEscape.length; i < l; i++) {
- var ae = autoEscape[i];
- if (rest.indexOf(ae) === -1) continue;
- var esc = encodeURIComponent(ae);
- if (esc === ae) {
- esc = escape(ae);
- }
- rest = rest.split(ae).join(esc);
- }
- } // chop off from the tail first.
- var hash = rest.indexOf('#');
- if (hash !== -1) {
- // got a fragment string.
- self.hash = rest.substr(hash);
- rest = rest.slice(0, hash);
- }
- var qm = rest.indexOf('?');
- if (qm !== -1) {
- self.search = rest.substr(qm);
- self.query = rest.substr(qm + 1);
- if (parseQueryString) {
- self.query = parse(self.query);
- }
- rest = rest.slice(0, qm);
- } else if (parseQueryString) {
- // no query string, but parseQueryString still requested
- self.search = '';
- self.query = {};
- }
- if (rest) self.pathname = rest;
- if (slashedProtocol[lowerProto] && self.hostname && !self.pathname) {
- self.pathname = '/';
- } //to support http.request
- if (self.pathname || self.search) {
- p = self.pathname || '';
- var s = self.search || '';
- self.path = p + s;
- } // finally, reconstruct the href based on what has been validated.
- self.href = format(self);
- return self;
- } // format a parsed object into a url string
- function format(self) {
- var auth = self.auth || '';
- if (auth) {
- auth = encodeURIComponent(auth);
- auth = auth.replace(/%3A/i, ':');
- auth += '@';
- }
- var protocol = self.protocol || '',
- pathname = self.pathname || '',
- hash = self.hash || '',
- host = false,
- query = '';
- if (self.host) {
- host = auth + self.host;
- } else if (self.hostname) {
- host = auth + (self.hostname.indexOf(':') === -1 ? self.hostname : '[' + this.hostname + ']');
- if (self.port) {
- host += ':' + self.port;
- }
- }
- if (self.query && isObject(self.query) && Object.keys(self.query).length) {
- query = stringify(self.query);
- }
- var search = self.search || (query && '?' + query) || '';
- if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.
- // unless they had them to begin with.
- if (self.slashes || ((!protocol || slashedProtocol[protocol]) && host !== false)) {
- host = '//' + (host || '');
- if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;
- } else if (!host) {
- host = '';
- }
- if (hash && hash.charAt(0) !== '#') hash = '#' + hash;
- if (search && search.charAt(0) !== '?') search = '?' + search;
- pathname = pathname.replace(/[?#]/g, function(match) {
- return encodeURIComponent(match);
- });
- search = search.replace('#', '%23');
- return protocol + host + pathname + search + hash;
- }
- Url.prototype.format = function() {
- return format(this);
- };
- Url.prototype.resolve = function(relative) {
- return this.resolveObject(urlParse(relative, false, true)).format();
- };
- Url.prototype.resolveObject = function(relative) {
- if (isString(relative)) {
- var rel = new Url();
- rel.parse(relative, false, true);
- relative = rel;
- }
- var result = new Url();
- var tkeys = Object.keys(this);
- for (var tk = 0; tk < tkeys.length; tk++) {
- var tkey = tkeys[tk];
- result[tkey] = this[tkey];
- } // hash is always overridden, no matter what.
- // even href="" will remove it.
- result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here.
- if (relative.href === '') {
- result.href = result.format();
- return result;
- } // hrefs like //foo/bar always cut to the protocol.
- if (relative.slashes && !relative.protocol) {
- // take everything except the protocol from relative
- var rkeys = Object.keys(relative);
- for (var rk = 0; rk < rkeys.length; rk++) {
- var rkey = rkeys[rk];
- if (rkey !== 'protocol') result[rkey] = relative[rkey];
- } //urlParse appends trailing / to urls like http://www.example.com
- if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {
- result.path = result.pathname = '/';
- }
- result.href = result.format();
- return result;
- }
- var relPath;
- if (relative.protocol && relative.protocol !== result.protocol) {
- // if it's a known url protocol, then changing
- // the protocol does weird things
- // first, if it's not file:, then we MUST have a host,
- // and if there was a path
- // to begin with, then we MUST have a path.
- // if it is file:, then the host is dropped,
- // because that's known to be hostless.
- // anything else is assumed to be absolute.
- if (!slashedProtocol[relative.protocol]) {
- var keys = Object.keys(relative);
- for (var v = 0; v < keys.length; v++) {
- var k = keys[v];
- result[k] = relative[k];
- }
- result.href = result.format();
- return result;
- }
- result.protocol = relative.protocol;
- if (!relative.host && !hostlessProtocol[relative.protocol]) {
- relPath = (relative.pathname || '').split('/');
- while (relPath.length && !(relative.host = relPath.shift()));
- if (!relative.host) relative.host = '';
- if (!relative.hostname) relative.hostname = '';
- if (relPath[0] !== '') relPath.unshift('');
- if (relPath.length < 2) relPath.unshift('');
- result.pathname = relPath.join('/');
- } else {
- result.pathname = relative.pathname;
- }
- result.search = relative.search;
- result.query = relative.query;
- result.host = relative.host || '';
- result.auth = relative.auth;
- result.hostname = relative.hostname || relative.host;
- result.port = relative.port; // to support http.request
- if (result.pathname || result.search) {
- var p = result.pathname || '';
- var s = result.search || '';
- result.path = p + s;
- }
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- }
- var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',
- isRelAbs = relative.host || (relative.pathname && relative.pathname.charAt(0) === '/'),
- mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),
- removeAllDots = mustEndAbs,
- srcPath = (result.pathname && result.pathname.split('/')) || [],
- psychotic = result.protocol && !slashedProtocol[result.protocol];
- relPath = (relative.pathname && relative.pathname.split('/')) || []; // if the url is a non-slashed url, then relative
- // links like ../.. should be able
- // to crawl up to the hostname, as well. This is strange.
- // result.protocol has already been set by now.
- // Later on, put the first path part into the host field.
- if (psychotic) {
- result.hostname = '';
- result.port = null;
- if (result.host) {
- if (srcPath[0] === '') srcPath[0] = result.host;
- else srcPath.unshift(result.host);
- }
- result.host = '';
- if (relative.protocol) {
- relative.hostname = null;
- relative.port = null;
- if (relative.host) {
- if (relPath[0] === '') relPath[0] = relative.host;
- else relPath.unshift(relative.host);
- }
- relative.host = null;
- }
- mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');
- }
- var authInHost;
- if (isRelAbs) {
- // it's absolute.
- result.host = relative.host || relative.host === '' ? relative.host : result.host;
- result.hostname =
- relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;
- result.search = relative.search;
- result.query = relative.query;
- srcPath = relPath; // fall through to the dot-handling below.
- } else if (relPath.length) {
- // it's relative
- // throw away the existing file, and take the new path instead.
- if (!srcPath) srcPath = [];
- srcPath.pop();
- srcPath = srcPath.concat(relPath);
- result.search = relative.search;
- result.query = relative.query;
- } else if (!isNullOrUndefined(relative.search)) {
- // just pull out the search.
- // like href='?foo'.
- // Put this after the other two cases because it simplifies the booleans
- if (psychotic) {
- result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- result.search = relative.search;
- result.query = relative.query; //to support http.request
- if (!isNull(result.pathname) || !isNull(result.search)) {
- result.path =
- (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
- }
- result.href = result.format();
- return result;
- }
- if (!srcPath.length) {
- // no path at all. easy.
- // we've already handled the other stuff above.
- result.pathname = null; //to support http.request
- if (result.search) {
- result.path = '/' + result.search;
- } else {
- result.path = null;
- }
- result.href = result.format();
- return result;
- } // if a url ENDs in . or .., then it must get a trailing slash.
- // however, if it ends in anything else non-slashy,
- // then it must NOT get a trailing slash.
- var last = srcPath.slice(-1)[0];
- var hasTrailingSlash =
- ((result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..')) ||
- last === ''; // strip single dots, resolve double dots to parent dir
- // if the path tries to go above the root, `up` ends up > 0
- var up = 0;
- for (var i = srcPath.length; i >= 0; i--) {
- last = srcPath[i];
- if (last === '.') {
- srcPath.splice(i, 1);
- } else if (last === '..') {
- srcPath.splice(i, 1);
- up++;
- } else if (up) {
- srcPath.splice(i, 1);
- up--;
- }
- } // if the path is allowed to go above the root, restore leading ..s
- if (!mustEndAbs && !removeAllDots) {
- for (; up--; up) {
- srcPath.unshift('..');
- }
- }
- if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {
- srcPath.unshift('');
- }
- if (hasTrailingSlash && srcPath.join('/').substr(-1) !== '/') {
- srcPath.push('');
- }
- var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); // put the host back
- if (psychotic) {
- result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host
- //this especially happens in cases like
- //url.resolveObject('mailto:local1@domain1', 'local2@domain2')
- authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;
- if (authInHost) {
- result.auth = authInHost.shift();
- result.host = result.hostname = authInHost.shift();
- }
- }
- mustEndAbs = mustEndAbs || (result.host && srcPath.length);
- if (mustEndAbs && !isAbsolute) {
- srcPath.unshift('');
- }
- if (!srcPath.length) {
- result.pathname = null;
- result.path = null;
- } else {
- result.pathname = srcPath.join('/');
- } //to support request.http
- if (!isNull(result.pathname) || !isNull(result.search)) {
- result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');
- }
- result.auth = relative.auth || result.auth;
- result.slashes = result.slashes || relative.slashes;
- result.href = result.format();
- return result;
- };
- Url.prototype.parseHost = function() {
- return parseHost(this);
- };
- function parseHost(self) {
- var host = self.host;
- var port = portPattern.exec(host);
- if (port) {
- port = port[0];
- if (port !== ':') {
- self.port = port.substr(1);
- }
- host = host.substr(0, host.length - port.length);
- }
- if (host) self.hostname = host;
- }
- let tableListDataSource = [];
- for (let i = 0; i < 46; i += 1) {
- tableListDataSource.push({
- key: i,
- disabled: i % 6 === 0,
- href: 'https://ant.design',
- avatar: [
- 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
- ][i % 2],
- name: `TradeCode ${i}`,
- title: `一个任务名称 ${i}`,
- owner: '曲丽丽',
- desc: '这是一段描述',
- callNo: Math.floor(Math.random() * 1000),
- status: Math.floor(Math.random() * 10) % 4,
- updatedAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`),
- createdAt: new Date(`2017-07-${Math.floor(i / 2) + 1}`),
- progress: Math.ceil(Math.random() * 100),
- });
- }
- function getRule(req, res, u) {
- let url = u;
- if (!url || Object.prototype.toString.call(url) !== '[object String]') {
- url = req.url; // eslint-disable-line
- }
- const params = urlParse(url, true).query;
- let dataSource = tableListDataSource;
- if (params.sorter) {
- const s = params.sorter.split('_');
- dataSource = dataSource.sort((prev, next) => {
- if (s[1] === 'descend') {
- return next[s[0]] - prev[s[0]];
- }
- return prev[s[0]] - next[s[0]];
- });
- }
- if (params.status) {
- const status = params.status.split(',');
- let filterDataSource = [];
- status.forEach(s => {
- filterDataSource = filterDataSource.concat(
- dataSource.filter(data => parseInt(data.status, 10) === parseInt(s[0], 10)),
- );
- });
- dataSource = filterDataSource;
- }
- if (params.name) {
- dataSource = dataSource.filter(data => data.name.indexOf(params.name) > -1);
- }
- let pageSize = 10;
- if (params.pageSize) {
- pageSize = params.pageSize * 1;
- }
- const result = {
- list: dataSource,
- pagination: {
- total: dataSource.length,
- pageSize,
- current: parseInt(params.currentPage, 10) || 1,
- },
- };
- return res.json(result);
- }
- function postRule(req, res, u, b) {
- let url = u;
- if (!url || Object.prototype.toString.call(url) !== '[object String]') {
- url = req.url; // eslint-disable-line
- }
- const body = (b && b.body) || req.body;
- const { method, name, desc, key } = body;
- switch (method) {
- /* eslint no-case-declarations:0 */
- case 'delete':
- tableListDataSource = tableListDataSource.filter(item => key.indexOf(item.key) === -1);
- break;
- case 'post':
- const i = Math.ceil(Math.random() * 10000);
- tableListDataSource.unshift({
- key: i,
- href: 'https://ant.design',
- avatar: [
- 'https://gw.alipayobjects.com/zos/rmsportal/eeHMaZBwmTvLdIwMfBpg.png',
- 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
- ][i % 2],
- name: `TradeCode ${i}`,
- title: `一个任务名称 ${i}`,
- owner: '曲丽丽',
- desc,
- callNo: Math.floor(Math.random() * 1000),
- status: Math.floor(Math.random() * 10) % 2,
- updatedAt: new Date(),
- createdAt: new Date(),
- progress: Math.ceil(Math.random() * 100),
- });
- break;
- case 'update':
- tableListDataSource = tableListDataSource.map(item => {
- if (item.key === key) {
- Object.assign(item, {
- desc,
- name,
- });
- return item;
- }
- return item;
- });
- break;
- default:
- break;
- }
- return getRule(req, res, u);
- }
- var rule = {
- 'GET /api/rule': getRule,
- 'POST /api/rule': postRule,
- };
- // 代码中会兼容本地 service mock 以及部署站点的静态数据
- var user$1 = {
- // 支持值为 Object 和 Array
- 'GET /api/currentUser': {
- name: 'Serati Ma',
- avatar: 'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
- userid: '00000001',
- email: 'antdesign@alipay.com',
- signature: '海纳百川,有容乃大',
- title: '交互专家',
- group: '蚂蚁金服-某某某事业群-某某平台部-某某技术部-UED',
- tags: [
- {
- key: '0',
- label: '很有想法的',
- },
- {
- key: '1',
- label: '专注设计',
- },
- {
- key: '2',
- label: '辣~',
- },
- {
- key: '3',
- label: '大长腿',
- },
- {
- key: '4',
- label: '川妹子',
- },
- {
- key: '5',
- label: '海纳百川',
- },
- ],
- notice: [
- {
- id: 'xxx1',
- title: titles[0],
- logo: avatars[0],
- description: '那是一种内在的东西,他们到达不了,也无法触及的',
- updatedAt: new Date(),
- member: '科学搬砖组',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx2',
- title: titles[1],
- logo: avatars[1],
- description: '希望是一个好东西,也许是最好的,好东西是不会消亡的',
- updatedAt: new Date('2017-07-24'),
- member: '全组都是吴彦祖',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx3',
- title: titles[2],
- logo: avatars[2],
- description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆',
- updatedAt: new Date(),
- member: '中二少女团',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx4',
- title: titles[3],
- logo: avatars[3],
- description: '那时候我只会想自己想要什么,从不想自己拥有什么',
- updatedAt: new Date('2017-07-23'),
- member: '程序员日常',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx5',
- title: titles[4],
- logo: avatars[4],
- description: '凛冬将至',
- updatedAt: new Date('2017-07-23'),
- member: '高逼格设计天团',
- href: '',
- memberLink: '',
- },
- {
- id: 'xxx6',
- title: titles[5],
- logo: avatars[5],
- description: '生命就像一盒巧克力,结果往往出人意料',
- updatedAt: new Date('2017-07-23'),
- member: '骗你来学计算机',
- href: '',
- memberLink: '',
- },
- ],
- notifyCount: 12,
- unreadCount: 11,
- country: 'China',
- geographic: {
- province: {
- label: '浙江省',
- key: '330000',
- },
- city: {
- label: '杭州市',
- key: '330100',
- },
- },
- address: '西湖区工专路 77 号',
- phone: '0752-268888888',
- },
- // GET POST 可省略
- 'GET /api/users': [
- {
- key: '1',
- name: 'John Brown',
- age: 32,
- address: 'New York No. 1 Lake Park',
- },
- {
- key: '2',
- name: 'Jim Green',
- age: 42,
- address: 'London No. 1 Lake Park',
- },
- {
- key: '3',
- name: 'Joe Black',
- age: 32,
- address: 'Sidney No. 1 Lake Park',
- },
- ],
- 'POST /api/login/account': (req, res) => {
- const { password, userName, type } = req.body;
- if (password === 'ant.design' && userName === 'admin') {
- res.send({
- status: 'ok',
- type,
- currentAuthority: 'admin',
- });
- return;
- }
- if (password === 'ant.design' && userName === 'user') {
- res.send({
- status: 'ok',
- type,
- currentAuthority: 'user',
- });
- return;
- }
- res.send({
- status: 'error',
- type,
- currentAuthority: 'guest',
- });
- },
- 'POST /api/register': (req, res) => {
- res.send({
- status: 'ok',
- currentAuthority: 'user',
- });
- },
- 'GET /api/500': (req, res) => {
- res.status(500).send({
- timestamp: 1513932555104,
- status: 500,
- error: 'error',
- message: 'error',
- path: '/base/category/list',
- });
- },
- 'GET /api/404': (req, res) => {
- res.status(404).send({
- timestamp: 1513932643431,
- status: 404,
- error: 'Not Found',
- message: 'No message available',
- path: '/base/category/list/2121212',
- });
- },
- 'GET /api/403': (req, res) => {
- res.status(403).send({
- timestamp: 1513932555104,
- status: 403,
- error: 'Unauthorized',
- message: 'Unauthorized',
- path: '/base/category/list',
- });
- },
- 'GET /api/401': (req, res) => {
- res.status(401).send({
- timestamp: 1513932555104,
- status: 401,
- error: 'Unauthorized',
- message: 'Unauthorized',
- path: '/base/category/list',
- });
- },
- };
- const data = _objectSpread({}, api, chart, geographic, notices, profile, rule, user$1);
- return data;
- });
|