projectInfo.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <template>
  2. <div class="page projectInfoPage">
  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="pushProjectEvolve()">
  12. <span class="btuText">进展情况</span>
  13. </div>
  14. <div class="topBtu topRightBtu" @click="push()">
  15. <span class="btuText">后台管理</span>
  16. </div>
  17. </div>
  18. <div class="myMain-container">
  19. <div class="rightTextBg">
  20. <div class="rightBg topBox">
  21. <div class="rightTiltleTextBg">
  22. <div class="rightMainTitle">
  23. <span class="mainTitle" @click="pushInfo()">{{ projectName }}</span>
  24. </div>
  25. </div>
  26. <div class="rightTextMain">
  27. <div class="branckTitleBg">
  28. <img
  29. class="tiltleLeftSign"
  30. referrerpolicy="no-referrer"
  31. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  32. />
  33. <span class="branckTitle">项目概述</span>
  34. </div>
  35. <div class="mainContent">
  36. <span class="content">{{ projectOverview }}</span>
  37. </div>
  38. <div class="branckTitleBg">
  39. <img
  40. class="tiltleLeftSign"
  41. referrerpolicy="no-referrer"
  42. src="../../../assets/largeScreenImg/index/tiltleLeftSign.png"
  43. />
  44. <span class="branckTitle">项目风力资源概况</span>
  45. </div>
  46. <div class="mainContent">
  47. <span class="content">{{ resourcesOverview }}</span>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. <div class="mapBtuBg">
  53. <div id="mapBtuOne" class="mapBtu mapBtuBefore" @click="clickBtu('mapBtuOne')">
  54. <span class="mapBtuText">地形图</span>
  55. </div>
  56. <!-- <div id="mapBtuTwo" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuTwo')">-->
  57. <!-- <span class="mapBtuText">风场气象图</span>-->
  58. <!-- </div>-->
  59. <div id="mapBtuThree" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuThree')">
  60. <span class="mapBtuText">风资源分布图</span>
  61. </div>
  62. <!-- <div id="mapBtuFour" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuFour')">-->
  63. <!-- <span class="mapBtuText">光辐射气象图</span>-->
  64. <!-- </div>-->
  65. <div id="mapBtuFive" class="mapBtu mapBtuAfter" @click="clickBtu('mapBtuFive')">
  66. <span class="mapBtuText">光资源分布图</span>
  67. </div>
  68. </div>
  69. </div>
  70. <div v-if="mapMark === 'mapBtuOne'">
  71. <bige-map :mapValue="mapValue"/>
  72. </div>
  73. <div v-if="mapMark === 'mapBtuThree'">
  74. <bige-heat-map :mapValue="mapValue"/>
  75. </div>
  76. <div v-if="mapMark === 'mapBtuFive'">
  77. <bige-heat-sun-map :mapValue="mapValue"/>
  78. </div>
  79. <div class="bottomPushBtu" @click="pushPreProjectResource()">
  80. <span>前期项目资源信息</span>
  81. </div>
  82. </div>
  83. </template>
  84. <script>
  85. import {projectMapInfo,getPointMap} from "@/api/biz/dataQuery/largeScreenPage";
  86. import bigeMap from "@/views/largeScreenPage/components/bigeMap";
  87. import bigeHeatMap from "@/views/largeScreenPage/components/bigeHeatMap";
  88. import bigeHeatSunMap from "@/views/largeScreenPage/components/bigeHeatSunMap";
  89. export default {
  90. name: "projectInfo",
  91. components: {
  92. bigeMap, bigeHeatMap,bigeHeatSunMap
  93. },
  94. data() {
  95. return {
  96. timer: null,
  97. time: '',
  98. project: {},
  99. projectName: '',
  100. coordinates:[],//中心点坐标
  101. // projectOverview: '依兰县位于黑龙江省中南部。 黑龙江华电哈尔滨依兰鸡冠山四期200MW风电项目中心位于黑龙江省哈尔滨市依兰县东侧15km的鸡冠砬子山上,整个场址为低山丘陵区,场区实际可利用面积约63km2。',
  102. projectOverview: '',
  103. // resourcesOverview: '根据风能资源推测120m数据分析,年平均风速为8.007m/s,平均风功率密度为567W/m²,属于3级风场。主风向为WSW,次风向为W,空气密度为1.2kg/m³。'
  104. resourcesOverview: '',
  105. mapMark: 'mapBtuOne',
  106. //地图传值
  107. mapValue: {
  108. level: null,//地图层级
  109. center: [],//中心坐标
  110. allStationInfo: null,//场站坐标
  111. projectInfo: null,//项目坐标
  112. allPointInfo:null,//所有点位信息
  113. },
  114. allPointInfo:[]
  115. }
  116. },
  117. destroyed() {
  118. clearInterval(this.timer)
  119. this.timer = null
  120. },
  121. mounted() {
  122. this.getPointMap()
  123. this.formatTime()
  124. this.timer = setInterval(this.formatTime, 1000 * 60)
  125. },
  126. methods: {
  127. /*所有风机、塔、拐点坐标信息*/
  128. getPointMap(){
  129. if(this.$store.getters.allPointInfo.length>0){
  130. this.allPointInfo = JSON.parse(this.$store.getters.allPointInfo).info
  131. this.getInfo()
  132. }else {
  133. getPointMap().then(res=>{
  134. // console.log(res.data)
  135. this.allPointInfo = res.data
  136. this.getInfo()
  137. sessionStorage.setItem("allPointInfo", JSON.stringify({info:this.allPointInfo}))
  138. this.$store.dispatch('equipmentInfo/allPointInfo', JSON.stringify({info:this.allPointInfo}))
  139. }).catch(err=>{
  140. console.log('所有点位坐标:'+err)
  141. })
  142. }
  143. },
  144. getInfo() {
  145. this.project = JSON.parse(this.$store.getters.projectInfo)
  146. let name = this.project.projectSort
  147. if (name.indexOf('黑龙江华电哈尔滨') != -1) {
  148. name = name.replace("黑龙江华电哈尔滨", "")
  149. } else if (name.indexOf('黑龙江华电齐齐哈尔') != -1) {
  150. name = name.replace("黑龙江华电齐齐哈尔", "")
  151. } else if (name.indexOf('黑龙江华电佳木斯') != -1) {
  152. name = name.replace("黑龙江华电佳木斯", "")
  153. } else {
  154. name = name.replace("黑龙江华电", "")
  155. }
  156. this.projectName = name
  157. this.getProjectInfo(this.project.id)
  158. },
  159. // 获取项目信息
  160. getProjectInfo(projectId) {
  161. projectMapInfo({projectId:projectId}).then(res=>{
  162. let data = res.data
  163. this.projectOverview = data.projectOverview
  164. this.resourcesOverview = data.resourcesOverview
  165. this.coordinates = [Number(data.latitude),Number(data.longitude)]
  166. this.mapValue ={
  167. params: new Date(),
  168. level: 12,//地图层级
  169. center: this.coordinates,//中心坐标
  170. allStationInfo: null,//场站坐标
  171. projectInfo: null,//项目坐标
  172. allPointInfo:this.allPointInfo,//所有点位信息
  173. }
  174. }).catch(err=>{
  175. console.log('单个项目信获取异常:'+err)
  176. })
  177. },
  178. push() {
  179. this.$router.push({path: "/dataQuery/windTowerStatusInfo"})
  180. },
  181. pushProjectEvolve() {
  182. this.$router.push({path: "/homepage/projectEvolve"})
  183. },
  184. pushInfo() {
  185. let project = {projectId:this.project.id,equipmentNo:null}
  186. sessionStorage.setItem("emailWindTowerInfo", JSON.stringify(project))
  187. this.$store.dispatch('equipmentInfo/emailWindTowerInfo', JSON.stringify(project))
  188. this.$router.push({path: "/homepage/emailResourcesInfo"})
  189. },
  190. back() {
  191. this.$router.push({path: "/homepage/preProjectResources"})
  192. },
  193. pushPreProjectResource() {
  194. this.$router.push({path: "/homepage/preProjectResources"})
  195. },
  196. clickBtu(id) {
  197. this.mapValue ={
  198. params: new Date(),
  199. level: 12,//地图层级
  200. center: this.coordinates,//中心坐标
  201. allStationInfo: null,//场站坐标
  202. projectInfo: null,//项目坐标
  203. allPointInfo:this.allPointInfo,//所有点位信息
  204. }
  205. this.mapMark = id
  206. let clickItem = document.getElementById(id)
  207. let activeItem = document.querySelector('.mapBtuBefore')
  208. activeItem.classList.remove('mapBtuBefore')
  209. activeItem.classList.add('mapBtuAfter')
  210. clickItem.classList.remove('mapBtuAfter')
  211. clickItem.classList.add('mapBtuBefore')
  212. },
  213. /*时间格式化*/
  214. formatTime() {
  215. this.time = ''
  216. let date = new Date()
  217. let year = date.getFullYear(); // 年
  218. let month = date.getMonth() + 1; // 月
  219. let day = date.getDate();
  220. let hour = date.getHours(); // 获取当前小时数(0-23)
  221. let minutes = date.getMinutes();
  222. if (month < 10) month = "0" + month;
  223. if (day < 10) day = "0" + day;
  224. if (minutes < 10) minutes = "0" + minutes;
  225. this.time = year + "-" + month + "-" + day + " " + hour + ' : ' + minutes;
  226. }
  227. }
  228. }
  229. </script>
  230. <style scoped>
  231. .projectInfoPage {
  232. width: 100%;
  233. height: calc(100vh);
  234. background: url(../../../assets/largeScreenImg/backBg.png) no-repeat;
  235. background-size: 100% 100%;
  236. color: white;
  237. }
  238. .timeBox {
  239. position: absolute;
  240. left: 2%;
  241. top: 0;
  242. font-size: 20px;
  243. line-height: 40px;
  244. font-family: timeFont !important;
  245. }
  246. .page {
  247. position: fixed;
  248. top: 0;
  249. left: 0;
  250. bottom: 0;
  251. right: 0;
  252. overflow: auto;
  253. box-shadow: inset -1px -20px 550px 200px rgb(12 25 69 / 80%);
  254. }
  255. .topTiltle {
  256. width: 100%;
  257. height: 5.5%;
  258. background: url(../../../assets/largeScreenImg/index/topTitleBg.png) -2px -1px no-repeat;
  259. background-size: 100% 100%;
  260. display: flex;
  261. justify-content: center;
  262. }
  263. .title {
  264. width: 17%;
  265. height: 100%;
  266. text-align: center;
  267. margin-top: .2%;
  268. font-size: 30px;
  269. font-weight: 800;
  270. background-image: linear-gradient(
  271. 360deg,
  272. rgba(178, 204, 252, 1) 0,
  273. rgba(178, 204, 252, 1) 0,
  274. rgba(255, 255, 255, 1) 100%,
  275. rgba(255, 255, 255, 1) 100%
  276. );
  277. background-clip: text;
  278. color: transparent;
  279. }
  280. .btuGroup {
  281. position: absolute;
  282. right: 0;
  283. top: 0;
  284. color: white;
  285. width: 20%;
  286. height: 5.5%;
  287. display: flex;
  288. justify-content: flex-end;
  289. font-size: 18px;
  290. }
  291. .topBtu {
  292. height: 100%;
  293. margin-top: -1.5%;
  294. display: flex;
  295. justify-content: center;
  296. align-items: center;
  297. cursor: pointer;
  298. }
  299. .topRightBtu {
  300. background: url(../../../assets/largeScreenImg/index/topRightBtuBg.png) 100% no-repeat;
  301. background-size: 100% 100%;
  302. width: 50%;
  303. }
  304. .topLeftBtu {
  305. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  306. background-size: 100% 100%;
  307. width: 35%;
  308. }
  309. .rightTextBg {
  310. position: absolute;
  311. right: 2%;
  312. top: 8%;
  313. width: 20%;
  314. display: flex;
  315. flex-direction: column;
  316. z-index: 100000;
  317. }
  318. .rightBg {
  319. background: url(../../../assets/largeScreenImg/index/leftTextBg.png) 100% no-repeat;
  320. background-size: 100% 100%;
  321. padding: 5%;
  322. }
  323. .mapBtuBg {
  324. position: absolute;
  325. right: 22%;
  326. top: 7%;
  327. width: 10%;
  328. z-index: 100000;
  329. }
  330. .rightTiltleTextBg {
  331. height: 32px;
  332. background: url(../../../assets/largeScreenImg/zaiyunAndqianqi/rightTitleBg.png) 100% no-repeat;
  333. background-size: 100% 100%;
  334. }
  335. .rightMainTitle {
  336. color: rgba(183, 243, 252, 1);
  337. font-size: 20px;
  338. font-weight: 550;
  339. margin-left: 8%;
  340. position: relative;
  341. top: -25%;
  342. }
  343. .mapBtu {
  344. height: 50px;
  345. width: 200px;
  346. }
  347. .mapBtuAfter {
  348. background: url(../../../assets/largeScreenImg/index/mapBtuClickAfter.png) 100% no-repeat;
  349. background-size: 100% 100%;
  350. }
  351. .mapBtuBefore {
  352. background: url(../../../assets/largeScreenImg/index/mapBtuClickBefore.png) 100% no-repeat;
  353. background-size: 100% 100%;
  354. margin-top: 9px;
  355. }
  356. .mapBtuText {
  357. line-height: 50px;
  358. font-size: 16px;
  359. display: flex;
  360. align-items: center;
  361. margin-left: 20%;
  362. }
  363. .bottomPushBtu {
  364. background: url(../../../assets/largeScreenImg/index/topLeftBtuBg.png) 100% no-repeat;
  365. background-size: 100% 100%;
  366. line-height: 60px;
  367. width: 12%;
  368. cursor: pointer;
  369. text-align: center;
  370. position: absolute;
  371. right: 0;
  372. bottom: 0;
  373. }
  374. .branckTitleBg {
  375. display: flex;
  376. align-items: center;
  377. margin-top: 4%;
  378. }
  379. .mainContent {
  380. margin-left: 6%;
  381. }
  382. .tiltleLeftSign {
  383. width: 12px;
  384. height: 30px;
  385. margin-top: 1%;
  386. margin-right: 4%;
  387. }
  388. </style>