From 6acd20f3f37e988488b681a1a394b37a32f3ffe6 Mon Sep 17 00:00:00 2001
From: web <candymxq888@outlook.com>
Date: 星期一, 07 四月 2025 16:17:41 +0800
Subject: [PATCH] feat:添加大屏页面

---
 src/screen/index.vue |  269 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 223 insertions(+), 46 deletions(-)

diff --git a/src/screen/index.vue b/src/screen/index.vue
index d22b064..7651e4b 100644
--- a/src/screen/index.vue
+++ b/src/screen/index.vue
@@ -1,91 +1,268 @@
 <template>
     <div class="main">
         <div class="header">
-            <div class="top">大屏 </div>
+            <div class="top">
+                <div class="title">南京康尼地铁泵站监测服务系统</div>
+                <div class="time">
+                    <span>{{ nowTime.date }}</span>
+                    <span>{{ nowTime.time }}</span>
+                </div>
+                <div class="user-image">
+                    <div class="home">
+                        <router-link to="/screen/home"><img src="@/assets/images/screen/homeIcon.png" alt="" /></router-link>
+                    </div>
+                    <div class="loginOut">
+                        <el-dropdown trigger="click">
+                            <div class="user">
+                                <img class="userImg" src="../assets/images/screen/userImg.png" alt="">
+                                <img class="downIcon" src="../assets/images/screen/loginOut.png" alt="">
+                            </div>
+                            <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>
+                            </template>
+                        </el-dropdown>
+                    </div>
+                </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 class="nav-content">
+                    <div class="nav-content-l">
+                        <div v-for="(item,index) in btnList.slice(0,4)" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
+                    </div>
+                    <div class="nav-content-r">
+                        <div v-for="(item,index) in btnList.slice(4,8)" :key="index" @click="navTo(item)" class="plain" :class="item.url === route.path ? 'active' : ''">{{ item.name }}</div>
+                    </div>
+                </div>
             </div>
         </div>
-        <div class="content">
-            <router-view></router-view>
-        </div>
+        <div class="content"><router-view></router-view></div>
     </div>
 </template>
 <script setup>
 import{ useRouter,useRoute } from 'vue-router'
-import useUserStore from '@/store/modules/user.js'
-import {onMounted} from "vue";
+import {ElMessageBox} from "element-plus";
+import { removeToken } from '@/utils/auth'
 
-const userStore = useUserStore()
 
 const router = useRouter()
 const route = ref(useRoute())
-const btnList = ref([
-    {name:'首页总览',url:'/screen/home'},
-    {name:'生态流量',url:'/screen/ecology'},
-    {name:'图像监测', url:'/screen/graphic'},
-    {name:'设备管理',url:'/screen/shebei'},
-    {name:'报警管理',url:'/screen/warning'},
-    {name:'报表管理',url:'/screen/report'},
-])
+const loginOut = () =>{
+    ElMessageBox.confirm('确定注销并退出系统吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+    }).then((e) => {
+        removeToken()
+        window.location.reload();
+
+    }).catch(() => { });
+}
+
+const toUserDetail = () =>{
+    router.push('/userCenter')
+}
+
+const btnList = ref([])
 
 const navTo = (item) =>{
     router.push(item.url)
 }
 
