123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696 |
- <template>
- <div class="visualization-container">
- <!-- 头部标题区域 -->
- <div class="top-title-container u-flex-jac">
- <div class="title-content">
- <span class="text" :data-attr="titleName">{{ titleName }}</span>
- </div>
- </div>
- <!-- 报警按钮 -->
- <div class="alarm-btn u-flex-jac" @click="clickAlarmBtn">
- <div>故障<br />报警</div>
- </div>
- <!-- 数据内容区域 -->
- <div class="content-container u-flex">
- <!-- 左侧区域 -->
- <div class="left-container">
- <div class="left-top-con">
- <!-- 左上 -->
- <common-title title="预制曲线" @click="showModal"></common-title>
- <div class="visualization-common-border">
- <yuzhi-curve :data="yuzhiData" :marks="yuzhiMarkData" ref="yuzhiCurve"></yuzhi-curve>
- </div>
- </div>
- <div class="left-center-con">
- <!-- 左中 -->
- <common-title title="实时曲线" @click="showModal"></common-title>
- <div class="visualization-common-border">
- <real-time-curve :data="realTimeData" ref="realTimeCurve"></real-time-curve>
- </div>
- </div>
- <div class="left-bottom-con">
- <!-- 左下 -->
- <!-- <test-information></test-information> -->
- <common-title title="全程曲线" @click="showModal"></common-title>
- <div class="visualization-common-border">
- <full-curve :data="fullData" ref="fullCurve"></full-curve>
- </div>
- </div>
- </div>
- <!-- 中间部分 -->
- <div class="center-container">
- <!-- 中上 -->
- <div class="important">
- <!-- 顶部信息+3D -->
- <alarm-modal-list ref="alarmList"></alarm-modal-list>
- <info-3D :data="eqRealData"></info-3D>
- </div>
- <div class="centen-bottom-con u-flex-jab">
- <!-- 中下 -->
- <div class="center-bottom-left">
- <running-state :data="eqRealData" @click="handleXunhuan"></running-state>
- </div>
- <div class="center-bottom-right">
- <mode-info :data="eqRealData"></mode-info>
- </div>
- </div>
- </div>
- <!-- 右侧区域 -->
- <div class="right-container">
- <div class="right-top-con">
- <!-- 右上 -->
- <equipment-info :data="eqRealData" :alarmData="newAlarmData"></equipment-info>
- </div>
- <div class="right-center-con">
- <!-- 右中 -->
- <surveillance-video :data="eqRealData"></surveillance-video>
- </div>
- <div class="right-bottom-con">
- <!-- 右下 -->
- <test-status-info :data="eqRealData"></test-status-info>
- </div>
- </div>
- </div>
- <j-modal :title="title" :visible="visible" @cancel="curveClose" cancelText="关闭" class="u-modal-box">
- <div v-if="title === '全程曲线'" class="table-page-search-wrapper">
- <a-form layout="inline" @keyup.enter.native="searchQuery">
- <a-row :gutter="24">
- <a-col :lg="18" :md="12" style="width: 400px">
- <a-form-item label="试验开始时间">
- <j-date
- placeholder="请选择试验开始时间"
- v-model="queryParam.starttime"
- :show-time="true"
- date-format="YYYY-MM-DD HH:mm:ss"
- style="width: 100%"
- />
- </a-form-item>
- </a-col>
- <a-col :lg="6" :md="12">
- <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
- <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
- <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
- </span>
- </a-col>
- </a-row>
- </a-form>
- </div>
- <yuzhi-curve v-if="title === '预制曲线'" :data="yuzhiData" :marks="yuzhiMarkData" ref="yuzhiCurveM"></yuzhi-curve>
- <real-time-curve v-if="title === '实时曲线'" :data="realTimeData"></real-time-curve>
- <full-curve-model v-if="title === '全程曲线'" :data="fullModelData" ref="fullCurveModel"></full-curve-model>
- <template slot="footer">
- <a-button @click="curveClose">关闭</a-button>
- </template>
- </j-modal>
- </div>
- </template>
- <script>
- import commonTitle from './components/commonTitle.vue'
- import AlarmModalList from './modules/AlarmModalList.vue'
- import YuzhiCurve from './modules/YuzhiCurve.vue'
- import RealTimeCurve from './modules/RealTimeCurve.vue'
- import FullCurve from './modules/FullCurve.vue'
- import FullCurveModel from './modules/FullCurveModel.vue'
- import Info3D from './modules/info3D.vue'
- import RunningState from './modules/RunningState.vue'
- import EquipmentInfo from './modules/EquipmentInfo.vue'
- import ModeInfo from './modules/ModeInfo.vue'
- import SurveillanceVideo from './modules/SurveillanceVideo.vue'
- import TestInformation from './modules/TestInformation.vue'
- import TestStatusInfo from './modules/TestStatusInfo.vue'
- import { getAction } from '@/api/manage'
- import store from '@/store'
- import Vue from 'vue'
- import signMd5Utils from '@/utils/encryption/signMd5Utils'
- import { axios } from '@/utils/request'
- import { ACCESS_TOKEN } from '@/store/mutation-types'
- import axios111 from 'axios'
- import moment from 'moment'
- export default {
- name: '',
- components: {
- commonTitle,
- AlarmModalList,
- YuzhiCurve,
- RealTimeCurve,
- FullCurve,
- FullCurveModel,
- Info3D,
- RunningState,
- EquipmentInfo,
- ModeInfo,
- SurveillanceVideo,
- TestInformation,
- TestStatusInfo,
- },
- data() {
- return {
- titleName: '高温高湿试验项目',
- eqRealData: [],
- yuzhiData: [],
- yuzhiMarkData: [],
- realTimeData: [],
- fullData: [],
- fullModelData: [],
- websock: null,
- newAlarmData: null,
- title: '',
- visible: false,
- curveType: '',
- // 设备状态
- equipmentStatus: 1,
- // 弹窗搜索
- queryParam: {},
- isFullWebSocket: true, // 判断:当搜索之后就不随websocket进行改变了
- tagParams: {Tags: [
- { Name: '运行方式设定' }, { Name: '设备状态' }, { Name: '试验运行时间' }, { Name: '全部循环设定值' },
- { Name: '内部循环设定值' }, { Name: '全部循环运行值' }, { Name: '内部循环运行值' }, { Name: '预计结束时间' },
- { Name: '内部循环1_启始段' }, { Name: '内部循环1_结束段' }, { Name: '内部循环1_次数' },
- { Name: '内部循环2_启始段' }, { Name: '内部循环2_结束段' }, { Name: '内部循环2_次数' },
- { Name: '内部循环3_启始段' }, { Name: '内部循环3_结束段' }, { Name: '内部循环3_次数' },
- { Name: '内部循环4_启始段' }, { Name: '内部循环4_结束段' }, { Name: '内部循环4_次数' },
- { Name: '总的运行段数' }, { Name: '总的设定段数' }, { Name: '当前运行程序号' }, { Name: '当前运行段号' },
- { Name: '程序段运行时间' }, { Name: '程序段设定时间' }, { Name: '当前湿度值' }, { Name: '当前温度值' },
- { Name: '温度输出率' }, { Name: '起始温度值' }, { Name: '温度设定值' }, { Name: '湿度输出率' },
- { Name: '起始湿度值' }, { Name: '湿度设定值' }, { Name: '定值温度斜率值' },
- { Name: 'A1压机吸气压力' }, { Name: 'A1压机排气压力' }, { Name: 'A2压机吸气压力' }, { Name: 'A2压机排气压力' },
- { Name: 'B1压机吸气压力' }, { Name: 'B1压机排气压力' }, { Name: 'B2压机吸气压力' }, { Name: 'B2压机排气压力' },
- { Name: 'C1压机吸气压力' }, { Name: 'C1压机排气压力' }, { Name: 'C2压机吸气压力' }, { Name: 'C2压机排气压力' },
- { Name: 'D1压机吸气压力' }, { Name: 'D1压机排气压力' }, { Name: 'D2压机吸气压力' }, { Name: 'D2压机排气压力' },
- { Name: 'E1压机吸气压力' }, { Name: 'E1压机排气压力' }, { Name: 'E2压机吸气压力' }, { Name: 'E2压机排气压力' },
- { Name: 'F1压机吸气压力' }, { Name: 'F1压机排气压力' }, { Name: 'F2压机吸气压力' }, { Name: 'F2压机排气压力' },
- { Name: 'G1压机吸气压力' }, { Name: 'G1压机排气压力' }, { Name: 'G2压机吸气压力' }, { Name: 'G2压机排气压力' },
- { Name: 'H1压机吸气压力' }, { Name: 'H1压机排气压力' }, { Name: 'H2压机吸气压力' }, { Name: 'H2压机排气压力' },
- { Name: 'I1压机吸气压力' }, { Name: 'I1压机排气压力' }, { Name: 'I2压机吸气压力' }, { Name: 'I2压机排气压力' },
- { Name: 'J1压机吸气压力' }, { Name: 'J1压机排气压力' }, { Name: 'J2压机吸气压力' }, { Name: 'J2压机排气压力' },
- { Name: '氧浓度1采集值' }, { Name: '氧浓度2采集值' }, { Name: '氧浓度3采集值' }, { Name: '氧浓度4采集值' },
- { Name: '压差1采集值' }, { Name: '压差2采集值' }, { Name: '前风道鼓风变频器' }, { Name: '后风道鼓风变频器' }
- ]}
- }
- },
- destroyed() {
- // 离开路由之后断开websocket连接
- this.websock.close()
- },
- created() {
- // 初始化websocket
- this.initWebSocket()
- // 数据获取
- // this.getData()
- // 打开当前页面即数据获取
- this.getDashBoardData()
-
- // 直接从webaccess获取数据,满足实时性要求
- setTimeout(this.refreshData, 15000)
- },
- mounted() {},
- methods: {
- // getData(){
- // getAction(`/datacoll/webaccess/getWATagValue`).then(res=>{
- // console.log(res)
- // if(res.success){
- // this.eqRealData = res.result
- // }
- // })
- // },
- getInfo(url, parameter) {
- let sign = signMd5Utils.getSign(url, parameter)
- //将签名和时间戳,添加在请求接口 Header
- // update-begin--author:taoyan---date:20220421--for: VUEN-410【签名改造】 X-TIMESTAMP牵扯
- let signHeader = { 'X-Sign': sign, 'X-TIMESTAMP': signMd5Utils.getTimestamp() }
- // update-end--author:taoyan---date:20220421--for: VUEN-410【签名改造】 X-TIMESTAMP牵扯
- return axios({
- timeout: 50000,
- url: url,
- method: 'get',
- params: parameter,
- headers: signHeader,
- })
- },
- getDashBoardData() {
- this.getInfo(`/datacoll/webaccess/getDashBoardData`).then((res) => {
- const redata = JSON.parse(res.result);
- // console.log("首次获取", redata);
- this.initData(redata);
- })
- },
- // 点击报警按钮触发弹窗
- clickAlarmBtn() {
- this.$refs.alarmList.visible = true
- this.$refs.alarmList.loadData()
- },
- // websocket
- initWebSocket() {
- // 初始化weosocket(必须)
- // 请根据实际项目需要进行修改
- // var userId = store.getters.userInfo.id
- // const wsuri = 'ws://127.0.0.1:8866/websocket'
- // const wsuri = `ws://192.168.2.216:8866/websocket/${userId}`
- // const wsuri = `ws://192.168.2.247:8866/websocket/${userId}`
- // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https
- var userId = 'f0019fdebedb443c98dcb17d88222c38' // 免登录使用
- if (store && store.getters && store.getters.userInfo && store.getters.userInfo.id) {
- userId = store.getters.userInfo.id
- }
- var wsuri =
- window._CONFIG['domianURL'].replace('https://', 'wss://').replace('http://', 'ws://') + '/websocket/' + userId
- console.log('地址', wsuri)
- // var wsuri = 'ws://192.168.2.247:8866/websocket';
- // console.log(wsuri);
- //update-begin-author:taoyan date:2022-4-22 for: v2.4.6 的 websocket 服务端,存在性能和安全问题。 #3278
- let token = Vue.ls.get(ACCESS_TOKEN)
- // 大屏免登录,去掉token
- this.websock = new WebSocket(wsuri)
- // this.websock = new WebSocket(wsuri, [token]);
- // 新建一个webstock对象
- // this.websock = new WebSocket(wsuri)
- this.websock.onmessage = this.websocketonmessage
- this.websock.onopen = this.websocketonopen
- this.websock.onerror = this.websocketonerror
- this.websock.onclose = this.websocketclose
- },
- // 数据接收
- websocketonmessage(e) {
- console.log('-----接收消息-------', e)
- const redata = JSON.parse(e.data)
- // console.log(redata)
- this.initData(redata)
- },
- initData(redata) {
- console.log(66666, redata)
- // 接收数据之后操作
- this.eqRealData = redata['设备实时值']
- if (redata['设备实时值']) {
- var titleObj = redata['设备实时值'].find((item) => item.Name === '试验名称')
- // console.log('我要找名字', titleObj.Value)
- if (titleObj && titleObj != -1) {
- this.titleName = titleObj.Value
- }
- }
- // this.curveData = redata['设备历史值'] // 原来第一版后端传数格式
- if (redata['预制曲线']) {
- this.realTimeData = redata['实时曲线']
- this.fullData = redata['全程曲线']
- } else {
- // console.log("实时曲线", this.realTimeData, redata['实时曲线'])
- this.realTimeData = [...this.realTimeData, ...redata['实时曲线']]
- this.fullData = [...this.fullData, ...redata['全程曲线']]
- }
- if (this.isFullWebSocket) {
- // this.fullModelData = redata['设备历史值'] // 原来第一版后端传数格式
- if (redata['预制曲线']) {
- this.fullModelData = redata['全程曲线']
- } else {
- this.fullModelData = [...this.fullModelData, ...redata['全程曲线']]
- }
- }
- // 旧版本
- // this.newAlarmData = redata['最新一条报警信息']
- // 新版本
- // console.log('判断是否含有1',redata.hasOwnProperty('最近24H报警信息'))
- // console.log('判断是否含有2',redata['最近24H报警信息'])
- this.newAlarmData = redata.hasOwnProperty('最近24H报警信息') ? redata['最近24H报警信息'] : ['原数据']
- if (redata['预制曲线'] && redata['预制曲线'].length > 0) {
- this.yuzhiData = redata['预制曲线']
- }
- if (redata['预制曲线'] && redata['预制曲线线段'].length > 0) {
- this.yuzhiMarkData = redata['预制曲线线段']
- }
- // this.$refs.yuzhiCurve.markData = this.yuzhiMarkData
- // var titleObj = redata['设备实时值'].find(item => item.Name === '试验名称')
- // console.log(titleObj)
- // this.titleName = titleObj ? titleObj.Value : '高温高湿试验项目'
- },
- // websocket连接后发送数据(send发送)
- websocketonopen() {
- console.log('WebSocket连接成功')
- // let actions = {} // 请根据实际项目需要进行修改
- // this.websocketsend()
- },
- // 数据发送
- websocketsend(d) {
- this.websock.send(d)
- console.log(d)
- },
- // 连接建立失败重连
- websocketonerror() {
- this.initWebSocket()
- },
- // 关闭
- websocketclose(e) {
- console.log('断开连接', e)
- this.initWebSocket()
- },
- // 点击循环时触发
- handleXunhuan(choose) {
- this.$refs.yuzhiCurve.chooseXunhuan.circname = choose
- // this.$refs.yuzhiCurveM.chooseXunhuan.circname = choose
- },
- // 刷新数据
- refreshData() {
- const instance = axios111.create({
- baseURL: window._CONFIG['webaccessURL'] + '/WaWebService/Json', // 目标服务器的URL
- timeout: 20000, // 请求超时时间
- headers: {
- 'Content-Type': 'application/json',
- Authorization: window._CONFIG['webaccessAUTHOR'],
- },
- })
- instance
- .post('/GetTagValue/瑞莱', this.tagParams)
- .then((response) => {
- this.initData(this.addExtraTagValues(response.data.Values))
- console.log("为啥1")
- setTimeout(this.refreshData, 1000)
- })
- .catch((error) => {
- // 处理错误
- // console.error(error)
- setTimeout(this.refreshData, 1000)
- })
- },
- // 增加额外的参数
- addExtraTagValues(values) {
- var syyxsj, yjjssj, cxdsdsj, cxdyxsj, wdscl, sdscl = 0;
- var realtimecurves = [];
- var wholecurves = [];
- var now = new Date();
- var logtime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
- var shorttime = moment(new Date()).format('HH:mm:ss');
- var longtime = moment(new Date()).format('MM-DD HH:mm:ss');
- for (var i = 0; i < values.length; i++) {
- switch (values[i].Name) {
- case '设备状态':
- // 如果设备状态原来不是启动,现在改成启动,则刷新试验信息、预制曲线、实时曲线、全程曲线
- if (this.equipmentStatus != 1 && parseInt(values[i].Value) == 1) {
- this.equipmentStatus = parseInt(values[i].Value);
- this.getDashBoardData();
- }
- break;
- case '试验运行时间':
- syyxsj = parseInt(values[i].Value);
- break;
- case '预计结束时间':
- yjjssj = parseInt(values[i].Value);
- break;
- case '程序段设定时间':
- cxdsdsj = parseInt(values[i].Value);
- break;
- case '程序段运行时间':
- cxdyxsj = parseInt(values[i].Value);
- break;
- case '温度输出率':
- wdscl = parseFloat(values[i].Value);
- break;
- case '湿度输出率':
- sdscl = parseFloat(values[i].Value);
- break;
- case '当前温度值':
- realtimecurves.push({name: "温度实值-实时", subList: [{logtime: logtime, tagvalue: values[i].Value, transtime: shorttime}], type: "实时"})
- wholecurves.push({name: "温度实值-全程", subList: [{logtime: logtime, tagvalue: values[i].Value, transtime: longtime}], type: "全程"})
- break;
- case '当前湿度值':
- realtimecurves.push({name: "湿度实值-实时", subList: [{logtime: logtime, tagvalue: values[i].Value, transtime: shorttime}], type: "实时"})
- wholecurves.push({name: "湿度实值-全程", subList: [{logtime: logtime, tagvalue: values[i].Value, transtime: longtime}], type: "全程"})
- break;
- default:
- break;
- }
- }
- console.log("实时曲线", realtimecurves)
- console.log("全程曲线", wholecurves)
- // 试验进度:试验运行时间/(试验运行时间+预计结束时间)
- var syjd = (syyxsj + yjjssj) == 0 ? 0 : parseFloat(syyxsj) / (parseFloat(syyxsj) + parseFloat(yjjssj));
- values.push({Name: "试验进度", Value: syjd, Quality: 0});
- // 预计结束时间-试验信息:“预计结束时间”给到的是时间段(s):预计结束时间+本地时间=预计时间(显示月日时分)。
- var yjjssj_syxx = new Date();
- if (yjjssj != null) {
- yjjssj_syxx.setSeconds(yjjssj_syxx.getSeconds() + yjjssj);
- }
- values.push({Name: "预计结束时间-试验信息", Value: moment(yjjssj_syxx).format('YYYY-MM-DD HH:mm:ss'), Quality: 0});
- // 段余时间:程序段设定时间-程序段运行时间
- values.push({Name: "段余时间", Value: cxdsdsj - cxdyxsj, Quality: 0});
- // 段进度:(程序段设定时间(设定时间-秒) - 程序段运行时间(运行时间-秒) )/程序段设定时间(设定时间-秒)
- var djd = cxdyxsj == 0 ? "0" : ((cxdsdsj - cxdyxsj) / cxdsdsj).toFixed(2);
- values.push({Name: "段进度", Value: djd, Quality: 0});
- // 斜率设定
- // 升温/降温:温度输出率为0%-100%则是加热状态,-100%--0%则是降温状态
- values.push({Name: "升温", Value: wdscl > 0 ? 1 : 0, Quality: 0});
- values.push({Name: "降温", Value: wdscl < 0 ? 1 : 0, Quality: 0});
- // 加湿/除湿:湿度输出率为0%-100%则是加湿状态,-100%--0%则是除湿状态
- values.push({Name: "加湿", Value: sdscl > 0 ? 1 : 0, Quality: 0});
- values.push({Name: "除湿", Value: sdscl < 0 ? 1 : 0, Quality: 0});
- return {"设备实时值": values, "实时曲线": realtimecurves, "全程曲线": wholecurves};
- },
- // 弹窗
- showModal(title) {
- this.title = title
- this.visible = true
- // console.log('弹簧全程曲线赋值', this.$refs.fullCurve.data)
- // this.fullModelData = this.$refs.fullCurve.data
- },
- getSearchData() {
- getAction('/datacoll/webaccess/getQcqx', this.queryParam).then((res) => {
- console.log(res)
- if (res.success) {
- this.fullModelData = res.result
- }
- })
- },
- searchQuery() {
- this.getSearchData()
- this.isFullWebSocket = false
- },
- searchReset() {
- this.queryParam = {}
- this.getSearchData()
- this.isFullWebSocket = true
- },
- curveClose() {
- this.isFullWebSocket = true
- this.visible = false
- this.queryParam = {}
- this.fullModelData = this.fullData // 解除搜索数据状态,保证再次打开是全部数据状态
- },
- },
- }
- </script>
- <style lang="less" scoped>
- @import '~@/assets/less/uStyle.less';
- // 表单
- .ant-form {
- /deep/ .ant-form-item-label {
- label {
- color: #fff !important;
- }
- }
- /deep/ .ant-input {
- background: rgba(6, 23, 48, 0.5);
- color: #fff;
- }
- /deep/ .ant-btn-primary {
- background: transparent;
- // background: #0b2243d9;
- // border-color: #fff;
- }
- }
- </style>
- <style lang="less">
- .visualization-container {
- width: 100%;
- height: 100vh;
- background: url('~@/assets/visualization/pageBg.png') no-repeat;
- background-size: cover;
- position: relative;
- // 头部标题区域
- .top-title-container {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- // border: 1px solid #000;
- height: 80px;
- text-align: center;
- // line-height: 22px;
- .title-content {
- width: 700px;
- height: 100%;
- background: url('~@/assets/visualization/pageTitleBg.png') no-repeat center center;
- background-size: auto 100%;
- .text {
- font-size: 28px;
- color: transparent;
- // font-weight: bold;
- // 描边 变相加粗
- -webkit-text-stroke: 0.4px;
- letter-spacing: 0.15em;
- text-shadow: 1px 2px 2px rgb(10, 37, 92);
- // text-shadow: 1px 2px 2px rgba(10, 68, 134, .67);
- position: relative;
- font-family: '黑体';
- // font-family: "宋体";
- // font-family: serif;
- // font-family: "楷体_GB2312";
- &::before {
- // content: attr(text); // div中设置了text=>相当于又写了一个标题覆盖在原来设置了阴影的文字上面
- content: attr(data-attr);
- position: absolute;
- z-index: 10;
- background-image: linear-gradient(to bottom, #ffffff, #8dd4f7);
- // background-image: linear-gradient(to bottom, #ffffff, #7ed7fb);
- -webkit-background-clip: text;
- color: transparent;
- // 去除集成父级样式
- text-shadow: none;
- }
- }
- }
- }
- // 报警按钮
- .alarm-btn {
- position: absolute;
- top: 26px;
- left: calc(25% + 94px);
- width: 50px;
- height: 50px;
- background: url('~@/assets/visualization/alarm.png') no-repeat;
- background-size: contain;
- cursor: pointer;
- z-index: 999;
- div {
- color: #20eef9;
- text-align: center;
- font-size: 10px;
- line-height: 12px;
- font-style: italic;
- padding-right: 3px;
- padding-bottom: 2px;
- }
- }
- // 数据内容区域
- .content-container {
- height: 100%;
- // padding: 60px 20px 20px;
- // padding-top: 60px;
- // padding-bottom: 20px;
- box-sizing: border-box;
- .left-container {
- width: 25%;
- padding-left: 10px;
- padding-right: 10px;
- height: 100%;
- z-index: 999;
- .left-top-con {
- height: 33.3%;
- padding-top: 60px;
- padding-bottom: 12px;
- }
- .left-center-con {
- height: 33.3%;
- padding-top: 6px;
- padding-bottom: 6px;
- }
- .left-bottom-con {
- height: 33.3%;
- padding-top: 6px;
- padding-bottom: 12px;
- }
- }
- .center-container {
- width: 50%;
- height: 100%;
- padding-left: 10px;
- padding-right: 10px;
- .important {
- width: 100%;
- height: 66.7%;
- // text-align: center;
- // line-height: 500px;
- }
- .centen-bottom-con {
- height: 33.3%;
- padding-top: 6px;
- padding-bottom: 12px;
- .center-bottom-left {
- width: 50%;
- height: 100%;
- padding-right: 6px;
- }
- .center-bottom-right {
- width: 50%;
- height: 100%;
- padding-left: 6px;
- }
- }
- }
- .right-container {
- width: 25%;
- padding-left: 10px;
- padding-right: 10px;
- .right-top-con {
- height: 33.3%;
- padding-top: 60px;
- padding-bottom: 6px;
- }
- .right-center-con {
- height: 33.3%;
- padding-top: 6px;
- padding-bottom: 6px;
- }
- .right-bottom-con {
- height: 33.3%;
- padding-top: 6px;
- padding-bottom: 12px;
- }
- }
- }
- }
- .u-modal-box {
- .ant-modal {
- width: 100vw !important;
- height: 100vh !important;
- padding: 0 !important;
- margin: 0;
- top: 0;
- .ant-modal-close {
- color: #fff;
- }
- .ant-modal-header {
- background-color: rgba(5, 24, 61, 0.9) !important;
- border-bottom: none;
- .ant-modal-title {
- color: #fff;
- }
- }
- .ant-modal-content {
- border-radius: 0;
- height: 100%;
- background-color: rgba(5, 24, 61, 0.9) !important;
- // background-color: rgba(15, 57, 91, .94) !important;
- overflow: hidden;
- }
- .ant-modal-body {
- height: calc(100% - 55px - 53px);
- }
- .ant-modal-footer {
- border-top: none;
- }
- }
- }
- </style>
|