modeControl.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="body">
  3. <div class="control">
  4. <div :class="current===0?'smart_on':'smart'" @click="ChangeBar(0)">智能</div>
  5. <div :class="current===1?'recommend_on':'recommend'" @click="ChangeBar(1)">推荐</div>
  6. <div :class="current===2?'manual_on':'manual'" @click="ChangeBar(2)">手动</div>
  7. </div>
  8. <div class="dataArea">
  9. <div class="dataBlock">
  10. <div class="dataName">风能利用率</div>
  11. <div class="numerical">
  12. <div class="data">
  13. <div class="values">{{datas.windEnergyRate}}</div>
  14. <div class="unit">%</div>
  15. </div>
  16. <img v-if="winFlag === 1" class="images" src="../../assets/img/type/up.png" alt="">
  17. <img v-if="winFlag === 2" class="images" src="../../assets/img/type/down.png" alt="">
  18. <div v-if="winFlag === 0" class="images_none"></div>
  19. </div>
  20. </div>
  21. <div class="dataBlock">
  22. <div class="dataName">曲线跟随率</div>
  23. <div class="numerical">
  24. <div class="data">
  25. <div class="values">{{datas.curveFollowingRate}}</div>
  26. <div class="unit">%</div>
  27. </div>
  28. <img v-if="curveFlag === 1" class="images" src="../../assets/img/type/up.png" alt="">
  29. <img v-if="curveFlag === 2" class="images" src="../../assets/img/type/down.png" alt="">
  30. <div v-if="curveFlag === 0" class="images_none"></div>
  31. </div>
  32. </div>
  33. <div class="dataBlock">
  34. <div class="dataName">场用电率</div>
  35. <div class="numerical">
  36. <div class="data">
  37. <div class="values">{{datas.fieldElectricityRate}}</div>
  38. <div class="unit">%</div>
  39. </div>
  40. <img v-if="fieldFlag === 1" class="images" src="../../assets/img/type/up.png" alt="">
  41. <img v-if="fieldFlag === 2" class="images" src="../../assets/img/type/down.png" alt="">
  42. <div v-if="fieldFlag === 0" class="images_none"></div>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. </template>
  48. <script>
  49. import BackgroundData from 'utils/BackgroundData'
  50. import api from "api/index";
  51. export default {
  52. props: {
  53. current: {
  54. type: Number,
  55. },
  56. },
  57. data() {
  58. return {
  59. current: 1,
  60. datas: {},
  61. winFlag: 0,
  62. curveFlag: 0,
  63. fieldFlag: 0,
  64. };
  65. },
  66. created() {
  67. this.getData(),
  68. this.refreshTimer = setInterval(this.getData, 20000);
  69. },
  70. mounted() {
  71. this.current = this.$props.current
  72. console.log(this.current);
  73. },
  74. methods: {
  75. getData() {
  76. api.getOverview().then(res => {
  77. if (res) {
  78. let data = res.data
  79. this.datas.curveFollowingRate ?
  80. (this.datas.curveFollowingRate > data.curveFollowingRate) ?
  81. (this.curveFlag = 2)
  82. : (this.datas.curveFollowingRate === data.curveFollowingRate) ? (this.curveFlag = 0) : (this.curveFlag = 1)
  83. : (this.curveFlag = 0)
  84. this.datas.fieldElectricityRate ?
  85. (this.datas.fieldElectricityRate > data.fieldElectricityRate) ?
  86. (this.fieldFlag = 2)
  87. : (this.datas.fieldElectricityRate === data.fieldElectricityRate) ? (this.fieldFlag = 0) : (this.fieldFlag = 1)
  88. : (this.fieldFlag = 0)
  89. this.datas.windEnergyRate ?
  90. (this.datas.windEnergyRate > data.windEnergyRate) ?
  91. (this.winFlag = 2)
  92. : (this.datas.windEnergyRate === data.windEnergyRate) ? (this.winFlag = 0) : (this.winFlag = 1)
  93. : (this.winFlag = 0)
  94. data.curveFollowingRate = data.curveFollowingRate.toFixed(2)
  95. data.fieldElectricityRate = data.fieldElectricityRate.toFixed(2)
  96. data.windEnergyRate = data.windEnergyRate.toFixed(2)
  97. this.datas = data
  98. }
  99. })
  100. },
  101. ChangeBar(values) {
  102. var bd = BackgroundData.getInstance();
  103. if (!bd.LoginUser) {
  104. this.$notify({
  105. title: "请登录",
  106. message: "切换模式需要先登录!",
  107. type: "warning",
  108. position: "bottom-right",
  109. offset: 60,
  110. duration: 3000,
  111. });
  112. return;
  113. }
  114. if (this.current !== values) {
  115. if ((this.current === 0 && values === 1) || (this.current === 1 && values === 0)) {
  116. this.current = values
  117. this.$emit('clicks', values);
  118. } else if (values === 2 && this.current !== 2) {
  119. this.$router.push('/ManualPage?current=' + values)
  120. // this.current = values
  121. } else {
  122. this.$router.push('/?current=' + values)
  123. }
  124. }
  125. },
  126. controls(value) {
  127. this.current = value
  128. }
  129. },
  130. }
  131. </script>
  132. <style scoped>
  133. .body {
  134. width: 100%;
  135. height: 18.5vh;
  136. /* background-color: #ffffff; */
  137. margin-left: 15px;
  138. margin-top: 20px;
  139. border-left: 1px solid #373737;
  140. border-right: 1px solid #373737;
  141. border-bottom: 1px solid #373737;
  142. }
  143. .control {
  144. display: flex;
  145. flex-direction: row-reverse;
  146. align-items: center;
  147. font-size: 14px;
  148. color: #ffffff;
  149. margin-right: 5px;
  150. }
  151. .manual {
  152. display: flex;
  153. align-items: center;
  154. justify-content: center;
  155. height: 29px;
  156. width: 86px;
  157. border-left: 1px solid rgba(51, 51, 51, 1);
  158. border-top: 1px solid rgba(51, 51, 51, 1);
  159. border-bottom: 1px solid rgba(51, 51, 51, 1);
  160. border-top-left-radius: 15px;
  161. border-bottom-left-radius: 15px;
  162. }
  163. .manual_on {
  164. display: flex;
  165. align-items: center;
  166. justify-content: center;
  167. height: 29px;
  168. width: 86px;
  169. border-left: 1px solid rgba(37, 116, 219, 1);
  170. border-top: 1px solid rgba(37, 116, 219, 1);
  171. border-bottom: 1px solid rgba(37, 116, 219, 1);
  172. border-top-left-radius: 15px;
  173. border-bottom-left-radius: 15px;
  174. background-color: rgba(37, 116, 219, 1);
  175. }
  176. .recommend {
  177. display: flex;
  178. align-items: center;
  179. justify-content: center;
  180. height: 29px;
  181. width: 86px;
  182. border-top: 1px solid rgba(51, 51, 51, 1);
  183. border-bottom: 1px solid rgba(51, 51, 51, 1);
  184. }
  185. .recommend_on {
  186. display: flex;
  187. align-items: center;
  188. justify-content: center;
  189. height: 29px;
  190. width: 86px;
  191. border-top: 1px solid rgba(37, 116, 219, 1);
  192. border-bottom: 1px solid rgba(37, 116, 219, 1);
  193. background-color: rgba(37, 116, 219, 1);
  194. }
  195. .smart {
  196. display: flex;
  197. align-items: center;
  198. justify-content: center;
  199. height: 29px;
  200. width: 86px;
  201. border-right: 1px solid rgba(51, 51, 51, 1);
  202. border-top: 1px solid rgba(51, 51, 51, 1);
  203. border-bottom: 1px solid rgba(51, 51, 51, 1);
  204. border-top-right-radius: 15px;
  205. border-bottom-right-radius: 15px;
  206. }
  207. .smart_on {
  208. display: flex;
  209. align-items: center;
  210. justify-content: center;
  211. height: 29px;
  212. width: 86px;
  213. border-right: 1px solid rgba(37, 116, 219, 1);
  214. border-top: 1px solid rgba(37, 116, 219, 1);
  215. border-bottom: 1px solid rgba(37, 116, 219, 1);
  216. border-top-right-radius: 15px;
  217. border-bottom-right-radius: 15px;
  218. background-color: rgba(37, 116, 219, 1);
  219. }
  220. .dataArea {
  221. display: flex;
  222. flex-direction: row;
  223. align-items: center;
  224. }
  225. .dataBlock {
  226. width: 29%;
  227. height: 82px;
  228. background-color: #242424;
  229. border: 1px solid #3D3D3D;
  230. margin-left: 18px;
  231. margin-top: 35px;
  232. display: flex;
  233. flex-direction: column;
  234. justify-content: center;
  235. }
  236. .dataName {
  237. font-size: 16px;
  238. color: #FFFFFF;
  239. margin-left: 26px;
  240. margin-bottom: 6px;
  241. }
  242. .numerical {
  243. display: flex;
  244. flex-direction: row;
  245. color: #05BB4C;
  246. align-items: center;
  247. margin-left: 26px;
  248. }
  249. .data {
  250. display: flex;
  251. flex-direction: row;
  252. color: #05BB4C;
  253. align-items: baseline;
  254. }
  255. .values {
  256. font-size: 16px;
  257. }
  258. .unit {
  259. font-size: 12px;
  260. margin-left: 8px;
  261. }
  262. .images {
  263. width: 18px;
  264. height: 18px;
  265. margin-left: 10px;
  266. margin-top: 3px;
  267. }
  268. .images_none {
  269. width: 18px;
  270. height: 3px;
  271. background-color: #FFA500;
  272. margin-left: 10px;
  273. border-radius: 1px;
  274. margin-top: -3px;
  275. }
  276. </style>