index.vue 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. <template>
  2. <div class="app-container">
  3. <div class="topBanner">
  4. <div class="topLogo"></div>
  5. <div class="topStatus b-disable" v-if="status === 'd'">
  6. <div class="textStatus">
  7. 离 线 运 行
  8. </div>
  9. </div>
  10. <div class="topStatus b-running" v-if="status === 'r1'">
  11. <div class="textStatus">
  12. 日 前 调 度
  13. </div>
  14. </div>
  15. <div class="topStatus b-running" v-if="status === 'r2'">
  16. <div class="textStatus">
  17. 实 时 调 度
  18. </div>
  19. </div>
  20. <div class="topStatus b-running" v-if="status === 'r3'">
  21. <div class="textStatus">
  22. 完 全 运 行
  23. </div>
  24. </div>
  25. <div class="topStatus b-stop" v-if="status === 's'">
  26. <div class="textStatus">
  27. 停 止 运 行
  28. </div>
  29. </div>
  30. <div class="crumb left33">
  31. <div class="textCrumb">
  32. 日前调度监控
  33. </div>
  34. </div>
  35. <div class="partition" style="left: 43%"/>
  36. <div class="crumb left44">
  37. <div class="textCrumb">
  38. 实时调度监控
  39. </div>
  40. </div>
  41. <div class="partition" style="left: 54%"/>
  42. <div class="crumb-c" style="left: 55.1%">
  43. <div class="textCrumb-c" @click="showDialog()">
  44. 虚拟电厂指令切换
  45. </div>
  46. </div>
  47. </div>
  48. <div class="main-container">
  49. <div class="main-card">
  50. <div class="barBox">
  51. <div class="barTitle">
  52. 信息总览
  53. </div>
  54. </div>
  55. <div class="barBox1">
  56. <div class="barTitle">
  57. 告警信息
  58. </div>
  59. </div>
  60. <div class="barBox">
  61. <div class="barTitle">
  62. 风电发电功率
  63. </div>
  64. <RightTop/>
  65. </div>
  66. </div>
  67. <div class="main-card">
  68. <div class="barBox">
  69. <div class="barTitle">
  70. 负荷用电功率
  71. </div>
  72. <LeftMiddle/>
  73. </div>
  74. <div class="barBox">
  75. <div class="barTitle">
  76. 联络线信息
  77. </div>
  78. <CenterMiddle/>
  79. </div>
  80. <div class="barBox">
  81. <div class="barTitle">
  82. 光伏发电功率
  83. </div>
  84. <RightMiddle/>
  85. </div>
  86. </div>
  87. <div class="main-card">
  88. <div class="barBox">
  89. <div class="barTitle">
  90. 储能发电/用电功率
  91. </div>
  92. <LeftBottom/>
  93. </div>
  94. <div class="barBox">
  95. <div class="barTitle">
  96. 断面信息
  97. </div>
  98. <CenterMiddle/>
  99. </div>
  100. <div class="barBox">
  101. <div class="barTitle">
  102. 火电发电功率
  103. </div>
  104. <RightBottom/>
  105. </div>
  106. </div>
  107. </div>
  108. <!-- 指令切换弹框 -->
  109. <div class="dialogInfoBg" v-if="dialogShow">
  110. <!-- 弹框头 -->
  111. <div class="rightTitleTextBg">
  112. <div class="rightMainTitle">
  113. <span>{{ dialogTitle }}</span>
  114. <div @click="dialogShow = false"/>
  115. </div>
  116. </div>
  117. <!-- 弹框主体 -->
  118. <div style="height: 100px">
  119. <el-radio-group v-model="selected">
  120. <table id="radioTable">
  121. <tr>
  122. <td>
  123. <el-radio label="r1">在线运行:日前调度</el-radio>
  124. </td>
  125. <td>
  126. <el-radio label="r2">在线运行:实时调度</el-radio>
  127. </td>
  128. </tr>
  129. <tr>
  130. <td>
  131. <el-radio label="r3">在线运行:完全</el-radio>
  132. </td>
  133. <td>
  134. <el-radio label="s">停止运行</el-radio>
  135. </td>
  136. </tr>
  137. </table>
  138. </el-radio-group>
  139. </div>
  140. <el-divider></el-divider>
  141. <div style="position: absolute;margin-left: 135px;margin-top: 20px">
  142. <el-button type="primary" @click="confirm">确 认</el-button>
  143. <el-button type="info" @click="cancel">取 消</el-button>
  144. </div>
  145. </div>
  146. </div>
  147. </template>
  148. <script>
  149. import LeftMiddle from "./modules/left-middle"
  150. import LeftBottom from "./modules/left-bottom"
  151. import CenterMiddle from "./modules/center-middle"
  152. import RightTop from "./modules/right-top"
  153. import RightMiddle from "./modules/right-middle"
  154. import RightBottom from "./modules/right-bottom"
  155. export default {
  156. components: {
  157. LeftMiddle,
  158. LeftBottom,
  159. CenterMiddle,
  160. RightTop,
  161. RightMiddle,
  162. RightBottom
  163. },
  164. data() {
  165. return {
  166. status: 'd',
  167. dialogTitle: '虚拟电厂指令切换',
  168. dialogShow: false,
  169. selected: null
  170. }
  171. },
  172. mounted() {
  173. },
  174. methods: {
  175. showDialog() {
  176. this.selected = null
  177. this.dialogShow = true
  178. },
  179. confirm() {
  180. if (this.selected) {
  181. this.$confirm('确认执行所选指令操作?', '提示', {
  182. confirmButtonText: '确定',
  183. cancelButtonText: '取消',
  184. type: 'warning'
  185. }).then(() => {
  186. this.$message({
  187. type: 'success',
  188. message: '操作成功'
  189. });
  190. this.status = this.selected
  191. this.dialogShow = false
  192. }).catch(() => {
  193. })
  194. }
  195. },
  196. cancel() {
  197. this.dialogShow = false
  198. }
  199. }
  200. }
  201. </script>
  202. <style scoped>
  203. .topStatus {
  204. position: absolute;
  205. left: 19.5%;
  206. width: 179px;
  207. height: 42px;
  208. display: flex;
  209. background-size: 100% 100%;
  210. }
  211. .b-disable {
  212. background-image: url('../../assets/images/b-disable.png')
  213. }
  214. .b-running {
  215. background-image: url('../../assets/images/b-running.png')
  216. }
  217. .b-stop {
  218. background-image: url('../../assets/images/b-stop.png')
  219. }
  220. .textStatus {
  221. display: flex;
  222. align-items: center;
  223. margin-left: 24%;
  224. font-size: 18px;
  225. font-weight: bold;
  226. text-shadow: 0 0 5px #fff, 0 1px 2px rgba(0, 0, 0, 1);
  227. }
  228. .crumb {
  229. position: absolute;
  230. top: 5px;
  231. width: 182px;
  232. height: 42px;
  233. display: flex;
  234. background-size: 100% 100%;
  235. background-image: url('../../assets/images/crumb.png');
  236. }
  237. #radioTable td {
  238. height: 50px;
  239. text-align: left;
  240. }
  241. .left33 {
  242. left: 33%;
  243. }
  244. .left44 {
  245. left: 44.2%;
  246. }
  247. .textCrumb {
  248. display: flex;
  249. /*align-items: center;*/
  250. margin-left: 20%;
  251. margin-top: 2.5%;
  252. font-size: 18px;
  253. font-weight: bold;
  254. }
  255. .crumb-c {
  256. position: absolute;
  257. top: 5px;
  258. width: 222px;
  259. height: 42px;
  260. display: flex;
  261. background-size: 100% 100%;
  262. background-image: url('../../assets/images/crumb_c.png');
  263. }
  264. .textCrumb-c {
  265. display: flex;
  266. /*align-items: center;*/
  267. margin-left: 18%;
  268. margin-top: 2.5%;
  269. font-size: 18px;
  270. font-weight: bold;
  271. color: aqua;
  272. cursor: pointer;
  273. }
  274. .partition {
  275. position: absolute;
  276. top: 7px;
  277. width: 17px;
  278. height: 35px;
  279. display: flex;
  280. background-size: 100% 100%;
  281. background-image: url('../../assets/images/partition.png');
  282. }
  283. .barBox1 {
  284. height: 100%;
  285. width: 100%;
  286. display: flex;
  287. flex-direction: column;
  288. background: url(../../assets/images/bg/bgBar1.png) -2px -1px no-repeat;
  289. margin-right: 1%;
  290. }
  291. .dialogInfoBg {
  292. background: url(../../assets/images/dialog/bg.png) 100% no-repeat;
  293. background-size: 100% 100%;
  294. padding: 1%;
  295. width: 30%;
  296. height: 260px;
  297. position: absolute;
  298. top: 35%;
  299. left: 34%;
  300. }
  301. .rightTitleTextBg {
  302. height: 28%;
  303. background-size: 100% 100%;
  304. background: url(../../assets/images/dialog/t-line.png) no-repeat center;
  305. }
  306. .rightMainTitle {
  307. color: rgb(255, 255, 255);
  308. font-size: 18px;
  309. font-weight: 550;
  310. /*font-style: italic;*/
  311. text-shadow: 0 0 5px #fff, 0 1px 2px rgba(0, 0, 0, 1);
  312. margin-left: 36.5%;
  313. position: relative;
  314. top: 0;
  315. display: flex;
  316. justify-content: space-between;
  317. }
  318. /deep/ .el-divider--horizontal {
  319. margin: 20px auto 0;
  320. background: 0 0;
  321. border-top: 1px dashed #767676;
  322. width: 90%;
  323. text-align: center;
  324. }
  325. /deep/ .el-button--primary {
  326. background: url(../../assets/images/dialog/b-confirm.png) no-repeat center !important;
  327. color: white !important;
  328. font-size: 20px;
  329. font-weight: bold;
  330. width: 145px;
  331. height: 42px;
  332. border-color: transparent;
  333. }
  334. /deep/ .el-button--info {
  335. background: url(../../assets/images/dialog/b-cancel.png) no-repeat center !important;
  336. color: #FFFFFF !important;
  337. font-size: 20px;
  338. font-weight: bold;
  339. width: 145px;
  340. height: 42px;
  341. border-color: transparent;
  342. }
  343. /deep/ .el-radio__input.is-checked + .el-radio__label {
  344. color: #FFFFFF;
  345. }
  346. /deep/ .el-radio__input.is-checked .el-radio__inner {
  347. border-color: #40ffff;
  348. background: transparent;
  349. }
  350. /deep/ .el-radio__inner {
  351. border: 2px solid rgba(242, 242, 242, 0.45);
  352. border-radius: 100%;
  353. width: 18px;
  354. height: 18px;
  355. background-color: transparent;
  356. cursor: pointer;
  357. box-sizing: border-box;
  358. }
  359. /deep/ .el-radio__inner::after {
  360. width: 8px;
  361. height: 8px;
  362. border-radius: 100%;
  363. background-color: #40ffff;
  364. content: "";
  365. position: absolute;
  366. left: 50%;
  367. top: 50%;
  368. transform: translate(-50%, -50%) scale(0);
  369. transition: transform .15s ease-in;
  370. }
  371. /deep/ .el-radio__input {
  372. white-space: nowrap;
  373. cursor: pointer;
  374. outline: 0;
  375. line-height: 1;
  376. vertical-align: middle;
  377. }
  378. /deep/ .el-radio-button__inner {
  379. width: 100% !important;
  380. padding-left: 0 !important;
  381. padding-right: 0 !important;
  382. text-align: left;
  383. }
  384. /deep/ .el-radio__label {
  385. padding-left: 10px;
  386. font-size: 20px;
  387. font-weight: 500;
  388. vertical-align: middle;
  389. }
  390. /deep/ .el-radio {
  391. color: #ffffff;
  392. line-height: 1;
  393. cursor: pointer;
  394. white-space: nowrap;
  395. outline: 0;
  396. margin-right: 30px;
  397. }
  398. </style>