.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/screen/home/index.js | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/screen/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/screen/video.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images_lc/info-bg.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images_lc/map.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/assets/images_lc/point-message.png | 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/components/VideoPlayer/VideoPlayer.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Navbar.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/screen/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/facility/facilityList/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/facility/monitorList/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/screen/home/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/screen/pumpInfo/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.env.development
@@ -12,4 +12,4 @@ # VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8030' # VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8036' #后端本地 VITE_APP_PUBLIC_REQUEST_API = 'http://192.168.0.200:8036' VITE_APP_PUBLIC_REQUEST_API = 'http://192.168.0.200:8038' src/api/screen/home/index.js
src/api/screen/index.js
对比新文件 @@ -0,0 +1,13 @@ import {publicRequest} from '@/utils/request.js' /** * 获取泵房信息 */ export const getPumpData = (data) => { return publicRequest({ url: '/waterFacilityParameter/getData', method: 'post', data }) } src/api/screen/video.js
文件名从 src/api/facility/video.js 修改 @@ -1,4 +1,4 @@ import { publicRequest } from '@/utils/request' import { publicRequest } from '@/utils/request.js' // 根据小区id获取监控点 export const getVideoList = (params) => { src/assets/images_lc/info-bg.pngsrc/assets/images_lc/map.pngsrc/assets/images_lc/point-message.pngsrc/components/VideoPlayer/VideoPlayer.vue
@@ -11,7 +11,7 @@ <script setup lang="ts"> import {onMounted, onUnmounted, ref} from 'vue'; import { getVideoMedia, stopVideoMedia, renewVideoMedia } from '@/api/facility/video'; import { getVideoMedia, stopVideoMedia, renewVideoMedia } from '@/api/screen/video'; import { debounce } from '@/utils/tool'; const props = defineProps({ src/layout/components/Navbar.vue
@@ -22,7 +22,7 @@ <!-- <el-dropdown-item command="setLayout" v-if="settingsStore.showSettings">--> <!-- <span>布局设置</span>--> <!-- </el-dropdown-item>--> <el-dropdown-item divided command="logout"> <el-dropdown-item command="logout"> <span>退出登录</span> </el-dropdown-item> </el-dropdown-menu> src/screen/index.vue
@@ -20,9 +20,6 @@ <template #dropdown> <el-dropdown-menu> <el-dropdown-item> <span @click="toUserDetail" >个人中心</span> </el-dropdown-item> <el-dropdown-item divided> <span @click="loginOut">退出登录</span> </el-dropdown-item> </el-dropdown-menu> @@ -65,11 +62,9 @@ }).catch(() => { }); } const toUserDetail = () =>{ router.push('/userCenter') } const btnList = ref([]) const btnList = ref([ // {name:'系统监管',url:'/user'}, ]) const navTo = (item) =>{ router.push(item.url) @@ -262,7 +257,7 @@ height: 90%; background: url("@/assets/images/screen/content_bg.png") no-repeat; background-size: 100% 100%; padding: 0 1.5rem 1.5rem; padding: 0 1.5rem 1rem; } } </style> src/views/facility/facilityList/index.vue
@@ -79,10 +79,9 @@ }); //查询监控点 const pointList = ref(); const cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', checkStrictly: true, expandTrigger: 'hover', emitPath: false }; //级联选择器配置 const getPoint = async () => { await pointApi().getParentPoint().then((res) => { pointList.value = res.data await pointApi().search({limit: 100, page: 1}).then((res) => { pointList.value = res.data.list }) } @@ -358,7 +357,14 @@ </el-select> </el-form-item> <el-form-item label="选择监控点" prop="pointId"> <el-cascader v-model="form.pointId" :options="pointList" :show-all-levels="false" :props="cascaderOption" /> <el-select v-model="form.pointId" :placeholder="inpTip+formLabel.pointId"> <el-option v-for="(item,index) in pointList" :label="item.pointName" :value="item.id" :key="index" ></el-option> </el-select> </el-form-item> <el-form-item label="安装日期" prop="installDate"> <el-date-picker @@ -389,7 +395,7 @@ <!-- 设备参数弹窗 --> <el-dialog title="设备参数" v-model="openParamForm" width="50vw" center align-center append-to-body> <!--表格--> <el-table ref='tableRef' :data="tableParamData" height="75vh" @selection-change="handleSelectionParams" > <el-table ref='tableRef' :data="tableParamData" height="70vh" @selection-change="handleSelectionParams" > <el-table-column type="selection" width="55" align ="center" /> <el-table-column v-for="(item, key, index) of tableParamHeader" src/views/facility/monitorList/index.vue
@@ -70,7 +70,6 @@ pointName: '监控点名称', pointCode: '监控点编号', pointType: '监控点类型', parentId: '父级监控点', address: '详细地址', imageUrl: '图片', remark: '备注' @@ -84,7 +83,6 @@ pointName: '', pointCode: '', pointType: '', parentId: '', address: '', imageUrl: '', remark: '' @@ -92,14 +90,11 @@ const searchParams = ref({ keywords: '', }); // 监控点列表 const monityList = ref([]); // 监控点类型 const monityTypeList = [ {id: 1, name: '水温监测点'}, {id: 2, name: '生态流量监测点'} ]; const cascaderOption = { label: 'pointName', value: 'id', children: 'childrenList', checkStrictly: true, expandTrigger: 'hover', emitPath: false }; //级联选择器配置 /** 新增按钮操作 */ async function handleAdd() { @@ -124,20 +119,11 @@ /** 删除按钮操作 */ function handleDelete(row) { proxy.$modal.confirm('是否确认删除名称为"' + row.contact + '"的数据项?').then(function () { // return pointApi().remove(row.id); }).then(() => { getList(); proxy.$modal.msgSuccess("删除成功"); }).catch(() => { }); } // 获取监控点列表 const getMonitryList = () => { pointApi().getParentPoint().then(res => { monityList.value = res.data; }) } /** @@ -188,7 +174,6 @@ /** 表单重置 */ function reset() { form.value = { parentId: '', pointName: '', pointCode: '', pointType: '', @@ -201,7 +186,6 @@ onMounted(() => { getList(); getMonitryList(); }) </script> <template> @@ -272,9 +256,6 @@ <!-- 添加/修改表单 --> <el-dialog :title="title" v-model="open" append-to-body center> <el-form class="form-box" ref="formRef" :model="form" :rules="rules" label-width='auto'> <el-form-item :label="formLabel.parentId" prop="parentId"> <el-cascader v-model="form.parentId" :options="monityList" :show-all-levels="false" :props="cascaderOption" /> </el-form-item> <el-form-item :label="formLabel.pointType" prop="pointType"> <el-select v-model="form.pointType" :placeholder="'请输入'+formLabel.pointType"> <el-option @@ -297,7 +278,7 @@ <el-form-item :label="formLabel.remark" prop="address"> <el-input v-model="form.remark" :placeholder="'请输入'+formLabel.remark"/> </el-form-item> <!-- <el-form-item></el-form-item>--> <el-form-item></el-form-item> <el-form-item label="图片" prop="imageUrl" style="flex: 1"> <upload-icons @uploadData="uploadData" :imageList="form.imageUrl" :limit="1"></upload-icons> <span style="display: block;">(请上传1张设备图片)</span> src/views/screen/home/index.vue
@@ -1,15 +1,5 @@ <template> <div class="container"> <div class="left"> <div class="liuliang"> <div class="liuliang-title">流量统计</div> <div class="liuliang-c">流量</div> </div> <div class="gongdian"> <div class="gongdian-title">流量统计</div> <div class="gongdian-c">流量</div> </div> </div> <div class="center" > <!-- 地图窗口 --> <div class="map"> @@ -28,31 +18,15 @@ </div> <div class="message-item"> <span class="name">运行时长:</span> <span class="val-status">{{item.longtime}}</span> <span class="val-status">{{}}</span> </div> <div class="message-item"> <span class="name">瞬时流量:</span> <span class="val-status">{{item.ssll}}</span> <span class="name">工作状态:</span> <span class="val-status">{{}}</span> </div> <div class="message-item"> <span class="name">累计流量:</span> <span class="val-status">{{item.ljll}}</span> </div> <div class="message-item"> <span class="name">流速:</span> <span class="val-status">{{item.ls}}</span> </div> <div class="message-item"> <span class="name">启泵次数:</span> <span class="val-status">{{item.qdnumber}}</span> </div> <div class="message-item"> <span class="name">1号水池水位:</span> <span class="val-status">{{item.oneWater}}</span> </div> <div class="message-item"> <span class="name">2号水池水位:</span> <span class="val-status">{{item.twoWater}}</span> <span class="name">水池水位:</span> <span class="val-status">{{item.yewei}}</span> </div> <div class="message-item"> <span class="name">其他详细信息:</span> @@ -64,68 +38,70 @@ </div> </div> <div class="right"> <!-- 实时监控 --> <div class="jiankong"> <div class="jiankong-t">实时监控</div> <div class="jiankong-c"> <div class="switch"> <div class="switch-l">泵房监控</div> <div class="switch-r"> <div class="more" :class="{active: selectType==='two'}" @click="changeType('two')">多屏模式 </div> <div class="single" :class="{active: selectType==='single'}" @click="changeType('single')">单屏模式</div> <div class="right-box"> <!-- 实时监控 --> <div class="jiankong"> <div class="jiankong-t">实时监控</div> <div class="jiankong-c"> <div class="switch"> <div class="switch-l">泵房监控</div> <div class="switch-r"> <div class="more" :class="{active: selectType==='two'}" @click="changeType('two')">多屏模式 </div> <div class="single" :class="{active: selectType==='single'}" @click="changeType('single')">单屏模式</div> </div> </div> </div> <div class="video-box"> <div class="two" v-if="selectType==='two'"> <div class="list" v-for="(item, index) in showList" :key="index"> <div class="item" v-if="item?.deviceId"> <VideoPlayer :item="item" /> <div class="video-box"> <div class="two" v-if="selectType==='two'"> <div class="list" v-for="(item, index) in showList" :key="index"> <div class="item" v-if="item?.deviceId"> <VideoPlayer :item="item" /> </div> <div v-else class="item"></div> </div> </div> <div class="single" v-else> <div class="item" v-if="showList[0]?.deviceId"> <VideoPlayer :item="showList[0]" /> </div> <div v-else class="item"></div> </div> </div> <div class="single" v-else> <div class="item" v-if="showList[0]?.deviceId"> <VideoPlayer :item="showList[0]" /> </div> </div> <!-- 报警记录 --> <div class="warnRecord"> <div class="warnRecord-title">报警记录</div> <div class="warnRecord-info"> <div class="into-t">报警信息</div> <div class="info-list"> <div class="item" v-for="(item, index) in warnList" :key="index"> <el-tooltip effect="dark" :content="item.pointName" placement="top" > {{item.pointName}} </el-tooltip> <el-tooltip effect="dark" :content="item.facilityName" placement="top" > {{item.facilityName}} </el-tooltip> <el-tooltip effect="dark" :content="item.description" placement="top" > {{item.description}} </el-tooltip> </div> <div v-else class="item"></div> </div> </div> </div> </div> <!-- 报警记录 --> <div class="warnRecord"> <div class="warnRecord-title">报警记录</div> <div class="warnRecord-info"> <div class="into-t">报警信息</div> <div class="info-list"> <div class="item" v-for="(item, index) in warnList" :key="index"> <el-tooltip effect="dark" :content="item.pointName" placement="top" > {{item.pointName}} </el-tooltip> <el-tooltip effect="dark" :content="item.facilityName" placement="top" > {{item.facilityName}} </el-tooltip> <el-tooltip effect="dark" :content="item.description" placement="top" > {{item.description}} </el-tooltip> </div> <div class="warnRecord-datashow"> <div ref="warningRef" class="warning" /> </div> </div> <div class="warnRecord-datashow"> <div ref="warningRef" class="warning" /> </div> </div> </div> @@ -140,6 +116,8 @@ import { UniversalTransition, LabelLayout } from "echarts/features"; import { CanvasRenderer } from "echarts/renderers"; import {onMounted, reactive, ref} from "vue"; import {getPumpData} from '@/api/screen/index.js' import {getVideoList} from '@/api/screen/video.js' import VideoPlayer from "@/components/VideoPlayer/VideoPlayer.vue"; @@ -155,18 +133,7 @@ LabelLayout, ]); const openStatus = reactive({ bengfang: false, shuixiang: false, jieguan: false }) const mapSize = ref(90); // 初始化地图大小为100 const gonghaoRef = ref(); const liuliangRef = ref(); const warningRef = ref(); let gonghaoCharts = null; let liuliangCharts = null; let warningCharts = null; const tucengVal = ref(0); @@ -174,121 +141,13 @@ const videoList = ref([]) const showList = ref([]) const warnList = ref([]) const showMsg = ref() const pointList = ref([ { name: '碧桂园', shuijin: '正常', longtime: '1280天13小时59分', ssll: '+10㎡/s', ljll: '㎡', ls: '10m/s', qdnumber: '10次', oneWater: '2.26m', twoWater: '4.26m', left: 40, top: 22 }, { name: '龙湖公馆', shuijin: '正常', longtime: '1280天13小时59分', ssll: '+10㎡/s', ljll: '㎡', ls: '10m/s', qdnumber: '10次', oneWater: '2.26m', twoWater: '4.26m', left: 52, top: 35 }, ]) const tongjiTable = reactive({ selectName: '', tongjiList: [], namelist: [] }) const showMsg = ref(0) const pointList = ref([]) const clickMsgFun = (index: number) => { showMsg.value = showMsg.value === index ? null : index; } // 获取定位随机值 const getRandom = (min, max) => { return Math.floor(Math.random() * (max - min) + min); } const setOpenStatus = (type: string) => { switch (type) { case "bengfang": openStatus.bengfang = openStatus.bengfang ? false : true; break; case "shuixiang": openStatus.shuixiang = openStatus.shuixiang ? false : true; break; case "jieguan": openStatus.jieguan = openStatus.jieguan ? false : true; break } } // 图表实例 const setGonghaoCharts = (xData, sData) => { if(gonghaoRef.value) { gonghaoCharts = echarts.init(gonghaoRef.value); const option = { grid: { top: 30, bottom: 40, left: 40 }, xAxis: { type: 'category', boundaryGap: false, data: xData, axisLabel: { color: '#fff', fontSize: '0.5rem', rotate: 30, }, }, yAxis: { type: 'value', axisLabel: { color: '#fff', fontSize: '0.5rem', } }, tooltip: { show: true }, series: [ { data: sData, type: 'line', areaStyle: {} } ] }; gonghaoCharts.setOption(option); } } const setLiuliangCharts = (xData, sData) => { if(liuliangRef.value) { liuliangCharts = echarts.init(liuliangRef.value); const option = { grid: { top: 30, bottom: 40, left: 40 }, xAxis: { type: 'category', boundaryGap: false, data: xData, axisLabel: { color: '#fff', fontSize: '0.5rem', rotate: 30, } }, yAxis: { type: 'value', axisLabel: { color: '#fff', fontSize: '0.5rem', } }, tooltip: { show: true }, series: [ { data: sData, type: 'line', areaStyle: {} } ] }; liuliangCharts.setOption(option); } } const setWarningCharts = (data) => { if(warningRef.value) { warningCharts = echarts.init(warningRef.value); @@ -315,39 +174,12 @@ } } // 获取功耗数据 const getGonghaoData = () => { getHomeGonghao().then(res => { let xdata = []; let sdata = []; let newArr = res.data.length > 5 ? res.data.slice(0,5) : res.data newArr.forEach((item) => { xdata.push(item.pointName) sdata.push(item.value) }) setGonghaoCharts(xdata, sdata) }) } // 获取流量统计 const getLiuliangData = () => { getHomeLiuliang().then(res => { let xdata = []; let sdata = []; let newArr = res.data.length > 5 ? res.data.slice(0,5) : res.data newArr.forEach((item) => { xdata.push(item.pointName) sdata.push(item.value) }) setLiuliangCharts(xdata, sdata) }) } // 切换播放模式 const changeType = (type) => { selectType.value = type showList.value = [] if(type === 'two') { showList.value = videoList.value.slice(0, 2).concat(Array(4 - videoList.value.length).fill(null)) showList.value = videoList.value.slice(0, 2).concat(Array(2 - videoList.value.length).fill(null)) } else { showList.value = videoList.value.slice(0, 1) } @@ -366,33 +198,45 @@ }) } // 获取统计数据 const getTongjiData = () => { getHomeTongji().then(res => { tongjiTable.tongjiList = res.data.statementValueList; tongjiTable.namelist = res.data.statementNameList; // 获取视频列表 const getVideo = async (id) => { if(id) { getVideoList({pointId: id}).then(res => { videoList.value = res.data; changeType(selectType.value) }) } } // 获取泵房信息 const getPumpInfo = () => { const pump = [] getPumpData().then(res => { res.data.forEach((el, index) => { const yewei = el.parameterVOList.find(item => item.columnsCode === '1001') const shuijin = el.parameterVOList.find(item => item.columnsCode === 'SQ') pump.push({ left: 84, top: 28, name: el.facilityName, yewei: yewei.columnValue + yewei?.columnsUnits, shuijin: !Number(shuijin.columnValue) ? '正常' : '异常', }) }) pointList.value = pump }) } const clearName = () => { tongjiTable.selectName = '' } onMounted(() => { // getGonghaoData() // getLiuliangData() getPumpInfo() // getWarning() // getTongjiData() }) </script> <style lang="scss" scoped> // 地图动态变化样式 不能单独抽离到scss文件中 .container { background-image: url("@/assets/images_lc/map.png"); // 动态获取图片大小 background-size: v-bind('mapSize + "%"'); background-size: 100%; background-repeat: no-repeat; background-position: 50% 50%; transition: background-size 0.3s ease; @@ -422,37 +266,8 @@ color: white; overflow: hidden; .left { width: 20%; flex-shrink: 0; flex-grow: 0; display: flex; flex-direction: column; gap: 1rem; .liuliang{ height: 45%; background: url("@/assets/images_lc/realTimeMonitoring.png") no-repeat; background-size: 100% 100%; &-title { background-image: url('@/assets/images_lc/title_font.png'); padding-left: 16%; font-size: 1.2rem; } } .gongdian{ height: 55%; background: url("@/assets/images_lc/warnRecord.png") no-repeat; background-size: 100% 100%; &-title { background-image: url('@/assets/images_lc/title_font.png'); padding-left: 16%; font-size: 1.2rem; } } } .center { width: 58%; width: 80%; display: flex; flex-direction: column; .map { @@ -469,19 +284,20 @@ } .message{ width: 12rem; height: 16rem; height: 14rem; background: url("@/assets/images_lc/point-message.png") no-repeat; backdrop-filter: blur(3px); background-size: 100% 100%; padding: 0 0.2rem; position: absolute; right: -12rem; right: 2rem; top: 0; z-index: 100; .message-item{ font-size: 0.7rem; padding: 0.3rem 0 0.3rem 0.9rem; padding: 0.5rem 0 0.5rem 0.9rem; .name{ margin-right: 0.3rem; margin-right: 0.5rem; } .val-status{ color: #22E195; @@ -495,12 +311,23 @@ .right { width: 20%; display: flex; flex-direction: column; gap: 1rem; &:hover{ .right-box{ transform: translateX(0); } } .right-box{ height: 100%; display: flex; flex-direction: column; gap: 1rem; transform: translateX(100%); transition: all .5s; } .jiankong { height: 40%; height: 45%; background-image: url('@/assets/images_lc/realTimeMonitoring.png'); backdrop-filter: blur(3px); background-repeat: no-repeat; background-size: 100% 100%; &-t { @@ -557,11 +384,11 @@ width: 100%; height: 100%; display: flex; flex-wrap: wrap; justify-content: space-between; flex-direction: column; align-items: center; .list{ width: 49%; height: 100%; width: 100%; height: 48%; .item{ height: 100%; background-color: #000; @@ -582,8 +409,9 @@ } .warnRecord { height: 60%; height: 55%; background-image: url('@/assets/images_lc/warnRecord.png'); backdrop-filter: blur(3px); background-repeat: no-repeat; background-size: 100% 100%; display: flex; src/views/screen/pumpInfo/index.vue
@@ -1,169 +1,175 @@ <script setup> import {computed, onMounted, ref} from 'vue' import {getPumpData} from '@/api/screen/index.js' const list = [ { name: '康妮一号泵房', data: { longtime: '1280天13小时59分', shuijin: '正常', ssll: '+10m³/h', ljll: '1021m³', ls: '10m/s', qdnumber: '10次', dianya: '15v', dianliu: '15A', power: '100w', dianneng: '500kw·h', onewater: '226m', twowater: '426m', adianya: '380v', adianliu: '0.15A', bdianya: '380v', bdianliu: '0.15A', cdianya: '380v', cdianliu: '0.15A', onepumpNumber: 10, onepumpStatus: 1, twopumpNumber: 10, twopumpStatus: 0, threepumpNumber: 10, threepumpStatus: 0, fourpumpNumber: 10, fourpumpStatus: 0, } }, { name: '康妮一号泵房', data: { longtime: '1280天13小时59分', shuijin: '正常', ssll: '+10m³/h', ljll: '1021m³', ls: '10m/s', qdnumber: '10次', dianya: '15v', dianliu: '15A', power: '100w', dianneng: '500kw·h', onewater: '226m', twowater: '426m', adianya: '380v', adianliu: '0.15A', bdianya: '380v', bdianliu: '0.15A', cdianya: '380v', cdianliu: '0.15A', onepumpNumber: 10, onepumpStatus: 1, twopumpNumber: 10, twopumpStatus: 0, threepumpNumber: 10, threepumpStatus: 0, fourpumpNumber: 10, fourpumpStatus: 0, } const list = ref([]) const gongdainStatus = (n1, n2, n3) => { if ((n1 > 350 && n1 < 400) && (n2 > 350 && n2 < 400) && (n3 > 350 && n3 < 400)) { return true } else { return false } ] } const getData = () => { let newArr = [{}, {}, {}, {}] let hasPump = 0; // 最多四个泵,有几个泵就累加数字 getPumpData().then(res => { newArr.forEach(item => { item['facilityName'] = res.data[0].facilityName }) res.data[0].parameterVOList.forEach(el => { if(el.parameterType === 0) { newArr.forEach(item => { item['c'+el.columnsCode] = el.columnValue }) } else if(el.parameterType === 1) { if(hasPump < 1) { hasPump = 1 } newArr[0]['c'+el.columnsCode] = el.columnValue } else if (el.parameterType === 2) { if(hasPump < 2) { hasPump = 2 } newArr[1]['c'+el.columnsCode] = el.columnValue } else if(el.parameterType === 3) { if(hasPump < 3) { hasPump = 3 } newArr[2]['c'+el.columnsCode] = el.columnValue } else if(el.parameterType === 4) { hasPump = 4 newArr[3]['c'+el.columnsCode] = el.columnValue } }) list.value = newArr.splice(0,hasPump) }) } onMounted(() => { getData() }) </script> <template> <div class="info"> <div class="item" v-for="(item, index) in list" :key="index"> <div class="item-t">{{ item.name }}</div> <div class="item-t">{{item.facilityName}}</div> <div class="item-c"> <div class="list"> <div class="lc"> <span class="name">运行时长</span> <span class="val">{{item.data.longtime}}</span> <div class="allTime"> <div>{{index+1}}号泵总运行时长</div> <div class="val">{{ item[`cB00${index+1}Time`] }}</div> </div> <div class="pumbVal"> <div class="environment"> <div class="env-item"> <div class="name">水浸状态</div> <div :class="Number(item.cSQ) === 0 ? 'val' : 'error'">{{Number(item.cSQ) === 0 ? '正常' : '异常'}}</div> </div> <div class="env-item"> <div class="name">水池液位</div> <div class="val">{{item.c1001}}cm</div> </div> <div class="env-item"> <div class="name">供电状态</div> <div :class="gongdainStatus(Number(item.c2001A), Number(item.c2001B), Number(item.c2001C)) ? 'val' : 'error'">{{gongdainStatus(Number(item.c2001A), Number(item.c2001B), Number(item.c2001C)) ? '正常' : '异常'}}</div> </div> <div class="env-item"> <div class="name">A相电压</div> <div class="val">{{ item.c2001A }}V</div> </div> <div class="env-item"> <div class="name">A相电流</div> <div class="val">{{item.c2002A}}A</div> </div> <div class="env-item"> <div class="name">B相电压</div> <div class="val">{{ item.c2001B }}V</div> </div> <div class="env-item"> <div class="name">B相电流</div> <div class="val">{{ item.c2002B }}A</div> </div> <div class="env-item"> <div class="name">C相电压</div> <div class="val">{{ item.c2001C }}V</div> </div> <div class="env-item"> <div class="name">C相电流</div> <div class="val">{{ item.c2002C }}A</div> </div> <div class="env-item"> <div class="name">总 电 能</div> <div class="val">{{ item.c2007 }}Kw·h</div> </div> </div> <div class="lc"> <span class="name">水浸</span> <span class="val">{{item.data.shuijin}}</span> </div> <div class="lc"> <span class="name">瞬时流量</span> <span class="val">{{item.data.ssll}}</span> </div> <div class="lc"> <span class="name">累计流量</span> <span class="val">{{item.data.ljll}}</span> </div> <div class="lc"> <span class="name">流 速</span> <span class="val">{{item.data.ls}}</span> </div> <div class="lc"> <span class="name">启泵次数</span> <span class="val">{{item.data.qdnumber}}</span> </div> <div class="lc"> <span class="name">水泵电压</span> <span class="val">{{item.data.dianya}}</span> </div> <div class="lc"> <span class="name">水泵电流</span> <span class="val">{{item.data.dianliu}}</span> </div> <div class="lc"> <span class="name">水泵功率</span> <span class="val">{{item.data.power}}</span> </div> <div class="lc"> <span class="name">总 电 能</span> <span class="val">{{item.data.dianneng}}</span> </div> <div class="lc"> <span class="name">1号泵组</span> <span class="status">{{ !!item.data.onepumpStatus ? '开' : '关' }}</span> <span class="val">{{item.data.onepumpNumber}}次</span> </div> <div class="lc"> <span class="name">1号泵组</span> <span class="status">{{ !!item.data.twopumpStatus ? '开' : '关' }}</span> <span class="val">{{item.data.twopumpNumber}}次</span> </div> <div class="lc"> <span class="name">1号泵组</span> <span class="status">{{ !!item.data.threepumpStatus ? '开' : '关' }}</span> <span class="val">{{item.data.threepumpNumber}}次</span> </div> <div class="lc"> <span class="name">1号泵组</span> <span class="status">{{ !!item.data.fourpumpStatus ? '开' : '关' }}</span> <span class="val">{{item.data.fourpumpNumber}}次</span> </div> <div class="lc"> <span class="name">1号水池液位</span> <span class="val">{{item.data.onewater}}</span> </div> <div class="lc"> <span class="name">2号水池液位</span> <span class="val">{{item.data.twowater}}</span> </div> <div class="lc"> <span class="name">市电供电A相电压</span> <span class="val">{{item.data.adianya}}</span> </div> <div class="lc"> <span class="name">市电供电A相电流</span> <span class="val">{{item.data.adianliu}}</span> </div> <div class="lc"> <span class="name">市电供电B相电压</span> <span class="val">{{item.data.bdianya}}</span> </div> <div class="lc"> <span class="name">市电供电B相电流</span> <span class="val">{{item.data.bdianliu}}</span> </div> <div class="lc"> <span class="name">市电供电C相电压</span> <span class="val">{{item.data.cdianya}}</span> </div> <div class="lc"> <span class="name">市电供电C相电流</span> <span class="val">{{item.data.cdianliu}}</span> <div class="run"> <div class="run-item"> <div class="name">工作状态</div> <div :class="(item[`cB00${index+1}Start`] || item[`cB00${index+1}Run`]) === '开' ? 'val' : 'error'">{{(item[`cB00${index+1}Start`] || item[`cB00${index+1}Run`]) === '开' ? '启动' : '关闭'}}</div> </div> <div class="run-item"> <div class="name">运行状态</div> <div :class="Number(item.c1012) < 0 ? 'error' : 'val'">{{Number(item.c1012) < 0 ? '吸水' : '排水'}}</div> </div> <div class="run-item"> <div class="name">瞬时流量</div> <div class="val">{{Number(item.c1012)}}m³/h</div> </div> <div class="run-item"> <div class="name">控制状态</div> <div class="val">{{item.cAuto === '关' ? '远程' : '自动'}}</div> </div> <div class="run-item"> <div class="name">流 速</div> <div class="val">{{ Number(item.c1011) }}m/s</div> </div> <div class="run-item"> <div class="name">启泵次数</div> <div class="val">正常</div> </div> <div class="run-item"> <div class="name">1号空开</div> <div class="val"> <span style="margin-right: 2rem" :class="item.cQF1 === '开' ? 'val' : 'error'">{{item.cQF1 === '开' ? '开' : '关'}}</span> <span>{{Number(item.cQF1Number) + '次'}}</span> </div> </div> <div class="run-item"> <div class="name">2号空开</div> <div class="val"> <span style="margin-right: 2rem" :class="item.cQF2 === '开' ? 'val' : 'error'">{{item.cQF2 === '开' ? '开' : '关'}}</span> <span>{{Number(item.cQF2Number) + '次'}}</span> </div> </div> <div class="run-item"> <div class="name">备用空开</div> <div class="val"> <span style="margin-right: 2rem" :class="item.cQF3 === '开' ? 'val' : 'error'">{{item.cQF3 === '开' ? '开' : '关'}}</span> <span>{{Number(item.cQF3Number) + '次'}}</span> </div> </div> <div class="run-item"> <div class="name">备用空开</div> <div class="val"> <span style="margin-right: 2rem" :class="item.cQF4 === '开' ? 'val' : 'error'">{{item.cQF4 === '开' ? '开' : '关'}}</span> <span>{{Number(item.cQF4Number) + '次'}}</span> </div> </div> <div class="run-item"> <div class="name">运行时长</div> <div class="val">{{ item[`cB00${index+1}Time`] }}</div> </div> <div class="run-item"> <div class="name">正向累计流量</div> <div class="val">{{item.c1013}}m³</div> </div> <div class="run-item"> <div class="name">负向累计流量</div> <div class="val">{{ item.c10130 }}m³</div> </div> </div> </div> </div> @@ -178,6 +184,10 @@ align-items: center; justify-content: space-between; padding: 0 5rem; overflow-x: scroll; &::-webkit-scrollbar{ display: none; } .item{ width: 48%; height: 98%; @@ -192,31 +202,53 @@ &-c{ height: calc(100% - 2rem); padding: 1rem; .list{ height: 100%; .allTime{ height: 10%; padding: 0 8rem; color: #fff; font-size: 1.5rem; display: flex; flex-direction: column; flex-wrap: wrap; .lc{ justify-content: space-between; align-items: center; } .pumbVal{ height: 90%; padding-top: 5%; color: #fff; display: flex; .environment, .run{ height: 100%; width: 50%; padding: 0.75rem 0; color: #fff; font-size: 1.3rem; .name{ display: inline-block; width: 12rem; font-size: 1.5rem; } .env-item{ height: 10%; display: flex; align-items: center; div{ width: 50%; } .status{ display: inline-block; width: 6rem; color: #1ab394; } .val{ color: #1ab394; } .run{ padding-left: 1rem; &-item{ height: 7.7%; display: flex; align-items: center; div{ width: 50%; } } } } } .val{ color: #22E195; } .error{ color: red; } } } </style>