web
2025-03-25 0ba6a10aed87c4f05d076ee66c3189627bb5b858
src/screen/flow.vue
@@ -1,33 +1,81 @@
<template>
    <div class="main">
        <div class="header">
            <div class="top">金川水电站生态流量监测系统 </div>
            <div class="top">
                <div class="top-exit" v-if="userType === '1'" @click="() => { router.push('/screen') }">
                    <img src="@/assets/images/exit.png" alt="" />
                    <span>选择系统</span>
                </div>
                <div class="top-name">金川水电站生态流量监测系统</div>
                <div class="top-modal">
                    公告弹窗提示
                    <el-switch v-model="openWarn" />
                </div>
            </div>
            <div class="nav">
                <div v-for="(item,index) in btnList" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
                <div v-for="(item,index) in btnList" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">
                    <span>{{ item.name }}</span>
                </div>
            </div>
        </div>
        <div class="content">
            <router-view></router-view>
            <div class="warningBox" v-if="openWarn">
                <img src="@/assets/images/flow/warn-icon.png">
                <div class="text">{{text}}</div>
            </div>
        </div>
    </div>
</template>
<script setup>
import{ useRouter,useRoute } from 'vue-router'
import useUserStore from '@/store/modules/user.js'
import {onMounted, ref, watch} from "vue";
import { getUserType } from '@/utils/auth'
const userStore = useUserStore()
const router = useRouter()
const route = ref(useRoute())
const btnList = ref([
    {name:'总览',url:'/flow/home'},
    {name:'生态流量',url:''},
    {name:'图像监测', url:''},
    {name:'设备管理',url:''},
    {name:'报警管理',url:''},
    {name:'报表管理',url:''},
    {name:'系统管理',url:'/user'},
    {name:'首页总览',url:'/flow/home'},
    {name:'生态流量',url:'/flow/ecology'},
    {name:'图像监测', url:'/flow/graphic'},
    {name:'设备管理',url:'/flow/shebei'},
    {name:'报警管理',url:'/flow/warning'},
    {name:'报表管理',url:'/flow/report'},
])
const userType = ref(getUserType())
const openWarn = ref(false)
const text = ref('新扎沟口流量监测点水位到达下限值, 金川水电站生态流量监测点水位到达下限值,流量监测点水位到达下限值')
let timer = null;
watch(openWarn, (newVal) => {
    if(newVal){
        splitText()
    } else {
        clearInterval(timer)
    }
})
// 设置警告滚动
const splitText = () => {
    timer = setInterval(function () {
        const val = text.value.substring(1) + text.value.substring(0,1)
        text.value = val
    }, 300)
}
const navTo = (item) =>{
    router.push(item.url)
}
onMounted(() => {
    if(userStore.userType == 1) {
        btnList.value.push({name:'系统管理',url:'/user'})
    }
})
</script>
@@ -38,18 +86,42 @@
    .header{
        width: 100%;
        height: 14%;
        background-color: rgb(82, 120, 128);
        position: relative;
        .top{
            height: 60%;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 38px;
            font-weight: 700;
            color: #fff;
            position: relative;
            z-index: 100;
            .top-exit{
                position: absolute;
                left: 100px;
                cursor: pointer;
                font-size: 20px;
                img{
                    width: 30px;
                    vertical-align: top;
                    margin-right: 10px;
                }
            }
            .top-name{
                font-size: 48px;
            }
            .top-modal{
                position: absolute;
                right: 100px;
                cursor: pointer;
            }
        }
        .nav{
            display: flex;
            height: 40%;
            position: relative;
            z-index: 100;
            .plain{
                flex-grow: 1;
                height: 100%;
@@ -70,6 +142,30 @@
    .content{
        width: 100%;
        height: 86%;
        .warningBox{
            position: absolute;
            left: 0;
            top: 15.5%;
            z-index: 100;
            width: 100%;
            padding: 0 150px;
            height: 100px;
            display: flex;
            align-items: center;
            background: linear-gradient( 270deg,
                rgba(255,74,74,0) 0%,
                rgba(255,74,74,0.5) 8%,
                rgba(255,74,74,0.5) 50%,
                rgba(255,74,74,0.5) 92%,
                rgba(255,74,74,0) 100%);
            .text{
                margin: 0 30px;
                color: #fff;
                font-size: 36px;
                overflow: hidden;
                white-space: nowrap;
            }
        }
    }
}
</style>