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.

189 lines
6.0 KiB
Vue

<template>
<div class="data-overview-wrap">
<!-- 检测总量汇总 -->
<div class="grid-container">
<div class="grid-item">
<div class="module-header">
<ContentHeader bgLayout="918">
<template #title>
<div class="w-[200px] bg_title bg_title_0"></div>
</template>
<template #extra>
<div>
<el-button type="primary" class="month-btn" @click="activeBtn = '月'" :class="{ 'active-btn': activeBtn === '月' }">
</el-button>
<el-button class="week-btn" @click="activeBtn = '周'" :class="{ 'active-btn': activeBtn === '周' }">
</el-button>
</div>
</template>
</ContentHeader>
</div>
<div class="chart-container">
<BarChart
:xData="xData"
:legendArr="legendArr"
:datas="datas"
:colorArr="colorArr"
/>
</div>
</div>
<!-- 设备信息 -->
<div class="grid-item">
<div class="module-header">
<ContentHeader bgLayout="918">
<template #title>
<div class="w-[200px] bg_title bg_title_1"></div>
</template>
<template #extra>
<div></div>
</template>
</ContentHeader>
</div>
<div class="device-info">
<div class="total-device">
<div class="device-icon"></div>
<div class="device-count">
<div>设备总数</div>
<div class="count-number">37</div>
</div>
</div>
<div class="device-list">
<div class="device-card">
<div class="mb-3">车体检测设备: 12</div>
<DeviceStatus :deviceStatus="deviceStatus" />
</div>
<div class="device-card">
<div class="mb-3">撑杆检测设备: 10</div>
<DeviceStatus :deviceStatus="deviceStatus" />
</div>
<div class="device-card">
<div class="mb-3">钩机检测设备: 15</div>
<DeviceStatus :deviceStatus="deviceStatus" />
</div>
</div>
</div>
</div>
</div>
<!-- 中部检测模块 -->
<div class="grid-container">
<ul class="flex grid-item">
<li>
<div class="module-header">
<ContentHeader bgLayout="450">
<template #title>
<div class="w-[200px] bg_title bg_title_2"></div>
</template>
<template #extra>
<el-select v-model="searchForm.name" placeholder="时间" class="custom-select">
<el-option label="A" value="deviceA"></el-option>
<el-option label="B" value="deviceB"></el-option>
</el-select>
</template>
</ContentHeader>
</div>
<div class="chart-container">
<PieChart
:data="[
{ value: 26, name: '搭扣未搭' },
{ value: 35, name: '下侧门缺失' },
{ value: 15, name: '小门搭扣丢失' },
{ value: 15, name: '门折页脱落' },
{ value: 10, name: '小门外翘' },
{ value: 5, name: '小窗裂纹' },
]"
:colors="[
'#FF7C09',
'#0032FF',
'#04FFF2',
'#D19EFF',
'#FF0103',
'#9EFFF3',
]"
/>
</div>
</li>
<li>
<div class="module-header">
<ContentHeader bgLayout="450">
<template #title>
<div class="w-[200px] bg_title bg_title_3"></div>
</template>
<template #extra>
<el-select v-model="searchForm.name" placeholder="时间" class="custom-select">
<el-option label="A" value="deviceA"></el-option>
<el-option label="B" value="deviceB"></el-option>
</el-select>
</template>
</ContentHeader>
</div>
<div class="chart-container">
<PieChartSmall
:data="[
{ value: 65, name: '撑杆断裂' },
{ value: 35, name: '撑杆弯曲' },
]"
:colors="['#9DFFF3', '#FFA179']"
/>
</div>
</li>
</ul>
<div class="grid-item">
<div class="module-header">
<ContentHeader bgLayout="918">
<template #title>
<div class="w-[200px] bg_title bg_title_4"></div>
</template>
<template #extra>
<div></div>
</template>
</ContentHeader>
</div>
<div class="monitor-images">
<img src="https://picsum.photos/300/200?random=1" alt="监控画面" />
<img src="https://picsum.photos/300/200?random=2" alt="监控画面" />
</div>
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import * as echarts from "echarts";
import ContentHeader from "@/components/ContentHeader.vue";
import BarChart from "./components/BarChart.vue";
import PieChart from "./components/PieChart.vue";
import PieChartSmall from "./components/PieChartSmall.vue";
import DeviceStatus from "./components/DeviceStatus.vue";
const xData = ref(["1月", "2月", "3月", "4月", "5月"]);
const legendArr = ["车体检测", "撑杆检测"];
const datas = [
[1528, 1266.02, 2468.39, 2982.67, 3165.91],
[2844.44, 6505.07, 8016.12, 6350.87, 1474.61],
];
const colorArr = [
["#3B9FFE", "#5070F2"],
["#FFDA8D", "#FFAC06"],
];
const deviceStatus = ref({
onlineCount: 50,
errorCount: 10,
outlineCount: 10
});
const searchForm = reactive({
name: "",
status: "",
faultType: "",
});
const activeBtn = ref("月");
onMounted(() => {
});
</script>
<style scoped lang="scss">
@import url("./DataOverview.scss");
</style>