生产监控前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

247 lines
6.3 KiB

<template>
<div class="title">
<h3>{{ titleData }}</h3>
</div>
<div class="weather">
<div class="time">
{{ currentTime }} {{ lunarDay.ncWeek }}
</div>
<div class="line"></div>
<div class="forecast">
<span>{{ weatherData.city }}{{ weatherData.weather }} {{ weatherData.temperature }}</span>
<svg-icon class="weatherSvg" :icon-class="weatherData.weatherImg" />
<!-- <img src="../../../assets/images/weather/duoyun.png" /> -->
</div>
</div>
<div class="seeting">
<n-tooltip trigger="hover" v-if="settingShow">
<template #trigger>
<n-button class="tooltips" circle quaternary @click="showClick">
<template #icon>
<n-icon>
<Settings />
</n-icon>
</template>
</n-button>
</template>
显示项
</n-tooltip>
<n-tooltip trigger="hover">
<template #trigger>
<n-button class="tooltips" circle quaternary @click="returnBack">
<template #icon>
<n-icon>
<Power />
</n-icon>
</template>
</n-button>
</template>
返回首页
</n-tooltip>
<n-tooltip trigger="hover" v-if="warningShow">
<template #trigger>
<n-badge class="warningbadge" :value="warningData.length" :max="15">
<n-button class="tooltips" circle quaternary @click="waringClick">
<template #icon>
<n-icon>
<Bell />
</n-icon>
</template>
</n-button>
</n-badge>
</template>
报警
</n-tooltip>
</div>
<n-drawer class="waringDrawer" v-model:show="waringDrawer" :default-width="420" resizable placement="right">
<n-drawer-content closable>
<template #header>
消息
</template>
啊呀呀呀呀
</n-drawer-content>
</n-drawer>
</template>
<script lang="ts" setup>
import router from '@/router';
import { getWeather } from '@/api/user/index';
import { Filter, Maximize, Settings, Power, Bell } from '@vicons/tabler';
import { useDateFormat, useNow } from '@vueuse/core';
const currentTime = useDateFormat(useNow(), 'YYYY-MM-DD HH:mm:ss');
import calendar from '@/utils/lunar';
const emit = defineEmits(['showModalClick', 'returnClick']);
const timer = ref()
const isCurrentRoute = ref(true)
const waringDrawer = ref(false)
const weatherData = ref(
{ city: "", weather: "", temperature: "", weatherImg: "" }
);
const lunarDay: any = calendar.solarToLunar(
useNow().value.getUTCFullYear(),
useNow().value.getUTCMonth() + 1,
useNow().value.getUTCDate()
);
const props = defineProps({
titleData: {
type: String,
default: '数据大屏',
},
settingShow: {
type: Boolean,
default: false
},
warningShow: {
type: Boolean,
default: false
},
warningData: {
type: Array,
default: [1, 2, 3],
}
});
onMounted(() => {
getWeatherData()
});
function showClick() {
//显示/隐藏表格配置栏
emit('showModalClick', true);
// showModal.value = true;
}
function returnBack() {
//返回首页
// emit('returnClick', '');
router.replace("/dashboard")
}
function waringClick() {
//点击报警按钮
waringDrawer.value = true
}
// function getWeatherData() {
// //获取天气
// getWeather().then((res: any) => {
// if (res.code === 200) {
// weatherData.value = res.data;
// }
// });
// }
function getWeatherData() {
//获取天气
getWeather().then((res: any) => {
if (res.code === 200) {
if (isCurrentRoute) {
timer.value = setTimeout(async () => {
await (timer.value && clearTimeout(timer.value));
await getWeatherData();
}, 600000)
}
weatherData.value = res.data;
} else {
clearTimeout(timer.value);
}
});
}
</script>
<style lang="scss" scoped>
.header {
display: flex;
justify-content: space-between;
align-items: center;
// height: 5.7rem;
.title {
width: 80%;
background: url(@/assets/images/title-bg.png);
background-size: 100%;
text-align: center;
padding-bottom: 38px;
margin: 0 auto;
h3 {
font-size: 38px;
font-family: 'YouSheBiaoTiHei';
font-weight: 400;
letter-spacing: 4px;
background: linear-gradient(180deg, #FEFDFF 0%, #95DAFF 97%);
background-clip: text;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin: 0;
}
}
}
.weather {
display: flex;
align-items: center;
position: absolute;
top: 2.5rem;
left: 7rem;
color: #B2D4FF;
font-size: 1.8rem;
line-height: 2.2rem;
font-family: 'AlibabaPuHuiTiRegular';
.line {
width: 2px;
height: 2rem;
background: linear-gradient(to top, #000E38, #1EA8DD, #000E38);
margin: 0 1rem;
}
.forecast {
display: flex;
align-items: center;
.weatherSvg {
width: 1.5em !important;
height: 1.5em !important;
margin-left: 10px;
}
// img {
// width: 25px;
// margin-left: 10px;
// }
}
}
.seeting {
position: absolute;
top: 2.5rem;
right: 7rem;
.warningbadge {
margin-top: -10px;
}
.tooltips {
width: 36px;
height: 36px;
background: linear-gradient(180deg, #003269 1%, rgba(3, 79, 163, 0.2314) 56%, #003269 100%);
border-radius: 0px 0px 0px 0px;
opacity: 1;
:deep(span) {
color: #5beff9;
}
margin-left: 10px;
}
}
.n-drawer-container {
color: red;
.waringDrawer {
background: #0f2856;
backdrop-filter: blur(10px);
overflow: hidden;
}
}
</style>