dashboard.vue 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179
  1. <template>
  2. <div class="dashboard_template">
  3. <div class="nav_top">
  4. <div class="left_title">
  5. <img src="../img/iconfont/notice.png"><span class="span">Please pay attention to the updated content at any time.</span>
  6. </div>
  7. <div class="right_operation">
  8. <el-dropdown @command="commandDropdown" trigger="click" @visible-change="commandHide('dropdown_dashboard_division')">
  9. <span class="el-dropdown-link">
  10. <span>{{divisionName}}</span><i class="el-icon-caret-bottom el-icon--right"></i>
  11. </span>
  12. <el-dropdown-menu slot="dropdown" class="scrollbar_style dropdown_dashboard_division">
  13. <el-dropdown-item v-for="item in divisionNav" :class="{'select':item.id==division}" :command="{'key':'division','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
  14. </el-dropdown-menu>
  15. </el-dropdown>
  16. <el-dropdown @command="commandDropdown" trigger="click" @visible-change="commandHide('dropdown_dashboard_district')">
  17. <span class="el-dropdown-link">
  18. <span>{{districtName}}</span><i class="el-icon-caret-bottom el-icon--right"></i>
  19. </span>
  20. <el-dropdown-menu slot="dropdown" class="scrollbar_style dropdown_dashboard_district">
  21. <el-dropdown-item v-for="item in districtNav" :class="{'select':item.id==district}" :command="{'key':'district','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
  22. </el-dropdown-menu>
  23. </el-dropdown>
  24. <el-input placeholder="search..." v-model="keywords" @keyup.native="getLightListKeyUp($event)" class="input-with-select">
  25. <i slot="suffix" class="el-input__icon el-icon-search" @click="getLightList()"></i>
  26. </el-input>
  27. </div>
  28. </div>
  29. <div class="dashboard_main">
  30. <div class="left_box">
  31. <div class="time_box">
  32. <div class="top_box">
  33. <div class="flex_box">
  34. <div class="left">
  35. 10:28
  36. </div>
  37. <div class="right">
  38. <p class="p1">Goodmorning,Eunice Gomez</p>
  39. <p class="p2">2020-05-20</p>
  40. </div>
  41. </div>
  42. <p class="p3">Today is the 320th day you log in to the system. We will work with you to maintain all street lights. :)</p>
  43. </div>
  44. <div class="bottom_box">
  45. <div class="btn">
  46. <i class="iconfont icon-ludeng"></i>
  47. <span>Today</span>
  48. </div>
  49. <div class="span_box1">
  50. <span class="span1">New equipment</span>
  51. <span class="span2">7483</span>
  52. </div>
  53. <i class="line"></i>
  54. <div class="span_box2">
  55. <span class="span1">Faulty equipment</span>
  56. <span class="span2">893</span>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="echarts_map_box">
  61. <div class="echarts_title"><img src="../img/iconfont/map.png"><span>Bangladesh Map</span></div>
  62. <div class="echarts_map"></div>
  63. </div>
  64. </div>
  65. <div class="right_box">
  66. <div class="right_top">
  67. <div class="light_information">
  68. <div class="light_information_left">
  69. <div class="title">Light Information</div>
  70. <p class="p1">2149</p>
  71. <p class="p2"><span class="span1">Total-light</span><i class="iconfont icon-shangsheng"></i><span class="span2">2%</span></p>
  72. </div>
  73. <div class="light_information_right">
  74. <div class="data_ul">
  75. <div class="li li1">
  76. <p class="p1">954</p>
  77. <p class="p2">60%</p>
  78. </div>
  79. <div class="li li2">
  80. <p class="p1">954</p>
  81. <p class="p2">60%</p>
  82. </div>
  83. <div class="li li3">
  84. <p class="p1">954</p>
  85. <p class="p2">60%</p>
  86. </div>
  87. </div>
  88. <div class="tab_box">
  89. <div class="tab tab1">Light-up</div>
  90. <div class="tab tab2">On-line</div>
  91. <div class="tab tab3">Fault</div>
  92. </div>
  93. </div>
  94. </div>
  95. <div class="usage_information">
  96. <div class="title">
  97. <span>Usage Information</span>
  98. <el-dropdown @command="commandDropdown" trigger="click" @visible-change="commandHide('dropdown_dashboard_date')">
  99. <span class="el-dropdown-link">
  100. <span>{{rightDateName}}</span><i class="el-icon-caret-bottom el-icon--right"></i>
  101. </span>
  102. <el-dropdown-menu slot="dropdown" class="scrollbar_style dropdown_dashboard_date">
  103. <el-dropdown-item v-for="item in rightDateNav" :class="{'select':item.id==district}" :command="{'key':'rightDate','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
  104. </el-dropdown-menu>
  105. </el-dropdown>
  106. </div>
  107. <div class="ul_box">
  108. <div class="li">
  109. <p class="p1">1783</p>
  110. <p class="p2">Power</p>
  111. </div>
  112. <div class="li">
  113. <p class="p1">389</p>
  114. <p class="p2">Electricity</p>
  115. </div>
  116. <div class="li">
  117. <p class="p1">892</p>
  118. <p class="p2">CO2 reduction</p>
  119. </div>
  120. <div class="li">
  121. <p class="p1">2371</p>
  122. <p class="p2">SO2 reduction</p>
  123. </div>
  124. <div class="li">
  125. <p class="p1">1997</p>
  126. <p class="p2">Tce reduction</p>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. <div class="proportion_lights">
  132. <div class="title">
  133. <div class="text">Proportion of lights</div>
  134. <div class="right_btn">
  135. <div class="nav_box">
  136. <div class="li select"><span>Total</span></div>
  137. <div class="li"><span>Power generation</span></div>
  138. <div class="li"><span>Online</span></div>
  139. <div class="li"><span>Offline</span></div>
  140. <div class="li"><span>Fault</span></div>
  141. </div>
  142. <div class="nav_box">
  143. <div class="li"><span>Upa-City</span> <i class="iconfont icon-xialajiantou"></i></div>
  144. </div>
  145. <div class="nav_box">
  146. <div class="li"><span>More</span> <i class="iconfont icon-youjiantou"></i></div>
  147. </div>
  148. </div>
  149. </div>
  150. <div class="proportion_lights_main">
  151. <div class="left_echarts">
  152. <div class="device_pie"></div>
  153. <div class="device_pie_cover"></div>
  154. </div>
  155. <div class="right_table">
  156. <el-table
  157. ref="deviceList"
  158. v-loading="loading.deviceList"
  159. element-loading-background="rgba(0, 0, 0, 0.5)"
  160. height="calc(100% - 3.5rem)"
  161. @cell-mouse-enter="tableEnter"
  162. @cell-mouse-leave="tableLeave"
  163. :data="deviceList">
  164. <el-table-column
  165. v-for="(item) in deviceArr"
  166. :key="'table_'+item.prop"
  167. :prop="item.prop"
  168. :label="item.label"
  169. :align="item.align?item.align:'center'"
  170. :width="item.width"
  171. :show-overflow-tooltip="true"
  172. :min-width="item.minWidth">
  173. <template slot-scope="scope">
  174. <div v-if="item.type != 1">{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</div>
  175. <div v-if="item.prop == 'city'" class="city">
  176. <i></i><span>{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</span>
  177. </div>
  178. <div v-if="item.prop == 'total'" class="total">
  179. <span class="span1">{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</span>
  180. <i></i>
  181. <span class="span2">{{scope.row['bl']}}{{item.unit?item.unit:''}}</span>
  182. </div>
  183. </template>
  184. </el-table-column>
  185. <el-table-column
  186. align="center"
  187. :width="40"
  188. :label="''">
  189. <template slot-scope="scope">
  190. <span class="btn" @click="seeFun(scope.row)" title="Edit" v-show="tableShowId == scope.row.id">
  191. <i class="iconfont icon-youjiantou"></i>
  192. </span>
  193. </template>
  194. </el-table-column>
  195. </el-table>
  196. </div>
  197. </div>
  198. </div>
  199. <div class="real_time_fault_information">
  200. <div class="title">
  201. <div class="text">Real time fault information</div>
  202. <div class="right_btn">
  203. <div class="btn">
  204. <span>More</span> <i class="iconfont icon-youjiantou"></i>
  205. </div>
  206. </div>
  207. </div>
  208. <div class="real_time_fault_information_main">
  209. <el-table
  210. ref="faultInformationList"
  211. v-loading="loading.faultInformationList"
  212. element-loading-background="rgba(0, 0, 0, 0.5)"
  213. height="calc(100% - 3.5rem)"
  214. :data="faultInformationList">
  215. <el-table-column
  216. label="Num"
  217. prop="webIndex"
  218. align="center"
  219. header-align="center"
  220. width="60">
  221. </el-table-column>
  222. <el-table-column
  223. v-for="(item) in faultInformationArr"
  224. :key="'table_'+item.prop"
  225. :prop="item.prop"
  226. :label="item.label"
  227. :align="item.align?item.align:'center'"
  228. :width="item.width"
  229. :show-overflow-tooltip="true"
  230. :min-width="item.minWidth">
  231. <template slot-scope="scope">
  232. <div v-if="item.type != 1">{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</div>
  233. <div v-if="item.prop == 'division'" class="division">
  234. <span>{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</span>
  235. <span>/</span>
  236. <span>{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</span>
  237. <span>/</span>
  238. <span>{{scope.row[item.prop]}}{{item.unit?item.unit:''}}</span>
  239. </div>
  240. </template>
  241. </el-table-column>
  242. <el-table-column
  243. align="center"
  244. :width="100"
  245. :label="'Operation'">
  246. <template slot-scope="scope">
  247. <span class="btn" @click="seeFun(scope.row)" title="Edit">
  248. <i class="iconfont icon-weixiu" style="color: rgba(252, 132, 64, 1)"></i>
  249. </span>
  250. </template>
  251. </el-table-column>
  252. </el-table>
  253. </div>
  254. </div>
  255. </div>
  256. </div>
  257. </div>
  258. </template>
  259. <script type="text/javascript">
  260. // import allUrl from '../api/allUrl.js'
  261. // import base from '../api/base.js'
  262. import { mapGetters } from 'vuex'
  263. import bangladesh from '../store/Bangladesh.json'
  264. // import world from '../store/world.json'
  265. export default {
  266. name:'dashboard',
  267. data(){
  268. return{
  269. keywords:'',
  270. division:'',
  271. divisionNav:[{id:'0',name:'division'}],
  272. district:'',
  273. districtNav:[{id:'0',name:'district'}],
  274. rightDate:'',
  275. rightDateNav:[{id:'0',name:'Today'}],
  276. myChart1:'',
  277. tableShowId:'-1',
  278. deviceList:[],
  279. deviceArr:[],
  280. faultInformationList:[],
  281. faultInformationArr:[],
  282. myChart2:'',
  283. loading:{
  284. deviceList:false,
  285. faultInformationList:false,
  286. }
  287. }
  288. },
  289. computed:{
  290. ...mapGetters({
  291. token:'token',
  292. client_key:'client_key',
  293. username:'username',
  294. version:'version',
  295. }),
  296. divisionName(){
  297. let name;
  298. for(let d of this.divisionNav){
  299. if(d.id == this.division){
  300. name = d.name;
  301. }
  302. }
  303. return name;
  304. },
  305. districtName(){
  306. let name;
  307. for(let d of this.districtNav){
  308. if(d.id == this.district){
  309. name = d.name;
  310. }
  311. }
  312. return name;
  313. },
  314. rightDateName(){
  315. let name;
  316. for(let d of this.rightDateNav){
  317. if(d.id == this.rightDate){
  318. name = d.name;
  319. }
  320. }
  321. return name;
  322. },
  323. },
  324. mounted(){
  325. this.rightDate = '0';
  326. this.division = '0';
  327. this.district = '0';
  328. this.deviceArr = [
  329. {prop:'city',label:'City',align:'left',minWidth:70,type:1},
  330. {prop:'total',label:'Total',minWidth:70,type:1},
  331. {prop:'power',label:'Power',minWidth:70},
  332. {prop:'online',label:'On-line',minWidth:70},
  333. {prop:'offline',label:'Off-line',minWidth:70},
  334. {prop:'fault',label:'Fault',minWidth:70},
  335. ];
  336. this.deviceList = [
  337. {'city':5,'total':5,'bl':'5%','power':5,'online':5,'offline':5,'fault':5,id:1},
  338. {'city':5,'total':5,'bl':'5%','power':5,'online':5,'offline':5,'fault':5,id:2},
  339. {'city':5,'total':5,'bl':'5%','power':5,'online':5,'offline':5,'fault':5,id:3},
  340. ];
  341. this.faultInformationArr = [
  342. {prop:'project',label:'Project',minWidth:70},
  343. {prop:'division',label:'Division/District/Upazilla',minWidth:120,type:1},
  344. {prop:'lightId',label:'Light ID',minWidth:70},
  345. {prop:'faultType',label:'Fault type',minWidth:70},
  346. {prop:'faultTime',label:'Fault time',width:160},
  347. ];
  348. this.faultInformationList = [
  349. {'project':5,'division':5,'district':'5%','dpazilla':5,'lightId':5,'faultType':5,'faultTime':5},
  350. ];
  351. let i = 1;
  352. for(let d of this.faultInformationList){
  353. d.webIndex = i;
  354. i++;
  355. }
  356. this.echartsMapInit();
  357. this.deviceBarInit();
  358. },
  359. methods:{
  360. commandHide(val){
  361. this.$nextTick(function(){
  362. if($('.'+val)&&$('.'+val+' >.select').offset()){
  363. $('.'+val).animate({scrollTop: $('.'+val).scrollTop() + $('.'+val+' >.select').offset().top - $('.'+val).offset().top - 100})
  364. }
  365. })
  366. },
  367. commandDropdown(obj){
  368. this.$set(this,obj.key,obj.id)
  369. },
  370. tableEnter(data){
  371. this.tableShowId = data.id;
  372. },
  373. tableLeave(){
  374. this.tableShowId = '-1';
  375. },
  376. /*设备列表*/
  377. getLightListKeyUp(e){
  378. if(e.key == 'Enter'){
  379. this.getLightList();
  380. }
  381. },
  382. getLightList(){
  383. },
  384. echartsMapInit(){
  385. this.$nextTick(function(){
  386. if(document.getElementsByClassName('echarts_map')[0]){
  387. this.myChart1 = echarts.init(document.getElementsByClassName('echarts_map')[0]);
  388. echarts.registerMap('bangladesh', bangladesh);
  389. this.myChart1.setOption({
  390. tooltip: {
  391. trigger: 'item',
  392. formatter: '{b}<br/>{c} ()'
  393. // formatter: function (params) {
  394. // console.log(params)
  395. // var tls = `<div class="history_echarts_tooltip"><p class="p1"><i style="background-color:${params[0].color}"></i><span class="span1">${params[0].value}</span><span class="span1">℃</span></p><p class="p2">${params[0].name}</p></div>`;
  396. // return tls;
  397. // },
  398. },
  399. visualMap: {
  400. color: ['rgba(166, 65, 7, 1)','rgba(224, 84, 5, 1)','rgba(230, 96, 20, 1)','rgba(252, 132, 64, 1)','rgba(252, 132, 64, 1)','rgba(255, 255, 255, 1)'],
  401. pieces: [
  402. {gte: 10000, label: '≥10000 Light'},
  403. {gte: 2000, lte: 10000, label: '2000-10000 Lights'},
  404. {gte: 500, lte: 1999, label: '500-1999 Lights'},
  405. {gte: 100, lte: 499, label: '100-499 Lights'},
  406. {gte: 1, lte: 99, label: '1-99 Lights'},
  407. {value: 0, label: '0 Lights'},
  408. ]
  409. },
  410. series: [
  411. {
  412. type:'map',
  413. name: 'bangladesh',
  414. map: 'bangladesh',
  415. zoom:1.2,
  416. // roam: true,
  417. data: [
  418. {name: 'Barisal Division', value: 2157},
  419. {name: 'Chittagong Division', value: 0},
  420. {name: 'Dhaka Division', value: 36},
  421. {name: 'Khulna Division', value: 62},
  422. {name: 'Rajshahi Division', value: 445},
  423. {name: 'Rangpur Division', value: 606},
  424. {name: 'Sylhet Division', value: 398},
  425. ],
  426. }
  427. ]
  428. })
  429. // let provincesText = ['Barisal Division','Chittagong Division','Dhaka Division','Khulna Division','Rajshahi Division','Rangpur Division','Sylhet Division']
  430. // this.myChart1.on('click', function (param) {
  431. // console.log(param.name);
  432. // //遍历取到provincesText 中的下标 去拿到对应的省js
  433. // for(var i= 0 ; i < provincesText.length ; i++ ){
  434. // if(param.name == provincesText[i]){
  435. // //显示对应省份的方法
  436. // // showProvince(provinces[i]) ;
  437. // showProvince(provinces[i],provincesText[i])
  438. // break ;
  439. // }
  440. // }
  441. // });
  442. }
  443. })
  444. },
  445. deviceBarInit(){
  446. if(document.getElementsByClassName('device_pie')[0]){
  447. let seriesData = [
  448. {name: '1',value: Math.round(Math.random() * 100),itemStyle:{color:'#FF6474'}},
  449. {name: '2',value: Math.round(Math.random() * 100),itemStyle:{color:'#FC8440'}},
  450. {name: '3',value: Math.round(Math.random() * 100),itemStyle:{color:'#FFA8B1'}},
  451. {name: '4',value: Math.round(Math.random() * 100),itemStyle:{color:'#FFCFD4'}},
  452. {name: '5',value: Math.round(Math.random() * 100),itemStyle:{color:'#FFD86F'}},
  453. {name: '6',value: Math.round(Math.random() * 100),itemStyle:{color:'#FFC936'}},
  454. {name: '7',value: Math.round(Math.random() * 100),itemStyle:{color:'#ADC6FF'}},
  455. {name: '8',value: Math.round(Math.random() * 100),itemStyle:{color:'#1D7DFD'}},
  456. ];
  457. this.myChart2 = echarts.init(document.getElementsByClassName('device_pie')[0]);
  458. this.myChart2.setOption({
  459. tooltip: {
  460. trigger: 'item',
  461. formatter: '{b} : {c} ({d}%)'
  462. },
  463. series: [
  464. {
  465. name: 'device',
  466. type: 'pie',
  467. radius: ['20%','70%'],
  468. center: ['50%', '50%'],
  469. data: seriesData,
  470. emphasis: {
  471. itemStyle: {
  472. shadowBlur: 10,
  473. shadowOffsetX: 0,
  474. shadowColor: 'rgba(0, 0, 0, 0.5)'
  475. }
  476. },
  477. label: {
  478. show: false
  479. },
  480. labelLine: {
  481. show: false
  482. },
  483. }
  484. ]
  485. })
  486. }
  487. },
  488. },
  489. watch:{
  490. }
  491. }
  492. </script>
  493. <style type="text/css" lang="less">
  494. .dashboard_template{
  495. .nav_top{
  496. display: flex;
  497. justify-content: space-between;
  498. width:100%;
  499. height:3.3rem;line-height: 3.3rem;
  500. background:rgba(255,255,255,1);
  501. border:0.1rem solid rgba(240,240,240,1);
  502. .left_title{
  503. display: flex;
  504. align-items: center;
  505. img{
  506. display: inline-block;
  507. // width: 1.2rem;
  508. height: 1rem;
  509. margin: 0 0.6rem;
  510. }
  511. .span{
  512. font-size:1rem;
  513. font-family:HiraginoSansGB-W3,HiraginoSansGB;
  514. font-weight:normal;
  515. color:rgba(101,112,133,1);
  516. }
  517. }
  518. .right_operation{
  519. display: flex;
  520. align-items: center;
  521. padding-right: 2.2rem;
  522. .el-dropdown{
  523. width: 10rem;
  524. height: 2rem;line-height: 2rem;
  525. background:rgba(246,248,250,1);
  526. border-radius: 0.2rem;
  527. margin-right: 0.8rem;
  528. .el-dropdown-link{
  529. cursor: pointer;
  530. height: 100%;
  531. display: flex;
  532. align-items: center;
  533. justify-content: space-between;
  534. padding: 0 0.8rem;
  535. font-size:1rem;
  536. font-family:PingFang-SC-Medium,PingFang-SC;
  537. font-weight:500;
  538. color:rgba(101,112,133,1);
  539. }
  540. }
  541. .el-input{
  542. width: 16.5rem;
  543. height: 2rem;line-height: 2rem;
  544. .el-input__inner{
  545. height: 2rem;line-height: 2rem;
  546. background:rgba(246,248,250,1);
  547. border: none;
  548. }
  549. .el-input__icon{
  550. width: 1.8rem;
  551. height: 2rem;line-height: 2rem;
  552. border-top-right-radius: 0.2rem;
  553. border-bottom-right-radius: 0.2rem;
  554. background:#FC8440;
  555. color: #fff;
  556. font-size: 1rem;
  557. cursor: pointer;
  558. }
  559. }
  560. }
  561. }
  562. .dashboard_main{
  563. background:rgba(246,248,250,1);
  564. padding: 0.8rem 1.5rem 1.5rem;
  565. display: flex;
  566. .left_box{
  567. flex: 1;
  568. .time_box{
  569. padding: 0.8rem;
  570. height:15.83rem;
  571. background:rgba(255,255,255,1);
  572. border-radius:0.17rem;
  573. border:0.08rem solid rgba(240,240,240,1);
  574. background: #fff;
  575. .top_box{
  576. height:11rem;
  577. // background:linear-gradient(134deg,rgba(252,169,64,1) 0%,rgba(252,132,64,1) 100%);
  578. background-image: url('../img/dashboard/time_box_bg.png');
  579. background-size: 100% 100%;
  580. background-position: center;
  581. border-radius:0.17rem;
  582. border:0.08rem solid rgba(240,240,240,1);
  583. padding: 1.5rem 1rem 0 2rem;
  584. .flex_box{
  585. display: flex;
  586. .left{
  587. font-size:4.33rem;
  588. font-family:DINAlternate-Bold,DINAlternate;
  589. font-weight:bold;
  590. color:rgba(255,255,255,1);
  591. }
  592. .right{
  593. margin-left: 0.5rem;
  594. .p1{
  595. margin-top: 1.3rem;
  596. font-size:1.17rem;
  597. font-family:PingFang-SC-Bold,PingFang-SC;
  598. font-weight:bold;
  599. color:rgba(255,255,255,1);
  600. }
  601. .p2{
  602. margin-top: 0.2rem;
  603. display: inline-block;;
  604. padding: 0 1rem;
  605. height:1.25rem;line-height:1.25rem;
  606. background:rgba(255,255,255,0.6);
  607. border-radius:0.63rem;
  608. font-size:1rem;
  609. font-family:PingFang-SC-Medium,PingFang-SC;
  610. font-weight:500;
  611. color:rgba(252,134,64,1);
  612. }
  613. }
  614. }
  615. .p3{
  616. margin-left: 0.5rem;
  617. font-size:1rem;
  618. font-family:HiraginoSansGB-W3,HiraginoSansGB;
  619. font-weight:normal;
  620. color:rgba(255,255,255,1);
  621. }
  622. }
  623. .bottom_box{
  624. display: flex;
  625. align-items: center;
  626. margin-top: 0.6rem;
  627. .btn{
  628. display: flex;
  629. align-items: center;
  630. justify-content: center;
  631. width:5.75rem;
  632. height:2.33rem;
  633. background:linear-gradient(134deg,rgba(252,169,64,1) 0%,rgba(252,132,64,1) 100%);
  634. border-radius:0.33rem;
  635. border:0.08rem solid rgba(240,240,240,1);
  636. font-size:1rem;
  637. font-family:PingFang-SC-Bold,PingFang-SC;
  638. font-weight:bold;
  639. color:rgba(255,255,255,1);
  640. i{
  641. font-size: 1.2rem;
  642. }
  643. span{
  644. margin-left: 0.2rem;
  645. }
  646. }
  647. .span_box1{
  648. margin-left: 1.5rem;
  649. display: flex;
  650. align-items: center;
  651. }
  652. .span_box2{
  653. // margin-left: 1.6rem;
  654. display: flex;
  655. align-items: center;
  656. }
  657. .span1{
  658. font-size:1.17rem;
  659. font-family:PingFang-SC-Bold,PingFang-SC;
  660. font-weight:bold;
  661. color:rgba(101,112,133,1);
  662. }
  663. .span2{
  664. margin-left: 1rem;
  665. font-size:1.5rem;
  666. font-family:PingFang-SC-Bold,PingFang-SC;
  667. font-weight:bold;
  668. color:rgba(51,51,51,1);
  669. }
  670. .line{
  671. display: inline-block;
  672. width: 0.1rem;
  673. height: 2.1rem;
  674. background: #EBEFF2;
  675. margin: 0 1rem;
  676. }
  677. }
  678. }
  679. .echarts_map_box{
  680. margin-top: 0.8rem;
  681. border:0.08rem solid rgba(240,240,240,1);
  682. .echarts_title{
  683. display: flex;
  684. align-items: center;
  685. height:3.5rem;line-height:3.5rem;
  686. background:rgba(255,255,255,0.8);
  687. font-size:1.17rem;
  688. font-family:PingFangSC-Semibold,PingFang SC;
  689. font-weight:600;
  690. color:rgba(51,51,51,1);
  691. img{
  692. margin: 0 0.5rem 0 0.8rem;
  693. height: 1.8rem;
  694. }
  695. }
  696. .echarts_map{
  697. width: 100%;
  698. height: 38rem;
  699. }
  700. }
  701. }
  702. .right_box{
  703. width:76.3rem;
  704. margin-left: 0.8rem;
  705. .right_top{
  706. display: flex;
  707. .light_information{
  708. width:30rem;
  709. height:11.8rem;
  710. background:rgba(255,255,255,1);
  711. border-radius:0.2rem;
  712. border:0.1rem solid rgba(240,240,240,1);
  713. display: flex;
  714. .light_information_left{
  715. padding-left: 1.3rem;
  716. .title{
  717. margin-top: 1.3rem;
  718. font-size:1rem;
  719. font-family:PingFangSC-Medium,PingFang SC;
  720. font-weight:600;
  721. color:rgba(51,51,51,1);
  722. position: relative;
  723. &::after{
  724. content: "";
  725. position: absolute;
  726. bottom: -0.2rem;left:0;
  727. width:1.6rem;
  728. height:0.15rem;
  729. background-color: #FF7C23;
  730. }
  731. }
  732. .p1{
  733. margin-top: 2rem;
  734. font-size:2.5rem;
  735. font-family:PingFang-SC-Heavy,PingFang-SC;
  736. font-weight:800;
  737. color:rgba(51,51,51,1);
  738. }
  739. .p2{
  740. display: flex;
  741. align-items: center;
  742. .span1{
  743. font-size:1rem;
  744. font-family:PingFang-SC-Medium,PingFang-SC;
  745. font-weight:500;
  746. color:rgba(51,51,51,1);
  747. }
  748. .iconfont{
  749. margin-left: 0.5rem;
  750. font-size: 1.2rem;
  751. color:rgba(252,132,64,1);
  752. }
  753. .span2{
  754. font-size:1.2rem;
  755. font-family:PingFangSC-Semibold,PingFang SC;
  756. font-weight:600;
  757. color:rgba(252,132,64,1);
  758. line-height:1.6rem;
  759. }
  760. }
  761. }
  762. .light_information_right{
  763. position: relative;
  764. flex: 1;
  765. .data_ul{
  766. position: absolute;
  767. right: 1.2rem;
  768. top: 1.5rem;
  769. display: flex;
  770. align-items: center;
  771. width: 17rem;
  772. .li{
  773. flex: 1;
  774. text-align: center;
  775. &.li1{
  776. height: 5.6rem;
  777. // background: rgba(252, 137, 64, 1);
  778. background-image: url('../img/dashboard/light_Information_bg1.png');
  779. background-size: 100% 100%;
  780. background-position: center;
  781. .p1{
  782. margin-top: 1rem;
  783. }
  784. }
  785. &.li2{
  786. height: 5.6rem;
  787. // background: rgba(0, 222, 156, 1);
  788. background-image: url('../img/dashboard/light_Information_bg2.png');
  789. background-size: 100% 100%;
  790. background-position: center;
  791. .p1{
  792. margin-top: 1rem;
  793. }
  794. }
  795. &.li3{
  796. height: 6.8rem;
  797. // background: rgba(255, 100, 116, 1);
  798. background-image: url('../img/dashboard/light_Information_bg3.png');
  799. background-size: 100% 100%;
  800. background-position: center;
  801. .p1{
  802. margin-top: 1.5rem;
  803. }
  804. }
  805. .p1{
  806. display: inline-block;
  807. padding: 0.2rem 0;
  808. font-size:1.33rem;
  809. font-family:PingFangSC-Semibold,PingFang SC;
  810. font-weight:600;
  811. color:rgba(255,255,255,1);
  812. border-bottom: 0.1rem solid rgba(255, 255, 255, 0.2);
  813. }
  814. .p2{
  815. font-size:0.83rem;
  816. font-family:PingFangSC-Regular,PingFang SC;
  817. font-weight:400;
  818. color:rgba(255,255,255,1);
  819. }
  820. }
  821. }
  822. .tab_box{
  823. position: absolute;
  824. right: 1.2rem;bottom: 1.2rem;
  825. display: flex;
  826. .tab{
  827. font-size:0.83rem;
  828. font-family:PingFang-SC-Medium,PingFang-SC;
  829. font-weight:500;
  830. margin-left: 0.8rem;
  831. padding: 0 0.5rem;
  832. height: 1.3rem;line-height: 1.3rem;
  833. &.tab1{
  834. color:rgba(252,137,64,1);
  835. background: rgba(252, 137, 64, 0.1);
  836. }
  837. &.tab2{
  838. color: rgba(0, 222, 156, 1);
  839. background: rgba(0, 222, 156, 0.1);
  840. }
  841. &.tab3{
  842. color: rgba(255, 101, 116, 1);
  843. background: rgba(255, 100, 116, 0.1);
  844. }
  845. }
  846. }
  847. }
  848. }
  849. .usage_information{
  850. margin-left: 0.8rem;
  851. width:45.5rem;
  852. height:11.8rem;
  853. background:rgba(255,255,255,1);
  854. border-radius:0.2rem;
  855. border:0.1rem solid rgba(240,240,240,1);
  856. padding: 0 1.3rem;
  857. .title{
  858. margin-top: 1.3rem;
  859. font-size:1rem;
  860. font-family:PingFangSC-Medium,PingFang SC;
  861. font-weight:600;
  862. color:rgba(51,51,51,1);
  863. position: relative;
  864. display: flex;
  865. align-items: center;
  866. justify-content: space-between;
  867. &::after{
  868. content: "";
  869. position: absolute;
  870. bottom: -0.2rem;left:0;
  871. width:1.6rem;
  872. height:0.15rem;
  873. background-color: #FF7C23;
  874. }
  875. .el-dropdown{
  876. height:1.8rem;
  877. background:rgba(246,248,250,1);
  878. border-radius:0.2rem;
  879. display: flex;
  880. align-items: center;
  881. .el-dropdown-link{
  882. font-size:1rem;
  883. font-family:PingFang-SC-Medium,PingFang-SC;
  884. font-weight:500;
  885. color:rgba(101,112,133,1);
  886. padding: 0 0.5rem;
  887. cursor: pointer;
  888. }
  889. }
  890. }
  891. .ul_box{
  892. display: flex;
  893. border:0.1rem solid rgba(240,240,240,1);
  894. height: 6rem;
  895. margin-top: 1.5rem;
  896. .li{
  897. border-right:0.1rem solid rgba(240,240,240,1);
  898. flex: 1;
  899. text-align:center;
  900. &:last-child{
  901. border:none;
  902. }
  903. .p1{
  904. margin-top: 0.3rem;
  905. font-size:2.17rem;
  906. font-family:PingFang-SC-Heavy,PingFang-SC;
  907. font-weight:800;
  908. color:rgba(51,51,51,1);
  909. }
  910. .p2{
  911. font-size:1rem;
  912. font-family:PingFang-SC-Medium,PingFang-SC;
  913. font-weight:500;
  914. color:rgba(101,112,133,1);
  915. }
  916. }
  917. }
  918. }
  919. }
  920. .proportion_lights{
  921. margin-top: 0.8rem;
  922. height:22.5rem;
  923. background:rgba(255,255,255,1);
  924. border-radius:0.17rem 0.17rem 0rem 0rem;
  925. border:0.08rem solid rgba(240,240,240,1);
  926. padding: 0 0.8rem 0 1.6rem;
  927. .title{
  928. margin-top: 1.3rem;
  929. font-size:1rem;
  930. font-family:PingFangSC-Medium,PingFang SC;
  931. font-weight:600;
  932. color:rgba(51,51,51,1);
  933. position: relative;
  934. display: flex;
  935. align-items: center;
  936. justify-content: space-between;
  937. &::after{
  938. content: "";
  939. position: absolute;
  940. bottom: -0.2rem;left:0;
  941. width:1.6rem;
  942. height:0.15rem;
  943. background-color: #FF7C23;
  944. }
  945. .right_btn{
  946. display: flex
  947. }
  948. .nav_box{
  949. margin-left: 0.8rem;
  950. display: flex;
  951. height:1.8rem;line-height: 1.8rem;
  952. align-items: center;
  953. background:rgba(246,248,250,1);
  954. .li{
  955. padding: 0 1rem;
  956. height:1.8rem;line-height: 1.8rem;
  957. border-radius:0.17rem 0rem 0rem 0.17rem;
  958. font-size:1rem;
  959. font-family:PingFang-SC-Medium,PingFang-SC;
  960. font-weight:500;
  961. color:rgba(101,112,133,1);
  962. cursor: pointer;
  963. display: flex;
  964. align-items:center;
  965. i{
  966. color: rgba(163, 175, 187, 1);
  967. font-size: 1rem;
  968. margin-left: 0.8rem;
  969. }
  970. .icon-xialajiantou{
  971. font-size: 0.5rem;
  972. }
  973. &.select{
  974. background:rgba(252,132,64,1);
  975. color:rgba(255,255,255,1);
  976. }
  977. }
  978. }
  979. }
  980. .proportion_lights_main{
  981. display: flex;
  982. height: 19.9rem;
  983. .left_echarts{
  984. width: 19.9rem;
  985. .device_pie{
  986. width: 100%;height: 100%;
  987. }
  988. .device_pie_cover{
  989. }
  990. }
  991. .right_table{
  992. width: calc(100% - 19.9rem);
  993. .el-table{
  994. margin-top: 1.5rem;
  995. width: 100%;
  996. th,td{
  997. padding: 0.5rem 0;
  998. }
  999. th,td{
  1000. >.cell{
  1001. font-size:1rem;
  1002. font-family:PingFangSC-Medium,PingFang SC;
  1003. font-weight:500;
  1004. color:rgba(51,51,51,1);
  1005. }
  1006. }
  1007. tr:hover>td{
  1008. background: rgba(246, 248, 250, 1);
  1009. >.cell{
  1010. font-family:PingFangSC-Semibold,PingFang SC;
  1011. font-weight:600;
  1012. }
  1013. }
  1014. .city{
  1015. display: flex;
  1016. align-items: center;
  1017. i{
  1018. margin: 0 0.5rem;
  1019. display: inline-block;
  1020. width:0.3rem;
  1021. height:0.3rem;
  1022. background:rgba(252,132,64,1);
  1023. border-radius: 50%;
  1024. }
  1025. }
  1026. .total{
  1027. display: flex;
  1028. align-items: center;
  1029. justify-content: space-between;
  1030. span{
  1031. flex: 1;
  1032. }
  1033. .span1{
  1034. text-align: right;
  1035. }
  1036. .span2{
  1037. text-align: left;
  1038. }
  1039. i{
  1040. margin: 0 0.5rem;
  1041. display: inline-block;
  1042. width: 0.1rem;
  1043. height: 1.4rem;
  1044. background: rgba(198, 205, 213, 1);
  1045. }
  1046. }
  1047. .icon-youjiantou{
  1048. font-size: 1rem;
  1049. color:rgba(163, 175, 187, 1);
  1050. }
  1051. }
  1052. }
  1053. }
  1054. }
  1055. .real_time_fault_information{
  1056. padding: 0 0.8rem 0 1.6rem;
  1057. margin-top: 0.8rem;
  1058. height:22.6rem;
  1059. background:rgba(255,255,255,1);
  1060. border-radius:0.17rem 0.2rem 0rem 0rem;
  1061. border:0.1rem solid rgba(240,240,240,1);
  1062. .title{
  1063. margin-top: 1.3rem;
  1064. font-size:1rem;
  1065. font-family:PingFangSC-Medium,PingFang SC;
  1066. font-weight:600;
  1067. color:rgba(51,51,51,1);
  1068. position: relative;
  1069. display: flex;
  1070. align-items: center;
  1071. justify-content: space-between;
  1072. &::after{
  1073. content: "";
  1074. position: absolute;
  1075. bottom: -0.2rem;left:0;
  1076. width:1.6rem;
  1077. height:0.15rem;
  1078. background-color: #FF7C23;
  1079. }
  1080. .right_btn{
  1081. margin-left: 0.8rem;
  1082. padding: 0 1rem;
  1083. display: flex;
  1084. align-items: center;
  1085. height:1.8rem;line-height: 1.8rem;
  1086. background:rgba(246,248,250,1);
  1087. cursor: pointer;
  1088. font-size:1rem;
  1089. font-family:PingFang-SC-Medium,PingFang-SC;
  1090. font-weight:500;
  1091. color:rgba(101,112,133,1);
  1092. i{
  1093. font-size: 1rem;
  1094. margin-left: 0.8rem;
  1095. }
  1096. }
  1097. }
  1098. .real_time_fault_information_main{
  1099. .el-table{
  1100. margin-top: 1.5rem;
  1101. width: 100%;
  1102. th,td{
  1103. padding: 0.5rem 0;
  1104. }
  1105. th,td{
  1106. >.cell{
  1107. font-size:1rem;
  1108. font-family:PingFangSC-Medium,PingFang SC;
  1109. font-weight:500;
  1110. color:rgba(51,51,51,1);
  1111. }
  1112. }
  1113. tr:hover>td{
  1114. background: rgba(246, 248, 250, 1);
  1115. >.cell{
  1116. font-family:PingFangSC-Semibold,PingFang SC;
  1117. font-weight:600;
  1118. }
  1119. }
  1120. .city{
  1121. display: flex;
  1122. align-items: center;
  1123. i{
  1124. margin: 0 0.5rem;
  1125. display: inline-block;
  1126. width:0.3rem;
  1127. height:0.3rem;
  1128. background:rgba(252,132,64,1);
  1129. border-radius: 50%;
  1130. }
  1131. }
  1132. .total{
  1133. display: flex;
  1134. align-items: center;
  1135. justify-content: space-between;
  1136. span{
  1137. flex: 1;
  1138. }
  1139. .span1{
  1140. text-align: right;
  1141. }
  1142. .span2{
  1143. text-align: left;
  1144. }
  1145. i{
  1146. margin: 0 0.5rem;
  1147. display: inline-block;
  1148. width: 0.1rem;
  1149. height: 1.4rem;
  1150. background: rgba(198, 205, 213, 1);
  1151. }
  1152. }
  1153. }
  1154. }
  1155. }
  1156. }
  1157. }
  1158. }
  1159. </style>