From 0c026f9cb1ccd39690a118af70023fe29f051388 Mon Sep 17 00:00:00 2001
From: web <candymxq888@outlook.com>
Date: 星期一, 14 四月 2025 17:29:38 +0800
Subject: [PATCH] fix:修改项目界面适配

---
 src/views/screen/temperature/monitor/index.vue |  392 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 389 insertions(+), 3 deletions(-)

diff --git a/src/views/screen/temperature/monitor/index.vue b/src/views/screen/temperature/monitor/index.vue
index 18de0f5..414c2ed 100644
--- a/src/views/screen/temperature/monitor/index.vue
+++ b/src/views/screen/temperature/monitor/index.vue
@@ -1,13 +1,399 @@
- <script setup>
+<script setup>
+import {ref, onMounted} from "vue";
+import {getUserType} from '@/utils/auth.js'
+import {setTempMonitor} from '@/api/screen/monitor/index.js'
+import {getTemperaturePointList} from '@/api/screen/index.js'
+import pointApi from '@/api/facility/point.js'
+import {useRouter} from "vue-router";
+import {ElMessage} from 'element-plus'
+
+const router = useRouter()
+
+const menuList = ref([])
+const monitorList = ref([])
+const userType = ref(getUserType())
+const monitorRef = ref()
+const searchVal = ref('')
+
+// 选择菜单
+const handleSelectMenu = (id) => {
+    pointApi().get(id).then(res => {
+        monitorList.value = [res.data]
+    })
+}
+
+// 获取水温监控点菜单
+const getTempMonitor = () => {
+    getTemperaturePointList().then(res => {
+        menuList.value = res.data
+    })
+}
+
+// 获取监控点列表
+const getMonitorList = () => {
+    pointApi().search({type: 1, page: 1, limit: 100, keywords: searchVal.value}).then(res => {
+        monitorList.value = res.data.list.filter(el => el.parentId !== 0)
+    })
+}
+
+
+const setMonitorData = (data) => {
+    setTempMonitor(data).then(res => {
+        if (res.code === 200) {
+            ElMessage.success('设置成功')
+            getMonitorList()
+        }
+    })
+}
+
+// 全屏操作
+const handleFullScreen = () => {
+    monitorRef.value.requestFullscreen()
+}
+
+onMounted(() => {
+    getTempMonitor()
+    getMonitorList()
+})
 
 </script>
 
 <template>
-    <div>
-        实时监测
+    <div class="monitor">
+        <div class="monitor-menu">
+            <div class="menu-t">监测点列表</div>
+            <el-menu class="el-menu-vertical-demo" @select="handleSelectMenu">
+                <template v-for="(item, index) in menuList" :key="index+1">
+                    <template v-if="item?.childrenList?.length === 0">
+                        <el-menu-item :index="item.id">{{ item.pointName }}</el-menu-item>
+                    </template>
+                    <template v-else>
+                        <el-sub-menu :index="item.id">
+                            <template #title>
+                                <span>{{ item.pointName }}</span>
+                            </template>
+                            <el-menu-item v-for="(child, cidx) in item.childrenList" :key="cidx" :index="child.id">
+                                {{ child.pointName }}
+                            </el-menu-item>
+                        </el-sub-menu>
+                    </template>
+                </template>
+            </el-menu>
+        </div>
+        <div class="monitor-info">
+            <div class="monitor-tool">
+                <div class="tool-l">
+                    <el-input v-model="searchVal" style="width: 20rem" placeholder="请输入监测点名称" clearable/>
+                    <el-button @click="getMonitorList">
+                        <el-icon>
+                            <Search/>
+                        </el-icon>
+                        搜索
+                    </el-button>
+                    <el-button style="margin-left: 0" v-if="userType === '1'" @click="router.push('/monitorList')">
+                        <el-icon>
+                            <Plus/>
+                        </el-icon>
+                        新增
+                    </el-button>
+                </div>
+                <div class="tool-r" @click="handleFullScreen">
+                    <img src="@/assets/images/flow/fullscreen.png"/>
+                    全屏
+                </div>
+            </div>
+            <div class="monitor-box" ref="monitorRef">
+                <div class="monitor-list">
+                    <div class="item" v-for="(item, index) in monitorList" :key="index">
+                        <div class="item-t">{{ item.pointName }}</div>
+                        <div class="item-data">
+                            <div class="data">
+                                <div class="name">水温:</div>
+                                <div class="val"><span>{{ item.waterTemperature }}</span>°C</div>
+                            </div>
+                            <div class="data">
+                                <div class="name">水位:</div>
+                                <div class="val"><span>{{ item.waterLevel }}</span>m</div>
+                            </div>
+                        </div>
+                        <div class="item-status">
+                            压力式水位水温计工作状况:
+                            <span v-if="item.isOnline === 1">设备运作正常</span>
+                            <span v-else style="color: red">设备运作异常</span>
+                        </div>
+                        <div class="item-set">
+                            <div class="setbox">
+                                <div class="name">里程设置:</div>
+                                <el-input v-model="item.range"/>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">投放度设置:</div>
+                                <el-input v-model="item.putAngle"/>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">高程设置:</div>
+                                <el-input v-model="item.elevation"/>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水温上限设置:</div>
+                                <el-input v-model="item.tallWaterLevel"/>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水温下限设置:</div>
+                                <el-input v-model="item.lowWaterLevel"/>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">水位计采集间隔设置:</div>
+                                <el-select v-model="item.gatherIntervalTime">
+                                    <el-option :value="1" label="一分钟"/>
+                                    <el-option :value="2" label="两分钟"/>
+                                    <el-option :value="5" label="五分钟"/>
+                                    <el-option :value="10" label="十分钟"/>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">记录上报间隔设置:</div>
+                                <el-select v-model="item.historyIntervalTime">
+                                    <el-option :value="1" label="一分钟"/>
+                                    <el-option :value="2" label="两分钟"/>
+                                    <el-option :value="5" label="五分钟"/>
+                                    <el-option :value="10" label="十分钟"/>
+                                </el-select>
+                            </div>
+                            <div class="setbox">
+                                <div class="name">实时数据上报间隔设置:</div>
+                                <el-select v-model="item.newIntervalTime">
+                                    <el-option :value="1" label="一分钟"/>
+                                    <el-option :value="2" label="两分钟"/>
+                                    <el-option :value="5" label="五分钟"/>
+                                    <el-option :value="10" label="十分钟"/>
+                                </el-select>
+                            </div>
+                        </div>
+                        <div class="item-btn">
+                            <el-button size="large" type="success" @click="setMonitorData(item)">应用</el-button>
+                        </div>
+                        <!--                        <div class="item-error">-->
+                        <!--                            <img src="@/assets/images/warning.png" />-->
+                        <!--                        </div>-->
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
 </template>
 
 <style scoped lang="scss">
