509 lines
12 KiB
Vue
Raw Normal View History

2023-07-12 09:56:31 +08:00
<template>
<ScaleBox :width="1920" :height="1080" bgc="transparent" :delay="100" :isFlat="false">
<div class="largeScreen" ref="dataScreenRef">
<div class="header">
<span class="projectTitle">
<p>数字化项目监管平台</p>
</span>
<div class="rightIcon" @click.stop>
<div class="time">{{ nowTime }}</div>
<!-- <div class="Icon">
2023-07-12 09:56:31 +08:00
<img src="@/assets/images/dustNoise/jobIcon.png" alt="" />
</div>
<div class="Icon">
<img src="@/assets/images/dustNoise/ysbfIcon.png" alt="" />
</div>
<div class="Icon">
<img src="@/assets/images/dustNoise/sjzxIcon.png" alt="" />
</div>
<div class="Icon">
<img src="@/assets/images/dustNoise/dpIcon.png" alt="" />
2023-07-28 19:43:56 +08:00
</div> -->
<div class="Icon">
<img src="@/assets/images/dustNoise/tbsjIcon.png" alt="" />
</div>
<div class="Icon" @click="showUserBox = !showUserBox">
<img src="@/assets/images/dustNoise/ryIcon.png" alt="" />
</div>
2023-07-28 19:43:56 +08:00
<!-- <el-dropdown trigger="click">
2023-07-28 19:43:56 +08:00
<template #dropdown>
<div class="userDialog" @click="loginOut">退出登录</div>
</template>
</el-dropdown> -->
</div>
<div class="userBox" v-show="showUserBox">
<div class="userItem">
<div class="sanJiao"></div>
<div class="userIcon">
<div class="icon"><img src="@/assets/images/dustNoise/userIcon.png" /></div>
<div class="userName">{{ adminName }}</div>
</div>
<div class="loginOut" @click="jumpBgd">
<div class="loginOutIcon"><img src="@/assets/images/dustNoise/jumpIcon.png" /></div>
<div class="userName">项目后台</div>
</div>
<div class="loginOut" @click="loginOut">
<div class="loginOutIcon"><img src="@/assets/images/dustNoise/loginOut.png" /></div>
<div class="userName">退出登录</div>
</div>
2023-07-28 19:43:56 +08:00
</div>
</div>
</div>
2023-09-08 09:59:15 +08:00
<div class="menuList">
<div v-for="(item, index) in menuList" :key="index" style=":nth-child(5):margin-left: 35%;" class="menStyle">
<div class="subMenu" :index="item.modulePath" :class="{ active: activeTab === item.modulePath }">
<span @click="navigateTo(item, 1)">{{ item.moduleName }}</span>
2023-09-04 14:43:33 +08:00
</div>
</div>
<div class="subMenuList" v-if="itemList != null && itemList.length >= 1">
<div class="subItem" v-for="(data, i) in itemList" :key="i" :index="data.companyPath" @click="navigateTo(data, 2)">
<span :class="{ active2: activeTab2 === data.companyPath }">{{ data.menuName }}</span>
2023-07-28 19:43:56 +08:00
</div>
</div>
2023-07-12 09:56:31 +08:00
</div>
2023-09-05 14:38:58 +08:00
<div class="contentDate">
<span>自2022.02.28起开始计算至今日2023.04.16<span class="numColor">412</span>个日历天</span>
</div>
<div class="dataBoardContent">
<router-view></router-view>
2023-07-12 09:56:31 +08:00
</div>
</div>
</ScaleBox>
2023-07-12 09:56:31 +08:00
</template>
<script lang="ts" setup>
import ScaleBox from "vue3-scale-box";
import { ref, reactive, onMounted, onBeforeUnmount } from "vue";
2023-07-12 09:56:31 +08:00
import { useRouter } from "vue-router";
2023-07-28 19:43:56 +08:00
import { GlobalStore } from "@/stores";
const store = GlobalStore();
let nowTime = ref("2023-04-16 09:22:12" as any);
2023-07-28 19:43:56 +08:00
let showUserBox = ref(false as any);
let adminName = ref("" as any);
2023-09-04 14:43:33 +08:00
let menuList = ref([
2023-09-06 14:05:12 +08:00
{
moduleName: "综合管理",
2023-09-08 16:53:53 +08:00
modulePath: "/projectOverview",
menuList: [
{
menuName: "工程概况",
2023-09-08 16:53:53 +08:00
companyPath: "/projectOverview"
},
{
menuName: "智慧党建",
2023-09-08 16:53:53 +08:00
companyPath: "/smartPartyBuilding"
2023-09-06 14:05:12 +08:00
}
]
},
{
moduleName: "数字工地",
2023-09-08 16:53:53 +08:00
modulePath: "/aIEarlyWarning",
2023-09-06 14:05:12 +08:00
menuList: [
2023-09-08 09:59:15 +08:00
{
menuName: "视频管理",
companyPath: "/videoManagement"
},
2023-09-06 14:05:12 +08:00
{
menuName: "AI预警",
2023-09-08 16:53:53 +08:00
companyPath: "/aIEarlyWarning"
},
2023-09-06 14:05:12 +08:00
{
menuName: "地磅管理",
2023-09-08 16:53:53 +08:00
companyPath: "/loadometerManage"
2023-09-08 09:59:15 +08:00
},
{
menuName: "车辆管理",
companyPath: "/vehicleManagement"
},
{
menuName: "配电箱监测",
companyPath: "/distributionMonitoring"
2023-09-06 14:05:12 +08:00
}
]
},
2023-09-08 16:53:53 +08:00
{
moduleName: "劳务管理",
modulePath: "/laborManagement"
},
{
moduleName: "安全管理",
2023-09-08 16:53:53 +08:00
modulePath: "/securityManagement",
menuList: [
{
menuName: "安全管理",
2023-09-08 16:53:53 +08:00
companyPath: "/securityManagement"
2023-09-05 14:38:58 +08:00
}
]
},
{
moduleName: "质量管理",
2023-09-08 16:53:53 +08:00
modulePath: "/qualityManagement",
menuList: [
{
menuName: "质量管理",
2023-09-08 16:53:53 +08:00
companyPath: "/qualityManagement"
}
]
},
2023-09-08 09:59:15 +08:00
{
2023-09-08 16:53:53 +08:00
moduleName: "绿色施工",
modulePath: "/headNoise",
menuList: [
{
menuName: "扬尘噪声",
companyPath: "/headNoise"
}
]
},
{
moduleName: "大型机械",
modulePath: "/towerCraneMonitoring",
menuList: [
{
menuName: "塔吊监测",
companyPath: "/towerCraneMonitoring"
},
{
menuName: "升降机监测",
companyPath: "/elevatorMonitoring"
}
]
2023-09-08 09:59:15 +08:00
},
2023-09-04 14:43:33 +08:00
{ moduleName: "BIM模型", modulePath: "/bImModel" }
]);
const itemList = ref([]);
const activeTab = ref(0);
const activeTab2 = ref(0);
const router = useRouter();
2023-07-12 09:56:31 +08:00
//获取动态tab
const getAllModelMenu = () => {
let half = store.projectDateAuth.moduleList;
half.forEach((item: any) => {
if (item.moduleType == 4) {
menuList.value.push(item);
return;
}
});
console.log("筛选出的数据看板路由", menuList.value);
};
const navigateTo = (path, type) => {
console.log("点击的路由---", path, type);
if (type == 1) {
activeTab.value = path.modulePath;
itemList.value = path.menuList;
router.push(path.modulePath);
} else {
activeTab2.value = path.companyPath;
router.push(path.companyPath);
2023-07-12 09:56:31 +08:00
}
};
2023-09-04 14:43:33 +08:00
onMounted(async () => {
// await getAllModelMenu();
activeTab.value = menuList.value[0].modulePath;
itemList.value = menuList.value[0].menuList;
2023-09-04 14:43:33 +08:00
//数据看板跳转免登录
if (window.location.href.indexOf("token") != -1) {
const token = window.location.href.split("token=")[1];
const res = await fetch(import.meta.env.VITE_API_URL + "/xmgl/base/getLoginInfoByToken", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ token: token })
});
store.setSN(data.result.sn);
store.setToken(data.result.token);
store.setAccount(data.result.account);
store.setAccountType(data.result.accountType);
store.setProjectDateAuth(data.menuAuthority);
// const data = await res.json();
// console.log("调用免登录接口返回的数据", data);
2023-09-04 14:43:33 +08:00
// let arr = data.result.menuAuthority.moduleList;
// arr.forEach((item: any) => {
// if (item.moduleType == 4) {
// menuList.value.push(item);
2023-09-04 14:43:33 +08:00
// return;
// }
// });
// console.log("当前项目的看板数据::", moduleListData.value);
}
2023-07-28 19:43:56 +08:00
// console.log("进入页面, ");
adminName.value = store.account;
// console.log("store数据", store.account);
// menuClick(menuList.value[0], activeIndex.value);
getNowTime();
2023-07-28 19:43:56 +08:00
document.addEventListener("click", bodyCloseMenus);
2023-09-08 16:53:53 +08:00
const subMenus = document.querySelectorAll(".menStyle");
if (subMenus.length >= 5) {
subMenus[4].style.marginLeft = "30%";
}
});
let timer = ref(null as any);
onBeforeUnmount(() => {
clearInterval(timer);
2023-07-28 19:43:56 +08:00
document.removeEventListener("click", bodyCloseMenus);
});
2023-07-28 19:43:56 +08:00
function bodyCloseMenus() {
if (showUserBox.value === true) {
showUserBox.value = false;
}
}
function getNowTime() {
let speed = 1000;
let theNowTime = function () {
nowTime.value = timeNumber();
};
timer.value = setInterval(theNowTime, speed);
}
function timeNumber() {
let today = new Date();
let date = today.getFullYear() + "-" + twoDigits(today.getMonth() + 1) + "-" + twoDigits(today.getDate());
let time = twoDigits(today.getHours()) + ":" + twoDigits(today.getMinutes()) + ":" + twoDigits(today.getSeconds());
return date + " " + time;
}
function twoDigits(val: any) {
if (val < 10) return "0" + val;
return val;
}
2023-07-28 19:43:56 +08:00
function loginOut() {
localStorage.removeItem("GlobalState");
location.reload();
router.push("/login");
}
2023-09-04 14:43:33 +08:00
//跳转后台
function jumpBgd() {
window.location.replace("http://192.168.34.226:8081/#/projectIndex");
}
2023-07-12 09:56:31 +08:00
</script>
2023-07-28 19:43:56 +08:00
<style>
.el-popper__arrow {
background-color: #112d59;
}
</style>
2023-07-12 09:56:31 +08:00
<style lang="scss" scoped>
.largeScreen {
width: 100%;
height: 100%;
background: url("@/assets/images/bigImg.gif") no-repeat;
background-size: 100% 100%;
2023-09-04 14:43:33 +08:00
2023-07-12 09:56:31 +08:00
.header {
2023-09-07 11:27:21 +08:00
width: 100%;
2023-07-12 09:56:31 +08:00
height: 12%;
background: url("@/assets/images/headerImg.webp") no-repeat;
background-size: 100% 100%;
.projectTitle {
display: flex;
align-items: center;
justify-content: center;
2023-09-07 11:27:21 +08:00
font-size: 42px;
2023-07-12 09:56:31 +08:00
color: #fff;
font-family: YouSheBiaoTiHei;
}
.rightIcon {
position: absolute;
display: flex;
width: 30%;
left: 70%;
color: #fff;
top: 1%;
.time {
2023-09-08 16:53:53 +08:00
font-size: 13px;
2023-07-12 09:56:31 +08:00
font-family: sadigitalNumber;
2023-09-08 09:59:15 +08:00
margin: 1% 40% 0 10%;
2023-07-12 09:56:31 +08:00
}
.Icon {
margin-right: 2%;
cursor: pointer;
2023-09-08 09:59:15 +08:00
width: 25px;
margin-top: 1%;
2023-07-12 09:56:31 +08:00
}
}
}
.menuList {
display: flex;
height: 6%;
color: #ccc;
line-height: 55px;
margin: -4% auto 0 2%;
font-family: pmzd;
div {
position: relative;
2023-07-12 09:56:31 +08:00
margin-top: 1%;
height: 60%;
width: 10%;
cursor: pointer;
}
2023-09-08 09:59:15 +08:00
.subMenu {
width: 100%;
height: 100%;
display: flex;
2023-09-08 16:53:53 +08:00
font-size:20px;
2023-09-08 09:59:15 +08:00
span {
width: 90%;
height: 10%;
margin-left: 2%;
line-height: 40px;
text-align: center;
}
}
2023-09-08 09:59:15 +08:00
.subMenuList {
position: absolute;
width: 98%;
height: 4%;
display: flex;
margin-top: 5%;
2023-09-08 16:53:53 +08:00
font-size: 14px;
font-family: none;
background: url("@/assets/images/subTabImg.gif") no-repeat;
background-size: 100% 100%;
margin-left: -1%;
.subItem {
width: 5%;
margin-top: -1.5%;
}
:nth-child(1) {
margin-left: 3%;
}
}
2023-07-12 09:56:31 +08:00
}
2023-09-05 14:38:58 +08:00
.contentDate {
color: #fff;
float: right;
margin-right: 2%;
font-size: 14px;
.numColor {
2023-09-05 14:38:58 +08:00
color: #82fbea;
font-family: sadigitalNumber;
font-size: 24px;
font-weight: bold;
2023-09-05 14:38:58 +08:00
}
}
2023-07-12 09:56:31 +08:00
.dataBoardContent {
height: 81%;
2023-07-12 09:56:31 +08:00
// height: calc(100% - 15px - 50px - 60px - 20px);
margin: 75px auto 16px auto;
2023-07-12 09:56:31 +08:00
width: calc(100% - 40px);
// background-color: #01131F;
// opacity: 0.9;
}
}
.active {
display: inline-block;
2023-07-12 09:56:31 +08:00
height: 100%;
width: 90%;
2023-07-12 09:56:31 +08:00
background: url("@/assets/images/dustNoise/menuImg.png") no-repeat;
background-size: 100% 100%;
color: #fff;
}
.active2 {
color: #fff;
font-family: none;
2023-07-12 09:56:31 +08:00
}
2023-07-28 19:43:56 +08:00
.userDialog {
display: flex;
justify-content: center;
align-items: center;
width: 70px;
height: 25px;
text-align: center;
background-color: #112d59;
color: #5d75a0;
2023-09-08 16:53:53 +08:00
font-size: 12px;
2023-07-28 19:43:56 +08:00
cursor: pointer;
}
.userBox {
.userItem {
position: absolute;
2023-09-08 09:59:15 +08:00
width: 110px;
2023-09-04 14:43:33 +08:00
height: 100px;
2023-09-08 09:59:15 +08:00
right: 2%;
2023-07-28 19:43:56 +08:00
top: 4%;
background: #112d59;
border-radius: 0px 0px 0px 0px;
border: 0px solid #405e97;
2023-09-08 09:59:15 +08:00
z-index: 9;
2023-07-28 19:43:56 +08:00
.sanJiao {
position: absolute;
width: 0;
height: 0;
right: 0%;
top: -10%;
border-left: 6px solid transparent; /* 左边框透明 */
border-right: 6px solid transparent; /* 右边框透明 */
border-bottom: 6px solid #405e97; /* 底部边框颜色 */
transform: rotate(0deg); /* 旋转45度 */
}
.userIcon {
display: flex;
align-items: center;
justify-content: space-evenly;
height: 38px;
border-bottom: 1px solid #405e97;
cursor: pointer;
.icon {
width: 18px;
height: 18px;
img {
width: 100&;
height: 100%;
}
}
.userName {
width: 40px;
2023-09-08 16:53:53 +08:00
font-size: 12px;
2023-07-28 19:43:56 +08:00
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
color: #a9bce6;
2023-09-08 09:59:15 +08:00
white-space: nowrap;
2023-09-08 16:53:53 +08:00
overflow: hidden;
text-overflow: ellipsis;
2023-07-28 19:43:56 +08:00
}
}
.loginOut {
display: flex;
justify-content: space-evenly;
align-items: center;
height: 26px;
2023-09-04 14:43:33 +08:00
padding-left: 5px;
2023-07-28 19:43:56 +08:00
cursor: pointer;
2023-09-04 14:43:33 +08:00
height: 30px;
2023-07-28 19:43:56 +08:00
.loginOutIcon {
width: 12px;
height: 12px;
img {
width: 100&;
height: 100%;
}
}
.userName {
width: 50px;
2023-09-08 16:53:53 +08:00
font-size: 12px;
2023-07-28 19:43:56 +08:00
font-family: Source Han Sans CN-Regular, Source Han Sans CN;
color: #a9bce6;
}
}
}
}
.loginOut:hover {
background-color: #2758c0;
}
2023-07-12 09:56:31 +08:00
</style>