realResourcesInfo.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. <template>
  2. <div class="page emailResourcesInfoPage">
  3. <div class="timeBox">{{ time }}</div>
  4. <div class="topTiltle">
  5. <!-- <span class="title">在 运 资 源 信 息</span>-->
  6. <img
  7. class="titleImg"
  8. referrerpolicy="no-referrer"
  9. src="../../../assets/largeScreenImg/textImg/realResourcesInfoPage.png"
  10. />
  11. </div>
  12. <div class="btuGroup">
  13. <div class="topBtu topLeftBtu" @click="back()">
  14. <span class="btuText">返回&nbsp;</span>
  15. </div>
  16. <div class="topBtu topRightBtu" @click="push()">
  17. <span class="btuText">后台管理</span>
  18. </div>
  19. </div>
  20. <div class="myMain-container">
  21. <div class="main-content">
  22. <!-- 主体上半部分 -->
  23. <div class="main-top">
  24. <div class="mainBg main-top-left">
  25. <!-- 标题-->
  26. <div class="leftTiltleTextBg">
  27. <div class="tiltle" style="margin-left: 2%;top: -53%;">
  28. <div class="rSelect">
  29. <div class="projectSelect">
  30. <el-select class="choiceSelect" v-model="stationId" placeholder="请选择" size="small"
  31. :popper-append-to-body="false"
  32. @change="changeStation"
  33. style="width: 100%">
  34. <el-option
  35. v-for="(item,index) in stationOption"
  36. :key="index"
  37. :label="item.label"
  38. :value="item.value">
  39. </el-option>
  40. </el-select>
  41. </div>
  42. <div class="towerSelect">
  43. <el-select class="choiceSelect" v-model="cftNo" placeholder="请选择" size="small"
  44. :popper-append-to-body="false"
  45. @change="changeTower"
  46. style="width: 100%">
  47. <el-option
  48. v-for="(item,index) in towerOption"
  49. :key="index"
  50. :label="item.label"
  51. :value="item.value">
  52. </el-option>
  53. </el-select>
  54. </div>
  55. </div>
  56. </div>
  57. </div>
  58. <!-- 内容 -->
  59. <div class="infoContent">
  60. <div class="textInfo">
  61. <span class="textInfoTitle">测风塔基础信息</span>
  62. <div class="textInfoContent">
  63. <div><span>经度:{{ stationInfo.longitude }}</span><span
  64. style="margin-left: 3%">纬度:{{ stationInfo.latitude }}</span></div>
  65. </div>
  66. </div>
  67. <div class="textInfo" style="margin-top: 1%">
  68. <span class="textInfoTitle">场站发电信息</span>
  69. <div class="textInfoContent">
  70. <div><span>主风向:{{ stationInfo.wd }}</span></div>
  71. <div><span>平均风速:{{ stationInfo.wsAve }} m/s</span></div>
  72. <div><span>等效利用小数:{{ stationInfo.hour }} h</span></div>
  73. </div>
  74. </div>
  75. <div class="hexagonContent">
  76. <div class="contentBox" style="margin-top: .5%">
  77. <span class="numberBox">{{ stationInfo.batteryDay }}</span>
  78. <span class="textBox">昨日发电量</span>
  79. <span class="numberBox" style="font-size: 14px">MWh</span>
  80. </div>
  81. <div class="contentBox" style="margin-top: .5%">
  82. <span class="numberBox">{{ stationInfo.batteryMonth }}</span>
  83. <span class="textBox">月发电量</span>
  84. <span class="numberBox" style="font-size: 14px">MWh</span>
  85. </div>
  86. <div class="contentBox" style="margin-top: .5%">
  87. <span class="numberBox">{{ stationInfo.power }}</span>
  88. <span class="textBox">年发电量</span>
  89. <span class="numberBox" style="font-size: 14px">MWh</span>
  90. </div>
  91. <!-- <div class="contentBox">-->
  92. <!-- <span class="numberBox">{{ stationInfo.hour }}<span style="font-size: 14px">h</span></span>-->
  93. <!-- <span class="textBox">等效利用小数</span>-->
  94. <!-- </div>-->
  95. </div>
  96. </div>
  97. </div>
  98. <div class="mainBg main-top-center">
  99. <!-- 标题-->
  100. <div class="topCenterTiltleTextBg">
  101. <div class="topCenterTitle tiltle">
  102. <span class="mainTitle">平均风速对比</span>
  103. </div>
  104. </div>
  105. <!-- 内容 -->
  106. <div>
  107. <ws-charts :cftInfo="cftInfo"/>
  108. </div>
  109. </div>
  110. </div>
  111. <!-- 主体下半部分 -->
  112. <div class="main-bottom">
  113. <div class="mainBg main-bottom-left">
  114. <!-- 标题-->
  115. <div class="rightTiltleTextBg">
  116. <div class="tiltle">
  117. <span class="mainTitle">环境数据</span>
  118. </div>
  119. </div>
  120. <!-- 内容 -->
  121. <div class="infoContent">
  122. <div class="hexagonContent">
  123. <div class="contentBox">
  124. <span class="numberBox">{{ environmentInfo.airDensity }}</span>
  125. <span class="textBox">空气密度</span>
  126. </div>
  127. <div class="contentBox">
  128. <span class="numberBox">{{ environmentInfo.t }}</span>
  129. <span class="textBox">温度(℃)</span>
  130. </div>
  131. <div class="contentBox">
  132. <span class="numberBox">{{ environmentInfo.pa }}</span>
  133. <span class="textBox">压强(hPa)</span>
  134. </div>
  135. </div>
  136. <div class="infoContentBottom">
  137. <div style="display: flex;">
  138. <div style="width: 55%">
  139. <img
  140. class="tiltleLeftSign"
  141. referrerpolicy="no-referrer"
  142. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  143. />
  144. {{ height }}m 湍流
  145. </div>
  146. <div>
  147. <img
  148. class="tiltleLeftSign"
  149. referrerpolicy="no-referrer"
  150. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  151. />
  152. 综合风切变
  153. </div>
  154. </div>
  155. <div class="windDataBox">
  156. <div class="windDataBg">
  157. <img
  158. class="windSign"
  159. referrerpolicy="no-referrer"
  160. src="../../../assets/largeScreenImg/resourcesInfo/windSign.png"
  161. />
  162. <div class="dataBox">
  163. <span class="dataContent">{{ environmentInfo.turbulent }}</span>
  164. <span>湍流</span>
  165. </div>
  166. </div>
  167. <div class="windDataBg">
  168. <img
  169. class="windSign"
  170. referrerpolicy="no-referrer"
  171. src="../../../assets/largeScreenImg/resourcesInfo/windSign.png"
  172. />
  173. <div class="dataBox">
  174. <span class="dataContent">{{ environmentInfo.windShear }}</span>
  175. <span>风切变</span>
  176. </div>
  177. </div>
  178. </div>
  179. </div>
  180. </div>
  181. </div>
  182. <div class="mainBg main-bottom-center">
  183. <!-- 标题-->
  184. <div class="centerTiltleTextBg">
  185. <div class="centerTitle tiltle">
  186. <span class="mainTitle">风向玫瑰图</span>
  187. </div>
  188. </div>
  189. <!-- 内容 -->
  190. <div>
  191. <wd-charts :cftInfo="cftInfo"/>
  192. </div>
  193. </div>
  194. <div class="mainBg main-bottom-right">
  195. <!-- 标题-->
  196. <div class="rightTiltleTextBg">
  197. <div class="tiltle">
  198. <span class="mainTitle">风能玫瑰图</span>
  199. </div>
  200. </div>
  201. <!-- 内容 -->
  202. <div>
  203. <wd-power-charts :cftInfo="cftInfo"/>
  204. </div>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. <div class="bottomPushBtu" @click="pushStationResource()">
  210. <span>在运风光场站资源管理</span>
  211. </div>
  212. </div>
  213. </template>
  214. <script>
  215. import {selectStationTForAir} from "@/api/biz/dataQuery/homePage";
  216. import {stationSelect} from "@/api/biz/dataQuery/largeScreenPage";
  217. import wdCharts from '../components/wdCharts'
  218. import wdPowerCharts from '../components/wdPowerCharts'
  219. import WsCharts from "@/views/largeScreenPage/components/wsCharts";
  220. export default {
  221. name: "realResourcesInfo",
  222. components: {WsCharts, wdCharts, wdPowerCharts},
  223. data() {
  224. return {
  225. timer: null,
  226. time: '',
  227. realWindTowerInfo: {},
  228. cftInfo: {equipmentNo: '006171', wdHeights: '120,80,10'},
  229. height: '140',
  230. wdHeight: '',
  231. stationId: '1',
  232. stationOption: [{id: '1', stationName: '穆棱风电场'}],//项目列表
  233. cftNo: '8009',
  234. towerOption: [{value: '8009', label: '穆棱8009'}],//塔列表
  235. stationInfo: {
  236. latitude: '46.24',
  237. longitude: '129.8',
  238. wd: 'SSW',
  239. hour: '2.98',
  240. power: '229.9'
  241. },
  242. environmentInfo: {
  243. airDensity: '1.27',
  244. t: '21.56',
  245. pa: '1003.25',
  246. turbulent: '0.09',
  247. windShear: '0.42'
  248. }
  249. }
  250. },
  251. destroyed() {
  252. clearInterval(this.timer)
  253. this.timer = null
  254. },
  255. mounted() {
  256. this.realWindTowerInfo = JSON.parse(this.$store.getters.realWindTowerInfo)
  257. this.formatTime()
  258. this.getStationSelect()
  259. this.timer = setInterval(this.formatTime, 1000 * 60)
  260. },
  261. methods: {
  262. getStationSelect() {
  263. stationSelect().then(res => {
  264. console.log(res.data)
  265. this.stationOption = res.data
  266. if (this.realWindTowerInfo !== undefined) {
  267. this.stationId = this.realWindTowerInfo.stationId
  268. let station = this.stationOption.find(w => w.value === this.stationId)
  269. this.towerOption = station.equipmentDto
  270. if (this.realWindTowerInfo.equipmentNo !== null && this.realWindTowerInfo.equipmentNo !== undefined) {
  271. this.cftNo = this.realWindTowerInfo.equipmentNo
  272. let towerInfo = this.towerOption.find(w => w.value === this.cftNo)
  273. this.wdHeight = towerInfo.wdHeight
  274. } else {
  275. this.cftNo = this.towerOption[0].value
  276. this.wdHeight = this.towerOption[0].wdHeight
  277. }
  278. } else {
  279. this.stationId = this.stationOption[0].value
  280. this.towerOption = this.stationOption[0].equipmentDto
  281. this.cftNo = this.towerOption[0].value
  282. this.wdHeight = this.towerOption[0].wdHeight
  283. }
  284. this.cftInfo = {equipmentNo: this.cftNo, wdHeights: this.wdHeight}
  285. this.getTowerInfo()
  286. }).catch(err => {
  287. console.log('获取场站列表失败:' + err)
  288. })
  289. },
  290. getTowerInfo() {
  291. selectStationTForAir({stationId: this.stationId, equipmentId: this.cftNo, month: ''}).then(res => {
  292. // console.log(res.data)
  293. let data = res.data
  294. this.stationInfo = {
  295. latitude: data.latitude,
  296. longitude: data.longitude,
  297. wd: data.wdSum,
  298. hour: data.hour,
  299. power: data.battery.replace(/\.?0+$/, ""),// 去掉尾部的0
  300. wsAve: data.wsAve.replace(/\.?0+$/, ""),
  301. batteryDay: data.batteryDay.replace(/\.?0+$/, ""),
  302. batteryMonth: data.batteryMonth.replace(/\.?0+$/, "")
  303. }
  304. this.environmentInfo = {
  305. airDensity: data.air,
  306. t: data.t,
  307. pa: data.pa,
  308. turbulent: data.turbulence,
  309. windShear: data.windShear
  310. }
  311. }).catch(err => {
  312. console.log('获取测风塔基本信息:' + err)
  313. })
  314. },
  315. // 改变场站下拉框
  316. changeStation() {
  317. let station = this.stationOption.find(w => w.value === this.stationId)
  318. this.towerOption = station.equipmentDto
  319. this.cftNo = this.towerOption[0].value
  320. this.wdHeight = this.towerOption[0].wdHeight
  321. this.cftInfo = {equipmentNo: this.cftNo, wdHeights: this.wdHeight}
  322. this.getTowerInfo()
  323. },
  324. // 改变塔信息下拉框
  325. changeTower() {
  326. let towerInfo = this.towerOption.find(w => w.value === this.cftNo)
  327. this.cftInfo = {equipmentNo: this.cftNo, wdHeights: towerInfo.wdHeight}
  328. this.getTowerInfo()
  329. },
  330. push() {
  331. this.$router.push({path: "/dataQuery/windTowerStatusInfo"})
  332. },
  333. back() {
  334. this.$router.push({path: "/homepage/stationInfo"})
  335. },
  336. pushStationResource() {
  337. this.$router.push({path: "/homepage/stationResources"})
  338. },
  339. /*时间格式化*/
  340. formatTime() {
  341. this.time = ''
  342. let date = new Date()
  343. let year = date.getFullYear(); // 年
  344. let month = date.getMonth() + 1; // 月
  345. let day = date.getDate();
  346. let hour = date.getHours(); // 获取当前小时数(0-23)
  347. let minutes = date.getMinutes();
  348. if (month < 10) month = "0" + month;
  349. if (day < 10) day = "0" + day;
  350. if (minutes < 10) minutes = "0" + minutes;
  351. this.time = year + "-" + month + "-" + day + " " + hour + ' : ' + minutes;
  352. }
  353. }
  354. }
  355. </script>
  356. <style scoped>
  357. .emailResourcesInfoPage {
  358. width: 100%;
  359. height: calc(100vh);
  360. /*background: url(../../../assets/largeScreenImg/backBg.png) no-repeat;*/
  361. /*background-size: 100% 100%;*/
  362. background: #030F1A;
  363. color: white;
  364. }
  365. .timeBox {
  366. position: absolute;
  367. left: 2%;
  368. top: 0;
  369. font-size: 20px;
  370. line-height: 40px;
  371. font-family: timeFont !important;
  372. }
  373. .page {
  374. position: fixed;
  375. top: 0;
  376. left: 0;
  377. bottom: 0;
  378. right: 0;
  379. overflow: auto;
  380. box-shadow: inset -1px -20px 550px 200px rgb(12 25 69 / 80%);
  381. }
  382. .topTiltle {
  383. width: 100%;
  384. height: 5.5%;
  385. background: url(../../../assets/largeScreenImg/index/topTitleBg.png) -2px -1px no-repeat;
  386. background-size: 100% 100%;
  387. display: flex;
  388. justify-content: center;
  389. }
  390. .titleImg {
  391. width: 11%;
  392. height: 60%;
  393. margin-top: .5%;
  394. }
  395. .title {
  396. width: 17%;
  397. height: 100%;
  398. text-align: center;
  399. margin-top: .2%;
  400. font-size: 30px;
  401. font-weight: 800;
  402. background-image: linear-gradient(
  403. 360deg,
  404. rgba(178, 204, 252, 1) 0,
  405. rgba(178, 204, 252, 1) 0,
  406. rgba(255, 255, 255, 1) 100%,
  407. rgba(255, 255, 255, 1) 100%
  408. );
  409. background-clip: text;
  410. color: transparent;
  411. }
  412. .btuGroup {
  413. position: absolute;
  414. right: 0;
  415. top: 0;
  416. color: white;
  417. width: 15%;
  418. height: 5.5%;
  419. display: flex;
  420. justify-content: flex-end;
  421. font-size: 18px;
  422. }
  423. .topBtu {
  424. height: 100%;
  425. margin-top: -1.5%;
  426. display: flex;
  427. justify-content: center;
  428. align-items: center;
  429. cursor: pointer;
  430. }
  431. .topRightBtu {
  432. background: url(../../../assets/largeScreenImg/index/topRightBtuBg.png) 100% no-repeat;
  433. background-size: 100% 100%;
  434. width: 50%;
  435. }
  436. .topLeftBtu {
  437. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  438. background-size: 100% 100%;
  439. width: 35%;
  440. }
  441. .mainBg {
  442. background: url(../../../assets/largeScreenImg/index/leftTextBg.png) 100% no-repeat;
  443. background-size: 100% 100%;
  444. padding: 1%;
  445. }
  446. .main-content {
  447. width: 100%;
  448. height: calc(91vh);
  449. display: flex;
  450. flex-direction: column;
  451. justify-content: space-evenly;
  452. }
  453. .main-top, .main-bottom {
  454. height: 46%;
  455. display: flex;
  456. justify-content: space-evenly;
  457. }
  458. .main-top-left, .main-bottom-left {
  459. width: 25%;
  460. }
  461. .main-bottom-right {
  462. width: 25%;
  463. }
  464. .main-top-center {
  465. width: 71.5%
  466. }
  467. .main-bottom-center {
  468. width: 45%;
  469. }
  470. .rightTiltleTextBg {
  471. height: 32px;
  472. background: url(../../../assets/largeScreenImg/resourcesInfo/rightTitleBg.png) 100% no-repeat;
  473. background-size: 100% 100%;
  474. }
  475. .leftTiltleTextBg {
  476. margin-top: 7px;
  477. height: 25px;
  478. background: url(../../../assets/largeScreenImg/resourcesInfo/leftTitleBg.png) 100% no-repeat;
  479. background-size: 100% 100%;
  480. }
  481. .centerTiltleTextBg {
  482. height: 32px;
  483. background: url(../../../assets/largeScreenImg/resourcesInfo/centerTitleBg.png) 100% no-repeat;
  484. background-size: 100% 100%;
  485. }
  486. .topCenterTiltleTextBg {
  487. height: 32px;
  488. background: url(../../../assets/largeScreenImg/zaiyunAndqianqi/projectEvolveTitleBg.png) 100% no-repeat;
  489. background-size: 99.9% 100%;
  490. }
  491. .tiltle {
  492. color: rgba(183, 243, 252, 1);
  493. font-size: 20px;
  494. font-weight: 550;
  495. margin-left: 8%;
  496. position: relative;
  497. top: -25%;
  498. }
  499. .rSelect {
  500. display: flex;
  501. justify-content: space-between;
  502. align-items: center;
  503. }
  504. .projectSelect {
  505. height: 34px;
  506. width: 200px;
  507. background: url(../../../assets/largeScreenImg/resourcesInfo/projectBg.png) 100% no-repeat;
  508. background-size: 100% 100%;
  509. }
  510. .towerSelect {
  511. height: 30px;
  512. width: 200px;
  513. background: url(../../../assets/largeScreenImg/resourcesInfo/towerBg.png) 100% no-repeat;
  514. background-size: 100% 100%;
  515. }
  516. .rSelect /deep/ .el-input--small .el-input__inner {
  517. background: transparent;
  518. border: 0;
  519. color: white;
  520. font-size: 16px;
  521. }
  522. .projectSelect /deep/ .el-input--small .el-input__inner {
  523. margin-left: 5%;
  524. margin-top: 1%;
  525. }
  526. .rSelect /deep/ .el-select .el-input .el-select__caret {
  527. color: #ffffff;
  528. }
  529. .centerTitle {
  530. margin-left: 5%;
  531. }
  532. .topCenterTitle {
  533. margin-left: 2.5%;
  534. }
  535. .hexagonContent {
  536. display: flex;
  537. justify-content: space-around;
  538. flex-wrap: wrap;
  539. }
  540. .infoContentBottom {
  541. margin-top: 2%;
  542. }
  543. .textInfo {
  544. color: #00FFDE;
  545. line-height: 30px;
  546. font-size: 18px;
  547. margin-top: 3%;
  548. }
  549. .textInfoTitle {
  550. color: white;
  551. padding: 1% 1% 1% 3%;
  552. background: url(../../../assets/largeScreenImg/resourcesInfo/titleBg.png) 100% no-repeat;
  553. background-size: 100% 100%;
  554. }
  555. .textInfoContent {
  556. margin-left: 3%;
  557. }
  558. .contentBox {
  559. margin-top: 5%;
  560. width: 30%;
  561. height: 125px;
  562. background: url(../../../assets/largeScreenImg/index/liubianxingBorder.png) 100% no-repeat;
  563. background-size: 100% 100%;
  564. display: flex;
  565. flex-direction: column;
  566. justify-content: center;
  567. align-items: center;
  568. }
  569. .numberBox {
  570. font-size: 24px;
  571. font-weight: 700;
  572. background-image: linear-gradient(
  573. rgba(255, 255, 255, 1) 0,
  574. rgba(255, 255, 255, 1) 0,
  575. rgba(70, 255, 222, 1) 98.730469%,
  576. rgba(70, 255, 222, 1) 100%
  577. );
  578. background-clip: text;
  579. color: transparent;
  580. }
  581. .tiltleLeftSign {
  582. width: 10px;
  583. height: 15px;
  584. }
  585. .windDataBox {
  586. display: flex;
  587. justify-content: space-between;
  588. margin-top: 2%;
  589. }
  590. .windDataBg {
  591. height: 130px;
  592. width: 45%;
  593. background: url(../../../assets/largeScreenImg/resourcesInfo/envirBg.png) 100% no-repeat;
  594. background-size: 100% 100%;
  595. display: flex;
  596. align-items: center;
  597. justify-content: center;
  598. }
  599. .windSign {
  600. width: 79px;
  601. height: 72px;
  602. }
  603. .dataBox {
  604. width: 45%;
  605. display: flex;
  606. flex-direction: column;
  607. align-items: center;
  608. justify-content: center;
  609. }
  610. .dataContent {
  611. font-size: 28px;
  612. font-family: timeFont !important;
  613. background: linear-gradient(0deg, #9CF472 0%, #FFFFFF 99.12109375%);
  614. -webkit-background-clip: text;
  615. -webkit-text-fill-color: transparent;
  616. }
  617. .bottomPushBtu {
  618. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  619. background-size: 100% 100%;
  620. line-height: 60px;
  621. width: 12%;
  622. cursor: pointer;
  623. text-align: center;
  624. position: absolute;
  625. right: 0;
  626. bottom: 0;
  627. }
  628. </style>