emailResourcesInfo.vue 18 KB

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