+.monitor {
+    height: 100%;
+    display: flex;
 
+    &-menu {
+        flex-shrink: 0;
+        width: 20%;
+        height: 100%;
+        padding: 10px 0;
+        background: linear-gradient(135deg, #91BDDB 0%, #9EC2DB 99%);
+        overflow-y: scroll;
+
+        &::-webkit-scrollbar {
+            display: none;
+        }
+
+        .menu-t {
+            height: 40px;
+            line-height: 40px;
+            padding-left: 20px;
+            font-size: 26px;
+            color: #fff;
+            background: url("@/assets/images/flow/monitor-title-bg.png") no-repeat;
+            background-size: 100% 100%;
+        }
+
+        .el-menu {
+            background-color: transparent;
+            border-right: none;
+
+            :deep(.el-menu) {
+                background-color: transparent;
+            }
+
+            :deep(.el-sub-menu__title:hover) {
+                background-color: rgba(0, 0, 0, 0.06);
+            }
+
+            :deep(.el-menu-item.is-active) {
+                color: #fff;
+            }
+        }
+    }
+
+    .monitor-info {
+        flex-shrink: 0;
+        width: 80%;
+        height: 100%;
+
+        .monitor-tool {
+            width: 100%;
+            height: 60px;
+            padding: 0 30px;
+            background: linear-gradient(90deg, #91BDDB 0%, #DADFE3 100%);
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+
+            .tool-l {
+                display: flex;
+                align-items: center;
+                gap: 1rem;
+
+                .name {
+                    font-size: 1.1rem;
+                }
+            }
+
+            .tool-r {
+                display: flex;
+                align-items: center;
+
+                img {
+                    width: 25px;
+                    margin-right: 10px;
+                }
+            }
+        }
+
+        .monitor-box {
+            background: linear-gradient(180deg, #91BDDB 0%, rgba(102, 102, 102, 0.5) 100%);
+            height: calc(100% - 60px);
+            padding: 0 2rem;
+            overflow-y: scroll;
+
+            &::-webkit-scrollbar {
+                display: none;
+            }
+
+            .monitor-list {
+                height: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                flex-wrap: wrap;
+                gap: 3rem;
+
+                .item {
+                    width: 48%;
+                    height: 96%;
+                    background: rgba(23, 108, 229, 0.3);
+                    border: 1px solid #176CE5;
+                    padding: 20px;
+                    border-radius: 8px;
+                    position: relative;
+
+                    &-error {
+                        position: absolute;
+                        left: 0;
+                        top: 0;
+                        width: 100%;
+                        height: 100%;
+                        background: rgba(0, 0, 0, 0.3);
+
+                        img {
+                            width: 100%;
+                        }
+                    }
+
+                    .item-t {
+                        font-size: 36px;
+                        color: #fff;
+                        text-align: center;
+                    }
+
+                    .item-data {
+                        height: 30%;
+                        display: flex;
+                        align-items: center;
+
+                        .data {
+                            width: 50%;
+                            display: flex;
+                            align-items: center;
+                            color: #fff;
+                            font-size: 22px;
+
+                            .val {
+                                span {
+                                    display: inline-block;
+                                    font-size: 30px;
+                                    padding: 0 30px;
+                                }
+                            }
+                        }
+                    }
+
+                    :deep(.el-input__inner) {
+                        color: #fff;
+                    }
+
+                    :deep(.el-select__placeholder) {
+                        color: #fff;
+                    }
+
+                    .item-status {
+                        height: 8%;
+                        font-size: 22px;
+                        color: #fff;
+                    }
+
+                    .item-set {
+                        display: flex;
+                        flex-wrap: wrap;
+                        align-content: center;
+
+                        .setbox {
+                            width: 50%;
+                            margin-top: 40px;
+                            padding: 0 10px;
+                            display: flex;
+                            align-items: center;
+
+                            .name {
+                                flex-shrink: 0;
+                                color: #fff;
+                            }
+
+                            :deep(.el-input__wrapper) {
+                                background-color: transparent;
+                                border-bottom: 1px solid #fff;
+                                box-shadow: none;
+                                border-radius: 0;
+                            }
+
+                            :deep(.el-select__wrapper) {
+                                background-color: transparent;
+                                box-shadow: none;
+                                border-radius: 0;
+
+                                .el-select__placeholder.is-transparent {
+                                    color: #FFF;
+                                }
+
+                                .el-select__suffix .el-select__caret {
+                                    color: #fff;
+                                }
+                            }
+                        }
+                    }
+
+                    .item-btn {
+                        height: 10%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: flex-end;
+                    }
+                }
+            }
+        }
+    }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3