index.vue 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286
  1. <template>
  2. <div id="indexback">
  3. <!--<dv-border-box-12 style="min-height: calc(100vh - 30px);">-->
  4. <div style="width:100%;height: 10%;display: flex;justify-content: space-around;margin-bottom: 0.5%;">
  5. <el-row style="width: 100%">
  6. <el-col :span="6">
  7. <div style="text-align: center">
  8. <span class="elname"></span>
  9. </div>
  10. </el-col>
  11. <el-col :span="3.5">
  12. <div style="display: flex;justify-content: space-around;padding-top: 2.5%">
  13. <div class="myswitch">
  14. <!-- <el-switch-->
  15. <!-- v-model="sign"-->
  16. <!-- class="switchStyle"-->
  17. <!-- style="margin-left:20px;"-->
  18. <!-- active-text="限电"-->
  19. <!-- active-color="red"-->
  20. <!-- active-value="1"-->
  21. <!-- inactive-text="不限电"-->
  22. <!-- inactive-value="0"-->
  23. <!-- inactive-color="#40E0D0"-->
  24. <!-- @change="saveXD"-->
  25. <!-- />-->
  26. </div>
  27. <div class="qrcodeDiv">
  28. <!-- <svg class="icon" aria-hidden="true" @click="openQrcodeDrawer">-->
  29. <!-- <use xlink:href="#icon-erweima"></use>-->
  30. <!-- </svg>-->
  31. <!--<img src="./img/QRcode.png" width="40px" height="40px" style="cursor: pointer" @click="openQrcodeDrawer">-->
  32. </div>
  33. </div>
  34. </el-col>
  35. <el-col :span="7">
  36. <div style="width:80%;margin-left: 5%">
  37. <dv-border-box-7 :color="['#0c71d4']"
  38. style="text-align:center;border-radius: 10px">
  39. <span style="color: #f4f4f5;font-size: 25px;font-family: 'mytext'">
  40. 功率预测数据平台
  41. </span>
  42. </dv-border-box-7>
  43. </div>
  44. </el-col>
  45. <el-col :span="6">
  46. <div style="display: flex;justify-content: space-around;margin-top: 2.5%">
  47. <!-- <div>-->
  48. <!-- <audio muted ref="mySummaryAudio" :src="summaryAudioUrl"/>-->
  49. <!-- <el-button class="waringbutt" size="small" @click="openDraw">-->
  50. <!-- 修改通道告警通知-->
  51. <!-- </el-button>-->
  52. <!-- </div>-->
  53. <!-- <el-tooltip effect="dark" placement="bottom">-->
  54. <!-- <div slot="content">{{isAbnormalInfo}}</div>-->
  55. <!-- <el-button :class="statusFlag=='true'? 'barbutt' : 'waringbutt'" size="small" @click="equipmentInfo">-->
  56. <!-- 环境数据展示-->
  57. <!-- </el-button>-->
  58. <!-- </el-tooltip>-->
  59. <el-button class="waringbutt" size="small" @click="jump">
  60. 后台数据展示
  61. </el-button>
  62. <!-- <el-tooltip placement="bottom" content="扫码小程序" effect="dark" v-show="showAbout">-->
  63. <!-- <el-button class="waringbutt" icon="el-icon-full-screen" circle size="small"-->
  64. <!-- @click="appletsDialogVisible=true"/>-->
  65. <!-- </el-tooltip>-->
  66. <!-- <el-tooltip placement="bottom" content="关于我们" effect="dark" v-show="showAbout">-->
  67. <!-- <el-button class="waringbutt" icon="el-icon-s-custom" circle size="small"-->
  68. <!-- @click="aboutusDialogVisible=true"/>-->
  69. <!-- </el-tooltip>-->
  70. </div>
  71. </el-col>
  72. </el-row>
  73. </div>
  74. <div class="dashmain">
  75. <el-container style="padding-left: 15px;align-self:center;">
  76. <el-header style="width: 100%;height:auto">
  77. <div style="display: flex;justify-content: space-around;">
  78. <dv-border-box-10 style="width: 50%;height: 100%">
  79. <div class="tunnelBox">
  80. <div>
  81. <dv-border-box-8 class="dv8TunnelStyle">
  82. <span style="color: white; font-size: 14px;">通道显示</span>
  83. </dv-border-box-8>
  84. <div class="tunnelIcon">
  85. <svg class="icon" aria-hidden="true" style=" transform: rotate(0.25turn);"
  86. @click="tunnelLogFlag = true">
  87. <use xlink:href="#icon-tuisong-tuisongtongdao20-01"></use>
  88. </svg>
  89. </div>
  90. <div class="daysRemainDiv" v-if="daysRemain != undefined" v-show="show">
  91. <span class="daysRemainSpan">服务到期剩余:<span :class="daysRemain<30?'warningText':'infoText'">{{daysRemain}}</span> 天</span>
  92. </div>
  93. </div>
  94. <div class="tunnelstylebg">
  95. <div class="tunnelstyle">
  96. <div :class="this.analysisStatus === 0?'tunnelbad':'tunnelPanel'"
  97. @click="toTunnelList(analysisList,'解析通道')">解析通道
  98. </div>
  99. <div :class="uploadList.length === 0?'noneDiv':'tunnelDiv'">
  100. <div :class="this.uploadStatus === 0?'tunnelbad':'tunnelPanel'"
  101. @click="toTunnelList(uploadList,'上报通道')">上报通道
  102. </div>
  103. </div>
  104. <div :class="dataexchangeList.length === 0?'noneDiv':'tunnelDiv'">
  105. <div :class="this.dataexchangeStatus === 0?'tunnelbad':'tunnelPanel'"
  106. @click="toTunnelList(dataexchangeList,'接入通道')">接入通道
  107. </div>
  108. </div>
  109. <div :class="callBackList.length === 0?'noneDiv':'tunnelDiv'">
  110. <div :class="this.callBackStatus === 0?'tunnelbad':'tunnelPanel'"
  111. @click="toTunnelList(callBackList,'回传通道')">回传通道
  112. </div>
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. <!--<tunnelLog/>-->
  118. </dv-border-box-10>
  119. <dv-border-box-10 style="width: 50%;height: 100%;margin-left: 0.5%">
  120. <div>
  121. <dv-border-box-8 class="dv8ObjectStyle">
  122. <span style="color: white; font-size: 14px;">上报信息</span>
  123. </dv-border-box-8>
  124. <div class="objectIcon">
  125. <svg class="icon" aria-hidden="true" @click="objectLogFlag = true">
  126. <use xlink:href="#icon-tuisongtongdao"></use>
  127. </svg>
  128. </div>
  129. <!--对时时间-->
  130. <div class="timeDiv">
  131. <span>{{date}}</span>
  132. </div>
  133. </div>
  134. <uploadObject/>
  135. </dv-border-box-10>
  136. </div>
  137. </el-header>
  138. <el-main style="width: 100%;height:auto">
  139. <dv-border-box-10 style="width: 100%;height: 100%">
  140. <bottomEcharts/>
  141. </dv-border-box-10>
  142. </el-main>
  143. </el-container>
  144. </div>
  145. <!--二维码页面-->
  146. <div class="drawbg">
  147. <el-drawer
  148. title="二维码扫描"
  149. :visible.sync="qrcodeDrawer"
  150. :with-header="false"
  151. :modal-append-to-body="false"
  152. :wrapperClosable="false"
  153. direction="ttb"
  154. size="80%"
  155. >
  156. <div class="drawclose" @click="colseQrcode"/>
  157. <qrcode :key="qrtimer" style="height: 100%" :url="url"/>
  158. </el-drawer>
  159. </div>
  160. <!--修改通道告警通知-->
  161. <div>
  162. <el-drawer
  163. :visible.sync="drawer"
  164. :with-header="false"
  165. :modal-append-to-body="false"
  166. size="55%"
  167. >
  168. <div class="waringdraw">
  169. <div style="text-align: center">
  170. <span style="color: #a0c8b3;font-size: 20px">修改通道告警通知</span>
  171. </div>
  172. <div style="display: flex;justify-content: center">
  173. <el-transfer
  174. v-model="valueList"
  175. :data="dataList"
  176. :titles="['告警提示', '告警不提示']"
  177. style="margin-left:10px;margin-top:20px;"
  178. @change="handleChange"
  179. />
  180. </div>
  181. <div style="text-align: center">
  182. <el-button size="small" style="margin-left:10px;margin-top:20px;color: #e4e4e4;background-color: #061f3e"
  183. @click="saveP">
  184. 提交
  185. </el-button>
  186. </div>
  187. </div>
  188. </el-drawer>
  189. </div>
  190. <!--子通道-->
  191. <div v-show="onshow" class="tunnelbg">
  192. <tunnel :list="tunnelList" @onTunnelChange="onTunnelChange"/>
  193. </div>
  194. <!--环境数据-->
  195. <div class="dashhj">
  196. <div v-if="filterbg" ref="filterbg" class="filterbg">
  197. <transition-group name="test">
  198. <div v-if="topup" ref="pop" :key="1" class="topup" :class="this.topup===true?'topupter':'topup'">
  199. <a ref="topupClose" class="topupClose" @click="close"/>
  200. <div ref="echartdiv">
  201. <environment :key="entimer"/>
  202. </div>
  203. </div>
  204. </transition-group>
  205. </div>
  206. </div>
  207. <!--关于我们-->
  208. <div class="gydialog">
  209. <el-dialog
  210. title="关于我们"
  211. :close-on-click-modal="false"
  212. :modal-append-to-body="false"
  213. :visible.sync="aboutusDialogVisible"
  214. style="padding: 0px;"
  215. width="500px"
  216. >
  217. <hr align="center" width="100%" color="#57387A" SIZE="1">
  218. <el-row>
  219. <el-col :span="8"><img src="../../assets/aboutus.png" width="150px" height="150px"></el-col>
  220. <el-col :span="16"><br>
  221. <div class="context">
  222. 沈阳嘉越电力科技有限公司成立于2010年11月,是一家集科研、生产、销售、服务于一体的高新技术企业。公司主要业务包括新能源智能功率预测、新能源智慧场站技术与服务、新能源综合能源服务、电网技术服务等四大板块。
  223. </div>
  224. <div>联系电话:024-89633377</div>
  225. </el-col>
  226. </el-row>
  227. </el-dialog>
  228. </div>
  229. <!--扫码小程序-->
  230. <div class="appdialog">
  231. <el-dialog
  232. title="扫码小程序"
  233. :close-on-click-modal="false"
  234. :modal-append-to-body="false"
  235. :visible.sync="appletsDialogVisible"
  236. style="padding: 0px;"
  237. width="550px"
  238. >
  239. <img src="../../assets/applets.jpg" width="500" height="500">
  240. </el-dialog>
  241. </div>
  242. <!--通道异常日志-->
  243. <div class="logInfo">
  244. <el-dialog
  245. title="通道异常日志"
  246. :close-on-click-modal="false"
  247. :modal-append-to-body="false"
  248. :visible.sync="tunnelLogFlag"
  249. style="padding: 0px;"
  250. width="60%"
  251. >
  252. <leftcharts v-if="tunnelLogFlag"/>
  253. </el-dialog>
  254. </div>
  255. <!--上报对象日志-->
  256. <div class="logInfo">
  257. <el-dialog
  258. title="上报对象异常日志"
  259. :close-on-click-modal="false"
  260. :modal-append-to-body="false"
  261. :visible.sync="objectLogFlag"
  262. style="padding: 0px;"
  263. width="60%"
  264. >
  265. <UploadObjectLog v-if="objectLogFlag"/>
  266. </el-dialog>
  267. </div>
  268. <!--</dv-border-box-12>-->
  269. </div>
  270. </template>
  271. <script>
  272. import "./js/iconfont.js"
  273. import qrcode from './qrcode'
  274. import tunnelLog from './Leftcharts'
  275. import uploadObject from './uploadObject'
  276. import bottomEcharts from './bottomEcharts'
  277. import tunnel from './tunnel'
  278. import environment from './environment'
  279. import Leftcharts from "./Leftcharts";
  280. import UploadObjectLog from "./uploadObjectLog";
  281. import {mapGetters} from "vuex";
  282. export default {
  283. components: {
  284. UploadObjectLog,
  285. Leftcharts,
  286. uploadObject,
  287. tunnelLog,
  288. bottomEcharts,
  289. tunnel,
  290. qrcode,
  291. environment
  292. },
  293. data() {
  294. return {
  295. daysRemain: '0',// 合同剩余天数
  296. showAbout: false,
  297. date: '',//时间
  298. data: '',
  299. drawer: false,
  300. qrcodeDrawer: false,
  301. filterbg: false,
  302. topup: false,
  303. onshow: false,
  304. backshow: false,
  305. aboutusDialogVisible: false,
  306. appletsDialogVisible: false,
  307. time: '',
  308. // sign: '0',
  309. value15: '0',
  310. // elName: '',
  311. eqId: '',
  312. timer: '',
  313. qrtimer: '',
  314. entimer: '',
  315. test: '',
  316. show:false,
  317. equipmentInfoList: [],
  318. equipmentDataTypeList: [],
  319. summaryAudioUrl: '/audio/gjy.mp3', // 音频地址,调用接口获取
  320. summaryAudioStatus: 'pause', // pause --当前停止播放状态;play--当前播放状态
  321. summaryAudioDuration: 0, // 音频时长
  322. tunnelList: {
  323. flag: 0,
  324. value: [],
  325. showType: 1
  326. },
  327. consoleVersion: '',
  328. monitorVersion: '',
  329. reportVersion: '',
  330. libVersion: '',
  331. valueList: [],
  332. dataList: [],
  333. /*通道*/
  334. analysisList: [],
  335. callBackList: [],
  336. dataexchangeList: [],
  337. uploadList: [],
  338. analysisStatus: 1,
  339. callBackStatus: 1,
  340. dataexchangeStatus: 1,
  341. uploadStatus: 1,
  342. channelAlarmList: [],
  343. updateList: [],
  344. initgetSysStatusList: '',
  345. flagNum: 1,
  346. url: '',
  347. statusFlag: 'false',
  348. isAbnormalInfo: '',
  349. //通道、上报对象日志标识
  350. tunnelLogFlag: false,
  351. objectLogFlag: false,
  352. //时间的定时
  353. nowTimer: null,
  354. daysRemainTimer: null
  355. }
  356. },
  357. destroyed() {
  358. clearInterval(this.test) // 关闭循环
  359. this.test = null
  360. clearInterval(this.nowTimer) // 关闭循环
  361. this.nowTimer = null
  362. clearInterval(this.daysRemainTimer) // 关闭循环
  363. this.daysRemainTimer = null
  364. },
  365. mounted() {
  366. this.getServiceExpirationDays()
  367. this.daysRemainTimer = setInterval(this.getServiceExpirationDays, 1000 * 60 * 60)
  368. this.nowTime()
  369. this.nowTimer = setInterval(this.nowTime, 1000 * 60)
  370. // this.queryXD()
  371. // this.getVersion()
  372. this.init()
  373. this.getEl()
  374. this.test = setInterval(this.init, 60 * 1000)
  375. },
  376. computed: {
  377. ...mapGetters(["gs"])
  378. },
  379. methods: {
  380. // 获取服务到期时间 定时一小时一次
  381. getServiceExpirationDays() {
  382. this.$axios.get('/getExpirationTime').then(res => {
  383. if(res.data == null){
  384. this.show = false
  385. }else {
  386. this.show = true
  387. this.daysRemain = res.data
  388. }
  389. }).catch(err => {
  390. console.log('获取服务到期时间异常:' + err)
  391. })
  392. },
  393. changeConsole() {
  394. var href = window.location.href
  395. window.location.href = 'https://' + href.split("//")[1].split(":")[0] + ':9001'
  396. },
  397. jump() {
  398. this.$router.push('/realTimeQuery/realPowerQuery')
  399. },
  400. init() {
  401. var gs = localStorage.getItem("gs")
  402. if (gs != "2") {
  403. this.showAbout = true
  404. }
  405. Promise.all([this.getChannelStatus()]).then((res) => {
  406. this.analysisList = res[0].analysisList
  407. this.callBackList = res[0].callBackList
  408. this.dataexchangeList = res[0].dataexchangeList
  409. this.uploadList = res[0].uploadList
  410. // this.channelAlarmList = res[1]
  411. var data = []
  412. // var valueList = []
  413. if (this.analysisList.length > 0) {
  414. for (var i = 0; i < this.analysisList.length; i++) {
  415. if (this.analysisList[i].channelStatus === '0') {
  416. this.analysisStatus = 0
  417. break
  418. }
  419. this.analysisStatus = 1
  420. }
  421. }
  422. if (this.uploadList.length > 0) {
  423. for (var i = 0; i < this.uploadList.length; i++) {
  424. data.push({
  425. id: this.uploadList[i].channelId,
  426. key: 'upload-' + this.uploadList[i].channelId,
  427. label: this.uploadList[i].channelName,
  428. channelStatus: this.uploadList[i].channelStatus
  429. })
  430. if (this.uploadList[i].channelStatus === '0') {
  431. this.uploadStatus = 0
  432. break
  433. }
  434. this.uploadStatus = 1
  435. }
  436. }
  437. if (this.callBackList.length > 0) {
  438. for (var i = 0; i < this.callBackList.length; i++) {
  439. data.push({
  440. id: this.callBackList[i].channelId,
  441. key: 'callBack-' + this.callBackList[i].channelId,
  442. label: this.callBackList[i].channelName,
  443. channelStatus: this.callBackList[i].channelStatus
  444. })
  445. if (this.callBackList[i].channelStatus === '0') {
  446. this.callBackStatus = 0
  447. break
  448. }
  449. this.callBackStatus = 1
  450. }
  451. }
  452. if (this.dataexchangeList.length > 0) {
  453. for (var i = 0; i < this.dataexchangeList.length; i++) {
  454. data.push({
  455. id: this.dataexchangeList[i].channelId,
  456. key: 'dataexchange-' + this.dataexchangeList[i].channelId,
  457. label: this.dataexchangeList[i].channelName,
  458. channelStatus: this.dataexchangeList[i].channelStatus
  459. })
  460. if (this.dataexchangeList[i].channelStatus === '0') {
  461. this.dataexchangeStatus = 0
  462. break
  463. }
  464. this.dataexchangeStatus = 1
  465. }
  466. }
  467. // for (var i = 0; i < this.channelAlarmList.length; i++) {
  468. // for (var j = 0; j < data.length; j++) {
  469. // if (data[j].id === this.channelAlarmList[i].channelId) {
  470. // valueList.push(data[j].key)
  471. // }
  472. // }
  473. // }
  474. this.dataList = data
  475. // this.valueList = valueList
  476. // this.getLeftChannel()
  477. // this.getEnvirStatus()
  478. })
  479. },
  480. // getLeftChannel() {
  481. // var waringLeft = this.dataList
  482. // var waringRight = this.valueList
  483. // var temp = []
  484. // for (let i = 0; i < waringLeft.length; i++) {
  485. // var flag = true
  486. // a:for (let j = 0; j < waringRight.length; j++) {
  487. // var is = waringRight[j].indexOf('-')
  488. // var right = waringRight[j].substring((is + 1), (waringRight[j].length + 1))
  489. // if (waringLeft[i].id == right) {
  490. // flag = false
  491. // break a
  492. // }
  493. // }
  494. // if (flag) {
  495. // temp.push(waringLeft[i])
  496. // if (waringLeft[i].channelStatus == '0') {
  497. // this.summaryAudioClick()
  498. // break
  499. // }
  500. // }
  501. // }
  502. // },
  503. /*父给子通道信息*/
  504. toTunnelList(list, name) {
  505. this.onshow = true
  506. if (name === '接入通道') {
  507. this.tunnelList = {
  508. flag: this.flagNum++,
  509. value: list,
  510. showType: 0,
  511. name: name
  512. }
  513. } else {
  514. this.tunnelList = {
  515. flag: this.flagNum++,
  516. value: list,
  517. showType: 1,
  518. name: name
  519. }
  520. }
  521. },
  522. getEnvirStatus() {
  523. this.$axios.get('/dashboard/getIsAbnormal').then(res => {
  524. this.statusFlag = res.data.isAbnormalData
  525. this.isAbnormalInfo = res.data.isAbnormalInfo
  526. }).catch(error => {
  527. this.$message.error("获取环境数据是否正常异常:" + error)
  528. })
  529. },
  530. getChannelStatus() {
  531. const a = this.$axios
  532. return new Promise(function (resolve, reject) {
  533. a.get('/dashboard/getChannelStatus').then(res => {
  534. resolve(res.data)
  535. })
  536. })
  537. },
  538. getChannelAlarmInfo() {
  539. const a = this.$axios
  540. return new Promise(function (resolve, reject) {
  541. a.get('/dashboard/getChannelAlarmInfo').then(res => {
  542. resolve(res.data)
  543. })
  544. })
  545. },
  546. saveP() {
  547. this.$axios.post('/dashboard/saveAllChannelAlarmInfo', this.updateList).then(res => {
  548. this.getLeftChannel()
  549. })
  550. },
  551. handleChange(value, direction, movedKeys) {
  552. this.updateList = []
  553. for (var i = 0; i < value.length; i++) {
  554. var is = value[i].indexOf('-')
  555. var left = value[i].substring(0, is)
  556. var right = value[i].substring((is + 1), (value[i].length + 1))
  557. this.updateList.push({
  558. channelType: left,
  559. channelId: right
  560. })
  561. }
  562. },
  563. getEl() {
  564. this.$axios.get('/electricField/').then(res => {
  565. this.elName = res.data.name
  566. }).catch(error => {
  567. console.error('获取场站名称异常:' + error)
  568. })
  569. },
  570. getVersion() {
  571. this.$axios.get('/dashboard/getSysVersion').then(res => {
  572. this.reportVersion = res.data[0].reportVersion
  573. this.monitorVersion = res.data[0].monitorVersion
  574. this.consoleVersion = res.data[0].consoleVersion
  575. this.libVersion = res.data[0].libVersion
  576. })
  577. },
  578. // saveXD(val) {
  579. // var sign = 0
  580. // if (val === '1') {
  581. // sign = 1
  582. // }
  583. // var PowerLimitPlanSign = {
  584. // id: 1,
  585. // sign: sign
  586. // }
  587. // this.$axios.post('/dashboard/savePowerLimitPlanSign', PowerLimitPlanSign).then(res => {
  588. //
  589. // }).catch((error) => {
  590. // this.$message.error('保存限电标识出错' + error)
  591. // })
  592. // },
  593. // queryXD() {
  594. // this.$axios.get('/dashboard/getPowerLimitPlanSign').then((res) => {
  595. // if (res.data.sign === 1) {
  596. // // 限电
  597. // this.sign = '1'
  598. // } else {
  599. // // 不限电
  600. // this.sign = '0'
  601. // }
  602. // }).catch((error) => {
  603. // this.$message.error('查询限电标识出错' + error)
  604. // })
  605. // },
  606. equipmentInfo() {
  607. this.filterbg = true
  608. this.topup = true
  609. this.$refs.filterbg.style.display = ''
  610. this.$refs.topupClose.style.display = ''
  611. /*this.entimer = new Date().getTime()*/
  612. this.$refs.echartdiv.style.display = ''
  613. },
  614. close() {
  615. this.$refs.echartdiv.style.display = 'none'
  616. this.topup = false
  617. this.$refs.topupClose.style.display = 'none'
  618. setTimeout(this.closefile, 400)
  619. },
  620. closefile() {
  621. this.$refs.filterbg.style.display = 'none'
  622. },
  623. // childValue(val) {
  624. // this.onshow = val.status
  625. // this.tunnelList = {
  626. // flag: this.flagNum,
  627. // value: val.value,
  628. // showType:val.showType
  629. // }
  630. // },
  631. onTunnelChange(val) {
  632. this.onshow = val
  633. },
  634. openDraw() {
  635. this.drawer = true
  636. },
  637. openQrcodeDrawer() {
  638. this.qrcodeDrawer = true
  639. this.qrtimer = new Date().getTime()
  640. this.url = ''
  641. },
  642. colseQrcode() {
  643. this.qrcodeDrawer = false
  644. this.url = '/aboutus.png'
  645. },
  646. summaryAudioClick() {
  647. const that = this
  648. if (that.summaryAudioStatus == 'pause') {
  649. that.$refs.mySummaryAudio.play()
  650. that.summaryAudioStatus = 'play' // 当前播放状态,记得修改图片
  651. that.$refs.mySummaryAudio.addEventListener('ended', function () {
  652. that.$refs.mySummaryAudio.pause()
  653. that.summaryAudioStatus = 'pause'
  654. })
  655. } else {
  656. that.$refs.mySummaryAudio.pause()
  657. that.summaryAudioStatus = 'pause'
  658. }
  659. },
  660. /*对时*/
  661. nowTime() {
  662. this.$axios.get('/dashboard/getServerTime').then(res => {
  663. var today = new Date(res.data)
  664. var yyyy = today.getFullYear()// 通过日期对象的getFullYear()方法返回年
  665. var MM = today.getMonth() + 1 < 10 ? '0' + (today.getMonth() + 1) : today.getMonth() + 1// 通过日期对象的getMonth()方法返回年
  666. var dd = today.getDate() < 10 ? '0' + today.getDate() : today.getDate()// 通过日期对象的getDate()方法返回年
  667. var hour = today.getHours() < 10 ? '0' + today.getHours() : today.getHours()
  668. var minute = today.getMinutes() < 10 ? '0' + today.getMinutes() : today.getMinutes()
  669. // var second = today.getSeconds()<10?'0'+today.getSeconds():today.getSeconds()
  670. var day // 用于保存星期(getDay()方法得到星期编号)
  671. if (today.getDay() === 0) day = '星期日 '
  672. if (today.getDay() === 1) day = '星期一 '
  673. if (today.getDay() === 2) day = '星期二 '
  674. if (today.getDay() === 3) day = '星期三 '
  675. if (today.getDay() === 4) day = '星期四 '
  676. if (today.getDay() === 5) day = '星期五 '
  677. if (today.getDay() === 6) day = '星期六 '
  678. this.date = yyyy + '-' + MM + '-' + dd + ' ' + hour + ':' + minute + ' ' + day
  679. })
  680. }
  681. }
  682. }
  683. </script>
  684. <style>
  685. .timeDiv {
  686. display: inline-block;
  687. float: right;
  688. margin-top: 1.2%;
  689. margin-right: 1.2%;
  690. color: white;
  691. /*font-size: 18px;*/
  692. }
  693. /****服务到期时间时间****/
  694. .daysRemainDiv {
  695. float: right;
  696. line-height: 29px;
  697. margin-top: 1%;
  698. margin-right: 2%
  699. }
  700. .daysRemainSpan {
  701. color: #fff;
  702. font-size: 20px;
  703. font-weight: bolder
  704. }
  705. .warningText{
  706. color: #ff4f00;
  707. }
  708. .infoText{
  709. color: #fff;
  710. }
  711. /*********/
  712. #indexback {
  713. min-height: calc(105vh - 50px);
  714. position: relative;
  715. z-index: 0;
  716. background-image: url("../dashboard/img/pageBg.png");
  717. background-size: cover;
  718. padding-top: .5%;
  719. }
  720. .dashmain {
  721. width: 100%;
  722. height: 90%;
  723. /*margin-top: 1%;*/
  724. display: flex;
  725. }
  726. .elname {
  727. /*width: 300px;*/
  728. color: #f4f4f5;
  729. font-size: 30px;
  730. font-family: 'mytext';
  731. padding-top: 1.5%;
  732. display: inline-block;
  733. }
  734. .waringbutt {
  735. background-color: #061f3e;
  736. color: #e4e4e4;
  737. margin-left: 10px;
  738. border-radius: 5px;
  739. }
  740. .waringbutt:hover {
  741. background-color: rgba(6, 31, 62, 0.42);
  742. color: #e4e4e4;
  743. margin-left: 10px;
  744. border-radius: 5px;
  745. }
  746. .waringbutt:focus {
  747. background-color: #061f3e;
  748. color: #e4e4e4;
  749. margin-left: 10px;
  750. border-radius: 5px;
  751. }
  752. .barbutt {
  753. background: #ff0003;
  754. color: #e4e4e4;
  755. margin-left: 10px;
  756. border-radius: 5px;
  757. }
  758. .barbutt:hover {
  759. background-color: rgba(255, 0, 3, 0.87);
  760. color: #e4e4e4;
  761. margin-left: 10px;
  762. border-radius: 5px;
  763. }
  764. .barbutt:focus {
  765. background-color: #ff0003;
  766. color: #e4e4e4;
  767. margin-left: 10px;
  768. border-radius: 5px;
  769. }
  770. .dashmain .el-main {
  771. display: block;
  772. -webkit-box-flex: 1;
  773. -ms-flex: 1;
  774. flex: 1;
  775. -ms-flex-preferred-size: auto;
  776. flex-basis: auto;
  777. overflow: auto;
  778. -webkit-box-sizing: border-box;
  779. box-sizing: border-box;
  780. padding: 20px;
  781. padding-top: 10px;
  782. }
  783. .context {
  784. text-align: justify;
  785. text-justify: inter-ideograph;
  786. text-indent: 2em;
  787. font-size: 13px;
  788. width: 300px;
  789. top: 5000px;
  790. line-height: 20px;
  791. }
  792. .mytitle {
  793. width: 100px;
  794. height: 30px;
  795. line-height: 30px;
  796. display: flex;
  797. justify-content: center;
  798. color: #a0c8b3;
  799. background: #00559a;
  800. cursor: pointer;
  801. border-top-left-radius: 4px;
  802. border-bottom-left-radius: 4px;
  803. position: fixed;
  804. right: 0.3%;
  805. top: 7.5%;
  806. z-index: 2000;
  807. }
  808. .gydialog .el-dialog {
  809. background: #061f3e;
  810. /*border: 1px solid #6e6e6e;*/
  811. box-shadow: inset 0 0 0 2px rgba(5, 210, 248, 1);
  812. }
  813. .gydialog .el-dialog__body {
  814. padding: 0px 20px 10px;
  815. color: #29a0c8;
  816. font-size: 14px;
  817. word-break: break-all;
  818. }
  819. .gydialog .el-dialog__header {
  820. padding: 10px 20px 0px;
  821. }
  822. .gydialog .el-dialog__title {
  823. line-height: 24px;
  824. font-size: 18px;
  825. color: #29a0c8;
  826. }
  827. .logInfo .el-dialog {
  828. background: #061f3e;
  829. /*border: 1px solid #6e6e6e;*/
  830. box-shadow: inset 0 0 0 2px rgba(5, 210, 248, 1);
  831. }
  832. .logInfo .el-dialog__body {
  833. padding: 0px 20px 10px;
  834. color: #29a0c8;
  835. font-size: 14px;
  836. word-break: break-all;
  837. }
  838. .logInfo .el-dialog__header {
  839. padding: 10px 20px 0px;
  840. }
  841. .logInfo .el-dialog__title {
  842. line-height: 24px;
  843. font-size: 18px;
  844. color: white;
  845. }
  846. .applets {
  847. width: 100px;
  848. height: 30px;
  849. line-height: 30px;
  850. display: flex;
  851. justify-content: center;
  852. color: #a0c8b3;
  853. background: #00559a;
  854. cursor: pointer;
  855. border-top-left-radius: 4px;
  856. border-bottom-left-radius: 4px;
  857. position: fixed;
  858. right: 0.3%;
  859. top: 3.5%;
  860. z-index: 1000;
  861. }
  862. .drawclose {
  863. display: block;
  864. width: 32px;
  865. height: 32px;
  866. cursor: pointer;
  867. background: url(./img/s_ico3.png);
  868. background-size: 100% 100%;
  869. position: absolute;
  870. top: 5px;
  871. right: 12px;
  872. z-index: 1000;
  873. }
  874. .echartdiv .el-input__inner {
  875. -webkit-appearance: none;
  876. background-color: transparent;
  877. background-image: none;
  878. border-radius: 4px;
  879. border: 1px solid #2fa0a3;
  880. -webkit-box-sizing: border-box;
  881. box-sizing: border-box;
  882. color: #2fa0a3;
  883. display: inline-block;
  884. font-size: inherit;
  885. height: 40px;
  886. line-height: 40px;
  887. outline: 0;
  888. padding: 0 15px;
  889. -webkit-transition: border-color .2s cubic-bezier(.645, .045, .355, 1);
  890. transition: border-color .2s cubic-bezier(.645, .045, .355, 1);
  891. width: 100%;
  892. }
  893. .dashhj .filterbg >>> input {
  894. background: #001528;
  895. border: 1px solid #41fafd;
  896. color: white;
  897. }
  898. .dashhj .filterbg {
  899. width: 100%;
  900. height: 100%;
  901. background: rgba(30, 182, 254, 0.5);
  902. position: absolute;
  903. top: 0;
  904. left: 0;
  905. z-index: 998;
  906. /* display: none;*/
  907. }
  908. .tunnelbg {
  909. width: 100%;
  910. height: 100%;
  911. background: rgba(28, 144, 203, 0.5);
  912. position: absolute;
  913. top: 0;
  914. left: 0;
  915. z-index: 998;
  916. }
  917. .dashhj .topup {
  918. width: 97%;
  919. height: 97%;
  920. background: #061f3e;
  921. position: relative;
  922. z-index: 999;
  923. border-radius: 8px;
  924. margin: 10% auto;
  925. margin-top: 2%;
  926. animation: closemove 0.4s;
  927. }
  928. .dashhj .topupter {
  929. width: 97%;
  930. height: 97%;
  931. background: #061f3e;
  932. position: relative;
  933. z-index: 999;
  934. border-radius: 8px;
  935. margin: 0 auto;
  936. margin-top: 2%;
  937. animation: mymove 0.4s;
  938. }
  939. .dashhj .topup .topupClose {
  940. display: block;
  941. width: 44px;
  942. height: 44px;
  943. background: url(./img/s_ico3.png);
  944. background-size: 100% 100%;
  945. position: absolute;
  946. top: -22px;
  947. right: -22px;
  948. z-index: 1000;
  949. }
  950. .dashhj .topup .topupClose:hover {
  951. transform: rotate(90deg);
  952. }
  953. .myswitch {
  954. width: 200px;
  955. padding-top: 3%
  956. }
  957. .myswitch .el-switch__label {
  958. -webkit-transition: .2s;
  959. transition: .2s;
  960. height: 20px;
  961. font-size: 14px;
  962. font-weight: 500;
  963. vertical-align: middle;
  964. color: #829293;
  965. }
  966. .myswitch .el-switch__label.is-active {
  967. color: #07b296;
  968. /*color: #409EFF;*/
  969. }
  970. .waringdraw {
  971. width: 100%;
  972. height: 100%;
  973. background-color: #061f3e;
  974. }
  975. .waringdraw .el-transfer {
  976. margin-top: 0px;
  977. }
  978. .waringdraw .el-transfer__buttons button {
  979. background-color: #061f3e;
  980. border-color: white;
  981. color: #e4e4e4;
  982. }
  983. .waringdraw .el-transfer-panel {
  984. border: 1px solid #2a3058;
  985. border-radius: 4px;
  986. overflow: hidden;
  987. background: rgba(6, 31, 62, 0.79);
  988. display: inline-block;
  989. vertical-align: middle;
  990. width: 300px;
  991. max-height: 100%;
  992. -webkit-box-sizing: border-box;
  993. box-sizing: border-box;
  994. position: relative;
  995. }
  996. .waringdraw .el-transfer-panel .el-transfer-panel__header {
  997. height: 40px;
  998. line-height: 40px;
  999. background: #344869;
  1000. margin: 0;
  1001. padding-left: 15px;
  1002. border-bottom: 1px solid #EBEEF5;
  1003. -webkit-box-sizing: border-box;
  1004. box-sizing: border-box;
  1005. color: #a0c8b3;
  1006. }
  1007. .waringdraw .el-transfer-panel__item.el-checkbox {
  1008. color: #65c7c8;
  1009. }
  1010. .waringdraw .el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label {
  1011. font-size: 16px;
  1012. color: #a0c8b3;
  1013. font-weight: 400;
  1014. }
  1015. .noneDiv {
  1016. display: none;
  1017. }
  1018. .tunnelDiv {
  1019. display: inline-block;
  1020. }
  1021. .tunnelBox {
  1022. padding-bottom: 1.5%;
  1023. }
  1024. .dv8TunnelStyle {
  1025. width: 120px;
  1026. line-height: 30px;
  1027. text-align: center;
  1028. margin-left: 1%;
  1029. margin-top: 1%;
  1030. display: inline-block
  1031. }
  1032. .dv8ObjectStyle {
  1033. display: inline-block;
  1034. width: 120px;
  1035. line-height: 30px;
  1036. text-align: center;
  1037. margin-left: 1%;
  1038. margin-top: 1%;
  1039. }
  1040. .tunnelIcon {
  1041. display: inline-block;
  1042. float: right;
  1043. margin-top: 1%;
  1044. margin-right: .5%
  1045. }
  1046. .objectIcon {
  1047. display: inline-block;
  1048. float: right;
  1049. margin-top: 1%;
  1050. margin-right: .5%
  1051. }
  1052. .tunnelstylebg {
  1053. display: flex;
  1054. margin: 0 auto;
  1055. height: 75px
  1056. }
  1057. .tunnelstyle {
  1058. width: 100%;
  1059. align-self: center;
  1060. display: flex;
  1061. justify-content: space-around;
  1062. flex-wrap: wrap;
  1063. }
  1064. /*.tunnelstyle{*/
  1065. /*width: 100%;*/
  1066. /*display: flex;*/
  1067. /*justify-content:space-around;*/
  1068. /*margin-top: 1%;*/
  1069. /*height: 75px*/
  1070. /*}*/
  1071. .tunnelPanel {
  1072. display: inline-block;
  1073. cursor: pointer;
  1074. text-align: center;
  1075. height: 30px;
  1076. width: 140px;
  1077. color: #adffc8;
  1078. font-size: 16px;
  1079. padding-top: 0.2%;
  1080. margin-top: 0.1%;
  1081. border-radius: .5rem;
  1082. border: 1px solid rgba(8, 220, 14, 0.5);
  1083. background: linear-gradient(180deg, rgba(27, 220, 8, 0.3), rgba(0, 180, 220, 0.1), rgba(0, 180, 220, 0.1), rgba(44, 220, 4, 0.3));
  1084. box-shadow: 0 0 2rem rgba(0, 180, 220, .1) inset;
  1085. overflow: hidden;
  1086. -webkit-animation-timing-function: ease-in-out;
  1087. -webkit-animation-name: breathe;
  1088. -webkit-animation-duration: 1500ms;
  1089. -webkit-animation-iteration-count: infinite;
  1090. -webkit-animation-direction: alternate;
  1091. }
  1092. .tunnelbad {
  1093. background: linear-gradient(to right, #ffb40d, #ff420d, #df0808);
  1094. display: inline-block;
  1095. cursor: pointer;
  1096. text-align: center;
  1097. height: 30px;
  1098. width: 140px;
  1099. color: #adffc8;
  1100. font-size: 16px;
  1101. /*padding-top: 0.2%;*/
  1102. /*margin-top: 0.1%;*/
  1103. border-radius: .5rem;
  1104. border: 1px solid rgba(0, 180, 220, 0.5);
  1105. box-shadow: 0 0 2rem rgba(0, 180, 220, .1) inset;
  1106. overflow: hidden;
  1107. -webkit-animation-timing-function: ease-in-out;
  1108. -webkit-animation-name: tunnelbad;
  1109. -webkit-animation-duration: 1500ms;
  1110. -webkit-animation-iteration-count: infinite;
  1111. -webkit-animation-direction: alternate;
  1112. }
  1113. @-webkit-keyframes breathe {
  1114. 0% {
  1115. opacity: 1;
  1116. box-shadow: 0 1px 2px rgba(9, 223, 37, 0.4), 0 1px 1px rgba(0, 147, 223, 0.1) inset;
  1117. }
  1118. 50% {
  1119. opacity: 0.5;
  1120. box-shadow: 0 1px 2px rgba(120, 223, 17, 0.4), 0 1px 1px rgba(0, 147, 223, 0.1) inset;
  1121. }
  1122. 100% {
  1123. opacity: 1;
  1124. border: 1px solid rgba(145, 235, 143, 0.7);
  1125. box-shadow: 0 1px 30px #57df00, 0 1px 20px #34df3d inset;
  1126. }
  1127. }
  1128. @-webkit-keyframes tunnelbad {
  1129. 0% {
  1130. opacity: 1;
  1131. box-shadow: 0 1px 2px rgba(223, 55, 52, 0.4), 0 1px 1px rgba(0, 147, 223, 0.1) inset;
  1132. }
  1133. 50% {
  1134. opacity: 0.7;
  1135. box-shadow: 0 1px 2px rgba(223, 0, 7, 0.58), 0 1px 1px rgba(0, 147, 223, 0.1) inset;
  1136. }
  1137. 100% {
  1138. opacity: 1;
  1139. border: 1px solid rgba(59, 235, 235, 0.7);
  1140. box-shadow: 0 1px 30px #df3734, 0 1px 20px #ff420d inset;
  1141. }
  1142. }
  1143. /* 滚动条的宽度*/
  1144. ::-webkit-scrollbar {
  1145. width: 10px;
  1146. height: 10px;
  1147. }
  1148. /*滚动条的滑块*/
  1149. ::-webkit-scrollbar-thumb {
  1150. background-color: #a1a3a9;
  1151. border-radius: 3px;
  1152. }
  1153. @keyframes mymove {
  1154. 0% {
  1155. width: 0px;
  1156. height: 700px;
  1157. }
  1158. 100% {
  1159. width: 80%;
  1160. height: 700px;
  1161. }
  1162. }
  1163. @keyframes closemove {
  1164. 100% {
  1165. width: 0px;
  1166. height: 700px;
  1167. }
  1168. 0% {
  1169. width: 80%;
  1170. height: 700px;
  1171. }
  1172. }
  1173. @keyframes animate {
  1174. 0%, 50%, 100% {
  1175. transform: rotate(0deg) scale(1);
  1176. }
  1177. 25% {
  1178. transform: rotate(4deg) scale(0.98);
  1179. }
  1180. 75% {
  1181. transform: rotate(-4deg) scale(1.02);
  1182. }
  1183. }
  1184. .qrcodeDiv {
  1185. padding: 1.5%;
  1186. padding-right: 5%
  1187. }
  1188. .icon {
  1189. width: 1em;
  1190. height: 1em;
  1191. font-size: 30px;
  1192. cursor: pointer;
  1193. vertical-align: -0.15em;
  1194. fill: currentColor;
  1195. overflow: hidden;
  1196. }
  1197. @font-face {
  1198. font-family: 'mytext';
  1199. src: url("./img/huawenxinwei.ttf");
  1200. font-weight: normal;
  1201. font-style: normal;
  1202. }
  1203. @media screen and (max-device-width: 960px) {
  1204. .elname {
  1205. font-size: 14px;
  1206. }
  1207. .title-gl {
  1208. font-size: 14px;
  1209. }
  1210. }
  1211. </style>