index.vue 117 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178
  1. <template>
  2. <div
  3. class="homePage"
  4. :class="!swichTheme ? 'themeDarkHome' : 'themeLightHome'"
  5. >
  6. <div class="homeMain">
  7. <div class="leftMain">
  8. <div style="height: 15px"></div>
  9. <!-- 天气预测 -->
  10. <div class="weather">
  11. <div class="comHeader">
  12. <div class="headerLeft">
  13. <span class="gray"></span>
  14. <span class="blue"></span>
  15. </div>
  16. <div class="headerRight">
  17. <span class="headerName cur" @click="showWeaterDialog"
  18. >天气预测</span
  19. >
  20. <span class="headerZs">
  21. <span class="headerZsN"></span>
  22. </span>
  23. </div>
  24. </div>
  25. <div class="weatherMain">
  26. <div class="weatherMain_top">
  27. <div class="wetherImg">
  28. <img :src="!swichTheme ? tianqi : tianqiW" alt="" />
  29. </div>
  30. <div class="wetherMsg">
  31. <span class="wetherMsg_Du">{{ weatherFrom.temperature }}°</span>
  32. <div class="wetherMsg_Det">
  33. <span style="margin-left: 5px">{{
  34. weatherFrom.weather
  35. }}</span>
  36. <span>{{ weatherFrom.wind_direction }}</span>
  37. <span>{{ weatherFrom.wind_power }}级</span>
  38. </div>
  39. </div>
  40. </div>
  41. <div class="weatherMain_bot">
  42. <div class="weaMain" v-for="it in weatherArr" :key="it.name">
  43. <img :src="it.img" alt="" />
  44. <p class="pOne">{{ it.value }}</p>
  45. <p class="pTwo">{{ it.name }}</p>
  46. </div>
  47. </div>
  48. </div>
  49. </div>
  50. <!-- 实际功率 -->
  51. <div class="power" style="margin-top: 10px">
  52. <div class="comHeader">
  53. <div class="headerLeft">
  54. <span class="gray"></span>
  55. <span class="blue"></span>
  56. </div>
  57. <div class="headerRight">
  58. <div class="headerNaAll">
  59. <span class="headerNa">实际功率</span>
  60. <span class="headerNa2">单位:MW</span>
  61. </div>
  62. <span class="headerZs">
  63. <span class="headerZsN"></span>
  64. </span>
  65. </div>
  66. </div>
  67. <div class="powerMain">
  68. <echarts-gauge-component
  69. :data="powerDataHome"
  70. :theme="swichTheme"
  71. />
  72. </div>
  73. </div>
  74. <!-- 实时状态 -->
  75. <div class="comHeader" style="margin-top: 10px">
  76. <div class="headerLeft">
  77. <span class="gray"></span>
  78. <span class="blue"></span>
  79. </div>
  80. <div class="headerRight">
  81. <span class="headerName">实时状态</span>
  82. <span class="headerZs">
  83. <span class="headerZsN"></span>
  84. </span>
  85. </div>
  86. </div>
  87. <div class="emInfoBox">
  88. <div class="item">
  89. <div class="b">
  90. <div class="info">
  91. <span class="zj">总计</span>
  92. <span
  93. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  94. >{{ ztmap.zts }}</span
  95. >
  96. </div>
  97. <div class="info">
  98. <span class="yx">运行</span>
  99. <span
  100. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  101. >{{ ztmap.yxsum }}</span
  102. >
  103. </div>
  104. <div class="info">
  105. <span class="dj">待机</span>
  106. <span
  107. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  108. >{{ ztmap.djsum }}</span
  109. >
  110. </div>
  111. <div class="info">
  112. <span class="xd">限电</span>
  113. <span
  114. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  115. >{{ ztmap.xdsum }}</span
  116. >
  117. </div>
  118. </div>
  119. </div>
  120. <div class="item">
  121. <div class="b">
  122. <div class="info">
  123. <span class="gz">故障</span>
  124. <span
  125. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  126. >{{ ztmap.jxsum }}</span
  127. >
  128. </div>
  129. <div class="info">
  130. <span class="wh">维护</span>
  131. <span
  132. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  133. >{{ ztmap.whsum }}</span
  134. >
  135. </div>
  136. <div class="info">
  137. <span
  138. class="sl"
  139. :style="`color:${$store.state.theme ? '#000' : '#fff'}`"
  140. >受累</span
  141. >
  142. <span
  143. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  144. >{{ ztmap.tjsum }}</span
  145. >
  146. </div>
  147. <div class="info">
  148. <span class="lx">离线</span>
  149. <span
  150. :style="`color: #${$store.state.theme ? '000' : 'fff'}`"
  151. >{{ ztmap.lxsum }}</span
  152. >
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. </div>
  158. <div class="map">
  159. <div
  160. class="infoBox"
  161. :class="mainData && mainData !== '全省数据' ? 'show' : ''"
  162. >
  163. <el-button
  164. style="color: #1850b3"
  165. icon="ArrowLeft"
  166. type="info"
  167. link
  168. @click="
  169. switchMainData({
  170. wpId: 'GJNY_SXGS_DBXNY_ZGS0',
  171. name: '全省数据',
  172. })
  173. "
  174. >
  175. 全省数据
  176. </el-button>
  177. <template v-if="mainData === '获取中...'">
  178. <p>
  179. <el-icon>
  180. <svg
  181. class="loadingIcon"
  182. xmlns="http://www.w3.org/2000/svg"
  183. viewBox="0 0 1024 1024"
  184. >
  185. <path
  186. fill="currentColor"
  187. d="M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"
  188. ></path>
  189. </svg>
  190. </el-icon>
  191. {{ mainData }}
  192. </p>
  193. </template>
  194. <el-tooltip
  195. class="box-item"
  196. effect="dark"
  197. :content="`当前首页展示数据为 ${mainData} 数据`"
  198. placement="bottom"
  199. v-if="
  200. mainData && mainData !== '全省数据' && mainData !== '获取中...'
  201. "
  202. >
  203. <p>
  204. <el-icon>
  205. <View />
  206. </el-icon>
  207. {{ mainData }}
  208. </p>
  209. </el-tooltip>
  210. </div>
  211. <p class="dingbian">定边县</p>
  212. <p class="jingbian">靖边县</p>
  213. <div
  214. class="fengjiSty"
  215. v-for="it in fengjiArr"
  216. :key="it"
  217. :style="fengjiStyFn(it)"
  218. @click="switchMainData(it)"
  219. >
  220. <div class="mainSv">
  221. <img :src="fengji" class="fengjiImg" />
  222. <img :src="quan" class="quanImg" />
  223. <img :src="fengjiBack" class="fengjiBackImg" />
  224. <span class="dianSty"></span>
  225. </div>
  226. <div
  227. class="mainMsg"
  228. :class="
  229. it.name.indexOf('新庄') !== -1 || it.name.indexOf('吉山梁') !== -1
  230. ? 'mainMsgRotate'
  231. : ''
  232. "
  233. >
  234. <span>{{ it.name }}</span>
  235. </div>
  236. </div>
  237. </div>
  238. <div class="rightMain">
  239. <div style="height: 15px"></div>
  240. <!-- 电量分析 -->
  241. <div class="powerAnalysis" v-if="false">
  242. <div class="comHeader">
  243. <div class="headerLeft">
  244. <span class="gray"></span>
  245. <span class="blue"></span>
  246. </div>
  247. <div class="headerRight">
  248. <div class="headerNaAll">
  249. <span class="headerNa">利用小时情况</span>
  250. <span class="headerNa2">单位:小时</span>
  251. </div>
  252. <span class="headerZs">
  253. <span class="headerZsN"></span>
  254. </span>
  255. </div>
  256. </div>
  257. <div class="dlImgBox" v-if="true">
  258. <span class="label label1">{{ ylyxsList?.[0]?.wpid || "" }}</span>
  259. <span class="zb zb1"
  260. >{{ ylyxsList?.[0]?.yfdl >= 0 ? `${ylyxsList[0].bzgl}` : "----"
  261. }}<span
  262. style="color: #646972; font-size: 12px"
  263. v-if="ylyxsList?.[0]?.yfdl >= 0"
  264. >&nbsp;小时</span
  265. >
  266. </span>
  267. <span class="label label2">{{ ylyxsList?.[1]?.wpid || "" }}</span>
  268. <span class="zb zb2"
  269. >{{ ylyxsList?.[1]?.yfdl >= 0 ? `${ylyxsList[1].bzgl}` : "----"
  270. }}<span
  271. style="color: #646972; font-size: 12px"
  272. v-if="ylyxsList?.[1]?.yfdl >= 0"
  273. >&nbsp;小时</span
  274. >
  275. </span>
  276. <span class="label label3">{{ ylyxsList?.[2]?.wpid || "" }}</span>
  277. <span class="zb zb3"
  278. >{{ ylyxsList?.[2]?.yfdl >= 0 ? `${ylyxsList[2].bzgl}` : "----"
  279. }}<span
  280. style="color: #646972; font-size: 12px"
  281. v-if="ylyxsList?.[2]?.yfdl >= 0"
  282. >&nbsp;小时</span
  283. >
  284. </span>
  285. <span class="label label4">{{ ylyxsList?.[3]?.wpid || "" }}</span>
  286. <span class="zb zb4"
  287. >{{ ylyxsList?.[3]?.yfdl >= 0 ? `${ylyxsList[3].bzgl}` : "----"
  288. }}<span
  289. style="color: #646972; font-size: 12px"
  290. v-if="ylyxsList?.[3]?.yfdl >= 0"
  291. >&nbsp;小时</span
  292. >
  293. </span>
  294. <span class="label label5">{{ ylyxsList?.[4]?.wpid || "" }}</span>
  295. <span class="zb zb5"
  296. >{{ ylyxsList?.[4]?.yfdl >= 0 ? `${ylyxsList[4].bzgl}` : "----"
  297. }}<span
  298. style="color: #646972; font-size: 12px"
  299. v-if="ylyxsList?.[4]?.yfdl >= 0"
  300. >&nbsp;小时</span
  301. >
  302. </span>
  303. <span class="label label6">{{ ylyxsList?.[5]?.wpid || "" }}</span>
  304. <span class="zb zb6"
  305. >{{ ylyxsList?.[5]?.yfdl >= 0 ? `${ylyxsList[5].bzgl}` : "----"
  306. }}<span
  307. style="color: #646972; font-size: 12px"
  308. v-if="ylyxsList?.[5]?.yfdl >= 0"
  309. >&nbsp;小时</span
  310. >
  311. </span>
  312. <span class="label label7">{{ ylyxsList?.[6]?.wpid || "" }}</span>
  313. <span class="zb zb7"
  314. >{{ ylyxsList?.[6]?.yfdl >= 0 ? `${ylyxsList[6].bzgl}` : "----"
  315. }}<span
  316. style="color: #646972; font-size: 12px"
  317. v-if="ylyxsList?.[6]?.yfdl >= 0"
  318. >&nbsp;小时</span
  319. >
  320. </span>
  321. </div>
  322. <div class="powerAnalysisMain" v-else>
  323. <div class="analysRadio">
  324. <el-radio-group v-model="powerAnalyRadio">
  325. <el-radio-button label="日" value="日" />
  326. <el-radio-button label="月" value="月" />
  327. <el-radio-button label="年" value="年" />
  328. </el-radio-group>
  329. </div>
  330. <div class="analysMain">
  331. <div class="analysMain_left">
  332. <div class="analLeftTop">
  333. <img :src="dlTop1" alt="" />
  334. <span>增发电量</span>
  335. <span>30</span>
  336. </div>
  337. <div class="analLeftEcharts">
  338. <echarts-pie
  339. :data="analyPieData"
  340. :index="1"
  341. :theme="swichTheme"
  342. :colors="['#1850B3', '#B2B8CA']"
  343. />
  344. <span class="echartsNum">25%</span>
  345. <span class="echartsName">提升率</span>
  346. </div>
  347. <div class="analLeftBot">
  348. <div class="analLeftBot_top">
  349. <img :src="zengfa" class="leftImg" />
  350. <div class="analyleftbottopAll">
  351. <div class="analyleftbottopName">及时并网增发电量</div>
  352. <div class="analyleftbottopSty">
  353. <span>30</span>
  354. <img :src="dlTop2" alt="" />
  355. </div>
  356. </div>
  357. </div>
  358. <div class="analLeftBot_top">
  359. <img :src="zengfa" class="leftImg" />
  360. <div class="analyleftbottopAll">
  361. <div class="analyleftbottopName">
  362. 主动维护降低损失电量
  363. </div>
  364. <div class="analyleftbottopSty">
  365. <span>30</span>
  366. <img :src="dlTop2" alt="" />
  367. </div>
  368. </div>
  369. </div>
  370. </div>
  371. </div>
  372. <div class="analysMain_left analysMain_right">
  373. <div class="analLeftTop">
  374. <img :src="dlBot1" alt="" />
  375. <span>损失电量</span>
  376. <span>30</span>
  377. </div>
  378. <div class="analLeftEcharts">
  379. <echarts-pie
  380. :data="analyPieData"
  381. :index="2"
  382. :theme="swichTheme"
  383. :colors="['#F87909', '#B2B8CA']"
  384. />
  385. <span class="echartsNum echartsJing">25%</span>
  386. <span class="echartsName">降低率</span>
  387. </div>
  388. <div class="analLeftBot">
  389. <div class="analLeftBot_top">
  390. <img :src="sunshi" class="leftImg" />
  391. <div class="analyleftbottopAll">
  392. <div class="analyleftbottopName">及时并网增发电量</div>
  393. <div class="analyleftbottopSty">
  394. <span class="echartsJing">30</span>
  395. <img :src="dlBot2" alt="" />
  396. </div>
  397. </div>
  398. </div>
  399. <div class="analLeftBot_top">
  400. <img :src="sunshi" class="leftImg" />
  401. <div class="analyleftbottopAll">
  402. <div class="analyleftbottopName">
  403. 主动维护降低损失电量
  404. </div>
  405. <div class="analyleftbottopSty">
  406. <span class="echartsJing">30</span>
  407. <img :src="dlBot2" alt="" />
  408. </div>
  409. </div>
  410. </div>
  411. </div>
  412. </div>
  413. </div>
  414. </div>
  415. </div>
  416. <!-- 预测电量 -->
  417. <div class="Electric">
  418. <div class="comHeader">
  419. <div class="headerLeft">
  420. <span class="gray"></span>
  421. <span class="blue"></span>
  422. </div>
  423. <div class="headerRight">
  424. <div class="headerNaAll">
  425. <span class="headerNa">预测电量</span>
  426. <span class="headerNa2">单位:万kWh</span>
  427. </div>
  428. <span class="headerZs">
  429. <span class="headerZsN"></span>
  430. </span>
  431. </div>
  432. </div>
  433. <div class="electricMain">
  434. <div
  435. v-for="(item, index) in dayFa"
  436. :key="index"
  437. class="electricMain_day"
  438. >
  439. <div class="powerCharts">
  440. <div class="powerName">
  441. {{ item[0].name }}
  442. </div>
  443. <div class="powerItem">
  444. <div style="width: calc(100% - 100px)">
  445. <forecast-bar-component
  446. :list="item"
  447. height="40px"
  448. width="100%"
  449. :theme="swichTheme"
  450. />
  451. </div>
  452. <div class="powerValue">
  453. <span style="background-color: #ff9b23"></span>
  454. <span>{{ item[0].value }}</span>
  455. </div>
  456. </div>
  457. </div>
  458. </div>
  459. <div
  460. v-for="(item, index) in monthFa"
  461. :key="index"
  462. class="electricMain_month"
  463. style="margin-top: 10px"
  464. >
  465. <div class="powerCharts">
  466. <div class="powerName">{{ item[0].name }}</div>
  467. <div class="powerItem">
  468. <div style="width: calc(100% - 100px)">
  469. <forecast-bar-component
  470. :list="item"
  471. height="40px"
  472. width="calc(100% + 22px)"
  473. :theme="swichTheme"
  474. />
  475. </div>
  476. <div class="powerValue">
  477. <span style="background-color: #ff9b23"></span>
  478. <span>{{ item[0].value }}</span>
  479. </div>
  480. </div>
  481. </div>
  482. </div>
  483. </div>
  484. </div>
  485. <!-- 计划电量 -->
  486. <div class="powerPlan">
  487. <div class="comHeader">
  488. <div class="headerLeft">
  489. <span class="gray"></span>
  490. <span class="blue"></span>
  491. </div>
  492. <div class="headerRight">
  493. <div class="headerNaAll">
  494. <span class="headerNa cur" @click="showJhdlDialog"
  495. >计划电量完成情况</span
  496. >
  497. <span class="headerNa2">单位:万kWh</span>
  498. </div>
  499. <span class="headerZs">
  500. <span class="headerZsN"></span>
  501. </span>
  502. </div>
  503. </div>
  504. <div class="powerPlanMain">
  505. <div class="analysRadio" v-if="false">
  506. <el-radio-group v-model="powerPlanRadio">
  507. <el-radio-button label="月" value="月" />
  508. <el-radio-button label="年" value="年" />
  509. <!-- <el-radio-button label="光" value="光" disabled />
  510. <el-radio-button label="总" value="总" disabled /> -->
  511. </el-radio-group>
  512. </div>
  513. <div class="planMain">
  514. <div class="planMain_left">
  515. <div class="analysMain_echarts">
  516. <echarts-pie-2
  517. :data="powerPlanData"
  518. :index="1"
  519. :theme="swichTheme"
  520. />
  521. </div>
  522. <div class="analysMain_Msg">
  523. <div class="analysMain_Msg_top">
  524. <div class="analysMain_Msg_top_flex">
  525. <span>计划</span>
  526. <span>{{ Math.floor(powerPlanData.yjhwc) }}</span>
  527. </div>
  528. <div class="analysMain_Msg_top_flex">
  529. <span>实际</span>
  530. <span>{{ Math.floor(powerPlanData.ysjwc) }}</span>
  531. </div>
  532. </div>
  533. <div class="analysMain_Msg_bot">
  534. <span>月计划完成率</span>
  535. </div>
  536. </div>
  537. </div>
  538. <div class="planMain_left">
  539. <div class="analysMain_echarts">
  540. <echarts-pie-2
  541. :data="powerPlanData"
  542. :index="2"
  543. :theme="swichTheme"
  544. />
  545. </div>
  546. <div class="analysMain_Msg">
  547. <div class="analysMain_Msg_top">
  548. <div class="analysMain_Msg_top_flex">
  549. <span>计划</span>
  550. <span>{{ Math.floor(powerPlanData.njhwc) }}</span>
  551. </div>
  552. <div class="analysMain_Msg_top_flex">
  553. <span>实际</span>
  554. <span>{{ Math.floor(powerPlanData.nsjwc) }}</span>
  555. </div>
  556. </div>
  557. <div class="analysMain_Msg_bot">
  558. <span>年计划完成率</span>
  559. </div>
  560. </div>
  561. </div>
  562. </div>
  563. </div>
  564. </div>
  565. <!-- 利用小时情况 -->
  566. <div class="cChartBox">
  567. <div class="comHeader">
  568. <div class="headerLeft">
  569. <span class="gray"></span>
  570. <span class="blue"></span>
  571. </div>
  572. <div class="headerRight">
  573. <div class="headerNaAll">
  574. <span class="headerNa">利用小时情况</span>
  575. <span class="headerNa2">单位:小时</span>
  576. </div>
  577. <span class="headerZs">
  578. <span class="headerZsN"></span>
  579. </span>
  580. </div>
  581. </div>
  582. <div id="cChartDom" style="width: 100%; height: 250px"></div>
  583. </div>
  584. </div>
  585. </div>
  586. <div class="footer">
  587. <div class="hover72Power">
  588. <div
  589. id="hover72Powers"
  590. class="cur"
  591. style="width: 100%; height: 100%"
  592. ></div>
  593. <div class="hidBtn" @click="showStHourDialog"></div>
  594. </div>
  595. <div class="monthPower">
  596. <div
  597. id="monthPowers"
  598. class="cur"
  599. style="width: 100%; height: 100%"
  600. ></div>
  601. <div class="hidBtn" @click="showYfdlDialog"></div>
  602. </div>
  603. </div>
  604. <el-dialog
  605. class="currentDialog weather"
  606. v-model="tqycDialogShow"
  607. :style="`background: linear-gradient(${
  608. weatherObj?.dqtq?.weather === '晴'
  609. ? 'rgb(13, 104, 188), rgb(54, 131, 195)'
  610. : 'rgb(72, 86, 99), rgb(161, 184, 202)'
  611. })`"
  612. width="90%"
  613. :show-close="false"
  614. align-center
  615. destroy-on-close
  616. >
  617. <template #header="{ close, titleId, titleClass }">
  618. <div class="weatherHeader">
  619. <div class="l" :id="titleId" :class="titleClass">
  620. <span class="city">{{ weatherObj?.dqtq?.stationName || "" }}</span>
  621. <span>今天:{{ weatherObj?.dqtq?.weather || "" }}</span>
  622. <span class="mr"
  623. >{{ weatherObj?.dqtq?.temperatureNight || "" }}°C~{{
  624. weatherObj?.dqtq?.temperatureDay || ""
  625. }}°C</span
  626. >
  627. <span
  628. >{{ weatherObj?.dqtq?.windDirection
  629. }}{{ weatherObj?.dqtq?.windPower }}级</span
  630. >
  631. </div>
  632. <div class="r">
  633. <span class="mr">{{ weatherObj?.dqtq?.recordDate }}</span>
  634. <span class="mr">{{
  635. getWeekDay(weatherObj?.dqtq?.recordDate || "")
  636. }}</span>
  637. <span class="mr" v-if="false"
  638. >农历{{ weatherObj?.dqtq?.lunar }}</span
  639. >
  640. <el-button type="info" link @click="close">
  641. <el-icon size="20" color="#fff"><Close /></el-icon>
  642. </el-button>
  643. </div>
  644. </div>
  645. </template>
  646. <div class="wBox">
  647. <div class="weatherInfo">
  648. <div class="wd">{{ weatherObj?.dqtq?.temperatureDay }}°</div>
  649. <div class="desc">
  650. <div class="item">
  651. <div
  652. style="margin-right: 4px"
  653. v-html="
  654. getWeatherChartIcon('wd', weatherObj?.dqtq?.weather, 20)
  655. "
  656. ></div>
  657. <span>{{ weatherObj?.dqtq?.weather }}</span>
  658. <span>{{ weatherObj?.dqtq?.windDirection }}</span>
  659. <span>{{ weatherObj?.dqtq?.windPower }}级</span>
  660. </div>
  661. <div class="item">
  662. <span>湿度{{ weatherObj?.dqtq?.humidity }}%</span>
  663. <span>紫外线{{ weatherObj?.dqtq?.ultravoilet }}</span>
  664. <span>日出{{ weatherObj?.dqtq?.sunrisetime }}</span>
  665. <span>日落{{ weatherObj?.dqtq?.sunsettime }}</span>
  666. </div>
  667. </div>
  668. </div>
  669. <div class="ybBox">
  670. <div class="ycTop">
  671. <span class="title">
  672. 24小时预报&nbsp;(滚轮缩放图表、拖拽移动图表预览区域)
  673. </span>
  674. <div class="tabs">
  675. <div
  676. class="item"
  677. :class="weatherChartActiveTab === item.id ? 'active' : ''"
  678. v-for="item in weatherChartTabList"
  679. :key="item.id"
  680. @click="
  681. () => {
  682. weatherChartActiveTab = item.id;
  683. renderWeatherDialogChart(true);
  684. }
  685. "
  686. >
  687. {{ item.label }}
  688. </div>
  689. </div>
  690. </div>
  691. <div
  692. id="oneDayChart"
  693. style="width: 100%; height: 160px; margin-top: 20px"
  694. ></div>
  695. </div>
  696. <div class="ybBox">
  697. <div class="ycTop">
  698. <span class="title">
  699. 15天预报&nbsp;(滚轮缩放图表、拖拽移动图表预览区域)
  700. </span>
  701. </div>
  702. <div
  703. id="ftDayChart"
  704. style="width: 100%; height: 370px; margin-top: 20px"
  705. ></div>
  706. </div>
  707. </div>
  708. <div
  709. class="weatherSun"
  710. :style="
  711. weatherObj?.dqtq?.weather === '晴'
  712. ? `background:url(${weatherSun}) no-repeat;`
  713. : ''
  714. "
  715. ></div>
  716. </el-dialog>
  717. <el-dialog
  718. class="currentDialog"
  719. v-model="yfdlDialogShow"
  720. :title="`月发电量${getWpName()}`"
  721. width="90%"
  722. align-center
  723. destroy-on-close
  724. >
  725. <el-carousel height="750px" :autoplay="false" ref="yfdlCarouselRef">
  726. <el-carousel-item name="sy">
  727. <div id="fdlSy" style="width: 100%; height: 100%"></div>
  728. </el-carousel-item>
  729. <el-carousel-item name="by">
  730. <div id="fdlBy" style="width: 100%; height: 100%"></div>
  731. </el-carousel-item>
  732. <el-carousel-item name="xy">
  733. <div id="fdlXy" style="width: 100%; height: 100%"></div>
  734. </el-carousel-item>
  735. </el-carousel>
  736. </el-dialog>
  737. <el-dialog
  738. class="currentDialog"
  739. v-model="jhdlDialogShow"
  740. :title="`计划电量完成情况${getWpName()}`"
  741. width="90%"
  742. align-center
  743. destroy-on-close
  744. >
  745. <el-table
  746. :data="jhdlTableData"
  747. style="width: 100%; height: 300px"
  748. :summary-method="sumJhdlMethod"
  749. show-summary
  750. border
  751. stripe
  752. >
  753. <el-table-column type="index" label="月份" align="center" />
  754. <el-table-column prop="fdl" label="发电量(万kWh)" align="center" />
  755. <el-table-column prop="jhdl" label="计划电量(万kWh)" align="center" />
  756. <el-table-column prop="wcl" label="完成率(%)" align="center" />
  757. </el-table>
  758. <div id="jhdlwcqk" style="width: 100%; height: 450px"></div>
  759. </el-dialog>
  760. <el-dialog
  761. class="currentDialog"
  762. v-model="stHourDialogShow"
  763. :title="`14天功率曲线${getWpName()}`"
  764. width="90%"
  765. align-center
  766. destroy-on-close
  767. append-to-body
  768. >
  769. <div id="stHour" style="width: 100%; height: 750px"></div>
  770. </el-dialog>
  771. <el-dialog
  772. class="currentDialog"
  773. v-model="DialogShow"
  774. title="Tips"
  775. width="90%"
  776. align-center
  777. destroy-on-close
  778. >
  779. <span>123</span>
  780. </el-dialog>
  781. </div>
  782. </template>
  783. <script>
  784. import fengji from "@/assets/images/indexCom/fengji.png";
  785. import quan from "@/assets/images/indexCom/quan.png";
  786. import fengjiBack from "@/assets/images/indexCom/fengjiBack.png";
  787. import tixing from "@/assets/images/indexCom/tixing.png";
  788. import tianqi from "@/assets/menuImg/power_tqyb.png";
  789. import tianqiW from "@/assets/images/indexCom/weatherW.png";
  790. import dlTop1 from "@/assets/images/indexCom/dlTop1.png";
  791. import dlTop2 from "@/assets/images/indexCom/dlTop2.png";
  792. import dlBot1 from "@/assets/images/indexCom/dlBot1.png";
  793. import dlBot2 from "@/assets/images/indexCom/dlBot2.png";
  794. import zengfa from "@/assets/images/indexCom/zengfa.png";
  795. import sunshi from "@/assets/images/indexCom/sunshi.png";
  796. import wea1 from "@/assets/images/indexCom/wea_1.png";
  797. import wea2 from "@/assets/images/indexCom/wea_2.png";
  798. import wea3 from "@/assets/images/indexCom/wea_3.png";
  799. import wea4 from "@/assets/images/indexCom/wea_4.png";
  800. import wea5 from "@/assets/images/indexCom/wea_5.png";
  801. import waterIcon from "@/assets/weather/icowater.png";
  802. import weatherSun from "@/assets/weather/sun.png";
  803. import cChart from "@/assets/images/indexCom/cChart.png";
  804. import forecastBarComponent from "@/components/homeComponent/forecastBarComponent.vue";
  805. import echartsGaugeComponent from "@/components/homeComponent/echartsGaugeComponent.vue";
  806. import echartsPie from "@/components/homeComponent/echartsPie.vue";
  807. import echartsPie2 from "@/components/homeComponent/echartsPie2.vue";
  808. import { apiGethomeData, apiGetbulletindlData } from "@/api/gengra";
  809. import DAYJS from "dayjs";
  810. import jsonData from "./component/data.json";
  811. export default {
  812. components: {
  813. forecastBarComponent,
  814. echartsGaugeComponent,
  815. echartsPie,
  816. echartsPie2,
  817. },
  818. data() {
  819. return {
  820. rl: 0,
  821. swichTheme: null,
  822. fengji: fengji,
  823. quan: quan,
  824. fengjiBack: fengjiBack,
  825. tixing: tixing,
  826. tianqi: tianqi,
  827. tianqiW: tianqiW,
  828. wea1: wea1,
  829. wea2: wea2,
  830. wea3: wea3,
  831. wea4: wea4,
  832. wea5: wea5,
  833. dlTop1: dlTop1,
  834. dlTop2: dlTop2,
  835. dlBot1: dlBot1,
  836. dlBot2: dlBot2,
  837. zengfa: zengfa,
  838. sunshi: sunshi,
  839. weatherArr: [],
  840. fengjiArr: [],
  841. dayFa: [],
  842. monthFa: [],
  843. powerDataHome: [],
  844. powerAnalyRadio: "日",
  845. analyPieData: [],
  846. powerPlanRadio: "月",
  847. powerPlanData: {},
  848. homeDataVo: {},
  849. weatherFrom: {
  850. temperature: "",
  851. weather: "",
  852. wind_direction: "",
  853. wind_power: "",
  854. },
  855. ylyxsList: [],
  856. mainData: "",
  857. wpId: "GJNY_SXGS_DBXNY_ZGS0",
  858. mainDataLoading: false,
  859. DialogShow: false,
  860. tqycDialogShow: false,
  861. weatherObj: {},
  862. weatherChartActiveTab: "wd",
  863. weatherChartTabList: [
  864. {
  865. id: "wd",
  866. label: "温度",
  867. },
  868. {
  869. id: "jsl",
  870. label: "降水量",
  871. },
  872. {
  873. id: "flfx",
  874. label: "风力方向",
  875. },
  876. {
  877. id: "kqzl",
  878. label: "空气质量",
  879. },
  880. ],
  881. waterIcon,
  882. weatherSun,
  883. dllist: {},
  884. yfdlDialogShow: false,
  885. jhdlDialogShow: false,
  886. jhdlTableData: [],
  887. stHourDialogShow: false,
  888. day14Data: [],
  889. ztmap: {},
  890. selectWp: {},
  891. timeInterval: null,
  892. timeDealy: 3,
  893. isFirstLoad: true,
  894. chart72Options: null,
  895. chartMonthOptions: null,
  896. };
  897. },
  898. created() {
  899. this.fengjiArr = [
  900. {
  901. name: "繁食沟风电场",
  902. left: "34%",
  903. top: "28%",
  904. wpId: "GJNY_SXGS_FSG_FDC_STA",
  905. },
  906. {
  907. name: "新庄风电场",
  908. left: "40%",
  909. top: "24%",
  910. wpId: "GJNY_SXGS_XZ_FDC_STA",
  911. },
  912. {
  913. name: "草山梁风电场",
  914. left: "63%",
  915. top: "33%",
  916. wpId: "GJNY_SXGS_CSL_FDC_STA",
  917. },
  918. {
  919. name: "雷家山风电场",
  920. left: "58%",
  921. top: "22%",
  922. wpId: "GJNY_SXGS_LJS_FDC_STA",
  923. },
  924. {
  925. name: "吉山梁风电场",
  926. left: "64%",
  927. top: "20%",
  928. wpId: "GJNY_SXGS_JSL_FDC_STA",
  929. },
  930. {
  931. name: "左庄风电场",
  932. left: "34%",
  933. top: "38%",
  934. wpId: "GJNY_SXGS_ZZ_FDC_STA",
  935. },
  936. ];
  937. },
  938. computed: {
  939. pageHeight() {
  940. return {
  941. height: document.documentElement.clientHeight - 50 + "px",
  942. };
  943. },
  944. },
  945. watch: {
  946. "$store.state.theme"(newVal, oldVal) {
  947. this.swichTheme = newVal;
  948. this.getHomeData(this.selectWp);
  949. },
  950. },
  951. mounted() {
  952. this.swichTheme = JSON.parse(window.sessionStorage.getItem("theme"));
  953. this.getHomeData(this.selectWp);
  954. this.timeInterval = setInterval(() => {
  955. this.getHomeData(this.selectWp);
  956. }, this.timeDealy * 1000);
  957. },
  958. unmounted() {
  959. clearInterval(this.timeInterval);
  960. this.timeInterval = null;
  961. },
  962. methods: {
  963. getWpName() {
  964. if (this.mainData === "获取中...") {
  965. return "";
  966. } else if (this.mainData === "") {
  967. return " (公司)";
  968. } else {
  969. return ` (${this.mainData})`;
  970. }
  971. },
  972. showWeaterDialog() {
  973. this.tqycDialogShow = true;
  974. this.renderWeatherDialogChart();
  975. },
  976. showJhdlDialog() {
  977. this.jhdlDialogShow = true;
  978. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  979. this.$nextTick(() => {
  980. let xAxis = [];
  981. let seriesRF = [];
  982. let seriesSW = [];
  983. this.jhdlTableData?.forEach((ele) => {
  984. seriesRF.push(ele.fdl);
  985. seriesSW.push(ele.jhdl);
  986. xAxis.push(`${ele.sj}月`);
  987. });
  988. let series = [
  989. {
  990. name: "发电量",
  991. data: seriesRF,
  992. barGap: "0",
  993. type: "bar",
  994. },
  995. {
  996. name: "计划电量",
  997. data: seriesSW,
  998. type: "bar",
  999. },
  1000. ];
  1001. let option = {
  1002. title: {
  1003. text: "计划电量完成情况",
  1004. left: "10px",
  1005. top: "10px",
  1006. textStyle: {
  1007. fontSize: "16",
  1008. fontWeight: 400,
  1009. color: theme ? "#1850B3" : "#fff",
  1010. },
  1011. },
  1012. color: ["#1C99FF", "#E57F25"],
  1013. tooltip: {
  1014. trigger: "axis",
  1015. axisPointer: {
  1016. type: "shadow",
  1017. },
  1018. },
  1019. grid: {
  1020. left: "75px",
  1021. right: "75px",
  1022. bottom: "20px",
  1023. top: "70px",
  1024. containLabel: true,
  1025. },
  1026. legend: {
  1027. right: "20",
  1028. top: "20",
  1029. itemWidth: 5,
  1030. itemHeight: 5,
  1031. data: ["发电量", "计划电量"],
  1032. textStyle: {
  1033. color: theme ? "#1850B3" : "#fff",
  1034. },
  1035. },
  1036. xAxis: [
  1037. {
  1038. type: "category",
  1039. axisTick: {
  1040. show: false,
  1041. },
  1042. data: xAxis,
  1043. axisLine: {
  1044. lineStyle: {
  1045. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  1046. },
  1047. },
  1048. },
  1049. ],
  1050. yAxis: [
  1051. {
  1052. type: "value",
  1053. splitLine: {
  1054. lineStyle: {
  1055. color: this.$store.state.theme ? "#000" : "#ccc",
  1056. type: "dashed", // 修改为虚线
  1057. opacity: 0.2,
  1058. },
  1059. },
  1060. name: "单位:万KWh",
  1061. axisLine: {
  1062. lineStyle: {
  1063. color: theme ? "#1850B3" : "#fff",
  1064. },
  1065. },
  1066. },
  1067. ],
  1068. series: series,
  1069. };
  1070. if (!this.theme) {
  1071. option.backgroundColor = "";
  1072. }
  1073. // 基于准备好的dom,初始化echarts实例
  1074. let dom = document.getElementById("jhdlwcqk");
  1075. dom && dom.removeAttribute("_echarts_instance_");
  1076. let myChart = this.$echarts.init(dom);
  1077. myChart.setOption(option);
  1078. window.addEventListener("resize", () => {
  1079. myChart.resize();
  1080. });
  1081. });
  1082. },
  1083. showStHourDialog() {
  1084. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  1085. this.stHourDialogShow = true;
  1086. this.$nextTick(() => {
  1087. let xAxis = [];
  1088. let seriesSpeed = [];
  1089. let seriesGl = [];
  1090. let seriesSJ = [];
  1091. let seriesYc = [];
  1092. this.day14Data?.forEach((it) => {
  1093. xAxis.push(DAYJS(it.time).format("MM-DD HH:mm"));
  1094. seriesSpeed.push(it.speed);
  1095. seriesGl.push(it.expectedpower);
  1096. seriesSJ.push(it.power);
  1097. seriesYc.push(it.predictedpower);
  1098. });
  1099. const allPowerData = seriesGl.concat(seriesSJ, seriesYc);
  1100. const powerMin = Math.min(...allPowerData);
  1101. const powerMax = Math.max(...allPowerData);
  1102. const windSpeedMin = Math.min(...seriesSpeed);
  1103. const windSpeedMax = Math.max(...seriesSpeed);
  1104. const splitNumber = 7;
  1105. let series = [
  1106. {
  1107. name: "平均风速",
  1108. data: seriesSpeed,
  1109. yAxisIndex: 1,
  1110. type: "line",
  1111. symbol: "none",
  1112. },
  1113. {
  1114. name: "应发功率",
  1115. data: seriesGl,
  1116. type: "line",
  1117. symbol: "none",
  1118. yAxisIndex: 0,
  1119. },
  1120. {
  1121. name: "实际功率",
  1122. data: seriesSJ,
  1123. type: "line",
  1124. symbol: "none",
  1125. yAxisIndex: 0,
  1126. },
  1127. {
  1128. name: "预测功率",
  1129. data: seriesYc,
  1130. type: "line",
  1131. symbol: "none",
  1132. yAxisIndex: 0,
  1133. },
  1134. ];
  1135. let option = {
  1136. title: {
  1137. show: false,
  1138. text: "14天功率曲线",
  1139. left: "10px",
  1140. top: "20px",
  1141. textStyle: {
  1142. fontSize: "16",
  1143. fontWeight: 400,
  1144. color: theme ? "#1850B3" : "#fff",
  1145. },
  1146. },
  1147. tooltip: {
  1148. trigger: "axis",
  1149. },
  1150. color: ["#7981AF", "#1C99FF", "#E57F25", "#f25656"],
  1151. legend: {
  1152. right: "20",
  1153. top: "20",
  1154. itemWidth: 5,
  1155. itemHeight: 5,
  1156. data: ["平均风速", "应发功率", "实际功率", "预测功率"],
  1157. textStyle: {
  1158. color: theme ? "#1850B3" : "#fff",
  1159. },
  1160. },
  1161. grid: {
  1162. left: "75px",
  1163. right: "75px",
  1164. bottom: "20px",
  1165. top: "70px",
  1166. containLabel: true,
  1167. },
  1168. xAxis: {
  1169. type: "category",
  1170. boundaryGap: false,
  1171. data: xAxis,
  1172. axisLine: {
  1173. lineStyle: {
  1174. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  1175. },
  1176. },
  1177. },
  1178. yAxis: [
  1179. {
  1180. type: "value",
  1181. splitLine: {
  1182. lineStyle: {
  1183. color: this.$store.state.theme ? "#000" : "#ccc",
  1184. type: "dashed", // 修改为虚线
  1185. opacity: 0.2,
  1186. },
  1187. },
  1188. name: "单位:MW",
  1189. axisLine: {
  1190. lineStyle: {
  1191. color: theme ? "#1850B3" : "#fff",
  1192. },
  1193. },
  1194. min: powerMin,
  1195. max: powerMax, // 动态设置最大值
  1196. interval: parseFloat(
  1197. ((powerMax - powerMin) / splitNumber).toFixed(4)
  1198. ),
  1199. splitNumber,
  1200. axisLabel: {
  1201. formatter(value) {
  1202. return parseInt(value);
  1203. },
  1204. },
  1205. },
  1206. {
  1207. type: "value",
  1208. splitLine: {
  1209. lineStyle: {
  1210. color: this.$store.state.theme ? "#000" : "#ccc",
  1211. type: "dashed", // 修改为虚线
  1212. opacity: 0.2,
  1213. },
  1214. },
  1215. name: "单位:m/s",
  1216. axisLine: {
  1217. lineStyle: {
  1218. color: theme ? "#1850B3" : "#fff",
  1219. },
  1220. },
  1221. min: windSpeedMin,
  1222. max: windSpeedMax, // 动态设置最大值
  1223. splitNumber,
  1224. interval: parseFloat(
  1225. ((windSpeedMax - windSpeedMin) / splitNumber).toFixed(4)
  1226. ),
  1227. axisLabel: {
  1228. formatter(value) {
  1229. return parseFloat(value.toFixed(1));
  1230. },
  1231. },
  1232. },
  1233. ],
  1234. series: series,
  1235. };
  1236. if (!this.theme) {
  1237. option.backgroundColor = "";
  1238. }
  1239. // 基于准备好的dom,初始化echarts实例
  1240. let dom = document.getElementById("stHour");
  1241. dom && dom.removeAttribute("_echarts_instance_");
  1242. let myChart = this.$echarts.init(dom);
  1243. myChart.setOption(option);
  1244. window.addEventListener("resize", () => {
  1245. myChart.resize();
  1246. });
  1247. });
  1248. },
  1249. showYfdlDialog() {
  1250. this.yfdlDialogShow = true;
  1251. this.renderYfdlChart();
  1252. },
  1253. renderYfdlChart() {
  1254. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  1255. this.$nextTick(() => {
  1256. const domList = ["fdlSy", "fdlBy", "fdlXy"];
  1257. ["sqdl", "dydl", "xqlist"].forEach((chartDataKey, domKey) => {
  1258. let xAxis = [];
  1259. let seriesRF = [];
  1260. let seriesSW = [];
  1261. let seriesGW = [];
  1262. for (let idx = 0; idx < 31; idx++) {
  1263. const item = this.dllist?.[chartDataKey]?.[idx] || null;
  1264. if (item) {
  1265. seriesRF.push(item.rfdl);
  1266. seriesSW.push(item.rswdl);
  1267. seriesGW.push(item.rycdl);
  1268. xAxis.push(DAYJS(item.rq).format("MM-DD"));
  1269. }
  1270. }
  1271. let series = [
  1272. {
  1273. name: "日发电量",
  1274. data: seriesRF,
  1275. barGap: "1",
  1276. type: "bar",
  1277. },
  1278. {
  1279. name: "上网电量",
  1280. data: seriesSW,
  1281. type: "bar",
  1282. },
  1283. {
  1284. name: "预测电量",
  1285. data: seriesGW,
  1286. type: "bar",
  1287. },
  1288. ];
  1289. let option = {
  1290. title: {
  1291. text:
  1292. domList[domKey] === "fdlSy"
  1293. ? "上月发电量"
  1294. : domList[domKey] === "fdlBy"
  1295. ? "本月发电量"
  1296. : "下月预测发电量",
  1297. left: "10px",
  1298. top: "10px",
  1299. textStyle: {
  1300. fontSize: "16",
  1301. fontWeight: 400,
  1302. color: theme ? "#1850B3" : "#fff",
  1303. },
  1304. },
  1305. color: ["#7981AF", "#1C99FF", "#E57F25"],
  1306. tooltip: {
  1307. trigger: "axis",
  1308. axisPointer: {
  1309. type: "shadow",
  1310. },
  1311. },
  1312. grid: {
  1313. left: "75px",
  1314. right: "75px",
  1315. bottom: "20px",
  1316. top: "70px",
  1317. containLabel: true,
  1318. },
  1319. legend: {
  1320. right: "20",
  1321. top: "20",
  1322. itemWidth: 5,
  1323. itemHeight: 5,
  1324. data: ["日发电量", "上网电量", "预测电量"],
  1325. textStyle: {
  1326. color: theme ? "#1850B3" : "#fff",
  1327. },
  1328. },
  1329. xAxis: [
  1330. {
  1331. type: "category",
  1332. axisTick: {
  1333. show: false,
  1334. },
  1335. data: xAxis,
  1336. axisLine: {
  1337. lineStyle: {
  1338. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  1339. },
  1340. },
  1341. },
  1342. ],
  1343. yAxis: [
  1344. {
  1345. type: "value",
  1346. splitNumber: 3.5,
  1347. splitLine: {
  1348. lineStyle: {
  1349. color: this.$store.state.theme ? "#000" : "#ccc",
  1350. type: "dashed", // 修改为虚线
  1351. opacity: 0.2,
  1352. },
  1353. },
  1354. name: "单位:万KWh",
  1355. axisLine: {
  1356. lineStyle: {
  1357. color: theme ? "#1850B3" : "#fff",
  1358. },
  1359. },
  1360. },
  1361. ],
  1362. series: series,
  1363. };
  1364. if (!this.theme) {
  1365. option.backgroundColor = "";
  1366. }
  1367. // 基于准备好的dom,初始化echarts实例
  1368. let dom = document.getElementById(domList[domKey]);
  1369. dom && dom.removeAttribute("_echarts_instance_");
  1370. let myChart = this.$echarts.init(dom);
  1371. myChart.setOption(option);
  1372. window.addEventListener("resize", () => {
  1373. myChart.resize();
  1374. });
  1375. });
  1376. this.$refs.yfdlCarouselRef.setActiveItem("by");
  1377. });
  1378. },
  1379. switchMainData(wp) {
  1380. this.getHomeData(wp);
  1381. },
  1382. fengjiStyFn(it) {
  1383. return `left:${it.left};top:${it.top}`;
  1384. },
  1385. getHomeData(wp = null) {
  1386. let that = this;
  1387. if (wp?.wpId && wp?.name) {
  1388. this.selectWp = wp;
  1389. that.mainData =
  1390. wp.name === "全省数据"
  1391. ? wp.name
  1392. : that.isFirstLoad
  1393. ? "获取中..."
  1394. : that.mainData;
  1395. this.wpId = wp.wpId;
  1396. }
  1397. // that.BASE.showLoading();
  1398. let params = {
  1399. wpId: this.wpId,
  1400. };
  1401. if (this.isFirstLoad) {
  1402. this.initPageData(jsonData);
  1403. this.initbulletindlData(jsonData, "json");
  1404. }
  1405. apiGethomeData(params)
  1406. .then((res) => {
  1407. that.initPageData(res);
  1408. })
  1409. .finally(() => {
  1410. if (wp?.wpId && wp?.name) {
  1411. that.wpId = wp.wpId;
  1412. that.mainData = wp.name;
  1413. }
  1414. // that.BASE.closeLoading();
  1415. });
  1416. apiGetbulletindlData(params).then((rs) => {
  1417. that.initbulletindlData(rs, "rel");
  1418. });
  1419. },
  1420. sumJhdlMethod() {
  1421. let fdl = 0;
  1422. let jhdl = 0;
  1423. this.jhdlTableData.forEach((ele) => {
  1424. fdl += ele.fdl;
  1425. jhdl += ele.jhdl;
  1426. });
  1427. return [
  1428. "合计",
  1429. `${fdl.toFixed(2)} 万kWh`,
  1430. `${jhdl.toFixed(2)} 万kWh`,
  1431. `${((fdl / jhdl) * 100).toFixed(2)} %`,
  1432. ];
  1433. },
  1434. initPageData(res) {
  1435. let that = this;
  1436. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  1437. if (res && res.data) {
  1438. this.rl = res.data.rl;
  1439. if (res.data?.["dqtq"] && res.data?.["24tq"] && res.data?.["15tq"]) {
  1440. //天气预报
  1441. let weatherObj = {
  1442. dqtq: res.data?.["dqtq"]?.[0] || {},
  1443. tq24: res.data["24tq"] || [],
  1444. tq15: res.data["15tq"] || [],
  1445. };
  1446. // weatherObj.dqtq.weather = "ddddddddddddd";
  1447. this.weatherObj = weatherObj;
  1448. that.weatherFrom = {
  1449. temperature: weatherObj.dqtq.temperatureDay,
  1450. weather: weatherObj.dqtq.weather,
  1451. wind_direction: weatherObj.dqtq.windDirection,
  1452. wind_power: weatherObj.dqtq.windPower,
  1453. };
  1454. this.weatherArr = [
  1455. {
  1456. name: "能见度",
  1457. value: weatherObj.dqtq.visibility,
  1458. img: wea1,
  1459. },
  1460. {
  1461. name: "湿度",
  1462. value: weatherObj.dqtq.humidity,
  1463. img: wea2,
  1464. },
  1465. {
  1466. name: "气压",
  1467. value: weatherObj.dqtq.pressure,
  1468. img: wea3,
  1469. },
  1470. {
  1471. name: "日出时间",
  1472. value: weatherObj.dqtq.sunrisetime,
  1473. img: wea4,
  1474. },
  1475. {
  1476. name: "日落时间",
  1477. value: weatherObj.dqtq.sunsettime,
  1478. img: wea5,
  1479. },
  1480. ];
  1481. }
  1482. //预测电量
  1483. if (res.data.vo) {
  1484. that.homeDataVo = res.data.vo;
  1485. let it = res.data.vo;
  1486. that.dayFa = [
  1487. [
  1488. {
  1489. name: "日发电量",
  1490. id: "day",
  1491. value: it.rfdl,
  1492. color: "#FF9B23",
  1493. total: 1500,
  1494. },
  1495. ],
  1496. [
  1497. {
  1498. name: "日预测电量",
  1499. id: "day2",
  1500. value: it.rycdl,
  1501. color: "#FF9B23",
  1502. total: 1500,
  1503. },
  1504. ],
  1505. ];
  1506. that.monthFa = [
  1507. [
  1508. {
  1509. name: "月发电量",
  1510. id: "day",
  1511. value: it.yfdl,
  1512. color: "#1C99FF",
  1513. total: 45000,
  1514. },
  1515. ],
  1516. [
  1517. {
  1518. name: "月预测电量",
  1519. id: "day2",
  1520. value: it.yycdl,
  1521. color: "#1C99FF",
  1522. total: 45000,
  1523. },
  1524. ],
  1525. ];
  1526. that.powerDataHome = [
  1527. {
  1528. title: "风速",
  1529. value: it.pjfs,
  1530. max: res.data.rl,
  1531. unit: "MW",
  1532. },
  1533. {
  1534. title: "功率",
  1535. value: it.sfgl,
  1536. max: res.data.rl,
  1537. unit: "MW",
  1538. },
  1539. {
  1540. title: "应发功率",
  1541. value: it.yfgl,
  1542. max: res.data.rl,
  1543. unit: "MW",
  1544. },
  1545. {
  1546. title: "预测功率",
  1547. value: it.bzgl,
  1548. max: res.data.rl,
  1549. unit: "MW",
  1550. },
  1551. ];
  1552. }
  1553. //计划电量完成情况
  1554. if (res.data.jhwcl) {
  1555. that.powerPlanData = res.data.jhwcl;
  1556. }
  1557. if (res.data.jhdltc) {
  1558. this.jhdlTableData = res.data.jhdltc.voList;
  1559. }
  1560. // 72小时功率曲线
  1561. if (res.data["72time"] && res.data["72time"].length > 0) {
  1562. let xAxis = [];
  1563. let seriesSpeed = [];
  1564. let seriesGl = [];
  1565. let seriesSJ = [];
  1566. let seriesYc = [];
  1567. res.data["72time"].forEach((it) => {
  1568. xAxis.push(DAYJS(it.time).format("MM-DD HH:mm"));
  1569. seriesSpeed.push(it.speed);
  1570. seriesGl.push(it.expectedpower);
  1571. seriesSJ.push(it.power);
  1572. seriesYc.push(it.predictedpower);
  1573. });
  1574. let series = [
  1575. {
  1576. name: "平均风速",
  1577. data: seriesSpeed,
  1578. yAxisIndex: 1,
  1579. type: "line",
  1580. symbol: "none",
  1581. },
  1582. {
  1583. name: "应发功率",
  1584. data: seriesGl,
  1585. type: "line",
  1586. symbol: "none",
  1587. yAxisIndex: 0,
  1588. },
  1589. {
  1590. name: "实际功率",
  1591. data: seriesSJ,
  1592. type: "line",
  1593. symbol: "none",
  1594. yAxisIndex: 0,
  1595. },
  1596. {
  1597. name: "预测功率",
  1598. data: seriesYc,
  1599. type: "line",
  1600. symbol: "none",
  1601. yAxisIndex: 0,
  1602. },
  1603. ];
  1604. const allPowerData = seriesGl.concat(seriesSJ, seriesYc);
  1605. const powerMin = Math.min(...allPowerData);
  1606. const powerMax = Math.max(...allPowerData);
  1607. const windSpeedMin = Math.min(...seriesSpeed);
  1608. const windSpeedMax = Math.max(...seriesSpeed);
  1609. const splitNumber = 4;
  1610. that.getPowerLine(
  1611. xAxis,
  1612. series,
  1613. powerMin,
  1614. powerMax,
  1615. windSpeedMin,
  1616. windSpeedMax,
  1617. splitNumber
  1618. );
  1619. }
  1620. this.ylyxsList = res?.data?.yllxs || [];
  1621. this.day14Data = res?.data?.["14time"] || [];
  1622. if (res.data.yllxs) {
  1623. // const nameMap = {
  1624. // 受累损失: "djssdl",
  1625. // 维护损失: "whssdl",
  1626. // 限电损失: "xdssdl",
  1627. // 故障损失: "xdssdl",
  1628. // 性能损失: "xnssdl",
  1629. // };
  1630. // let option = {
  1631. // tooltip: {
  1632. // show: true,
  1633. // },
  1634. // grid: {
  1635. // left: "0",
  1636. // right: "0",
  1637. // bottom: "0",
  1638. // top: "0",
  1639. // containLabel: true,
  1640. // },
  1641. // legend: {
  1642. // orient: "vertical",
  1643. // right: "20",
  1644. // top: "15",
  1645. // itemWidth: 5,
  1646. // itemHeight: 5,
  1647. // data: [
  1648. // "受累损失",
  1649. // "维护损失",
  1650. // "限电损失",
  1651. // "故障损失",
  1652. // "性能损失",
  1653. // ],
  1654. // formatter(name) {
  1655. // return `${name} ${res.data.wxss[nameMap[name]]} 万kW`;
  1656. // },
  1657. // textStyle: {
  1658. // //图例文字的样式
  1659. // color: theme ? "#000" : "#fff",
  1660. // },
  1661. // },
  1662. // series: [
  1663. // {
  1664. // name: "五项损失",
  1665. // type: "pie",
  1666. // radius: ["60%", "100%"], // 控制圆环的内外半径
  1667. // center: ["38%", "55%"],
  1668. // startAngle: 180,
  1669. // endAngle: 360,
  1670. // label: {
  1671. // show: false, // 不显示标签
  1672. // },
  1673. // padAngle: 2,
  1674. // itemStyle: {
  1675. // borderRadius: 0,
  1676. // },
  1677. // label: {
  1678. // show: true, // 显示标签
  1679. // position: "inside", // 标签显示在外部
  1680. // formatter: "{d}%", // 标签格式器,{b}是数据项名称,{c}是数值,{d}是百分比
  1681. // },
  1682. // data: [
  1683. // {
  1684. // value: res.data.wxss.djssdl,
  1685. // name: "受累损失",
  1686. // itemStyle: { color: "rgba(255,131,0, 1)" },
  1687. // },
  1688. // {
  1689. // value: res.data.wxss.whssdl,
  1690. // name: "维护损失",
  1691. // itemStyle: { color: "rgba(28,153,255, 1)" },
  1692. // },
  1693. // {
  1694. // value: res.data.wxss.xdssdl,
  1695. // name: "限电损失",
  1696. // itemStyle: { color: "rgba(86,255,245, 1)" },
  1697. // },
  1698. // {
  1699. // value: res.data.wxss.gzssdl,
  1700. // name: "故障损失",
  1701. // itemStyle: { color: "rgba(186,50,55, 1)" },
  1702. // },
  1703. // {
  1704. // value: res.data.wxss.xnssdl,
  1705. // name: "性能损失",
  1706. // itemStyle: { color: "rgba(5,187,76, 1)" },
  1707. // },
  1708. // ],
  1709. // },
  1710. // {
  1711. // name: "内环图",
  1712. // type: "pie",
  1713. // radius: ["50%", "66%"], // 控制圆环的内外半径
  1714. // center: ["38%", "55%"],
  1715. // startAngle: 180,
  1716. // endAngle: 360,
  1717. // label: {
  1718. // show: false, // 不显示标签
  1719. // },
  1720. // padAngle: 2,
  1721. // itemStyle: {
  1722. // borderRadius: 0,
  1723. // },
  1724. // tooltip: {
  1725. // show: false,
  1726. // },
  1727. // data: [
  1728. // {
  1729. // value: res.data.wxss.djssdl,
  1730. // name: "受累损失",
  1731. // itemStyle: { color: "rgba(255,131,0, 0.4)" },
  1732. // },
  1733. // {
  1734. // value: res.data.wxss.whssdl,
  1735. // name: "维护损失",
  1736. // itemStyle: { color: "rgba(28,153,255, 0.4)" },
  1737. // },
  1738. // {
  1739. // value: res.data.wxss.xdssdl,
  1740. // name: "限电损失",
  1741. // itemStyle: { color: "rgba(86,255,245, 0.4)" },
  1742. // },
  1743. // {
  1744. // value: res.data.wxss.gzssdl,
  1745. // name: "故障损失",
  1746. // itemStyle: { color: "rgba(186,50,55, 0.4)" },
  1747. // },
  1748. // {
  1749. // value: res.data.wxss.xnssdl,
  1750. // name: "性能损失",
  1751. // itemStyle: { color: "rgba(5,187,76, 0.4)" },
  1752. // },
  1753. // ],
  1754. // },
  1755. // ],
  1756. // // graphic: {
  1757. // // type: "image",
  1758. // // id: "myImage",
  1759. // // left: "center",
  1760. // // top: "center",
  1761. // // z: 100,
  1762. // // style: {
  1763. // // image: cChart,
  1764. // // width: 150,
  1765. // // height: 150,
  1766. // // },
  1767. // // },
  1768. // };
  1769. const nameMap = {
  1770. 繁: "",
  1771. 左: "",
  1772. 雷: "",
  1773. 吉: "",
  1774. 草: "",
  1775. 新: "",
  1776. 公: "",
  1777. };
  1778. let series = [
  1779. {
  1780. name: "日利用小时",
  1781. data: [],
  1782. barGap: "0",
  1783. type: "bar",
  1784. label: {
  1785. show: true, // 显示标签
  1786. position: "top", // 标签位置
  1787. formatter: "{c}", // 使用默认的数据值作为标签内容
  1788. color: theme ? "#1850B3" : "#fff",
  1789. },
  1790. },
  1791. {
  1792. name: "月利用小时",
  1793. data: [],
  1794. type: "bar",
  1795. label: {
  1796. show: true, // 显示标签
  1797. position: "top", // 标签位置
  1798. formatter: "{c}", // 使用默认的数据值作为标签内容
  1799. color: theme ? "#000" : "#fff",
  1800. },
  1801. },
  1802. ];
  1803. let xAxis = [];
  1804. res.data.yllxs?.forEach((ele) => {
  1805. nameMap[ele.wpid.split("")[0]] = ele.wpid;
  1806. xAxis.push(ele.wpid);
  1807. series[0].data.push(ele.swdl);
  1808. series[1].data.push(ele.bzgl);
  1809. });
  1810. let option = {
  1811. animation: this.isFirstLoad,
  1812. title: {
  1813. text: "利用小时",
  1814. left: "10px",
  1815. top: "10px",
  1816. textStyle: {
  1817. fontSize: "16",
  1818. fontWeight: 400,
  1819. color: theme ? "#1850B3" : "#fff",
  1820. },
  1821. },
  1822. color: ["#7981AF", "#1C99FF", "#E57F25"],
  1823. tooltip: {
  1824. trigger: "axis",
  1825. axisPointer: {
  1826. type: "shadow",
  1827. },
  1828. // formatter(data) {
  1829. // let label = `<p>${nameMap[data[0].name]}</p>`;
  1830. // data.forEach((ele, index) => {
  1831. // label += `<p>
  1832. // <span style="background:${
  1833. // ele.color
  1834. // };margin-right:5px;display:inline-block;width:10px;height:10px;border-radius:50%;over-flow:hidden;"></span>
  1835. // <span>${
  1836. // ele.seriesName
  1837. // }:<span style="font-weight: 700;margin-left:10px">${
  1838. // ele.value || 0
  1839. // }</span></span>
  1840. // </p>`;
  1841. // });
  1842. // return label;
  1843. // },
  1844. },
  1845. grid: {
  1846. top: "32%",
  1847. left: "2%",
  1848. right: "2%",
  1849. bottom: "5%",
  1850. height: "90px",
  1851. containLabel: true,
  1852. },
  1853. legend: {
  1854. right: "10",
  1855. top: "10",
  1856. itemWidth: 5,
  1857. itemHeight: 5,
  1858. data: ["日利用小时", "月利用小时"],
  1859. textStyle: {
  1860. color: theme ? "#1850B3" : "#fff",
  1861. },
  1862. },
  1863. xAxis: [
  1864. {
  1865. type: "category",
  1866. axisTick: {
  1867. show: false,
  1868. },
  1869. data: xAxis,
  1870. axisLine: {
  1871. lineStyle: {
  1872. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  1873. },
  1874. },
  1875. },
  1876. ],
  1877. yAxis: [
  1878. {
  1879. type: "value",
  1880. splitNumber: 3.5,
  1881. splitLine: {
  1882. lineStyle: {
  1883. color: "transparent",
  1884. },
  1885. },
  1886. name: "单位:小时",
  1887. axisLine: {
  1888. lineStyle: {
  1889. color: theme ? "#1850B3" : "#fff",
  1890. },
  1891. },
  1892. },
  1893. ],
  1894. series: series,
  1895. };
  1896. if (!this.theme) {
  1897. option.backgroundColor = "";
  1898. }
  1899. // 基于准备好的dom,初始化echarts实例
  1900. let dom = document.getElementById("cChartDom");
  1901. dom && dom.removeAttribute("_echarts_instance_");
  1902. let myChart = this.$echarts.init(dom);
  1903. myChart.setOption(option);
  1904. window.addEventListener("resize", () => {
  1905. myChart.resize();
  1906. });
  1907. }
  1908. this.ztmap = res.data.ztmap || {};
  1909. }
  1910. this.isFirstLoad = false;
  1911. },
  1912. initbulletindlData(res, type) {
  1913. let datas = type === "json" ? res.dldata : res.data;
  1914. if (res && datas) {
  1915. // 月发电量
  1916. if (datas.dydl) {
  1917. let xAxis = [];
  1918. let seriesRF = [];
  1919. let seriesSW = [];
  1920. let seriesGW = [];
  1921. this.dllist = datas;
  1922. datas?.dydl.forEach((it) => {
  1923. xAxis.push(DAYJS(it.rq).format("MM-DD"));
  1924. seriesRF.push(it.rfdl);
  1925. seriesSW.push(it.rswdl);
  1926. seriesGW.push(it.rycdl);
  1927. });
  1928. let series = [
  1929. {
  1930. name: "日发电量",
  1931. data: seriesRF,
  1932. barGap: "1",
  1933. type: "bar",
  1934. },
  1935. {
  1936. name: "上网电量",
  1937. data: seriesSW,
  1938. type: "bar",
  1939. },
  1940. {
  1941. name: "预测电量",
  1942. data: seriesGW,
  1943. type: "bar",
  1944. },
  1945. ];
  1946. this.getPowerBar(xAxis, series);
  1947. }
  1948. }
  1949. },
  1950. getPowerBar(xAxis, series) {
  1951. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  1952. let myChart;
  1953. let legendState = {};
  1954. if (this.chartMonthOptions?.getOption) {
  1955. legendState = this.chartMonthOptions?.getOption().legend[0].selected;
  1956. }
  1957. let option = {
  1958. animation: this.isFirstLoad,
  1959. title: {
  1960. text: "月发电量",
  1961. left: "5px",
  1962. top: "5px",
  1963. textStyle: {
  1964. fontSize: "16",
  1965. fontWeight: 400,
  1966. color: theme ? "#1850B3" : "#fff",
  1967. },
  1968. },
  1969. color: ["#7981AF", "#1C99FF", "#E57F25"],
  1970. tooltip: {
  1971. trigger: "axis",
  1972. axisPointer: {
  1973. type: "shadow",
  1974. },
  1975. },
  1976. grid: {
  1977. left: "2%",
  1978. right: "2%",
  1979. bottom: "5%",
  1980. height: "110px",
  1981. containLabel: true,
  1982. },
  1983. legend: {
  1984. right: "5",
  1985. top: "5",
  1986. itemWidth: 5,
  1987. itemHeight: 5,
  1988. data: ["日发电量", "上网电量", "预测电量"],
  1989. textStyle: {
  1990. color: theme ? "#1850B3" : "#fff",
  1991. },
  1992. selected: legendState,
  1993. },
  1994. xAxis: [
  1995. {
  1996. type: "category",
  1997. axisTick: {
  1998. show: false,
  1999. },
  2000. data: xAxis,
  2001. axisLine: {
  2002. lineStyle: {
  2003. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  2004. },
  2005. },
  2006. },
  2007. ],
  2008. yAxis: [
  2009. {
  2010. type: "value",
  2011. splitLine: {
  2012. lineStyle: {
  2013. color: this.$store.state.theme ? "#000" : "#ccc",
  2014. type: "dashed", // 修改为虚线
  2015. opacity: 0.2,
  2016. },
  2017. },
  2018. name: "单位:万KWh",
  2019. axisLine: {
  2020. lineStyle: {
  2021. color: theme ? "#1850B3" : "#fff",
  2022. },
  2023. },
  2024. },
  2025. ],
  2026. series: series,
  2027. };
  2028. if (!this.theme) {
  2029. option.backgroundColor = "";
  2030. }
  2031. // 基于准备好的dom,初始化echarts实例
  2032. let dom = document.getElementById("monthPowers");
  2033. dom && dom.removeAttribute("_echarts_instance_");
  2034. myChart = this.$echarts.init(dom);
  2035. this.chartMonthOptions = myChart;
  2036. myChart.setOption(option);
  2037. window.addEventListener("resize", () => {
  2038. myChart.resize();
  2039. });
  2040. },
  2041. renderWeatherDialogChart(onlyRenderOneDay = false) {
  2042. this.$nextTick(() => {
  2043. if (onlyRenderOneDay) {
  2044. this.renderOneDay();
  2045. } else {
  2046. this.renderOneDay();
  2047. this.renderFtDay();
  2048. }
  2049. });
  2050. },
  2051. renderOneDay() {
  2052. const that = this;
  2053. // 取出 24小时 数据内所有温度,用于给图表指定 MAX 与 MIN 值
  2054. // X轴轴线刻度文字
  2055. const oneDayXAxisData = [];
  2056. // 图表主数据
  2057. const oneDayChartData = [];
  2058. // 取出每条数据内的温度描述,比如晴、阴、小雨,以便后续渲染 tooltip 内的 svg
  2059. const oneDayTemperatureDescList = [];
  2060. let dom = null;
  2061. let option = null;
  2062. dom = document.getElementById("oneDayChart");
  2063. dom && dom.removeAttribute("_echarts_instance_");
  2064. that.weatherObj?.tq24?.forEach((ele) => {
  2065. oneDayXAxisData.push(
  2066. String(DAYJS(ele.recordDate).hour()) === String(DAYJS().hour())
  2067. ? "现在"
  2068. : String(DAYJS(ele.recordDate).hour())
  2069. );
  2070. if (that.weatherChartActiveTab === "wd") {
  2071. oneDayChartData.push(Number(ele.temperature));
  2072. oneDayTemperatureDescList.push(ele.weather);
  2073. } else if (that.weatherChartActiveTab === "jsl") {
  2074. oneDayChartData.push(Number(ele.precipitation));
  2075. oneDayTemperatureDescList.push(ele.precipitation);
  2076. } else if (that.weatherChartActiveTab === "flfx") {
  2077. oneDayChartData.push(Number(ele.windPower));
  2078. oneDayTemperatureDescList.push(ele);
  2079. } else if (that.weatherChartActiveTab === "kqzl") {
  2080. oneDayChartData.push(Number(ele.listaqival || 0));
  2081. oneDayTemperatureDescList.push(ele.listval || "");
  2082. }
  2083. });
  2084. option = {
  2085. title: {
  2086. text: "",
  2087. textStyle: {
  2088. fontSize: "14",
  2089. fontWeight: 400,
  2090. color: "#fff",
  2091. },
  2092. },
  2093. grid: {
  2094. // 让图表占满容器
  2095. top: "10px",
  2096. left: "90px",
  2097. right: "50px",
  2098. bottom: "30px",
  2099. },
  2100. tooltip: {
  2101. trigger: "axis",
  2102. backgroundColor: "rgba(0, 0, 0, 0.4)",
  2103. formatter(params) {
  2104. const dom = `
  2105. <div class="weaterChartToolTipBox">
  2106. <div class="item">${that.getWeatherChartIcon(
  2107. that.weatherChartActiveTab,
  2108. oneDayTemperatureDescList[params[0].dataIndex]
  2109. )}</div>
  2110. <div class="item">${that.getWeatherChartUnit(
  2111. oneDayTemperatureDescList[params[0].dataIndex],
  2112. params[0].value
  2113. )}</div>
  2114. </div>`;
  2115. return dom;
  2116. },
  2117. },
  2118. xAxis: {
  2119. show: true,
  2120. type: "category",
  2121. boundaryGap: false,
  2122. data: oneDayXAxisData,
  2123. axisLine: {
  2124. show: false, // 不显示坐标轴线
  2125. },
  2126. axisTick: {
  2127. show: false, // 不显示坐标轴刻度线
  2128. },
  2129. axisLabel: {
  2130. fontSize: 14,
  2131. color: "#fff", //
  2132. formatter(value) {
  2133. return value === "现在" ? value : `${value}:00`;
  2134. },
  2135. margin: 10,
  2136. },
  2137. },
  2138. yAxis: {
  2139. type: "value",
  2140. min:
  2141. Math.min(...oneDayChartData) - 1 <= 0
  2142. ? Math.min(...oneDayChartData)
  2143. : Math.min(...oneDayChartData) - 1,
  2144. max: Math.max(...oneDayChartData) + 1,
  2145. splitNumber: 1, // 控制 Y 轴的最大刻度数量
  2146. axisLine: {
  2147. show: false, // 不显示坐标轴线
  2148. },
  2149. axisTick: {
  2150. show: false, // 不显示坐标轴刻度线
  2151. },
  2152. axisLabel: {
  2153. fontSize: 14,
  2154. color: "#fff", // 设置 Y 轴文字颜色为红色
  2155. formatter: `{value} ${
  2156. that.weatherChartActiveTab === "wd"
  2157. ? "℃"
  2158. : that.weatherChartActiveTab === "jsl"
  2159. ? "mm"
  2160. : that.weatherChartActiveTab === "flfx"
  2161. ? "级"
  2162. : that.weatherChartActiveTab === "kqzl"
  2163. ? "μm"
  2164. : ""
  2165. }`,
  2166. margin: 30,
  2167. },
  2168. splitLine: {
  2169. show: false, // 不显示网格线
  2170. },
  2171. },
  2172. series: [
  2173. {
  2174. data: oneDayChartData,
  2175. symbolSize: 10,
  2176. type: "line",
  2177. // 设置标记点的形状为圆圈
  2178. symbol: "circle",
  2179. itemStyle: {
  2180. normal: {
  2181. // 折点区域颜色
  2182. color: "rgba(255, 255, 255, 0.1)",
  2183. // 折点的边线颜色
  2184. borderColor: "#fff",
  2185. // 折点的边线宽度
  2186. borderWidth: 2,
  2187. },
  2188. },
  2189. // 设置折线颜色
  2190. lineStyle: {
  2191. normal: {
  2192. color: "#fff",
  2193. },
  2194. },
  2195. areaStyle: {
  2196. normal: {
  2197. color: "rgba(255, 255, 255, 0.5)",
  2198. },
  2199. },
  2200. },
  2201. ],
  2202. dataZoom: [
  2203. {
  2204. // 这部分是dataZoom的配置
  2205. type: "inside", // 表示这是 inside 类型
  2206. start: 0, // 数据窗口范围的起始百分比
  2207. end: 100, // 数据窗口范围的结束百分比
  2208. },
  2209. ],
  2210. };
  2211. if (dom) {
  2212. let myChart = this.$echarts.init(dom);
  2213. myChart.setOption(option);
  2214. window.addEventListener("resize", () => {
  2215. myChart.resize();
  2216. });
  2217. }
  2218. },
  2219. renderFtDay() {
  2220. const that = this;
  2221. let dom = null;
  2222. let option = null;
  2223. dom = document.getElementById("ftDayChart");
  2224. dom && dom.removeAttribute("_echarts_instance_");
  2225. let tqXData = [];
  2226. let tqxNightData = [];
  2227. let flfxXData = [];
  2228. let rqXData = [];
  2229. let zjXData = [];
  2230. let dayData = [];
  2231. let nightData = [];
  2232. this.weatherObj?.["tq15"]?.records?.forEach((ele) => {
  2233. const itemDate = ele.recordDate.split("-");
  2234. tqXData.push(`${ele.weather}, ${ele.temperatureDay}℃`);
  2235. tqxNightData.push(`${ele.weatherNight}`);
  2236. flfxXData.push(`${ele.windDirection},${ele.windPower}级`);
  2237. rqXData.push(`${itemDate[1]}/${itemDate[2]}`);
  2238. zjXData.push(this.getWeekDay(ele.recordDate));
  2239. dayData.push(ele.temperatureDay);
  2240. nightData.push(ele.temperatureNight);
  2241. });
  2242. option = {
  2243. tooltip: {
  2244. show: false,
  2245. },
  2246. grid: {
  2247. // 让图表占满容器
  2248. top: "80px",
  2249. left: "10px",
  2250. right: "10px",
  2251. bottom: "80px",
  2252. },
  2253. xAxis: [
  2254. // 下方第一条 X 轴,天气
  2255. {
  2256. type: "category",
  2257. position: "bottom",
  2258. data: tqXData,
  2259. axisLine: {
  2260. show: false, // 不显示坐标轴线
  2261. },
  2262. axisTick: {
  2263. show: true, // 控制轴线是否显示
  2264. inside: true,
  2265. length: 99999,
  2266. lineStyle: {
  2267. color: "rgba(255, 255, 255, 0.15)", // 轴线颜色
  2268. width: 2, // 轴线宽度
  2269. type: "solid", // 轴线类型
  2270. },
  2271. },
  2272. axisLabel: {
  2273. fontSize: 14,
  2274. color: "#fff", //
  2275. margin: 5,
  2276. },
  2277. },
  2278. // 下方第二条 X 轴,风力风向
  2279. {
  2280. type: "category",
  2281. position: "bottom",
  2282. axisTick: {
  2283. alignWithLabel: true,
  2284. },
  2285. axisLine: {
  2286. show: false, // 不显示坐标轴线
  2287. },
  2288. axisTick: {
  2289. show: false, // 不显示坐标轴刻度线
  2290. },
  2291. axisLabel: {
  2292. fontSize: 14,
  2293. color: "#fff", //
  2294. margin: 45,
  2295. },
  2296. data: flfxXData,
  2297. },
  2298. // 上方第一条 X 轴,日期
  2299. {
  2300. type: "category",
  2301. position: "top",
  2302. data: rqXData,
  2303. axisLine: {
  2304. show: false, // 不显示坐标轴线
  2305. },
  2306. axisTick: {
  2307. show: false, // 不显示坐标轴刻度线
  2308. },
  2309. axisLabel: {
  2310. fontSize: 14,
  2311. color: "#fff", //
  2312. margin: 5,
  2313. },
  2314. },
  2315. // 上方第二条 X 轴,周几
  2316. {
  2317. type: "category",
  2318. position: "top",
  2319. axisTick: {
  2320. alignWithLabel: true,
  2321. },
  2322. axisLine: {
  2323. show: false, // 不显示坐标轴线
  2324. },
  2325. axisTick: {
  2326. show: false, // 不显示坐标轴刻度线
  2327. },
  2328. axisLabel: {
  2329. fontSize: 14,
  2330. color: "#fff", //
  2331. margin: 45,
  2332. },
  2333. data: zjXData,
  2334. },
  2335. ],
  2336. yAxis: [
  2337. {
  2338. show: false,
  2339. type: "value",
  2340. splitNumber: 2, // 控制 Y 轴的最大刻度数量
  2341. axisLine: {
  2342. show: false, // 不显示坐标轴线
  2343. },
  2344. axisTick: {
  2345. show: false, // 不显示坐标轴刻度线
  2346. },
  2347. axisLabel: {
  2348. fontSize: 14,
  2349. color: "#fff", // 设置 Y 轴文字颜色为红色
  2350. margin: 30,
  2351. },
  2352. splitLine: {
  2353. show: false, // 不显示网格线
  2354. },
  2355. axisLabel: {
  2356. fontSize: 14,
  2357. color: "#fff", //
  2358. },
  2359. },
  2360. ],
  2361. series: [
  2362. {
  2363. type: "line",
  2364. name: "数据1",
  2365. smooth: 0.5,
  2366. data: dayData,
  2367. symbolSize: 10,
  2368. // 设置标记点的形状为圆圈
  2369. symbol: "circle",
  2370. itemStyle: {
  2371. normal: {
  2372. // 折点区域颜色
  2373. color: "rgba(255, 255, 255, 0.1)",
  2374. // 折点的边线颜色
  2375. borderColor: "#fff",
  2376. // 折点的边线宽度
  2377. borderWidth: 2,
  2378. },
  2379. },
  2380. // 设置折线颜色
  2381. lineStyle: {
  2382. normal: {
  2383. color: "#fff",
  2384. },
  2385. },
  2386. },
  2387. {
  2388. type: "line",
  2389. name: "数据2",
  2390. smooth: 0.5,
  2391. data: nightData,
  2392. xAxisIndex: 1, // 指定使用第二个X轴
  2393. symbolSize: 10,
  2394. // 设置标记点的形状为圆圈
  2395. symbol: "circle",
  2396. itemStyle: {
  2397. normal: {
  2398. // 折点区域颜色
  2399. color: "rgba(255, 255, 255, 0.1)",
  2400. // 折点的边线颜色
  2401. borderColor: "#fff",
  2402. // 折点的边线宽度
  2403. borderWidth: 2,
  2404. },
  2405. },
  2406. // 设置折线颜色
  2407. lineStyle: {
  2408. normal: {
  2409. color: "#fff",
  2410. },
  2411. },
  2412. },
  2413. ],
  2414. dataZoom: [
  2415. {
  2416. // 这部分是dataZoom的配置
  2417. type: "inside", // 表示这是 inside 类型
  2418. start: 0, // 数据窗口范围的起始百分比
  2419. end: 60, // 数据窗口范围的结束百分比
  2420. },
  2421. ],
  2422. tooltip: {
  2423. trigger: "axis",
  2424. backgroundColor: "rgba(0, 0, 0, 0.4)",
  2425. formatter(params) {
  2426. tqXData[params[0].dataIndex];
  2427. const dom = `
  2428. <div class="weaterChartToolTipBox">
  2429. <div class="item">白天${tqXData[params[0].dataIndex]}</div>
  2430. <div class="item" style="margin-top: 4px">夜晚${
  2431. tqxNightData[params[1].dataIndex]
  2432. }, ${params[1].value}℃</div>
  2433. <div class="item" style="margin-top: 4px">早晚温差 ${
  2434. params[0].value - params[1].value
  2435. }℃</div>
  2436. </div>`;
  2437. return dom;
  2438. },
  2439. },
  2440. };
  2441. if (dom) {
  2442. let myChart = this.$echarts.init(dom);
  2443. myChart.setOption(option);
  2444. window.addEventListener("resize", () => {
  2445. myChart.resize();
  2446. });
  2447. }
  2448. },
  2449. getWeatherChartIcon(type, weather, iconsize) {
  2450. let res = "";
  2451. if (type === "wd") {
  2452. if (weather === "晴") {
  2453. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2454. iconsize || 30
  2455. }px; height: ${
  2456. iconsize || 30
  2457. }px;"><path fill="#fff" d="M512 704a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m0-704a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 768a32 32 0 0 1 32 32v64a32 32 0 1 1-64 0v-64a32 32 0 0 1 32-32M195.2 195.2a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 1 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm543.104 543.104a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 0 1-45.248 45.248l-45.248-45.248a32 32 0 0 1 0-45.248M64 512a32 32 0 0 1 32-32h64a32 32 0 0 1 0 64H96a32 32 0 0 1-32-32m768 0a32 32 0 0 1 32-32h64a32 32 0 1 1 0 64h-64a32 32 0 0 1-32-32M195.2 828.8a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248L240.448 828.8a32 32 0 0 1-45.248 0zm543.104-543.104a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248l-45.248 45.248a32 32 0 0 1-45.248 0"></path></svg>`;
  2458. } else if (
  2459. weather.indexOf("阴") !== -1 ||
  2460. weather.indexOf("多云") !== -1
  2461. ) {
  2462. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2463. iconsize || 30
  2464. }px; height: ${
  2465. iconsize || 30
  2466. }px;"><path fill="#fff" d="M598.4 895.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 895.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 445.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z"></path><path fill="currentColor" d="M139.84 501.888a256 256 0 1 1 417.856-277.12c-17.728 2.176-38.208 8.448-61.504 18.816A192 192 0 1 0 189.12 460.48a6003.84 6003.84 0 0 0-49.28 41.408z"></path></svg>`;
  2467. } else if (weather.indexOf("雾") !== -1) {
  2468. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2469. iconsize || 30
  2470. }px; height: ${
  2471. iconsize || 30
  2472. }px;"><path fill="#fff" d="M737.216 357.952 704 349.824l-11.776-32a192.064 192.064 0 0 0-367.424 23.04l-8.96 39.04-39.04 8.96A192.064 192.064 0 0 0 320 768h368a207.808 207.808 0 0 0 207.808-208 208.32 208.32 0 0 0-158.592-202.048m15.168-62.208A272.32 272.32 0 0 1 959.744 560a271.808 271.808 0 0 1-271.552 272H320a256 256 0 0 1-57.536-505.536 256.128 256.128 0 0 1 489.92-30.72"></path></svg>`;
  2473. } else if (weather.indexOf("雨") !== -1) {
  2474. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2475. iconsize || 30
  2476. }px; height: ${
  2477. iconsize || 30
  2478. }px;"><path fill="#fff" d="m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M224 800a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32"></path></svg>`;
  2479. } else if (weather.indexOf("雪") !== -1) {
  2480. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2481. iconsize || 30
  2482. }px; height: ${
  2483. iconsize || 30
  2484. }px;"><path fill="#fff" d="m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M288 800h64v64h-64zm192 0h64v64h-64zm-96 96h64v64h-64zm192 0h64v64h-64zm96-96h64v64h-64z"></path></svg>`;
  2485. }
  2486. } else if (type === "jsl") {
  2487. res = `<div style="width: 100%;
  2488. display: flex;
  2489. justify-content: center;
  2490. align-items: center;">
  2491. <div style="width: 18px;
  2492. height: 23px;
  2493. background:url(${waterIcon});
  2494. background-position: 0px ${
  2495. Number(weather) === 0 ? "0" : "231"
  2496. }px;
  2497. display: block;
  2498. outline: none;">
  2499. </div>
  2500. </div>`;
  2501. } else if (type === "flfx") {
  2502. const windIconMap = {
  2503. 东北风: 0,
  2504. 东风: 1,
  2505. 东南风: 2,
  2506. 南风: 3,
  2507. 西南风: 4,
  2508. 西风: 5,
  2509. 西北风: 6,
  2510. 北风: 7,
  2511. };
  2512. res = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" style="width: ${
  2513. iconsize || 30
  2514. }px; height: ${iconsize || 30}px; transform: rotate(${
  2515. windIconMap[weather.windDirection] * 45 || 0
  2516. }deg); transform-origin: center center;"><path fill="#fff" d="m249.6 417.088 319.744 43.072 39.168 310.272L845.12 178.88 249.6 417.088zm-129.024 47.168a32 32 0 0 1-7.68-61.44l777.792-311.04a32 32 0 0 1 41.6 41.6l-310.336 775.68a32 32 0 0 1-61.44-7.808L512 516.992l-391.424-52.736z"></path></svg>`;
  2517. } else if (type === "kqzl") {
  2518. res = `<div style="width: 100%;
  2519. display: flex;
  2520. justify-content: center;
  2521. align-items: center;">${weather}</div>`;
  2522. }
  2523. return res;
  2524. },
  2525. getWeatherChartUnit(weather, weatherValue) {
  2526. let unit = "";
  2527. const type = this.weatherChartActiveTab;
  2528. if (type === "wd") {
  2529. unit = `${weather} , ${weatherValue}℃`;
  2530. } else if (type === "jsl") {
  2531. unit = `${
  2532. Number(weatherValue) === 0
  2533. ? "无降水"
  2534. : "降水量 " + weatherValue + " mm"
  2535. }`;
  2536. } else if (type === "flfx") {
  2537. unit = `${weather.windDirection} , ${weather.windPower}级`;
  2538. } else if (type === "kqzl") {
  2539. unit = `${weatherValue}μm`;
  2540. }
  2541. return unit;
  2542. },
  2543. getPowerLine(
  2544. xAxis,
  2545. series,
  2546. powerMin,
  2547. powerMax,
  2548. windSpeedMin,
  2549. windSpeedMax,
  2550. splitNumber
  2551. ) {
  2552. const theme = sessionStorage.getItem("theme") === "true" ? true : false;
  2553. let myChart;
  2554. let legendState = {};
  2555. if (this.chart72Options?.getOption) {
  2556. legendState = this.chart72Options.getOption().legend[0].selected;
  2557. }
  2558. let option = {
  2559. animation: this.isFirstLoad,
  2560. title: {
  2561. text: "72小时功率曲线",
  2562. left: "5px",
  2563. top: "5px",
  2564. textStyle: {
  2565. fontSize: "16",
  2566. fontWeight: 400,
  2567. color: theme ? "#1850B3" : "#fff",
  2568. },
  2569. },
  2570. tooltip: {
  2571. trigger: "axis",
  2572. },
  2573. color: ["#7981AF", "#1C99FF", "#E57F25", "#f25656"],
  2574. legend: {
  2575. right: "5",
  2576. top: "5",
  2577. itemWidth: 5,
  2578. itemHeight: 5,
  2579. data: ["平均风速", "应发功率", "实际功率", "预测功率"],
  2580. textStyle: {
  2581. color: theme ? "#1850B3" : "#fff",
  2582. },
  2583. selected: legendState,
  2584. },
  2585. grid: {
  2586. left: "2%",
  2587. right: "2%",
  2588. bottom: "5%",
  2589. height: "110px",
  2590. containLabel: true,
  2591. },
  2592. xAxis: {
  2593. type: "category",
  2594. boundaryGap: false,
  2595. data: xAxis,
  2596. axisLine: {
  2597. lineStyle: {
  2598. color: theme ? "#1850B3" : "#fff", // 修改为需要的颜色
  2599. },
  2600. },
  2601. },
  2602. yAxis: [
  2603. {
  2604. type: "value",
  2605. splitLine: {
  2606. lineStyle: {
  2607. color: this.$store.state.theme ? "#000" : "#ccc",
  2608. type: "dashed", // 修改为虚线
  2609. opacity: 0.2,
  2610. },
  2611. },
  2612. name: "单位:MW",
  2613. axisLine: {
  2614. lineStyle: {
  2615. color: theme ? "#1850B3" : "#fff",
  2616. },
  2617. },
  2618. min: powerMin,
  2619. max: powerMax, // 动态设置最大值
  2620. interval: parseFloat(
  2621. ((powerMax - powerMin) / splitNumber).toFixed(4)
  2622. ),
  2623. splitNumber,
  2624. axisLabel: {
  2625. formatter(value) {
  2626. return parseInt(value);
  2627. },
  2628. },
  2629. },
  2630. {
  2631. type: "value",
  2632. splitLine: {
  2633. lineStyle: {
  2634. color: this.$store.state.theme ? "#000" : "#ccc",
  2635. type: "dashed", // 修改为虚线
  2636. opacity: 0.2,
  2637. },
  2638. },
  2639. name: "单位:m/s",
  2640. axisLine: {
  2641. lineStyle: {
  2642. color: theme ? "#1850B3" : "#fff",
  2643. },
  2644. },
  2645. min: windSpeedMin,
  2646. max: windSpeedMax, // 动态设置最大值
  2647. splitNumber,
  2648. interval: parseFloat(
  2649. ((windSpeedMax - windSpeedMin) / splitNumber).toFixed(4)
  2650. ),
  2651. axisLabel: {
  2652. formatter(value) {
  2653. return parseFloat(value.toFixed(1));
  2654. },
  2655. },
  2656. },
  2657. ],
  2658. series: series,
  2659. };
  2660. if (!this.theme) {
  2661. option.backgroundColor = "";
  2662. }
  2663. // 基于准备好的dom,初始化echarts实例
  2664. let dom = document.getElementById("hover72Powers");
  2665. dom && dom.removeAttribute("_echarts_instance_");
  2666. myChart = this.$echarts.init(dom);
  2667. this.chart72Options = myChart;
  2668. myChart.setOption(option);
  2669. window.addEventListener("resize", () => {
  2670. myChart.resize();
  2671. });
  2672. },
  2673. getWeekDay(date = "") {
  2674. let returnValue = "";
  2675. if (date) {
  2676. const zjMap = {
  2677. 0: "周日",
  2678. 1: "周一",
  2679. 2: "周二",
  2680. 3: "周三",
  2681. 4: "周四",
  2682. 5: "周五",
  2683. 6: "周六",
  2684. };
  2685. returnValue = zjMap[DAYJS(date).day()];
  2686. }
  2687. return returnValue;
  2688. },
  2689. },
  2690. };
  2691. </script>
  2692. <style lang="less">
  2693. .currentDialog {
  2694. &.weather {
  2695. position: relative;
  2696. font-family: PingFangSC-Regular;
  2697. .weatherHeader {
  2698. display: flex;
  2699. justify-content: space-between;
  2700. align-items: center;
  2701. .city {
  2702. font-size: 20px;
  2703. margin-right: 15px;
  2704. color: #fff;
  2705. }
  2706. span {
  2707. font-size: 14px;
  2708. color: #fff;
  2709. &.mr {
  2710. margin-right: 15px;
  2711. }
  2712. }
  2713. }
  2714. .el-dialog__body {
  2715. padding: 0 !important;
  2716. .wBox {
  2717. width: 100%;
  2718. height: 850px;
  2719. color: #fff;
  2720. margin-top: 15px;
  2721. .weatherInfo {
  2722. width: 100%;
  2723. display: flex;
  2724. justify-content: flex-start;
  2725. align-items: center;
  2726. .wd {
  2727. font-size: 79px;
  2728. }
  2729. .desc {
  2730. margin-left: 30px;
  2731. display: flex;
  2732. justify-content: flex-start;
  2733. align-items: center;
  2734. flex-wrap: wrap;
  2735. .item {
  2736. width: 100%;
  2737. display: flex;
  2738. justify-content: flex-start;
  2739. align-items: center;
  2740. font-size: 14px;
  2741. span {
  2742. margin-right: 10px;
  2743. }
  2744. &:last-child {
  2745. margin-top: 10px;
  2746. }
  2747. }
  2748. }
  2749. }
  2750. .ybBox {
  2751. box-sizing: border-box;
  2752. width: 100%;
  2753. background: rgba(0, 0, 0, 0.1);
  2754. padding: 22px 17px 17px 17px;
  2755. margin-top: 10px;
  2756. .ycTop {
  2757. width: 100%;
  2758. display: flex;
  2759. justify-content: space-between;
  2760. align-items: center;
  2761. .title {
  2762. font-size: 18px;
  2763. }
  2764. .tabs {
  2765. display: flex;
  2766. justify-content: flex-start;
  2767. align-items: center;
  2768. .item {
  2769. padding: 5px 15px;
  2770. color: rgba(255, 255, 255, 0.6);
  2771. transition: 0.2s;
  2772. cursor: pointer;
  2773. &:hover {
  2774. color: #fff;
  2775. }
  2776. &.active {
  2777. color: #fff;
  2778. background: rgba(255, 255, 255, 0.3);
  2779. border-radius: 14px;
  2780. transition: 0.2s;
  2781. }
  2782. }
  2783. }
  2784. }
  2785. }
  2786. }
  2787. }
  2788. .weaterChartToolTipBox {
  2789. border-radius: 4px;
  2790. font-size: 14px;
  2791. display: flex;
  2792. justify-content: center;
  2793. align-items: center;
  2794. flex-wrap: wrap;
  2795. color: #fff;
  2796. .item {
  2797. width: 100%;
  2798. display: flex;
  2799. justify-content: center;
  2800. align-items: center;
  2801. font-size: 14px;
  2802. &:last-child {
  2803. margin-top: 4px;
  2804. }
  2805. }
  2806. }
  2807. .weatherSun {
  2808. position: absolute;
  2809. left: 160px;
  2810. top: 0;
  2811. width: 100%;
  2812. height: 498px;
  2813. animation: sunMove 1s;
  2814. animation-fill-mode: forwards;
  2815. pointer-events: none;
  2816. }
  2817. @keyframes sunMove {
  2818. 0% {
  2819. left: 80px;
  2820. }
  2821. 100% {
  2822. left: 200px;
  2823. }
  2824. }
  2825. }
  2826. }
  2827. </style>
  2828. <style lang="less">
  2829. .homePage {
  2830. height: 100%;
  2831. .cur {
  2832. cursor: pointer;
  2833. }
  2834. .homeMain {
  2835. display: flex;
  2836. width: 100%;
  2837. height: 74vh;
  2838. .comHeader {
  2839. width: 100%;
  2840. height: 28px;
  2841. display: flex;
  2842. .headerLeft {
  2843. height: 28px;
  2844. width: 20px;
  2845. position: relative;
  2846. .gray {
  2847. position: absolute;
  2848. left: 5px;
  2849. top: 3px;
  2850. display: inline-block;
  2851. width: 5px;
  2852. height: 5px;
  2853. background: #cbd2e2;
  2854. }
  2855. .blue {
  2856. position: absolute;
  2857. left: 5px;
  2858. top: 20px;
  2859. display: inline-block;
  2860. width: 5px;
  2861. height: 5px;
  2862. background: #1c99ff;
  2863. transform: rotate(45deg);
  2864. }
  2865. }
  2866. .headerRight {
  2867. width: calc(100% - 30px);
  2868. height: 28px;
  2869. position: relative;
  2870. .headerName {
  2871. font-family: Microsoft YaHei;
  2872. font-weight: 400;
  2873. font-size: 16px;
  2874. color: #ffffff;
  2875. line-height: 28px;
  2876. margin-left: 10px;
  2877. }
  2878. .headerNaAll {
  2879. display: flex;
  2880. justify-content: space-between;
  2881. .headerNa {
  2882. font-family: Microsoft YaHei;
  2883. font-weight: 400;
  2884. font-size: 16px;
  2885. color: #ffffff;
  2886. line-height: 28px;
  2887. margin-left: 10px;
  2888. }
  2889. .headerNa2 {
  2890. font-family: Microsoft YaHei;
  2891. font-weight: 400;
  2892. font-size: 12px;
  2893. line-height: 28px;
  2894. margin-right: 8px;
  2895. }
  2896. }
  2897. .headerZs {
  2898. display: inline-block;
  2899. position: absolute;
  2900. right: 0;
  2901. top: 22px;
  2902. width: 32px;
  2903. height: 6px;
  2904. .headerZsN {
  2905. position: relative;
  2906. top: -8px;
  2907. left: 2px;
  2908. display: inline-block;
  2909. width: 30px;
  2910. height: 4px;
  2911. }
  2912. }
  2913. }
  2914. }
  2915. .leftMain {
  2916. width: 25%;
  2917. height: 100%;
  2918. margin-left: 20px;
  2919. .weather {
  2920. margin-bottom: 30px;
  2921. .weatherMain {
  2922. margin-top: 15px;
  2923. .weatherMain_top {
  2924. display: flex;
  2925. .wetherImg {
  2926. margin: 9px 0 0 25px;
  2927. }
  2928. .wetherMsg {
  2929. margin-left: 21px;
  2930. .wetherMsg_Du {
  2931. font-family: SourceHanSansCN;
  2932. font-weight: 400;
  2933. font-size: 30px;
  2934. }
  2935. .wetherMsg_Det {
  2936. display: flex;
  2937. span {
  2938. font-family: Microsoft YaHei;
  2939. font-weight: 400;
  2940. font-size: 14px;
  2941. margin-right: 25px;
  2942. }
  2943. }
  2944. }
  2945. }
  2946. .weatherMain_bot {
  2947. display: flex;
  2948. justify-content: space-around;
  2949. margin-top: 18px;
  2950. .weaMain {
  2951. text-align: center;
  2952. .pOne {
  2953. font-family: SourceHanSansCN;
  2954. font-weight: 400;
  2955. font-size: 14px;
  2956. line-height: 28px;
  2957. }
  2958. .pTwo {
  2959. font-family: Microsoft YaHei;
  2960. font-weight: 400;
  2961. font-size: 14px;
  2962. }
  2963. }
  2964. }
  2965. }
  2966. }
  2967. .Electric {
  2968. margin-bottom: 30px;
  2969. .electricMain {
  2970. padding-top: 20px;
  2971. .electricMain_day,
  2972. .electricMain_month {
  2973. .powerCharts {
  2974. position: relative;
  2975. display: flex;
  2976. flex-direction: row;
  2977. align-items: flex-end;
  2978. width: 100%;
  2979. margin-top: 5px;
  2980. margin-left: 10px;
  2981. .powerName {
  2982. position: absolute;
  2983. left: 30px;
  2984. top: -8px;
  2985. font-family: Microsoft YaHei;
  2986. font-weight: 400;
  2987. font-size: 14px;
  2988. line-height: 28px;
  2989. }
  2990. .powerItem {
  2991. display: flex;
  2992. width: 100%;
  2993. .powerValue {
  2994. font-size: 12px;
  2995. font-family: Bicubik;
  2996. position: relative;
  2997. left: 3px;
  2998. top: 17px;
  2999. span:nth-child(1) {
  3000. width: 5px;
  3001. height: 5px;
  3002. border-radius: 5px;
  3003. display: inline-block;
  3004. margin-right: 5px;
  3005. }
  3006. span:nth-child(2) {
  3007. font-family: Bicubik;
  3008. font-weight: 400;
  3009. font-size: 12px;
  3010. position: relative;
  3011. top: 2px;
  3012. }
  3013. }
  3014. }
  3015. }
  3016. }
  3017. }
  3018. }
  3019. .power {
  3020. .powerMain {
  3021. margin-top: 10px;
  3022. }
  3023. }
  3024. }
  3025. .map {
  3026. width: 50%;
  3027. height: 100%;
  3028. position: relative;
  3029. .infoBox {
  3030. width: 0;
  3031. position: absolute;
  3032. left: 0.5%;
  3033. top: 8%;
  3034. transition: 0.35s;
  3035. overflow: hidden;
  3036. padding: 10px 0;
  3037. border: 0;
  3038. border-radius: 12px;
  3039. border: 2px solid rgba(#1850b3, 0);
  3040. box-shadow: 5px 5px 10px 0 rgba(#000, 0);
  3041. .el-button {
  3042. display: block;
  3043. font-size: 18px;
  3044. margin: 0;
  3045. }
  3046. p {
  3047. font-size: 16px;
  3048. margin-top: 12px;
  3049. white-space: nowrap;
  3050. color: #666;
  3051. user-select: none;
  3052. height: 21px;
  3053. .loadingIcon {
  3054. animation: loading 2.5s infinite;
  3055. animation-timing-function: linear;
  3056. }
  3057. }
  3058. &.show {
  3059. padding: 10px;
  3060. width: 150px;
  3061. transition: 0.35s;
  3062. border: 2px solid rgba(#1850b3, 0.25);
  3063. box-shadow: 5px 5px 10px 0 rgba(#000, 0.5);
  3064. }
  3065. }
  3066. @keyframes loading {
  3067. 0% {
  3068. transform: rotate(0deg);
  3069. transform-origin: center center;
  3070. }
  3071. 100% {
  3072. transform: rotate(360deg);
  3073. transform-origin: center center;
  3074. }
  3075. }
  3076. .dingbian,
  3077. .jingbian {
  3078. font-family: Microsoft YaHei;
  3079. font-weight: 400;
  3080. font-size: 18px;
  3081. line-height: 35px;
  3082. }
  3083. .dingbian {
  3084. position: absolute;
  3085. top: 68%;
  3086. left: 15%;
  3087. }
  3088. .jingbian {
  3089. position: absolute;
  3090. top: 30%;
  3091. left: 67%;
  3092. }
  3093. .fengjiSty {
  3094. position: absolute;
  3095. width: 40px;
  3096. cursor: pointer;
  3097. .mainSv {
  3098. position: relative;
  3099. width: 40px;
  3100. .quanImg {
  3101. position: absolute;
  3102. left: 5px;
  3103. bottom: -2px;
  3104. }
  3105. .fengjiBackImg {
  3106. position: absolute;
  3107. bottom: -2px;
  3108. left: -5px;
  3109. }
  3110. .dianSty {
  3111. display: inline-block;
  3112. width: 6px;
  3113. height: 7px;
  3114. border-radius: 50%;
  3115. position: absolute;
  3116. left: 3px;
  3117. }
  3118. }
  3119. .mainMsg {
  3120. width: 105px;
  3121. height: 30px;
  3122. background-image: url("@/assets/images/indexCom/tixing.png");
  3123. background-repeat: no-repeat;
  3124. position: absolute;
  3125. bottom: -7px;
  3126. left: -98px;
  3127. span {
  3128. font-family: Microsoft YaHei;
  3129. font-weight: 400;
  3130. font-size: 14px;
  3131. color: #ffffff;
  3132. line-height: 23px;
  3133. position: relative;
  3134. left: 6px;
  3135. top: 2px;
  3136. }
  3137. }
  3138. .mainMsgRotate {
  3139. transform: rotate(180deg);
  3140. left: 22%;
  3141. top: 97%;
  3142. span {
  3143. display: inline-block;
  3144. transform: rotate(180deg);
  3145. }
  3146. }
  3147. }
  3148. }
  3149. .rightMain {
  3150. width: 25%;
  3151. height: 100%;
  3152. margin-right: 20px;
  3153. .electricMain_day,
  3154. .electricMain_month {
  3155. .powerCharts {
  3156. position: relative;
  3157. display: flex;
  3158. flex-direction: row;
  3159. align-items: flex-end;
  3160. width: 100%;
  3161. margin-top: 5px;
  3162. margin-left: 10px;
  3163. .powerName {
  3164. position: absolute;
  3165. left: 30px;
  3166. top: -8px;
  3167. font-family: Microsoft YaHei;
  3168. font-weight: 400;
  3169. font-size: 14px;
  3170. line-height: 28px;
  3171. }
  3172. .powerItem {
  3173. display: flex;
  3174. width: 100%;
  3175. .powerValue {
  3176. font-size: 12px;
  3177. font-family: Bicubik;
  3178. position: relative;
  3179. left: 3px;
  3180. top: 17px;
  3181. span:nth-child(1) {
  3182. width: 5px;
  3183. height: 5px;
  3184. border-radius: 5px;
  3185. display: inline-block;
  3186. margin-right: 5px;
  3187. }
  3188. span:nth-child(2) {
  3189. font-family: Bicubik;
  3190. font-weight: 400;
  3191. font-size: 12px;
  3192. position: relative;
  3193. top: 2px;
  3194. }
  3195. }
  3196. }
  3197. }
  3198. }
  3199. .analysRadio {
  3200. margin: 16px 0 7px 20px;
  3201. .el-radio-group {
  3202. height: 28px;
  3203. .el-radio-button {
  3204. .el-radio-button__inner {
  3205. width: 48px;
  3206. }
  3207. }
  3208. }
  3209. }
  3210. .powerAnalysis {
  3211. .powerAnalysisMain {
  3212. .analysMain {
  3213. margin-left: 20px;
  3214. width: 100%;
  3215. display: flex;
  3216. .analysMain_left {
  3217. width: 50%;
  3218. .analLeftTop {
  3219. display: flex;
  3220. img {
  3221. width: 14px;
  3222. height: 14px;
  3223. position: relative;
  3224. top: 5px;
  3225. }
  3226. span {
  3227. font-family: Microsoft YaHei;
  3228. font-weight: 400;
  3229. font-size: 14px;
  3230. line-height: 28px;
  3231. margin-left: 3px;
  3232. }
  3233. }
  3234. .analLeftEcharts {
  3235. position: relative;
  3236. .echartsNum {
  3237. position: absolute;
  3238. top: 30%;
  3239. left: 38%;
  3240. font-family: Bicubik;
  3241. font-weight: 400;
  3242. font-size: 16px;
  3243. }
  3244. .echartsName {
  3245. position: absolute;
  3246. top: 50%;
  3247. left: 38%;
  3248. font-family: Microsoft YaHei;
  3249. font-weight: 400;
  3250. font-size: 14px;
  3251. }
  3252. }
  3253. .analLeftBot {
  3254. .analLeftBot_top {
  3255. display: flex;
  3256. .leftImg {
  3257. width: 36px;
  3258. height: 36px;
  3259. }
  3260. .analyleftbottopAll {
  3261. margin-left: 2px;
  3262. .analyleftbottopName {
  3263. position: relative;
  3264. top: -5px;
  3265. font-family: Microsoft YaHei;
  3266. font-weight: 400;
  3267. font-size: 14px;
  3268. line-height: 28px;
  3269. }
  3270. .analyleftbottopSty {
  3271. display: flex;
  3272. position: relative;
  3273. top: -13px;
  3274. span {
  3275. font-family: Bicubik;
  3276. font-weight: 400;
  3277. font-size: 16px;
  3278. line-height: 28px;
  3279. }
  3280. img {
  3281. width: 12px;
  3282. height: 12px;
  3283. position: relative;
  3284. top: 8px;
  3285. left: 8px;
  3286. }
  3287. }
  3288. }
  3289. }
  3290. }
  3291. }
  3292. }
  3293. }
  3294. .dlImgBox {
  3295. width: 100%;
  3296. height: 300px;
  3297. background: url("@/assets/images/headerCom/lyxs.png") no-repeat center
  3298. center;
  3299. background-size: 95%;
  3300. position: relative;
  3301. display: flex;
  3302. justify-content: center;
  3303. align-items: center;
  3304. color: #646972;
  3305. .label {
  3306. width: 100px;
  3307. display: inline-flex;
  3308. justify-content: flex-start;
  3309. align-items: center;
  3310. position: absolute;
  3311. font-size: 14px;
  3312. &.label1 {
  3313. left: 12.5%;
  3314. top: 19%;
  3315. }
  3316. &.label2 {
  3317. left: 6.5%;
  3318. top: 36.5%;
  3319. }
  3320. &.label3 {
  3321. left: 12.5%;
  3322. top: 53.5%;
  3323. }
  3324. &.label4 {
  3325. justify-content: flex-end;
  3326. left: 66%;
  3327. top: 19%;
  3328. }
  3329. &.label5 {
  3330. justify-content: flex-end;
  3331. left: 72.5%;
  3332. top: 36.5%;
  3333. }
  3334. &.label6 {
  3335. justify-content: flex-end;
  3336. left: 66%;
  3337. top: 54%;
  3338. }
  3339. &.label7 {
  3340. justify-content: center;
  3341. left: calc(50% - 50px);
  3342. top: calc(50% - 10px);
  3343. }
  3344. }
  3345. .zb {
  3346. display: inline-flex;
  3347. justify-content: center;
  3348. align-items: center;
  3349. width: 100px;
  3350. position: absolute;
  3351. color: rgb(23, 78, 179);
  3352. font-size: 16px;
  3353. font-weight: 700;
  3354. &.zb1 {
  3355. left: 9%;
  3356. top: 27%;
  3357. }
  3358. &.zb2 {
  3359. left: 2.5%;
  3360. top: 44%;
  3361. }
  3362. &.zb3 {
  3363. left: 9%;
  3364. top: 63%;
  3365. }
  3366. &.zb4 {
  3367. left: 69.5%;
  3368. top: 27%;
  3369. }
  3370. &.zb5 {
  3371. left: 76%;
  3372. top: 44%;
  3373. }
  3374. &.zb6 {
  3375. left: 69.5%;
  3376. top: 63%;
  3377. }
  3378. &.zb7 {
  3379. left: calc(50% - 50px);
  3380. top: calc(50% + 10px);
  3381. }
  3382. }
  3383. }
  3384. }
  3385. .powerPlan {
  3386. margin-top: 10px;
  3387. .powerPlanMain {
  3388. .planMain {
  3389. width: 100%;
  3390. display: flex;
  3391. justify-content: space-around;
  3392. .planMain_left {
  3393. width: calc(50% - 40px);
  3394. padding: 0 10px;
  3395. .analysMain_echarts {
  3396. width: 100%;
  3397. text-align: center;
  3398. }
  3399. .analysMain_Msg {
  3400. .analysMain_Msg_top {
  3401. display: flex;
  3402. justify-content: space-between;
  3403. width: 100%;
  3404. .analysMain_Msg_top_flex {
  3405. display: flex;
  3406. padding: 0 10px;
  3407. width: calc(100% - 20px);
  3408. span {
  3409. display: inline-block;
  3410. }
  3411. span:nth-child(1) {
  3412. width: 30px;
  3413. font-family: Microsoft YaHei;
  3414. font-weight: 400;
  3415. font-size: 14px;
  3416. line-height: 28px;
  3417. }
  3418. span:nth-child(2) {
  3419. font-family: Arial;
  3420. font-weight: 400;
  3421. font-size: 14px;
  3422. line-height: 28px;
  3423. }
  3424. }
  3425. }
  3426. .analysMain_Msg_bot {
  3427. // opacity: 0.5;
  3428. text-align: center;
  3429. span {
  3430. font-family: Microsoft YaHei;
  3431. font-weight: 400;
  3432. font-size: 14px;
  3433. line-height: 28px;
  3434. }
  3435. }
  3436. }
  3437. }
  3438. }
  3439. }
  3440. }
  3441. }
  3442. }
  3443. .footer {
  3444. display: flex;
  3445. justify-content: space-between;
  3446. padding: 0 36px;
  3447. width: calc(100% - 72px);
  3448. height: 19vh;
  3449. .hover72Power,
  3450. .monthPower {
  3451. width: calc(50% - 10px);
  3452. background: rgba(41, 45, 53, 0.4);
  3453. border-radius: 6px;
  3454. position: relative;
  3455. .hidBtn {
  3456. position: absolute;
  3457. left: 5px;
  3458. top: 5px;
  3459. width: 0;
  3460. height: 24px;
  3461. cursor: pointer;
  3462. }
  3463. }
  3464. .hover72Power {
  3465. .hidBtn {
  3466. width: 125px;
  3467. }
  3468. }
  3469. .monthPower {
  3470. .hidBtn {
  3471. width: 75px;
  3472. }
  3473. }
  3474. }
  3475. }
  3476. .themeDarkHome {
  3477. background-color: #0f0f0f;
  3478. background-image: url("@/assets/images/indexCom/backImg_B.png");
  3479. background-repeat: no-repeat;
  3480. .homeMain {
  3481. .map {
  3482. background-image: url("@/assets/images/indexCom/map_B.png");
  3483. background-repeat: no-repeat;
  3484. background-size: 90%;
  3485. background-position: center;
  3486. }
  3487. .map {
  3488. .dingbian,
  3489. .jingbian {
  3490. color: #a5abb7;
  3491. text-shadow: 0px 1px 2px #070a11;
  3492. }
  3493. .fengjiSty {
  3494. .mainSv {
  3495. .dianSty {
  3496. background: #31fbfd;
  3497. }
  3498. }
  3499. }
  3500. }
  3501. .comHeader {
  3502. .headerRight {
  3503. background: #2d3138;
  3504. .headerNaAll {
  3505. .headerNa2 {
  3506. color: #787f8f;
  3507. }
  3508. }
  3509. .headerZs {
  3510. background: #0f0f0f;
  3511. .headerZsN {
  3512. background: #41454c;
  3513. }
  3514. }
  3515. }
  3516. }
  3517. .leftMain {
  3518. .weather {
  3519. .weatherMain {
  3520. .weatherMain_top {
  3521. .wetherImg {
  3522. img {
  3523. width: 48px;
  3524. height: 48px;
  3525. }
  3526. }
  3527. .wetherMsg {
  3528. .wetherMsg_Du {
  3529. color: #ffffff;
  3530. }
  3531. .wetherMsg_Det {
  3532. span {
  3533. color: #ffffff;
  3534. }
  3535. }
  3536. }
  3537. }
  3538. .weatherMain_bot {
  3539. .weaMain {
  3540. .pOne {
  3541. color: #ffffff;
  3542. }
  3543. .pTwo {
  3544. color: #8b93a6;
  3545. }
  3546. }
  3547. }
  3548. }
  3549. }
  3550. .Electric {
  3551. .electricMain {
  3552. .electricMain_day,
  3553. .electricMain_month {
  3554. .powerCharts {
  3555. .powerName {
  3556. color: #8b93a6;
  3557. }
  3558. .powerItem {
  3559. .powerValue {
  3560. span:nth-child(1) {
  3561. background-color: #fff;
  3562. }
  3563. span:nth-child(2) {
  3564. color: #ffffff;
  3565. }
  3566. }
  3567. }
  3568. }
  3569. }
  3570. }
  3571. }
  3572. }
  3573. .rightMain {
  3574. .analysRadio {
  3575. .el-radio-group {
  3576. .el-radio-button {
  3577. .el-radio-button__inner {
  3578. color: #fff;
  3579. border: 1px solid #3b4c6c;
  3580. background: transparent;
  3581. }
  3582. }
  3583. .is-active {
  3584. background: linear-gradient(
  3585. 90deg,
  3586. rgba(28, 113, 255, 0),
  3587. rgba(28, 113, 255, 0.6)
  3588. );
  3589. }
  3590. }
  3591. }
  3592. .powerAnalysis {
  3593. .powerAnalysisMain {
  3594. .analysMain {
  3595. .analysMain_left {
  3596. .analLeftTop {
  3597. span {
  3598. color: #8b93a6;
  3599. }
  3600. }
  3601. .analLeftEcharts {
  3602. .echartsNum {
  3603. color: #1c99ff;
  3604. }
  3605. .echartsName {
  3606. color: #8b93a6;
  3607. }
  3608. }
  3609. .analLeftBot {
  3610. .analLeftBot_top {
  3611. .analyleftbottopAll {
  3612. .analyleftbottopName {
  3613. color: #8b93a6;
  3614. }
  3615. .analyleftbottopSty {
  3616. span {
  3617. color: #ffffff;
  3618. }
  3619. }
  3620. }
  3621. }
  3622. }
  3623. }
  3624. }
  3625. }
  3626. }
  3627. .powerPlan {
  3628. .powerPlanMain {
  3629. .planMain {
  3630. .planMain_left {
  3631. .analysMain_echarts {
  3632. border-bottom: 1px dashed #393f4d;
  3633. }
  3634. .analysMain_Msg {
  3635. .analysMain_Msg_top {
  3636. .analysMain_Msg_top_flex {
  3637. span:nth-child(1) {
  3638. color: #8b93a6;
  3639. }
  3640. span:nth-child(2) {
  3641. color: #ffffff;
  3642. }
  3643. }
  3644. }
  3645. .analysMain_Msg_bot {
  3646. background: #2d3138;
  3647. span {
  3648. color: #8b93a6;
  3649. }
  3650. }
  3651. }
  3652. }
  3653. }
  3654. }
  3655. }
  3656. }
  3657. }
  3658. .footer {
  3659. .monthPower {
  3660. background: rgba(41, 45, 53, 0.4);
  3661. }
  3662. .hover72Power {
  3663. background: rgba(41, 45, 53, 0.4);
  3664. }
  3665. }
  3666. }
  3667. .themeLightHome {
  3668. background-color: #e6e8f2;
  3669. background-image: url("@/assets/images/indexCom/backImg_W.png");
  3670. background-repeat: no-repeat;
  3671. .homeMain {
  3672. .map {
  3673. background-image: url("@/assets/images/indexCom/map_W.png");
  3674. background-repeat: no-repeat;
  3675. background-size: 90%;
  3676. background-position: center;
  3677. }
  3678. .map {
  3679. .dingbian,
  3680. .jingbian {
  3681. color: #fff;
  3682. text-shadow: 0px 1px 2px #070a11;
  3683. }
  3684. .fengjiSty {
  3685. cursor: pointer;
  3686. .mainSv {
  3687. .dianSty {
  3688. background: #1850b3;
  3689. border: 1px solid #ffffff;
  3690. }
  3691. }
  3692. }
  3693. }
  3694. .comHeader {
  3695. .headerRight {
  3696. background: #1850b3;
  3697. .headerNaAll {
  3698. .headerNa2 {
  3699. color: #babed3;
  3700. }
  3701. }
  3702. .headerZs {
  3703. background: #fff;
  3704. .headerZsN {
  3705. background: #4f70ec;
  3706. }
  3707. }
  3708. }
  3709. }
  3710. .leftMain {
  3711. .weather {
  3712. .weatherMain {
  3713. .weatherMain_top {
  3714. .wetherMsg {
  3715. .wetherMsg_Du {
  3716. color: #1850b3;
  3717. }
  3718. .wetherMsg_Det {
  3719. span {
  3720. color: #575a5f;
  3721. }
  3722. }
  3723. }
  3724. }
  3725. .weatherMain_bot {
  3726. .weaMain {
  3727. .pOne {
  3728. color: #575a5f;
  3729. }
  3730. .pTwo {
  3731. color: #646972;
  3732. }
  3733. }
  3734. }
  3735. }
  3736. }
  3737. .Electric {
  3738. .electricMain {
  3739. .electricMain_day,
  3740. .electricMain_month {
  3741. .powerCharts {
  3742. .powerName {
  3743. color: #67666c;
  3744. }
  3745. .powerItem {
  3746. .powerValue {
  3747. span:nth-child(1) {
  3748. background-color: #fff;
  3749. }
  3750. span:nth-child(2) {
  3751. color: #242426;
  3752. }
  3753. }
  3754. }
  3755. }
  3756. }
  3757. }
  3758. }
  3759. }
  3760. .rightMain {
  3761. .analysRadio {
  3762. .el-radio-group {
  3763. .el-radio-button {
  3764. .el-radio-button__inner {
  3765. color: #646972;
  3766. }
  3767. }
  3768. .is-active {
  3769. .el-radio-button__inner {
  3770. background: #1850b3 !important;
  3771. color: #fff;
  3772. }
  3773. }
  3774. }
  3775. }
  3776. .powerAnalysis {
  3777. .powerAnalysisMain {
  3778. .analysMain {
  3779. .analysMain_left {
  3780. .analLeftTop {
  3781. span:nth-child(1) {
  3782. color: #646972;
  3783. }
  3784. span:nth-child(2) {
  3785. color: #242426;
  3786. }
  3787. }
  3788. .analLeftEcharts {
  3789. .echartsNum {
  3790. color: #1850b3;
  3791. }
  3792. .echartsJing {
  3793. color: #f87909;
  3794. }
  3795. .echartsName {
  3796. color: #646972;
  3797. }
  3798. }
  3799. .analLeftBot {
  3800. .analLeftBot_top {
  3801. .analyleftbottopAll {
  3802. .analyleftbottopName {
  3803. color: #646972;
  3804. }
  3805. .analyleftbottopSty {
  3806. span {
  3807. color: #1850b3;
  3808. }
  3809. .echartsJing {
  3810. color: #f87909;
  3811. }
  3812. }
  3813. }
  3814. }
  3815. }
  3816. }
  3817. }
  3818. }
  3819. }
  3820. .powerPlan {
  3821. .powerPlanMain {
  3822. .planMain {
  3823. .planMain_left {
  3824. .analysMain_echarts {
  3825. border-bottom: 1px dashed #393f4d;
  3826. }
  3827. .analysMain_Msg {
  3828. .analysMain_Msg_top {
  3829. .analysMain_Msg_top_flex {
  3830. span:nth-child(1) {
  3831. color: #646972;
  3832. }
  3833. span:nth-child(2) {
  3834. color: #1850b3;
  3835. }
  3836. }
  3837. }
  3838. .analysMain_Msg_bot {
  3839. background: #ccd0de;
  3840. span {
  3841. color: #646972;
  3842. }
  3843. }
  3844. }
  3845. }
  3846. }
  3847. }
  3848. }
  3849. }
  3850. }
  3851. .footer {
  3852. .monthPower,
  3853. .hover72Power {
  3854. background: rgba(255, 255, 255, 0.8);
  3855. }
  3856. }
  3857. }
  3858. </style>
  3859. <style lang="less" scoped>
  3860. .emInfoBox {
  3861. padding: 0 5px;
  3862. width: calc(100% - 20px);
  3863. border-radius: 4px;
  3864. .item {
  3865. display: flex;
  3866. justify-content: space-between;
  3867. align-items: center;
  3868. flex-wrap: wrap;
  3869. width: 100%;
  3870. .b {
  3871. display: flex;
  3872. justify-content: space-between;
  3873. align-items: center;
  3874. margin-top: 10px;
  3875. width: calc(100% - 30px);
  3876. padding: 0 15px;
  3877. .info {
  3878. display: flex;
  3879. flex-direction: column;
  3880. justify-content: flex-start;
  3881. align-items: center;
  3882. font-size: 14px;
  3883. .zj {
  3884. color: rgb(119, 128, 171);
  3885. }
  3886. .yx {
  3887. color: rgb(29, 153, 255);
  3888. }
  3889. .dj {
  3890. color: rgb(5, 187, 76);
  3891. }
  3892. .gz {
  3893. color: rgb(186, 50, 55);
  3894. }
  3895. .wh {
  3896. color: rgb(225, 126, 35);
  3897. }
  3898. .xd {
  3899. color: rgb(197, 49, 199);
  3900. }
  3901. .sl {
  3902. color: rgb(255, 255, 255);
  3903. }
  3904. .lx {
  3905. color: rgb(96, 103, 105);
  3906. }
  3907. & span:first-child {
  3908. margin-bottom: 4px;
  3909. }
  3910. }
  3911. }
  3912. .unit {
  3913. font-size: 12px;
  3914. // color: #76819b;
  3915. color: #eee;
  3916. }
  3917. .genre {
  3918. font-size: 14px;
  3919. color: #76819b;
  3920. margin-bottom: 4px;
  3921. }
  3922. }
  3923. }
  3924. .cChartBox {
  3925. width: calc(100% - 20px);
  3926. padding: 10px;
  3927. margin-top: 10px;
  3928. position: relative;
  3929. z-index: 1000;
  3930. }
  3931. </style>