<template>
<!-- 首页 -->
<div class="home">
<!-- 头部区域 -->
<div class="home-header">
<!-- 头部选项 -->
<div class="home-header-left">
<el-dropdown>
<span class="el-dropdown-link"> 设备管理 </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<span class="el-dropdown-link"> 统计分析 </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<span class="el-dropdown-link"> 分析研判 </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item>事件分析</el-dropdown-item>
<el-dropdown-item>企业健康度分析</el-dropdown-item>
<el-dropdown-item>故障分析</el-dropdown-item>
<el-dropdown-item>运营监管消防安全报告</el-dropdown-item>
<el-dropdown-item>火警高发时段分析</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<span class="el-dropdown-link"> 基础信息 </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown>
<span class="el-dropdown-link"> 警情处理 </span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
<el-dropdown-item></el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
<!-- 头部logo -->
<div class="home-header-logo">
<span class="home-header-logo-text"> 贵阳智慧消防物联网平台 </span>
</div>
<!-- 登录切换 -->
<div class="home-header-login">
<!-- 日期 -->
<div class="header-date-box">
<span class="date-item1">{{ formattedDate }}</span>
<span class="date-item2">{{ formattedTime }}</span>
<span class="date-item3">{{ dayOfWeek }}</span>
</div>
<!-- 登录 -->
<div class="header-user-login">
<el-dropdown>
<div class="user-box">当前用户: {{ userName }}</div>
<template #dropdown>
<el-dropdown-menu>
<div class="user-option">
<div>用户信息</div>
<div @click="loginShow">切换账号</div>
<div @click="topdf">注销</div>
</div>
</el-dropdown-menu>
</template>
</el-dropdown>
<div
class="fullscreenBox"
@click="tofullscreen"
:title="fullscreenText"
>
<img
src="@/assets/images/Fullscreen.png"
alt=""
v-if="fullscreenStatus == false"
/>
<img
src="@/assets/images/unfullscreen.png"
alt=""
v-if="fullscreenStatus == true"
/>
</div>
</div>
</div>
</div>
<!-- 中间区域 -->
<div class="home-center">
<!-- 全屏地图 -->
<div class="home-map">
<keep-alive>
<!-- <MapComponent @deviceId="openDetail" @openEvent="record = true" /> -->
</keep-alive>
</div>
<!-- 中左区域 -->
<div class="home-center-left">
<div class="police-title">
<TitleName text="实时警情信息"></TitleName>
</div>
<div class="plice-box">
<keep-alive>
<!-- <PoliceSituation @openEvent="record = true" /> -->
</keep-alive>
</div>
<div class="title-item">
<TitleName text="历史警情趋势"></TitleName>
</div>
<div class="history-box">
<keep-alive>
<HistoryComponet />
</keep-alive>
</div>
<!-- 平台接入系统-平台接入统计 -->
<div class="plat-box">
<keep-alive>
<PlatformAccess />
</keep-alive>
</div>
<div class="title-item">
<TitleName text="警情原因分析"></TitleName>
</div>
<div class="cause-box">
<keep-alive>
<CauseAnalysis />
</keep-alive>
</div>
</div>
<!-- 中中区域 -->
<div class="home-center-middle">
<keep-alive>
<MapComponent :mapId="'map-container'" :markers="[
{ position: [116.397428, 39.90923], weight: 10 },
{ position: [116.407428, 39.91923], weight: 20 },
{ position: [116.387428, 39.92923], weight: 30 },
]" />
</keep-alive>
</div>
<!-- 中右区域 -->
<div class="home-center-right">
<div class="police-title">
<TitleName text="单位评分排名"></TitleName>
</div>
<div>
<keep-alive>
<SafeRank />
</keep-alive>
</div>
<div class="title-item">
<TitleName text="健康度分析"></TitleName>
</div>
<div class="radar-box">
<div class="radar-charts"></div>
<keep-alive>
<RadarCharts />
</keep-alive>
</div>
<div class="title-item">
<TitleName text="实时数据监控"></TitleName>
</div>
<div>
<keep-alive>
<!-- <DataMonitor @nodeClick="openDetail" /> -->
</keep-alive>
</div>
<div class="title-item">
<TitleName text="单位统计"></TitleName>
</div>
<div>
<keep-alive>
<UnitStatistics />
</keep-alive>
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import router from "@/router";
import htmlToPdf from "@/utils/pdfto";
import { ref, onBeforeUnmount } from "vue";
import TitleName from "@/components/TitleName.vue";
import MapComponent from '@/components/MapComponent.vue'
const formattedDate = ref<string>("");
const formattedTime = ref<string>("");
const dayOfWeek = ref<string>("");
const userName = ref(); //用户名称
// 登录用户名称
if (sessionStorage.userData) {
userName.value = JSON.parse(sessionStorage.userData).name;
}
// 日期格式化
const updateDateTime = () => {
const currentDate = new Date();
const year = currentDate.getFullYear();
const month = (currentDate.getMonth() + 1).toString().padStart(2, "0");
const day = currentDate.getDate().toString().padStart(2, "0");
formattedDate.value = `${year}/${month}/${day}`;
const hours = currentDate.getHours().toString().padStart(2, "0");
const minutes = currentDate.getMinutes().toString().padStart(2, "0");
const seconds = currentDate.getSeconds().toString().padStart(2, "0");
formattedTime.value = `${hours} : ${minutes} : ${seconds}`;
const days = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
dayOfWeek.value = days[currentDate.getDay()];
};
const loginShow = () => {
router.push("/login");
};
const topdf = () => {
htmlToPdf("test", "#testid", "");
};
// 立即执行一次
updateDateTime();
// 组件卸载时清除定时器
const timer = setInterval(updateDateTime, 1000);
// 组件卸载前清除定时器
onBeforeUnmount(() => {
clearInterval(timer);
});
// 使用ref管理状态
const fullscreenStatus = ref(false);
const fullscreenText = ref("全屏显示");
// 全屏按钮操作
const tofullscreen = () => {
let image = document.querySelector("body");
// console.log(document.fullscreenElement, 'document.fullscreenElement');
if (document.fullscreenElement) {
document.exitFullscreen();
fullscreenStatus.value = false;
fullscreenText.value = "全屏显示";
} else {
image?.requestFullscreen();
fullscreenStatus.value = true;
fullscreenText.value = "退出全屏";
}
};
</script>
<style lang="scss" scoped>
.home {
box-sizing: border-box;
width: px-to-vw(1920);
height: px-to-vh(1080);
// padding: 0 50px 0 50px;
// 头部区域
.home-header {
width: 100%;
height: px-to-vh(75);
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 3;
background: linear-gradient(
180deg,
#080f3d 0%,
rgba(8, 18, 65, 0.99) 31%,
rgba(10, 28, 80, 0.95) 60%,
rgba(11, 29, 81, 0.95) 61%,
rgba(11, 29, 81, 0.86) 69%,
rgba(11, 29, 81, 0.62) 80%,
rgba(11, 29, 81, 0.22) 94%,
rgba(11, 29, 81, 0) 100%
);
display: flex;
justify-content: space-evenly;
.home-header-left,
.home-header-logo,
.home-header-login {
width: px-to-vw(734);
z-index: 1;
display: flex;
justify-content: space-evenly;
.el-dropdown-link {
cursor: pointer;
line-height: px-to-vh(30);
text-align: center;
width: px-to-vw(100);
height: px-to-vh(30);
background: url("@/assets/images/title-card-no.png") no-repeat;
background-size: 100% 100%;
}
align-items: center; /* 垂直居中 */
height: px-to-vh(75); /* 需要明确容器高度 */
}
.home-header-left {
}
// logo
.home-header-logo {
width: px-to-vw(734);
height: px-to-vh(85);
background-image: url("@/assets/images/31.png");
background-size: 100% 100%;
.home-header-logo-text {
font-family: AlimamaShuHeiTi-Bold;
font-size: 28px;
color: #ffffff;
font-weight: 600;
text-shadow: 0px 0px 7px rgba(52, 255, 204, 0.1);
background: linear-gradient(180deg, #ffffff 16%, #8dffe2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
// 日期
.home-header-login {
display: flex;
justify-content: space-between;
.date-item1,
.date-item2,
.date-item3 {
color: #00ffff;
line-height: 18px;
font-family: Quartz-Regular;
font-weight: normal;
font-size: 15px;
}
.date-item2 {
margin-left: 18px;
}
.date-item3 {
margin-left: 18px;
}
// 登录切换区域
.header-user-login {
display: flex;
.user-box {
width: 280px;
text-align: center;
height: 30px;
line-height: 30px;
background: url("@/assets/title-card-no.png") no-repeat;
background-size: 100% 100%;
font-size: 15px;
font-family: AlibabaPuHuiTi-SemiBold;
color: #014c83;
cursor: pointer;
}
.user-option {
display: flex;
align-items: center;
flex-direction: column;
width: 100px;
div {
margin: 2px;
cursor: pointer;
}
div:hover {
color: #00ffff;
}
}
.fullscreenBox {
img {
width: 30px;
height: 30px;
cursor: pointer;
}
}
}
}
}
// 内容区域
.home-center {
width: 100%;
height: px-to-vh(1005);
display: flex;
// background-color: #071785;
.home-center-left {
width: 20%;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
align-content: flex-start;
position: fixed;
top: 0;
left: 0;
bottom: 0;
.police-title {
margin-bottom: 10px;
}
> div {
pointer-events: auto !important;
}
width: 580px;
pointer-events: none;
padding-top: 80px;
background: linear-gradient(
90deg,
#080f3d 0%,
rgba(8, 18, 65, 0.99) 31%,
rgba(10, 28, 80, 0.95) 60%,
rgba(11, 29, 81, 0.95) 61%,
rgba(11, 29, 81, 0.86) 69%,
rgba(11, 29, 81, 0.62) 80%,
rgba(11, 29, 81, 0.22) 94%,
rgba(11, 29, 81, 0) 100%
);
z-index: 2;
padding-left: 36px;
.title-item {
margin-top: 25px;
margin-bottom: 10px;
}
}
.home-center-middle {
background-color: burlywood;
// width: 60%;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
}
.home-center-right {
width: 20%;
// height: px-to-vh(1005);
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
align-content: flex-start;
position: absolute;
top: 0;
right: 0;
bottom: 0;
width: 580px;
pointer-events: none;
padding-top: 80px;
.police-title {
margin-bottom: 10px;
}
> div {
pointer-events: auto !important;
}
background: linear-gradient(
270deg,
#080f3d 0%,
rgba(8, 18, 65, 0.99) 31%,
rgba(10, 28, 80, 0.95) 60%,
rgba(11, 29, 81, 0.95) 61%,
rgba(11, 29, 81, 0.86) 69%,
rgba(11, 29, 81, 0.62) 80%,
rgba(11, 29, 81, 0.22) 94%,
rgba(11, 29, 81, 0) 100%
);
z-index: 1;
padding-right: 36px;
.title-item {
margin-top: 25px;
margin-bottom: 10px;
}
}
}
}
</style>
怎么正确引入组件使用 上面这个代码