-onMounted(() => {
-    if(userStore.userType == 1) {
-        btnList.value.push({name:'系统管理',url:'/user'})
-    }
-})
+//获取当前时间
+const nowTime = ref({})
+const now = new Date()
+const getTime = (now) => {
+    // 获取年月日时分秒
+    const year = now.getFullYear();
+    const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的
+    const day = String(now.getDate()).padStart(2, '0');
+    const hours = String(now.getHours()).padStart(2, '0');
+    const minutes = String(now.getMinutes()).padStart(2, '0');
+    const seconds = String(now.getSeconds()).padStart(2, '0');
 
+    // 获取星期
+    const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
+    const weekday = weekdays[now.getDay()];
+
+    // 拼接成指定格式的字符串
+    return nowTime.value = {
+        date:`${year}.${month}.${day} ${weekday}`,
+        time:`${hours}:${minutes}:${seconds}`,
+    }
+}
+getTime(now)
+onMounted(()=>{
+    setInterval(()=>{
+        nowTime.value = getTime(new Date())
+    },1000)
+})
 </script>
 
 <style lang="scss" scoped>
 .main{
+    background:rgba(8,28,65,1);
+    background-size: 100% 100%;
     width: 100%;
     height: 100%;
     .header{
         width: 100%;
-        height: 14%;
-        background-color: rgb(82, 120, 128);
-        position: relative;
+        height: 10%;
         .top{
-            height: 60%;
-            display: flex;
-            align-items: center;
-            justify-content: center;
-            font-size: 48px;
-            font-weight: 700;
-            color: #fff;
             position: relative;
-            z-index: 100;
+            width: 100%;
+            height: 6.5rem;
+            background-image: url("../assets/images/screen/head.png");
+            background-size: 100% 100%;
+            background-repeat: no-repeat;
+            .title{
+                width: 57rem;
+                height: 2rem;
+                position: absolute;
+                left:calc(50% - 28.5rem);
+                text-align: center;
+                font-size: 1.6rem;
+                font-weight: 800;
+                color: #F9FBFF;
+                line-height: 70px;
+                text-shadow:0 0 3px rgba(255,255,255,0.7);
+            }
+            .time{
+                position: absolute;
+                width: 13rem;
+                top: 0.5rem;
+                left: 2rem;
+                display: flex;
+                justify-content: space-between;
+                line-height: 1.6rem;
+                span{
+                    font-weight: 400;
+                    color: #83D9F3;
+                }
+                span:last-child{
+                    text-shadow:0 0 2px rgba(255,255,255,0.6);
+                }
+            }
+            .select{
+                width: 8rem;
+                height: 2rem;
+                position: absolute;
+                top: 0.1rem;
+                right: 8rem;
+                .select-item {
+                    :deep(.el-select__wrapper) {
+                        background: rgba(6, 47, 97, 0.8) !important;
+                        border: solid #14528f 0.125rem;
+                        height: 2rem;
+                    }
+                    :deep(.el-select__placeholder) {
+                        color: #07a4ff;
+                        font-size: 0.75rem;
+                    }
+                }
+            }
+            .user-image{
+                position: absolute;
+                width: 6rem;
+                height: 2rem;
+                top: 0.5rem;
+                right: 2rem;
+                display: flex;
+                justify-content: space-between;
+                align-items: center;
+                .home{
+                    img{
+                        width: 1.3rem;
+                        height: 1.3rem;
+                    }
+                }
+                .loginOut{
+                    .user{
+                        display: flex;
+                        align-items: center;
+                        .userImg{
+                            width: 1.3rem;
+                            height: 1.3rem;
+                            margin-right: 0.5rem;
+                        }
+                        .downIcon{
+                            margin-top: 0.1rem;
+                            width: 0.8rem;
+                            height: 0.6rem;
+                        }
+                    }
+                }
+            }
+            .left-icon{
+                position: absolute;
+                top: 50%;
+                img{
+                    width: 28rem;
+                    height: 1.87rem;
+                }
+            }
+            .right-icon{
+                position: absolute;
+                top: 50%;
+                right: 0;
+                img{
+                    width: 28rem;
+                    height: 1.87rem;
+                    transform: scaleX(-1);
+                }
+            }
         }
         .nav{
-            display: flex;
-            height: 40%;
             position: relative;
             z-index: 100;
-            .plain{
-                flex-grow: 1;
-                height: 100%;
+            margin-top: -4.5rem;
+            width: 100%;
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+        }
+        .nav-content{
+            width: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            font-weight: 400;
+            font-size: 1.1rem;
+            color: #FFFFFF;
+            line-height: 3rem;
+            &-l{
+                width: 35%;
                 display: flex;
-                align-items: center;
-                justify-content: center;
-                border: 1px solid #fff;
-                background-color: rgba(23, 108, 229, 0.3);
-                color: #fff;
-                font-size: 22px;
-                cursor: pointer;
+            }
+            &-r{
+                width: 35%;
+                display: flex;
+            }
+            .plain{
+                width: 10rem;
+                height: 3.5rem;
+                line-height: 3.5rem;
+                background-image: url("../assets/images/screen/btnbg.png");
+                background-size: 100% 100%;
+                text-align: center;
             }
             .active{
-                background-color: #91BDDB;
+                background-image: url("../assets/images/screen/btnbg-active.png");
             }
         }
     }
     .content{
         width: 100%;
-        height: 86%;
+        height: 90%;
+        background: url("@/assets/images/screen/content_bg.png") no-repeat;
+        background-size: 100% 100%;
+        padding: 0 1.5rem 1.5rem;
     }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3