stationResources.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. <template>
  2. <div class="page stationResourcesPage">
  3. <div class="timeBox">{{ time }}</div>
  4. <div class="kaiguanBox"><img src="../../../../public/largeScreenImg/kaiguan.png" style="width: 30px;height: 30px" @click="pushZaiXian()"/></div>
  5. <div class="topTiltle">
  6. <span class="title">在运风光场站资源信息管理</span>
  7. </div>
  8. <div class="btuGroup">
  9. <div class="topBtu topLeftBtu" @click="back()">
  10. <span class="btuText">返回&nbsp;</span>
  11. </div>
  12. <div class="topBtu topRightBtu" @click="push()">
  13. <span class="btuText">后台管理</span>
  14. </div>
  15. </div>
  16. <div class="myMain-container">
  17. <div class="rightTextBg">
  18. <div class="rightBg topBox">
  19. <div class="rightTiltleTextBg">
  20. <div class="rightMainTitle">
  21. <span class="mainTitle">在运场站信息</span>
  22. </div>
  23. <div class="textBtu rightTextBtu" @click="dialogShow = true">
  24. <span>场站列表</span>
  25. </div>
  26. </div>
  27. <div class="rightTopContent">
  28. <div class="rightInfoBox">
  29. <span class="dialogInfoTitle">
  30. <img
  31. class="tiltleLeftSign"
  32. referrerpolicy="no-referrer"
  33. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  34. />
  35. 风电场站信息
  36. </span>
  37. <div class="rightContent">
  38. <div class="contentBox">
  39. <span class="numberBox">{{ fInfo.num }}</span>
  40. <span class="textBox">总数量(个)</span>
  41. </div>
  42. <div class="contentBox">
  43. <span class="numberBox">{{ fInfo.capacity }}<span style="font-size: 14px">MW</span></span>
  44. <span class="textBox">装机容量</span>
  45. </div>
  46. <div class="contentBox">
  47. <span class="numberBox">{{ fInfo.fjNum }}</span>
  48. <span class="textBox">风机台数</span>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="rightInfoBox">
  53. <span class="dialogInfoTitle">
  54. <img
  55. class="tiltleLeftSign"
  56. referrerpolicy="no-referrer"
  57. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  58. />
  59. 光伏场站信息
  60. </span>
  61. <div class="rightContent">
  62. <div class="contentBox">
  63. <span class="numberBox">{{ gInfo.num }}</span>
  64. <span class="textBox">总数量(个)</span>
  65. </div>
  66. <div class="contentBox">
  67. <span class="numberBox">{{ gInfo.capacity }}<span style="font-size: 14px">MW</span></span>
  68. <span class="textBox">装机容量</span>
  69. </div>
  70. <div class="contentBox">
  71. <span class="numberBox">{{ gInfo.nbqNum }}</span>
  72. <span class="textBox">逆变器台数</span>
  73. </div>
  74. </div>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. <div class="mapBtuBg">
  80. <div id="mapBtuOne" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuOne')">
  81. <span class="mapBtuText">地形图</span>
  82. </div>
  83. <!-- <div id="mapBtuTwo" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuTwo')">-->
  84. <!-- <span class="mapBtuText">风场气象图</span>-->
  85. <!-- </div>-->
  86. <div id="mapBtuThree" class="mapBtu mapBtuBefore" @click="clickBtu('mapBtuThree')">
  87. <span class="mapBtuText">风资源分布图</span>
  88. </div>
  89. <!-- <div id="mapBtuFour" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuFour')">-->
  90. <!-- <span class="mapBtuText">光辐射气象图</span>-->
  91. <!-- </div>-->
  92. <div id="mapBtuFive" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuFive')">
  93. <span class="mapBtuText">光资源分布图</span>
  94. </div>
  95. </div>
  96. </div>
  97. <div v-if="mapMark === 'mapBtuOne'">
  98. <bige-map ref="childMethod" :mapValue="mapValue"/>
  99. </div>
  100. <div v-if="mapMark === 'mapBtuThree'">
  101. <bige-heat-map ref="childMethod" :mapValue="mapValue"/>
  102. </div>
  103. <div v-if="mapMark === 'mapBtuFive'">
  104. <bige-heat-sun-map ref="childMethod" :mapValue="mapValue"/>
  105. </div>
  106. <div v-if="mapMark === 'mapBtu'">
  107. <zai-xian-bige-map ref="childMethod" :mapValue="mapValue"/>
  108. </div>
  109. <div class="bottomPushBtu" @click="pushPreProjectResource()">
  110. <span>前期项目资源信息</span>
  111. </div>
  112. <!-- 弹窗 -->
  113. <div class="dialogInfoBg" v-if="dialogShow">
  114. <div class="rightTiltleTextBg">
  115. <div class="rightMainTitle">
  116. <span class="mainTitle">在运场站</span>
  117. </div>
  118. <div class="textBtu dialogRightTextBtu" @click="dialogShow = false">
  119. <span>返回</span>
  120. </div>
  121. </div>
  122. <div class="dialogMainInfoBg">
  123. <div class="dialogStationInfoBox">
  124. <div class="dialogInfoTitle" v-for="item in stationOptions" @click="stationNameClick(item)">
  125. <img
  126. class="tiltleLeftSign"
  127. referrerpolicy="no-referrer"
  128. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  129. />
  130. <span>{{ item.stationName }}</span>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </div>
  136. </template>
  137. <script>
  138. import {stationTotalityInfo} from "@/api/biz/dataQuery/largeScreenPage";
  139. import bigeMap from "@/views/largeScreenPage/components/bigeMap";
  140. import bigeHeatMap from "@/views/largeScreenPage/components/bigeHeatMap";
  141. import bigeHeatSunMap from "@/views/largeScreenPage/components/bigeHeatSunMap";
  142. import zaiXianBigeMap from "@/views/largeScreenPage/components/zaiXianBigeMap";
  143. export default {
  144. name: "stationResources",
  145. components: {
  146. bigeMap, bigeHeatMap,bigeHeatSunMap,zaiXianBigeMap
  147. },
  148. data() {
  149. return {
  150. timer: null,
  151. time: '',
  152. dialogShow: false,
  153. fInfo:{//风场站信息
  154. // num:'10',
  155. // capacity:'724.6',
  156. // fjNum:'407'
  157. },
  158. gInfo:{//光场站信息
  159. // num:'4',
  160. // capacity:'110',
  161. // nbqNum:'204'
  162. },
  163. //一类项目列表
  164. stationOptions: [
  165. // {label: '木兰风电场', value: '1'},
  166. // {label: '依兰鸡冠山风电场', value: '2'},
  167. // {label: '依兰珠山风电场', value: '3'},
  168. // {label: '东宁绥阳风电场', value: '4'},
  169. // {label: '东宁绥阳风电场', value: '5'},
  170. // {label: '瑞信风电场', value: '6'},
  171. // {label: '汤原渠首风电场', value: '7'},
  172. // {label: '虎林石青山风电场', value: '8'},
  173. // {label: '七里嘎风电场', value: '9'},
  174. // {label: '宏浩风电场', value: '10'},
  175. // {label: '宁姜环球光伏电站', value: '11'},
  176. // {label: '安达青肯泡光伏电站', value: '12'},
  177. // {label: '讷河兴旺光伏电站', value: '13'}
  178. ],
  179. mapMark: 'mapBtuThree',
  180. //地图传值
  181. mapValue: {
  182. level: null,//地图层级
  183. center: [],//中心坐标
  184. allStationInfo: null,//场站坐标
  185. projectInfo: null,//项目坐标
  186. stationInfo: null
  187. },
  188. }
  189. },
  190. destroyed() {
  191. clearInterval(this.timer)
  192. this.timer = null
  193. },
  194. mounted() {
  195. this.formatTime()
  196. this.getInfo()
  197. this.timer = setInterval(this.formatTime, 1000 * 60)
  198. },
  199. methods: {
  200. getInfo(){
  201. stationTotalityInfo().then(res=>{
  202. let data = res.data
  203. this.fInfo = data.fInfo
  204. this.gInfo = data.gInfo
  205. this.stationOptions = data.station
  206. this.mapValue = {
  207. params: new Date(),
  208. level: null,//地图层级
  209. center: [],//中心坐标
  210. allStationInfo: null,//场站坐标
  211. projectInfo: null,
  212. staionInfo: data.station
  213. }
  214. }).catch(err=>{
  215. console.log('场站的总体信息获取异常:'+err)
  216. })
  217. },
  218. //场站列表点击名称事件
  219. stationNameClick(station) {
  220. // console.log(station)
  221. sessionStorage.setItem("stationInfo",JSON.stringify(station))
  222. this.$store.dispatch('equipmentInfo/stationInfo',JSON.stringify(station))
  223. this.$router.push({path: "/homepage/stationInfo"})
  224. },
  225. push() {
  226. this.$router.push({path: "/dataQuery/windTowerStatusInfo"})
  227. },
  228. back() {
  229. this.$router.push({path: "/homepage/provincialEnergyStations"})
  230. },
  231. pushZaiXian(){
  232. if(this.mapMark === 'mapBtuOne'){
  233. let center = this.$refs.childMethod.center
  234. let level = this.$refs.childMethod.level
  235. this.mapValue = {
  236. params: new Date(),
  237. level: level === ''?null:level,//地图层级
  238. center: center.length === 0?[]:[center.lat,center.lng],//中心坐标
  239. allStationInfo: null,//场站坐标
  240. projectInfo: null,
  241. staionInfo:this.stationOptions
  242. }
  243. this.mapMark = 'mapBtu'
  244. }
  245. },
  246. pushPreProjectResource() {
  247. this.$router.push({path: "/homepage/preProjectResources"})
  248. },
  249. clickBtu(id) {
  250. let center = this.$refs.childMethod.center
  251. let level = this.$refs.childMethod.level
  252. this.mapValue = {
  253. params: new Date(),
  254. level: level === ''?null:level,//地图层级
  255. center: center.length === 0?[]:[center.lat,center.lng],//中心坐标
  256. allStationInfo: null,//场站坐标
  257. projectInfo: null,
  258. staionInfo:this.stationOptions
  259. }
  260. this.mapMark = id
  261. let clickItem = document.getElementById(id)
  262. let activeItem = document.querySelector('.mapBtuBefore')
  263. activeItem.classList.remove('mapBtuBefore')
  264. activeItem.classList.add('mapBtuAfter')
  265. clickItem.classList.remove('mapBtuAfter')
  266. clickItem.classList.add('mapBtuBefore')
  267. },
  268. /*时间格式化*/
  269. formatTime() {
  270. this.time = ''
  271. let date = new Date()
  272. let year = date.getFullYear(); // 年
  273. let month = date.getMonth() + 1; // 月
  274. let day = date.getDate();
  275. let hour = date.getHours(); // 获取当前小时数(0-23)
  276. let minutes = date.getMinutes();
  277. if (month < 10) month = "0" + month;
  278. if (day < 10) day = "0" + day;
  279. if (minutes < 10) minutes = "0" + minutes;
  280. this.time = year + "-" + month + "-" + day + " " + hour + ' : ' + minutes;
  281. }
  282. }
  283. }
  284. </script>
  285. <style scoped>
  286. .stationResourcesPage {
  287. width: 100%;
  288. height: calc(100vh);
  289. background: url(../../../assets/largeScreenImg/backBg.png) no-repeat;
  290. background-size: 100% 100%;
  291. color: white;
  292. }
  293. .timeBox {
  294. position: absolute;
  295. left: 2%;
  296. top: 0;
  297. font-size: 20px;
  298. line-height: 40px;
  299. font-family: timeFont !important;
  300. }
  301. .page {
  302. position: fixed;
  303. top: 0;
  304. left: 0;
  305. bottom: 0;
  306. right: 0;
  307. overflow: auto;
  308. box-shadow: inset -1px -20px 550px 200px rgb(12 25 69 / 80%);
  309. }
  310. .topTiltle {
  311. width: 100%;
  312. height: 5.5%;
  313. background: url(../../../assets/largeScreenImg/index/topTitleBg.png) -2px -1px no-repeat;
  314. background-size: 100% 100%;
  315. display: flex;
  316. justify-content: center;
  317. }
  318. .title {
  319. width: 17%;
  320. height: 100%;
  321. text-align: center;
  322. margin-top: .2%;
  323. font-size: 30px;
  324. font-weight: 800;
  325. background-image: linear-gradient(
  326. 360deg,
  327. rgba(178, 204, 252, 1) 0,
  328. rgba(178, 204, 252, 1) 0,
  329. rgba(255, 255, 255, 1) 100%,
  330. rgba(255, 255, 255, 1) 100%
  331. );
  332. background-clip: text;
  333. color: transparent;
  334. }
  335. .btuGroup {
  336. position: absolute;
  337. right: 0;
  338. top: 0;
  339. color: white;
  340. width: 15%;
  341. height: 5.5%;
  342. display: flex;
  343. justify-content: flex-end;
  344. font-size: 18px;
  345. }
  346. .topBtu {
  347. height: 100%;
  348. margin-top: -1.5%;
  349. display: flex;
  350. justify-content: center;
  351. align-items: center;
  352. cursor: pointer;
  353. }
  354. .topRightBtu {
  355. background: url(../../../assets/largeScreenImg/index/topRightBtuBg.png) 100% no-repeat;
  356. background-size: 100% 100%;
  357. width: 50%;
  358. }
  359. .topLeftBtu {
  360. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  361. background-size: 100% 100%;
  362. width: 35%;
  363. }
  364. .rightTextBg {
  365. position: absolute;
  366. right: 2%;
  367. top: 8%;
  368. width: 20%;
  369. display: flex;
  370. flex-direction: column;
  371. z-index: 10000;
  372. }
  373. .rightBg {
  374. background: url(../../../assets/largeScreenImg/index/leftTextBg.png) 100% no-repeat;
  375. background-size: 100% 100%;
  376. padding: 5%;
  377. }
  378. .mapBtuBg {
  379. position: absolute;
  380. right: 22%;
  381. top: 7%;
  382. width: 10%;
  383. z-index: 100000;
  384. }
  385. .rightTiltleTextBg {
  386. height: 32px;
  387. background: url(../../../assets/largeScreenImg/zaiyunAndqianqi/rightTitleBg.png) 100% no-repeat;
  388. background-size: 100% 100%;
  389. }
  390. .textBtu {
  391. background: url(../../../assets/largeScreenImg/index/topRightBtuBg.png) 100% no-repeat;
  392. background-size: 100% 100%;
  393. width: 40%;
  394. cursor: pointer;
  395. line-height: 60px;
  396. text-align: center;
  397. }
  398. .rightTextBtu {
  399. position: absolute;
  400. right: 2%;
  401. top: -.5%;
  402. }
  403. .rightMainTitle {
  404. color: rgba(183, 243, 252, 1);
  405. font-size: 20px;
  406. font-weight: 550;
  407. margin-left: 8%;
  408. position: relative;
  409. top: -25%;
  410. }
  411. .rightInfoBox {
  412. margin-top: 4%;
  413. }
  414. .rightContent{
  415. display: flex;
  416. }
  417. .contentBox {
  418. margin-top: 5%;
  419. width: 35%;
  420. height: 125px;
  421. background: url(../../../assets/largeScreenImg/index/liubianxingBorder.png) 100% no-repeat;
  422. background-size: 100% 100%;
  423. display: flex;
  424. flex-direction: column;
  425. justify-content: center;
  426. align-items: center;
  427. }
  428. .numberBox {
  429. font-size: 24px;
  430. font-weight: 700;
  431. background-image: linear-gradient(
  432. rgba(255, 255, 255, 1) 0,
  433. rgba(255, 255, 255, 1) 0,
  434. rgba(70, 255, 222, 1) 98.730469%,
  435. rgba(70, 255, 222, 1) 100%
  436. );
  437. background-clip: text;
  438. color: transparent;
  439. }
  440. .mapBtu {
  441. height: 50px;
  442. width: 200px;
  443. }
  444. .mapBtuAfter {
  445. background: url(../../../assets/largeScreenImg/index/mapBtuClickAfter.png) 100% no-repeat;
  446. background-size: 100% 100%;
  447. }
  448. .mapBtuBefore {
  449. background: url(../../../assets/largeScreenImg/index/mapBtuClickBefore.png) 100% no-repeat;
  450. background-size: 100% 100%;
  451. margin-top: 9px;
  452. }
  453. .mapBtuText {
  454. line-height: 50px;
  455. font-size: 16px;
  456. display: flex;
  457. align-items: center;
  458. margin-left: 20%;
  459. }
  460. .bottomPushBtu {
  461. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  462. background-size: 100% 100%;
  463. line-height: 60px;
  464. width: 12%;
  465. cursor: pointer;
  466. text-align: center;
  467. position: absolute;
  468. right: 0;
  469. bottom: 0;
  470. }
  471. .dialogInfoBg {
  472. background: url(../../../assets/largeScreenImg/zaiyunAndqianqi/dialogBg.png) 100% no-repeat;
  473. background-size: 100% 100%;
  474. padding: 1%;
  475. width: 25%;
  476. position: absolute;
  477. top: 20%;
  478. left: 35%;
  479. }
  480. .dialogRightTextBtu {
  481. position: absolute;
  482. top: 0;
  483. right: 1%;
  484. width: 20%;
  485. }
  486. .tiltleLeftSign {
  487. width: 12px;
  488. height: 30px;
  489. margin-top: 1%;
  490. margin-right: 4%;
  491. }
  492. .dialogStationInfoBox {
  493. margin-top: 4%;
  494. display: flex;
  495. flex-wrap: wrap;
  496. }
  497. .dialogInfoTitle {
  498. cursor: pointer;
  499. width: 50%;
  500. line-height: 35px;
  501. display: flex;
  502. align-items: center;
  503. }
  504. .kaiguanBox{
  505. cursor: pointer;
  506. position: absolute;
  507. left: 22%;
  508. top: .5%;
  509. }
  510. </style>