You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

317 lines
7.1 KiB
Vue

<script setup lang="ts">
import ReCol from "@/components/ReCol";
import { barChart, pieChart, pie3DChart } from "./components/chart";
import DeviceStatus from "./components/DeviceStatus.vue";
import Notify from "./components/Notify.vue";
import SwiperShow from "./components/SwiperShow.vue";
// import dataViewIcon1 from "@/assets/svg/icons/dataViewIcon1.svg";
// import dataViewIcon2 from "@/assets/svg/icons/dataViewIcon1.svg";
defineOptions({
name: "Workbench"
});
/** 分析概览 */
// const barChartData = [
// {
// requireData: [2101, 5288, 4239, 4962, 6752, 5208, 7450],
// questionData: [2216, 1148, 1255, 1788, 4821, 1973, 4379]
// },
// {
// requireData: [2101, 3280, 4400, 4962, 5752, 6889, 7600],
// questionData: [2116, 3148, 3255, 3788, 4821, 4970, 5390]
// }
// ];
const pie3Ddata = {
data: [
{ name: "紧急", value: 30 },
{ name: "较高", value: 10 },
{ name: "一般", value: 60 }
]
};
// 数据预览
// TODO 图标需要替换
const dataViewList = [
{
label: "异常总量",
value: "110200",
color: "#FF861A",
bgColor: "#FFE9D6",
icon: "icon-suanlipeizhi"
},
{
label: "设备总量",
value: "46700",
color: "#5786FF",
bgColor: "#D6E0FF",
icon: "icon-suanlipeizhi"
},
{
label: "覆盖网点",
value: "304800",
color: "#5024FE",
bgColor: "#DDD5FD",
icon: "icon-suanlipeizhi"
},
{
label: "资源使用",
value: "89300",
color: "#14A1FF",
bgColor: "#D6EFFF",
icon: "icon-suanlipeizhi"
}
];
</script>
<template>
<div class="main">
<el-row :gutter="24" justify="space-around">
<re-col
v-motion
class="mb-[18px]"
:value="24"
:md="24"
:sm="24"
:xs="24"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<el-card class="line-card" shadow="never" :body-style="{ padding: 0 }">
<div class="flex justify-between h-[140px]">
<SwiperShow />
</div>
</el-card>
</re-col>
<!-- up -->
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">数据总览</span>
<ul class="flex justify-between flex-wrap h-[252px] dataView_box">
<!-- <pieChart /> -->
<li v-for="(v, k) in dataViewList" :key="k" class="w-1/2">
<el-card class="line-card" shadow="always">
<div class="flex items-center justify-center h-[77px]">
<div
class="flex items-center justify-center"
style="width: 48px; height: 48px; border-radius: 50%"
:style="{ backgroundColor: v.bgColor }"
>
<i
class="iconfont"
:class="v.icon"
style="font-size: 28px"
:style="{ color: v.color }"
/>
</div>
<div class="dataView_info">
<span>{{ v.label }}</span>
<p>{{ v.value }}</p>
</div>
</div>
</el-card>
</li>
</ul>
</re-col>
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">设备状态</span>
<el-card
class="line-card"
shadow="always"
:body-style="{ padding: '16px' }"
>
<div class="flex justify-between h-[220px]"><DeviceStatus /></div>
</el-card>
</re-col>
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">设备告警情况</span>
<el-card
class="line-card"
shadow="always"
:body-style="{ padding: '16px' }"
>
<div class="flex justify-between h-[220px]">
<pie3DChart :data="pie3Ddata.data" />
</div>
</el-card>
</re-col>
<!-- down -->
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">违规总量</span>
<el-card
class="line-card"
shadow="always"
:body-style="{ padding: '16px' }"
>
<div class="flex justify-between h-[265px]">
<barChart />
</div>
</el-card>
</re-col>
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">算力占用</span>
<el-card
class="line-card"
shadow="always"
:body-style="{ padding: '16px' }"
>
<div class="flex justify-between h-[265px]">
<pieChart />
</div>
</el-card>
</re-col>
<re-col
v-motion
class="mb-[18px]"
:value="8"
:md="8"
:sm="8"
:xs="8"
:initial="{
opacity: 0,
y: 100
}"
:enter="{
opacity: 1,
y: 0,
transition: {
delay: 480
}
}"
>
<span class="inline-block mb-3 text-base">消息通知</span>
<el-card class="line-card" shadow="always" :body-style="{ padding: 0 }">
<div class="flex justify-between h-[297px]">
<Notify />
</div>
</el-card>
</re-col>
</el-row>
</div>
</template>
<style lang="scss" scoped>
.dataView_box {
& > li {
padding-right: 16px;
margin-bottom: 16px;
&:nth-child(2n) {
padding-right: 0;
}
}
.dataView_info {
padding-left: 16px;
& > span {
color: #666;
font-size: 14fpx;
}
& > p {
color: #333;
font-size: 24px;
line-height: 36px;
}
}
}
</style>