feat: 点云数据新增俯视图查看&首页告警数据统计调整

dev
donghao 2 days ago
parent dfa0eafb16
commit d8c58dd183

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 B

@ -38,16 +38,11 @@ const colorArr = [
["#3B9FFE", "#5070F2"],
["#FFDA8D", "#FFAC06"],
];
const deviceStatus = ref({
onlineCount: 50,
errorCount: 10,
outlineCount: 10,
});
const searchForm = reactive({
car: "1",
pole: "1",
});
const deviceTotal = ref(0);
const carFaultTotal = ref([]);
const poleFaultTotal = ref([]);
@ -56,36 +51,284 @@ const activeBtn = ref("month");
const isAlarmOpen = ref<Boolean>(false); //
const currentRow = ref<Record<string, any>>({}); //
const currFileList = ref<Record<string, any>[]>([]); //
const deviceInfo = reactive({
list: [
{
name: "车体检测设备",
bindVal: {
const deviceInfo = ref({
total: 0,
},
icon: car_device_icon,
},
// {
// name: "",
// bindVal: {
// total: 0,
// },
// icon: pole_device_icon,
// },
// {
// name: "",
// bindVal: {
// total: 0,
// },
// icon: excavator_device_icon,
// },
],
onlineCount: 0,
errorCount: 0,
outlineCount: 0,
});
const trainListData = ref([
{
arrive_img_url:
"http://192.168.10.14:8123/sftp/2025-07-01/20250701_131010.jpg",
created_at: "2023-10-01 10:00:00",
device_position: "车体检测设备",
data: {
train_data: [
{
model: "C54K",
carriage_number: "01-48937",
},
{
model: "C54K",
carriage_number: "01-34895",
},
{
model: "C54K",
carriage_number: "00-50912",
},
{
model: "C54K",
carriage_number: "02-18734",
},
{
model: "C54K",
carriage_number: "04-99681",
},
{
model: "C54K",
carriage_number: "04-71120",
},
{
model: "C54K",
carriage_number: "04-50236",
},
{
model: "C54K",
carriage_number: "02-17084",
},
{
model: "C54K",
carriage_number: "00-12068",
},
{
model: "C54K",
carriage_number: "00-26203",
},
{
model: "C54K",
carriage_number: "00-67639",
},
{
model: "C54K",
carriage_number: "01-31401",
},
{
model: "C54K",
carriage_number: "00-33740",
},
{
model: "C54K",
carriage_number: "01-74883",
},
{
model: "C54K",
carriage_number: "02-32217",
},
{
model: "C54K",
carriage_number: "00-52434",
},
{
model: "C54K",
carriage_number: "02-32892",
},
{
model: "C54K",
carriage_number: "03-82204",
},
{
model: "C54K",
carriage_number: "04-20857",
},
{
model: "C54K",
carriage_number: "03-14256",
},
{
model: "C54K",
carriage_number: "03-28256",
},
{
model: "C54K",
carriage_number: "02-27349",
},
{
model: "C54K",
carriage_number: "02-49452",
},
{
model: "C54K",
carriage_number: "01-37996",
},
{
model: "C54K",
carriage_number: "02-81300",
},
{
model: "C54K",
carriage_number: "01-37644",
},
{
model: "C54K",
carriage_number: "03-66450",
},
{
model: "C54K",
carriage_number: "04-17540",
},
{
model: "C54K",
carriage_number: "00-83994",
},
{
model: "C54K",
carriage_number: "03-13204",
},
{
model: "C54K",
carriage_number: "00-67918",
},
{
model: "C54K",
carriage_number: "00-26850",
},
{
model: "C54K",
carriage_number: "03-28183",
},
{
model: "C54K",
carriage_number: "00-85336",
},
{
model: "C54K",
carriage_number: "02-32747",
},
{
model: "C54K",
carriage_number: "01-89385",
},
{
model: "C54K",
carriage_number: "01-97885",
},
{
model: "C54K",
carriage_number: "04-79829",
},
{
model: "C54K",
carriage_number: "00-27585",
},
{
model: "C54K",
carriage_number: "03-56310",
},
{
model: "C54K",
carriage_number: "02-62317",
},
{
model: "C54K",
carriage_number: "01-55888",
},
{
model: "C54K",
carriage_number: "04-32385",
},
{
model: "C54K",
carriage_number: "01-75685",
},
{
model: "C54K",
carriage_number: "03-45210",
},
{
model: "C54K",
carriage_number: "01-35511",
},
{
model: "C54K",
carriage_number: "00-30912",
},
{
model: "C54K",
carriage_number: "03-61047",
},
{
model: "C54K",
carriage_number: "00-24265",
},
{
model: "C54K",
carriage_number: "01-24135",
},
{
model: "C54K",
carriage_number: "00-16077",
},
{
model: "C54K",
carriage_number: "01-75557",
},
{
model: "C54K",
carriage_number: "03-81207",
},
{
model: "C54K",
carriage_number: "04-17201",
},
{
model: "C54K",
carriage_number: "03-22895",
},
{
model: "C54K",
carriage_number: "00-20144",
},
{
model: "C54K",
carriage_number: "01-37853",
},
{
model: "C54K",
carriage_number: "01-19641",
},
{
model: "C54K",
carriage_number: "04-66344",
},
{
model: "C54K",
carriage_number: "01-79470",
},
{
model: "C54K",
carriage_number: "04-39271",
},
{
model: "C54K",
carriage_number: "02-35471",
},
{
model: "C54K",
carriage_number: "03-54817",
},
{
model: "C54K",
carriage_number: "03-43384",
},
{
model: "C54K",
carriage_number: "02-41045",
},
],
},
},
{
created_at: "2023-10-01 10:00:00",
@ -151,6 +394,7 @@ const trainColumns = [
},
];
const isTrainOpen = ref<Boolean>(false); //
const currentTrainRow = ref<Record<string, any>>({}); //
const openTrainDetail = (row: record<string, any>) => {
@ -197,24 +441,21 @@ const getDeviceInfo = async () => {
const res = await getDeviceInfowApi();
if (isSuccessApi(res)) {
const { data } = res;
deviceTotal.value = data.deviceTotal;
deviceInfo.list = [
{
name: "车体检测设备",
bindVal: data?.appearance,
icon: car_device_icon,
},
// {
// name: "",
// bindVal: data?.pole,
// icon: pole_device_icon,
// },
// {
// name: "",
// bindVal: data?.excavator,
// icon: excavator_device_icon,
// },
];
deviceInfo.value = {
onlineCount:
data?.pole?.onlineCount +
data?.appearance?.outlineCount +
data?.excavator?.errorCount,
errorCount:
data?.pole?.errorCount +
data?.appearance?.errorCount +
data?.excavator?.errorCount,
outlineCount:
data?.pole?.outlineCount +
data?.appearance?.outlineCount +
data?.excavator?.outlineCount,
total: data?.deviceTotal,
};
}
} catch (error) {
console.error("获取设备信息出错:", error);
@ -230,7 +471,6 @@ const fetchPoleMonitorData = async () => {
if (isSuccessApi(res)) {
const { data } = res;
poleFaultTotal.value = data;
// deviceStatus.value = data
console.log(data);
}
} catch (error) {
@ -248,7 +488,6 @@ const fetchTrainMonitorData = async () => {
if (isSuccessApi(res)) {
const { data } = res;
carFaultTotal.value = data;
// deviceStatus.value = data
console.log(data);
}
} catch (error) {
@ -265,7 +504,6 @@ const getRealTime = async () => {
// TODO 使
imageFault.value = data.concat(data).concat(data).splice(0, 4);
}
// deviceStatus.value = data
console.log(data);
}
} catch (error) {
@ -409,23 +647,14 @@ onMounted(() => {
<div class="device-total-icon mt-[24px]"></div>
<div class="device-count ml-[24px]">
<div class="fg-mark1 text-[32px] font-bold">
{{ deviceTotal }}
{{ deviceInfo?.total }}
</div>
<div class="text-[14px]">设备总数</div>
</div>
</div>
<ul class="device-list">
<li class="device-card" v-for="(v, k) in deviceInfo.list" :key="k">
<!-- <div
class="device-card-head text-[16px] flex items-center mb-[12px]"
>
<img :src="v.icon" alt="" class="w-[32px]" />
<span class="ml-[12px]">{{ v.name }}</span>
<span class="font-bold">{{ v.bindVal?.total || 0 }}</span>
</div> -->
<!-- //TODO 使echarts https://echarts.zhangmuchen.top/#/detail?cid=164bb-40c1-e483-b7c9b-6cb171ad -->
<!-- // TODO -->
<DeviceStatus :deviceStatus="v.bindVal" />
<li class="device-card">
<DeviceStatus :deviceStatus="deviceInfo" />
</li>
</ul>
</div>
@ -457,7 +686,7 @@ onMounted(() => {
</div>
<TrainAlarmInfoModel
v-model:value="isTrainOpen"
:info="currentRow"
:info="currentTrainRow"
@close="isTrainOpen = false"
/>
<AlarmModal

@ -467,7 +467,9 @@ onUnmounted(() => {
<!-- 自定义标题栏 -->
<template #header="{ close, titleId, titleClass }">
<div class="flex items-center justify-between">
<div class="flex items-center justify-center w-full header-left mt-[32px]">
<div
class="flex items-center justify-center w-full header-left mt-[32px]"
>
<p
class="overflow-hidden whitespace-nowrap text-ellipsis max-w-[160px] fg-f-1 text-[24px]"
>
@ -486,9 +488,19 @@ onUnmounted(() => {
:disabled="!pcdLoaded"
@click="returnToCenter"
></span>
<span
class="button-fourth"
:class="{ 'active_view': !topView }"
:disabled="!pcdLoaded"
@click="toggleTopView"
>
</span>
<!-- 新增进度条 -->
<div v-if="loading" class="pointModal-progress-bar">
<div class="pointModal-progress" :style="{ width: progress + '%' }"></div>
<div
class="pointModal-progress"
:style="{ width: progress + '%' }"
></div>
</div>
</div>
</el-dialog>
@ -518,7 +530,8 @@ onUnmounted(() => {
.button-first,
.button-second,
.button-thrid {
.button-thrid,
.button-fourth {
position: absolute;
width: 24px;
height: 24px;
@ -526,7 +539,7 @@ onUnmounted(() => {
background-size: 100% 100%;
background-position: center;
background-repeat: no-repeat;
bottom: 112px;
bottom: 122px;
right: 32px;
transition: all 0.3s ease;
}
@ -536,16 +549,24 @@ onUnmounted(() => {
}
.button-second {
bottom: 72px;
bottom: 82px;
right: 32px;
background-image: url("@/assets/common/reduce_btn.png");
}
.button-thrid {
bottom: 33px;
bottom: 42px;
right: 32px;
background-image: url("@/assets/common/reset_btn.png");
}
.button-fourth {
bottom: 2px;
right: 32px;
background-image: url("@/assets/common/normal_view_btn.png");
&.active_view {
background-image: url("@/assets/common/top_view_btn.png");
}
}
.pointModal-progress-bar {
position: absolute;

@ -2,7 +2,7 @@
* @Author: donghao donghao@supervision.ltd
* @Date: 2025-06-23 15:50:30
* @LastEditors: donghao donghao@supervision.ltd
* @LastEditTime: 2025-09-05 16:48:36
* @LastEditTime: 2025-09-08 16:47:07
* @FilePath: \5G-Web\src\views\dashboard\components\TrainInfoModel.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
@ -13,7 +13,6 @@ interface Props {
/** 弹窗显隐 */
value: boolean;
info: Record<string, any>;
image: any;
}
interface Emits {
(e: "update:value", val: boolean): void;
@ -21,12 +20,9 @@ interface Emits {
const props = withDefaults(defineProps<Props>(), {
value: false,
info: {},
image: []
});
const emit = defineEmits<Emits>();
const show = computed({
get() {
return props.value;
@ -73,7 +69,7 @@ const itemCount = 16; // 这里可以根据实际需求动态设置
<div class="train_head_icon"></div>
</div>
<ul :class="['train-card-item-list', { 'high-height': info?.data?.train_data?.length > 15 }]">
<li class="flex flex-1 train-card-item" v-for="(item, index) in info?.data?.train_data" :key="index">
<li class="flex flex-1 cursor-pointer train-card-item train-card-item-alarm" :class="{ ' train-card-item-default cursor-not-allowed': index === 0 }" v-for="(item, index) in info?.data?.train_data" :key="index">
<div class="w-[80px] px-[8px] flex flex-col justify-center">
<div>{{ item.model }}</div>
<div>
@ -81,6 +77,9 @@ const itemCount = 16; // 这里可以根据实际需求动态设置
<span>{{ item.carriage_number }}</span>
</div>
</div>
<div class="default-tag" v-if="index===0">
无异常
</div>
</li>
</ul>
</div>
@ -93,5 +92,4 @@ const itemCount = 16; // 这里可以根据实际需求动态设置
<style lang="scss" >
@import url('./TrainInfoModel.scss');
</style>

@ -35,7 +35,6 @@
flex-wrap: wrap;
justify-content: space-between; /* 水平方向均匀分布间距 */
align-content: space-between; /* 垂直方向均匀分布间距 */
}
img {
width: 568px;
@ -61,8 +60,9 @@
background-repeat: no-repeat;
font-weight: 500;
font-size: 12px;
color: #37DBFF;
.train_head_icon{
color: #37dbff;
border-radius: 2px;
.train_head_icon {
width: 48px;
height: 48px;
background-image: url("@/assets/trainManage/train_head.png");
@ -71,6 +71,31 @@
background-repeat: no-repeat;
}
}
.train-card-item-alarm {
background: rgba(245,63,63,0.3);
color: #f53f3f;
border: 1px solid #f53f3f;
}
.train-card-item-default {
position: relative;
color: #cacbce;
background: rgba(202, 203, 206, 0.3);
border: 1px solid #cacbce;
.default-tag {
position: absolute;
top: 0;
right: 0;
width: 28px;
height: 16px;
line-height: 16px;
text-align: center;
background-color: #098137;
font-size: 8px;
font-weight: 700;
border-radius: 0px 1px 0px 2px;
}
}
.train-card-item-list,
.high-height {
box-sizing: border-box;
@ -94,12 +119,10 @@
cursor: pointer;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(255,255,255,0.6); /* 滚动条滑块颜色 */
background-color: rgba(255, 255, 255, 0.6); /* 滚动条滑块颜色 */
border-radius: 4px; /* 滑块圆角 */
cursor: pointer;
}
}
}
}
@ -110,11 +133,9 @@
height: 22px;
font-weight: bold;
font-size: 14px;
color: #FFFFFF;
border-left: 3px solid #46A9ED;
color: #ffffff;
border-left: 3px solid #46a9ed;
line-height: 22px;
}
}
}
Loading…
Cancel
Save