Files
admin-govern/src/views/pqs/cockpit/realTimeData/index.vue

282 lines
9.1 KiB
Vue
Raw Normal View History

2025-10-20 13:41:00 +08:00
<template>
2025-10-21 16:01:33 +08:00
<div class="default-main" :style="{ padding: prop.height ? '0px !important' : '10px' }">
2025-10-21 14:56:27 +08:00
<!-- 实时数据 -->
<!-- 添加加载事件监听 -->
2025-12-04 16:29:46 +08:00
<div class="dataBox" :style="{ height: prop.height || pageHeight.height }">
2025-10-21 16:01:33 +08:00
<div
class="iframe-container"
:style="{
boxShadow: `var(--el-box-shadow-light)`
}"
2025-12-04 16:29:46 +08:00
style="position: relative"
2025-10-21 16:01:33 +08:00
>
<iframe
:src="iframeSrc"
width="100%"
height="100%"
frameborder="0"
scrolling="no"
id="iframeLeft"
@load="onIframeLoad"
></iframe>
2025-12-04 16:29:46 +08:00
<IframeDia style="position: absolute; top: 0px; right: 0px; left: 0px" />
2025-10-21 14:56:27 +08:00
</div>
2025-10-21 16:01:33 +08:00
2025-12-04 16:29:46 +08:00
<el-card class="bottom-container" style="min-height: 230px">
2025-10-21 16:01:33 +08:00
<div class="buttonBox">
2025-11-25 15:39:17 +08:00
<el-button type="primary" icon="el-icon-Aim" @click="reset">复位</el-button>
2025-10-21 16:01:33 +08:00
</div>
<div class="tableBox">
2025-12-04 16:29:46 +08:00
<!-- <Table ref="tableRef" height="100%"></Table> -->
<vxe-table border auto-resize height="100%" :data="tableData" ref="tableRef">
<vxe-column type="seq" title="序号" align="center" width="80px"></vxe-column>
<vxe-column field="date" align="center" title="时间" width="200px"></vxe-column>
<vxe-column field="name" align="center" title="监测点名" width="200px"></vxe-column>
<vxe-column field="address" align="center" title="事件描述"></vxe-column>
</vxe-table>
2025-10-21 16:01:33 +08:00
</div>
</el-card>
2025-10-21 14:56:27 +08:00
</div>
</div>
2025-10-20 13:41:00 +08:00
</template>
2025-10-21 10:21:15 +08:00
<script setup lang="ts">
2025-10-21 14:56:27 +08:00
import { ref, watch, onMounted, onUnmounted, provide } from 'vue'
import Table from '@/components/table/index.vue'
import TableStore from '@/utils/tableStore'
import { mainHeight } from '@/utils/layout'
2025-10-23 15:48:42 +08:00
import IframeDia from './iframeDia.vue'
2025-10-21 14:56:27 +08:00
// import { getActive } from "@/api/manage_wx/index";
// const props = defineProps<{
// project: { id: string; name: string } | null
// }>()
const prop = defineProps({
2025-12-04 16:29:46 +08:00
width: { type: [String, Number] },
height: { type: [String, Number] },
timeKey: { type: [String, Number] },
2025-10-21 14:56:27 +08:00
timeValue: { type: Object }
})
2025-12-04 16:29:46 +08:00
const tableData = ref()
2025-10-21 14:56:27 +08:00
2025-12-04 16:29:46 +08:00
// 在父页面中添加事件监听器
window.addEventListener('message', function (event) {
const { action, data } = event.data
2025-10-21 14:56:27 +08:00
2025-12-04 16:29:46 +08:00
if (action == 'securityDetailData') {
console.log('tableArray:', data)
// 处理接收到的 tableArray 数据
tableData.value = data
2025-10-21 14:56:27 +08:00
}
})
2025-12-04 16:29:46 +08:00
// const tableStore: any = new TableStore({
// url: '/user-boot/role/selectRoleDetail?id=0',
// method: 'POST',
// showPage: false,
// column: [
// {
// field: 'index',
// title: '序号',
// width: '80',
// formatter: (row: any) => {
// return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
// }
// },
// {
// title: '时间',
// field: 'whetherToGovern',
// minWidth: '70'
// },
// {
// title: '监测点名',
// field: 'name',
// minWidth: '90'
// // render: 'customTemplate',
// // customTemplate: (row: any) => {
// // return `<span style='cursor: pointer;text-decoration: underline;'>${row.name}</span>`
// // }
// },
// { title: '事件描述', field: 'question', minWidth: '200' }
// ],
// beforeSearchFun: () => {
// // tableStore.table.params.searchBeginTime = prop.timeValue?.[0] || getTimeOfTheMonth(prop.timeKey)[0]
// // tableStore.table.params.searchEndTime = prop.timeValue?.[1] || getTimeOfTheMonth(prop.timeKey)[1]
// },
// loadCallback: () => {
// tableStore.table.data = [
// {
// name: '10kV1#电动机',
// type: '电动机',
// whetherToGovern: '2025-01-01 15:00:00',
// question: '3次谐波电压、5次谐波电流、电压不平衡度超标'
// },
// {
// name: '10kV2#(治理后)',
// type: '电焊机',
// whetherToGovern: '2025-05-01 16:00:00',
// question: '所有指标均合格'
// },
// {
// name: '380V电焊机(治理前)',
// type: '电焊机',
// whetherToGovern: '2025-06-01 15:00:00',
// question: '5次谐波电流、电压不平衡度超标'
// },
// {
// name: '380V水泵机',
// type: '电动机',
// whetherToGovern: '2025-08-01 15:00:00',
// question: '所有指标均合格'
// }
// ]
// }
// })
2025-10-21 14:56:27 +08:00
const tableRef = ref()
2025-12-04 16:29:46 +08:00
// provide('tableRef', tableRef)
// const pageHeight = mainHeight(40)
// provide('tableStore', tableStore)
2025-10-21 14:56:27 +08:00
2025-11-25 15:39:17 +08:00
const reset = () => {
2025-12-04 16:29:46 +08:00
// 向 iframe 发送复位事件
sendResetToIframe();
// 清空表格数据
// tableData.value = [];
}
// 向 iframe 发送复位消息的函数
const sendResetToIframe = () => {
const iframe = document.getElementById('iframeLeft') as HTMLIFrameElement;
if (iframe && iframe.contentWindow) {
iframe.contentWindow.postMessage(
{
type: 'RESET_EVENT',
payload: true
},
'*' // 生产环境中应替换为具体的域名
);
}
2025-11-25 15:39:17 +08:00
}
2025-10-21 14:56:27 +08:00
const iframeSrc = ref('')
// 监听 props 变化
// watch(
// () => props.project,
// newVal => {
// if (newVal && newVal.id && newVal.name) {
// // window.location.origin
// // iframeSrc.value =
// // "http://192.168.1.179:4001" +
// // `/zutai/?id=${newVal.id}&&name=${encodeURIComponent(
// // newVal.name
// // )}&&preview=true&&display=true&&graphicDisplay=wx#/preview`;
// iframeSrc.value =
// 'http://192.168.1.179:4001' +
// `/zutai/?id=4b4f7f4260198776594f5f9d93a532e8&&name=stt&&preview=true&&display=true#/preview_YPT`
// // console.log("更新 iframeSrc:", iframeSrc.value);
// }
// },
// { immediate: true, deep: true }
// )
onMounted(() => {
iframeSrc.value =
2025-12-04 16:29:46 +08:00
'http://192.168.1.179:4001' + `/zutai/?id=4b4f7f4260198776594f5f9d93a532e8&&name=stt&&preview=true#/preview_YPT`
2025-10-21 14:56:27 +08:00
2025-12-04 16:29:46 +08:00
// tableStore.index()
2025-10-21 14:56:27 +08:00
// 监听来自 eventStatistics 组件的消息
window.addEventListener('message', handleMessage)
// getActive({}).then((res: any) => {
// if (res.code == "A0000") {
// // window.location.origin
// iframeSrc.value =
// "http://192.168.1.179:4001" +
// `/zutai/?id=${res.data.id}&&name=${encodeURIComponent(
// res.data.name
// )}&&preview=true&&display=true&&graphicDisplay=wx#/preview`;
// }
// });
})
onUnmounted(() => {
// 清理事件监听器
window.removeEventListener('message', handleMessage)
})
// iframe 加载完成回调 添加加载事件监听
const onIframeLoad = () => {
// console.log("iframe 加载完成");
// 通知 securityDetail.vue 组件 iframe 已加载完成
window.postMessage(
{
type: 'IFRAME_LOADED',
data: { loaded: true }
},
'*'
)
}
// 处理来自 eventStatistics 组件的消息
const handleMessage = (event: MessageEvent) => {
// 验证消息来源(在生产环境中应该验证 origin
// if (event.origin !== 'trusted-origin') return;
const { type, payload } = event.data
if (type === 'SEND_KEYS_TO_IFRAME') {
// 将数据转发给 iframe
sendKeysToIframe(payload)
}
}
// 向 iframe 发送 keyList 数据
const sendKeysToIframe = (keyList: string[]) => {
const iframe = document.getElementById('iframeLeft') as HTMLIFrameElement
if (iframe && iframe.contentWindow) {
iframe.contentWindow.postMessage(
{
type: 'ANALYSIS_KEYS',
payload: keyList
},
'*'
) // 在生产环境中应该指定具体的域名而不是 '*'
}
}
2025-10-20 13:41:00 +08:00
</script>
2025-10-21 14:56:27 +08:00
<style lang="scss" scoped>
2025-10-21 16:01:33 +08:00
.dataBox {
2025-10-21 14:56:27 +08:00
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
}
.iframe-container {
flex: 3.5;
}
2025-10-21 16:01:33 +08:00
:deep(.el-card__body) {
2025-10-21 14:56:27 +08:00
display: flex;
2025-10-21 16:01:33 +08:00
padding: 10px;
2025-10-21 14:56:27 +08:00
height: 100%;
2025-10-21 16:01:33 +08:00
.buttonBox {
2025-12-04 16:29:46 +08:00
display: flex;
2025-10-21 16:01:33 +08:00
width: 150px;
align-items: center;
justify-content: center;
}
.tableBox {
flex: 1;
width: 100%;
}
2025-10-21 14:56:27 +08:00
}
</style>