From 53dea912dd48c7435720cd9e83e3da53f0a45109 Mon Sep 17 00:00:00 2001 From: web <candymxq888@outlook.com> Date: 星期三, 09 四月 2025 19:17:26 +0800 Subject: [PATCH] fix:修改大屏数据,布局 --- src/assets/images_lc/info-bg.png | 0 src/assets/images_lc/point-message.png | 0 src/components/VideoPlayer/VideoPlayer.vue | 2 src/layout/components/Navbar.vue | 2 src/views/facility/monitorList/index.vue | 21 - src/views/screen/home/index.vue | 412 ++++++++------------------- .env.development | 2 /dev/null | 0 src/api/screen/index.js | 13 src/assets/images_lc/map.png | 0 src/views/facility/facilityList/index.vue | 16 src/screen/index.vue | 13 src/api/screen/video.js | 2 src/views/screen/pumpInfo/index.vue | 378 +++++++++++++----------- 14 files changed, 358 insertions(+), 503 deletions(-) diff --git a/.env.development b/.env.development index 57c3001..88988b0 100644 --- a/.env.development +++ b/.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' diff --git a/src/api/screen/home/index.js b/src/api/screen/home/index.js deleted file mode 100644 index e69de29..0000000 --- a/src/api/screen/home/index.js +++ /dev/null diff --git a/src/api/screen/index.js b/src/api/screen/index.js new file mode 100644 index 0000000..84f8a01 --- /dev/null +++ b/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 + }) +} \ No newline at end of file diff --git a/src/api/facility/video.js b/src/api/screen/video.js similarity index 93% rename from src/api/facility/video.js rename to src/api/screen/video.js index 790906a..49a2848 100644 --- a/src/api/facility/video.js +++ b/src/api/screen/video.js @@ -1,4 +1,4 @@ -import { publicRequest } from '@/utils/request' +import { publicRequest } from '@/utils/request.js' // 根据小区id获取监控点 export const getVideoList = (params) => { diff --git a/src/assets/images_lc/info-bg.png b/src/assets/images_lc/info-bg.png index 042190c..108a6d9 100644 --- a/src/assets/images_lc/info-bg.png +++ b/src/assets/images_lc/info-bg.png Binary files differ diff --git a/src/assets/images_lc/map.png b/src/assets/images_lc/map.png index 8dfe74f..38ade56 100644 --- a/src/assets/images_lc/map.png +++ b/src/assets/images_lc/map.png Binary files differ diff --git a/src/assets/images_lc/point-message.png b/src/assets/images_lc/point-message.png index baa6890..698ffb2 100644 --- a/src/assets/images_lc/point-message.png +++ b/src/assets/images_lc/point-message.png Binary files differ diff --git a/src/components/VideoPlayer/VideoPlayer.vue b/src/components/VideoPlayer/VideoPlayer.vue index 1808b87..78a5004 100644 --- a/src/components/VideoPlayer/VideoPlayer.vue +++ b/src/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({ diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue index 3b8f805..96d390e 100644 --- a/src/layout/components/Navbar.vue +++ b/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> diff --git a/src/screen/index.vue b/src/screen/index.vue index 7651e4b..6092fee 100644 --- a/src/screen/index.vue +++ b/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> \ No newline at end of file diff --git a/src/views/facility/facilityList/index.vue b/src/views/facility/facilityList/index.vue index 0faed5d..079e52f 100644 --- a/src/views/facility/facilityList/index.vue +++ b/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" diff --git a/src/views/facility/monitorList/index.vue b/src/views/facility/monitorList/index.vue index 5a75b87..04c4e69 100644 --- a/src/views/facility/monitorList/index.vue +++ b/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> diff --git a/src/views/screen/home/index.vue b/src/views/screen/home/index.vue index 8e19648..601b0fa 100644 --- a/src/views/screen/home/index.vue +++ b/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; diff --git a/src/views/screen/pumpInfo/index.vue b/src/views/screen/pumpInfo/index.vue index ac6d161..5f3de22 100644 --- a/src/views/screen/pumpInfo/index.vue +++ b/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> \ No newline at end of file -- Gitblit v1.9.3