首页添加发光告警

This commit is contained in:
wangxk 2025-06-12 17:25:34 +08:00
parent 8d5f129af6
commit ea06d2d1d4
5 changed files with 869 additions and 281 deletions

View File

@ -65,6 +65,7 @@ const loadImages = async () => {
await new Promise((resolve) => { await new Promise((resolve) => {
mainImg.src = props.mainImage; mainImg.src = props.mainImage;
mainImg.onload = resolve; mainImg.onload = resolve;
mainImg.crossOrigin = "anonymous";
}); });
overlays.value = await Promise.all( overlays.value = await Promise.all(
@ -73,6 +74,7 @@ const loadImages = async () => {
await new Promise((resolve) => { await new Promise((resolve) => {
img.src = config.url; img.src = config.url;
img.onload = resolve; img.onload = resolve;
img.crossOrigin = "anonymous";
}); });
return { return {
id: config.id, id: config.id,

View File

@ -133,7 +133,8 @@ function openchange(row: any) {
let params = { let params = {
systemcode: row.systemcode, systemcode: row.systemcode,
signalId: row.signalId, signalId: row.signalId,
type: row.deviceType, deviceType:row.deviceType,
type:'yk',
value: row.yxValue, value: row.yxValue,
} }
sendCommand(params).then((res: any) => { sendCommand(params).then((res: any) => {
@ -202,7 +203,7 @@ onMounted(() => {
<aside id="silderLeft"> <aside id="silderLeft">
<div class="stationboard-box-title"> <div class="stationboard-box-title">
<img src="@/assets/navigation/ty_bq.png" /> <img src="@/assets/navigation/ty_bq.png" />
<div class="imgname">声纹列表</div> <div class="imgname">数据列表</div>
</div> </div>
<el-input v-model="areaName" clearable placeholder="请输入区域名称" @change="getSelect()" style="width: 100%;" <el-input v-model="areaName" clearable placeholder="请输入区域名称" @change="getSelect()" style="width: 100%;"
class="videomonitor-input"> class="videomonitor-input">
@ -468,7 +469,7 @@ onMounted(() => {
// border: 1px solid #00427b; // border: 1px solid #00427b;
.oveyone { .oveyone {
width: 375px; width: 370px;
height: 220px; height: 220px;
border: 1px solid #00427b; border: 1px solid #00427b;
border-radius: 5px; border-radius: 5px;

View File

@ -11,6 +11,106 @@
<div class="loadingBox1">变电站三维模型加载中... 请稍候</div> <div class="loadingBox1">变电站三维模型加载中... 请稍候</div>
</div> </div>
</div> </div>
<!-- 告警详情 -->
<Eldialog v-if="giveAlarmDia" title="告警详情" :zIndex="2000" :width="'700px'" @before-close="giveAlarmDia = false">
<template v-slot:PopFrameContent>
<div class="examine">
<img src="@/assets/giveanalarm/hecha.png" style="position: absolute;left: 0px;" v-if="AlarmMapOne.flag">
<div class="examination-contont">
<div style="display: flex; justify-content: center;width:100%;margin-top:20px;margin-bottom:10px;">
<el-button class="searchButton1" @click.stop="previousPage" :disabled="Index + 1 == 1">
<svg t="1686723317756" style=" transform: rotate(180deg);margin-right:5px" class="icon"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2537"
xmlns:xlink="http://www.w3.org/1999/xlink" width="14" height="14">
<path
d="M989.866667 482.133333L597.333333 110.933333c-17.066667-17.066667-42.666667-17.066667-59.733333 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l315.733333 298.666666H64c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667H853.333333l-315.733333 298.666666c-17.066667 17.066667-17.066667 42.666667 0 59.733334 8.533333 8.533333 21.333333 12.8 29.866667 12.8 8.533333 0 21.333333-4.266667 29.866666-12.8l392.533334-371.2c8.533333-8.533333 12.8-21.333333 12.8-29.866667s-4.266667-21.333333-12.8-29.866667z"
fill="currentColor" p-id="2538"></path>
</svg>
上一条</el-button>
<el-button class="searchButton1"
style="color:#009bff;font-size:14px;border:1px solid #009bff;padding:3px 5px;height:32px;">{{
Length }},当前为第{{ Index + 1 }}</el-button>
<el-button class="searchButton1" @click.stop="nextPage" :disabled="Index + 1 == Length">
下一条
<svg t="1686723317756" style="margin-left:5px" class="icon" viewBox="0 0 1024 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="2537" xmlns:xlink="http://www.w3.org/1999/xlink" width="14"
height="14">
<path
d="M989.866667 482.133333L597.333333 110.933333c-17.066667-17.066667-42.666667-17.066667-59.733333 0-17.066667 17.066667-17.066667 42.666667 0 59.733334l315.733333 298.666666H64c-25.6 0-42.666667 17.066667-42.666667 42.666667s17.066667 42.666667 42.666667 42.666667H853.333333l-315.733333 298.666666c-17.066667 17.066667-17.066667 42.666667 0 59.733334 8.533333 8.533333 21.333333 12.8 29.866667 12.8 8.533333 0 21.333333-4.266667 29.866666-12.8l392.533334-371.2c8.533333-8.533333 12.8-21.333333 12.8-29.866667s-4.266667-21.333333-12.8-29.866667z"
fill="currentColor" p-id="2538"></path>
</svg>
</el-button>
<!-- <el-button
style="color:#009bff;font-size:14px;border:1px solid #009bff;padding:3px 5px;height:32px;background-color: rgba(8, 80, 58, 0.5)"
@click.stop="nextPage" :disabled="Index + 1 == Length">
下一个<img src="/src/assets/giveanalarm/jiantouright.png"></el-button> -->
</div>
<div class="examination-contont-title" style="margin-top:10px;"><span
style="border-left:4px solid #FFBD00;display: inline-block;height: 10px;margin-right: 5px;"></span>告警信息
</div>
<div class="examine-contont-body">
<div class="examine-contont-body-left">
<div class="examine-contont-body-left-test">点位名称{{ AlarmMapOne.deviceName }}</div>
<div class="examine-contont-body-left-test">设备名称{{ AlarmMapOne.mainDeviceName }}</div>
<div class="examine-contont-body-left-test">部件名称{{ AlarmMapOne.componentName }}</div>
<div class="examine-contont-body-left-test">告警来源
<span v-if="AlarmMapOne.taskAlarmType == 1">巡视任务</span>
<span v-if="AlarmMapOne.taskAlarmType == 2">静默任务</span>
<span v-if="AlarmMapOne.taskAlarmType == 3">巡视设备</span>
</div>
<div class="examine-contont-body-left-test">告警等级
<span v-if="AlarmMapOne.alarmLevel == 1" style="color: #0099FF;">预警</span>
<span v-if="AlarmMapOne.alarmLevel == 2" style="color: #FFFF00;">一般</span>
<span v-if="AlarmMapOne.alarmLevel == 3" style="color: #FF9900;">严重</span>
<span v-if="AlarmMapOne.alarmLevel == 4" style="color: #FF3300;">危急</span>
</div>
<div class="examine-contont-body-left-test" style="display: flex;">
<div style="width:180px;">告警描述</div>
<div>{{ AlarmMapOne.content }}</div>
</div>
<div class="examine-contont-body-left-test">告警时间{{ AlarmMapOne.alarmDate }}</div>
</div>
<div class="examine-contont-body-right">
<!-- @click="pictureDetails" -->
<div class="examine-contont-body-right-image" style="">
<img v-if="AlarmMapOne.defectFilePath" src="@/assets/3d/xsri_fd.png" alt="">
<el-image style="position: absolute;width:100%;height:100%; opacity: 0;"
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(AlarmMapOne.defectFilePath)"
:zoom-rate="1.2"
:preview-src-list="[url + '/previewimage?type=alarm&filename=' + encodeURI(AlarmMapOne.defectFilePath)]"
:preview-teleported="true" fit="cover" />
</div>
<img class="examine-contont-body-right-img"
:src="url + '/previewimage?type=alarm&filename=' + encodeURI(AlarmMapOne.defectFilePath)" alt="">
</div>
</div>
<div class="examination-contont-title" style="margin-top: 20px;"><span
style="border-left:4px solid #FFBD00;display: inline-block;height: 10px;margin-right: 5px;"></span>核查确认
</div>
<div class="examine-contont-body-left-test" style="display: flex; align-items: center;">
<div style="width:85px;text-align: right;margin-right: 5px;">是否属实</div>
<el-radio-group v-model="AlarmMapOne.checkResult" style="margin-left:8px;">
<el-radio label="1"></el-radio>
<el-radio label="2"></el-radio>
</el-radio-group>
</div>
<div class="examine-contont-body-left-test" style="display: flex;align-items: start;">
<div style="width:85px;text-align: right;margin-right: 5px;">反馈意见</div>
<div style="width: 90%;margin-left:8px;"><el-input v-model="AlarmMapOne.checkComment" :rows="2"
type="textarea" placeholder=" " /></div>
</div>
</div>
<div class="flex w-full items-center justify-center mt-[20px]">
<el-button @click.stop="giveAlarmDia = false, AlarmMap.length = 0"
class="THREE-button1 mr-[30px]">取消</el-button>
<el-button @click.stop="determination" class="THREE-button1">确定</el-button>
</div>
</div>
</template>
</Eldialog>
</template> </template>
<script setup> <script setup>
@ -19,6 +119,25 @@ import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' // import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' //
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' // import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' //
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js' // import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js' //
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer"
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass"
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass"
import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass"
import { GammaCorrectionShader } from 'three/examples/jsm/shaders/GammaCorrectionShader'
// SMAA齿
import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass'
import { getSubstationById } from '@/api/substation'
import { useUserStore } from '@/store/modules/user'
import { getNotCheckAlarmCount } from '@/api/home';
import { setAlarmLogStatus } from "@/api/alarmInfo";//
import { ElMessage } from 'element-plus'
import Eldialog from '@/components/seccmsdialog/eldialog.vue'
import gaojing from '@/assets/3d/gaojing.png'
import gaojing1 from '@/assets/3d/gaojing1.png'
import gaojing2 from '@/assets/3d/gaojing2.png'
const userStore = useUserStore()
const url = userStore.webApiBaseUrl;
const props = defineProps({ const props = defineProps({
isautoRotate: { isautoRotate: {
type: Boolean, type: Boolean,
@ -32,7 +151,7 @@ watch(() => props.isautoRotate, (newValue, oldValue) => {
let renderer = reactive(null) // let renderer = reactive(null) //
const draw = ref() // div const draw = ref() // div
let scene = ref(null) // let scene = reactive(null) //
const progress = ref(0) // - const progress = ref(0) // -
const loadSuccess = ref(true) // - const loadSuccess = ref(true) // -
const clientWidth = ref() const clientWidth = ref()
@ -84,7 +203,7 @@ function initRenderer() {
renderer.setSize(draw.value.clientWidth, draw.value.clientHeight) renderer.setSize(draw.value.clientWidth, draw.value.clientHeight)
// //
controls = new OrbitControls(defaultCamera, renderer.domElement) controls = new OrbitControls(defaultCamera, renderer.domElement)
controls.autoRotate = true // controls.autoRotate = false //
controls.autoRotateSpeed = 1 // controls.autoRotateSpeed = 1 //
controls.screenSpacePanning = true controls.screenSpacePanning = true
draw.value.appendChild(renderer.domElement) draw.value.appendChild(renderer.domElement)
@ -105,6 +224,7 @@ function animate() {
function addmeth() { function addmeth() {
window.addEventListener('resize', resize, false) window.addEventListener('resize', resize, false)
window.addEventListener('wheel', handleMouseWheel, false) window.addEventListener('wheel', handleMouseWheel, false)
window.addEventListener('click', portClick, false)
} }
// gltf // gltf
function initgltfLoader() { function initgltfLoader() {
@ -121,6 +241,7 @@ function initgltfLoader() {
const model = gltf.scene || gltf.scenes[0] const model = gltf.scene || gltf.scenes[0]
const clips = gltf.animations || [] const clips = gltf.animations || []
setContent(model, clips) setContent(model, clips)
initData()
loadSuccess.value = false loadSuccess.value = false
}, (xhr) => { }, (xhr) => {
const percentage = Math.floor(xhr.loaded / xhr.total * 100) const percentage = Math.floor(xhr.loaded / xhr.total * 100)
@ -283,6 +404,7 @@ onMounted(() => {
onBeforeUnmount(() => { onBeforeUnmount(() => {
window.removeEventListener('resize', resize) window.removeEventListener('resize', resize)
window.removeEventListener('wheel', handleMouseWheel) window.removeEventListener('wheel', handleMouseWheel)
window.removeEventListener('click', portClick)
// //
document.body.onselectstart = document.body.oncontextmenu = null document.body.onselectstart = document.body.oncontextmenu = null
removeObj(scene) removeObj(scene)
@ -294,8 +416,389 @@ onBeforeUnmount(() => {
cancelAnimationFrame(_animate) cancelAnimationFrame(_animate)
THREE.Cache.clear() THREE.Cache.clear()
}) })
const dataJson = ref('') // Json
const selType = ref('05')
const data = ref('')
const searchdata = ref('')
const giveAnAlarm = ref('')
const PoliceId = ref([])
const luminescence = []
let composer = null
let outlinePass = null
let spritedata = []
//
function outlineObj() {
composer = new EffectComposer(renderer)
//
const renderPass = new RenderPass(scene, defaultCamera)
// composer
composer.addPass(renderPass)
// ,canvas
// OutlinePass
outlinePass = new OutlinePass(new THREE.Vector2(clientWidth.value, clientHeight.value), scene, defaultCamera)
outlinePass.selectedObjects = luminescence
outlinePass.renderToScreen = true
//
outlinePass.visibleEdgeColor.set('red')
//
outlinePass.edgeThickness = 5
//
outlinePass.edgeStrength = 2
//0
outlinePass.pulsePeriod = 2
outlinePass.edgeGlow = 5 //
// composer
composer.addPass(outlinePass)
//
// THREEjsShaderGammaCorrectionShader
// ShaderShaderPass
//
const gammaPass = new ShaderPass(GammaCorrectionShader)
composer.addPass(gammaPass)
// // 使 齿
// // SMAAPass齿
// // .setPixelRatio()
const pixelRatio = renderer.getPixelRatio()
const smaaPass = new SMAAPass(clientWidth.value * pixelRatio, clientHeight.value * pixelRatio)
composer.addPass(smaaPass)
}
function addSprite(selectedObjects) {
const box = new THREE.Box3().setFromObject(selectedObjects)
const center = box.getCenter(new THREE.Vector3())
//
let sprite = new THREE.Sprite(new THREE.SpriteMaterial({
map: new THREE.TextureLoader().load(gaojing),
transparent: true
}))
const sprite1 = new THREE.Sprite(new THREE.SpriteMaterial({
map: new THREE.TextureLoader().load(gaojing1),
transparent: true
}))
const sprite2 = new THREE.Sprite(new THREE.SpriteMaterial({
map: new THREE.TextureLoader().load(gaojing2),
transparent: true
}))
sprite.scale.set(4, 4, 4)
sprite.position.set(center.x, center.y + 6, center.z)
sprite.userData.id = selectedObjects.uuid
sprite.name = 'sprite1'
scene.add(sprite)
sprite1.scale.set(3, 3, 3)
sprite1.position.set(center.x, center.y + 6, center.z)
sprite1.userData.id = selectedObjects.uuid
sprite1.name = 'sprite2'
scene.add(sprite1)
sprite2.scale.set(1.5, 1.5, 1.5)
sprite2.position.set(center.x, center.y + 6, center.z)
sprite2.userData.id = selectedObjects.uuid
sprite2.name = 'sprite3'
sprite2.userData.objinfo = selectedObjects.userData.objinfo
scene.add(sprite2)
spritedata.push(sprite)
}
//
function cancal(model) {
outlineObj()
for (let i = 0; i < scene.children.length; i++) {
if (scene.children[i].type == 'Sprite') {
if (scene.children[i].userData.id == model.uuid) {
scene.children[i].traverse(function (obj) {
if (obj.type === 'Mesh') {
obj.geometry.dispose()
obj.material.dispose()
}
})
scene.remove(scene.children[i])
i--
}
}
}
}
function Information(val) {
const params = {
stationId: userStore.stationId,
}
getNotCheckAlarmCount(params).then(resany => {
giveAnAlarm.value = resany.data.notCheck
if (selType.value == '05') {
for (var i = 0; i <= searchdata.value.length; i++) {
if (searchdata.value[i] != undefined) {
for (var j = 0; j <= resany.data.notCheck.length; j++) {
if (resany.data.notCheck[j] != undefined) {
if (resany.data.notCheck[j].componentId) {
if (searchdata.value[i].objinfo.componentId == resany.data.notCheck[j].componentId) {
PoliceId.value.push(searchdata.value[i].id)
}
} else if (resany.data.notCheck[j].mainDeviceId) {
if (searchdata.value[i].objinfo.mainDeviceId == resany.data.notCheck[j].mainDeviceId) {
PoliceId.value.push(searchdata.value[i].id)
}
}
}
}
}
}
}
if (val == '01') {
var newArr = [...new Set(PoliceId.value)];
newArr.forEach((element) => {
let model = scene.getObjectByProperty('uuid', element)
// const box = new THREE.BoxHelper(model, '#fff000')
// box.userData.uuid = model.uuid
// scene.add(box)
//
luminescence.push(model)
outlineObj()
//
addSprite(model)
})
} else if (val == '03') {
console.log('03')
const policeId = ref([])
for (var k = 0; k <= searchdata.value.length; k++) {
if (searchdata.value[k] != undefined) {
policeId.value.push(searchdata.value[k].id)
var newArr = [...new Set(policeId.value)];
newArr.forEach(element => {
let model = scene.getObjectByProperty('uuid', element)
luminescence.length = 0
cancal(model)
})
}
}
var newArr = [...new Set(PoliceId.value)];
newArr.forEach((element) => {
let model = scene.getObjectByProperty('uuid', element)
// const box = new THREE.BoxHelper(model, '#fff000')
// box.userData.uuid = model.uuid
// scene.add(box)
//
luminescence.push(model)
outlineObj()
//
addSprite(model)
})
}
})
}
// JSON
function initData() {
const params = {
stationId: userStore.stationId
}
getSubstationById(params).then((item) => {
if (item.code == 0) {
if (item.data.custom2) {
dataJson.value = JSON.parse(item.data.custom2)
if (dataJson.value.EquipmentComponentSettings != '') {
if (selType.value == '05') {
data.value = dataJson.value.EquipmentComponentSettings
searchdata.value = JSON.parse(JSON.stringify(data.value))
console.log(searchdata.value)
Information('01')
scene.children[1].traverse(function (obj) {
data.value.forEach(element => {
if (obj.userData.name == element.equipmentname) {
obj.userData.type = 'EquipmentComponentSettings'
obj.uuid = element.id
obj.userData.objinfo = element.objinfo
obj.userData.x = element.x
obj.userData.y = element.y
obj.userData.z = element.z
}
})
})
}
}
}
}
})
}
//
const AlarmMap = ref([])
const AlarmMapOne = ref()
const Index = ref(0)
const Length = ref()
const giveAlarmDia = ref(false)
function portClick(event) {
// 线
const vector = new THREE.Vector3()
vector.set((event.layerX / clientWidth.value) * 2 - 1, -(event.layerY / clientHeight.value) * 2 + 1)
const raycaster = new THREE.Raycaster()
// //
raycaster.setFromCamera(vector, activeCamera)
raycaster.params.Line.threshold = 0.01
const intersections = raycaster.intersectObjects(scene.children)
if (intersections.length > 0) { // [boxMesh]线
intersections.forEach(function (e) {
var obj = e.object
if (obj instanceof THREE.Sprite && obj.type == 'Sprite') {
if (obj.name === "sprite3") {
for (var i = 0; i <= giveAnAlarm.value.length; i++) {
if (giveAnAlarm.value[i] != undefined && obj.userData.objinfo != undefined) {
if (giveAnAlarm.value[i].componentId) {
if (giveAnAlarm.value[i].componentId == obj.userData.objinfo.componentId) {
AlarmMap.value.push(giveAnAlarm.value[i])
} else if (giveAnAlarm.value[i].mainDeviceId && giveAnAlarm.value[i].mainDeviceId == undefined) {
if (giveAnAlarm.value[i].mainDeviceId == obj.userData.objinfo.mainDeviceId) {
AlarmMap.value.push(giveAnAlarm.value[i])
}
}
}
}
}
for (var i = 0; i < AlarmMap.value.length - 1; i++) {
for (var j = i + 1; j < AlarmMap.value.length; j++) {
if (AlarmMap.value[i].id == AlarmMap.value[j].id) {
AlarmMap.value.splice(j, 1);
j--;
}
}
}
for (var i = 0; i < AlarmMap.value.length; i++) {
AlarmMap.value[i].flag = false
AlarmMap.value[i].checkResult = '1'
}
Length.value = AlarmMap.value.length
AlarmMapOne.value = AlarmMap.value[Index.value]
Index.value = 0
giveAlarmDia.value = true
return
}
}
})
}
}
//
function determination() {
AlarmMapOne.value.checkFlag = 1
AlarmMapOne.value.deviceId = AlarmMapOne.value.deviceid
setAlarmLogStatus(AlarmMapOne.value).then(res => {
if (res.code == 0) {
ElMessage({
type: 'success',
message: '审核成功',
})
// if (AlarmMap.value.length > 1) {
const allComponentId = ref([])
const allMainDeviceId = ref([])
const AlarmMapId = ref()
const alarmId = ref()
const policeId = ref([])
AlarmMapId.value = AlarmMap.value.splice(Index.value, 1)
Length.value = AlarmMap.value.length
if (Index.value == AlarmMap.value.length) {
Index.value = Index.value - 1
AlarmMapOne.value = AlarmMap.value[Index.value]
// AlarmMap.value[Index.value].flag = false
} else {
AlarmMapOne.value = AlarmMap.value[Index.value]
}
alarmId.value = AlarmMapId.value[0]
for (var i = 0; i < AlarmMap.value.length; i++) {
if (AlarmMap.value[i].componentId) {
allComponentId.value.push(AlarmMap.value[i].componentId)
} else if (AlarmMap.value[i].mainDeviceId) {
allMainDeviceId.value.push(AlarmMap.value[i].mainDeviceId)
}
}
var ComponentIds = [...new Set(allComponentId.value)];
var MainDeviceIds = [...new Set(allMainDeviceId.value)];
if (ComponentIds.indexOf(alarmId.value.componentId) == -1 && ComponentIds.length != 0 || MainDeviceIds.indexOf(alarmId.value.mainDeviceId) == -1 && MainDeviceIds.length != 0) {
for (var k = 0; k <= searchdata.value.length; k++) {
if (searchdata.value[k] != undefined && alarmId.value != undefined) {
if (alarmId.value.componentId) {
if (searchdata.value[k].objinfo.componentId == alarmId.value.componentId) {
policeId.value.push(searchdata.value[k].id)
}
} else if (alarmId.value.componentId) {
if (searchdata.value[k].objinfo.mainDeviceId == alarmId.value.mainDeviceId) {
policeId.value.push(searchdata.value[k].id)
}
}
if (policeId.value.length != 0) {
var newArr = [...new Set(policeId.value)];
newArr.forEach(element => {
let model = scene.getObjectByProperty('uuid', element)
for (var j = 0; j < luminescence.length; j++) {
if (luminescence[j].uuid == model.uuid) {
luminescence.splice(j, 1);
cancal(model)
return
}
}
})
}
}
}
} else if (ComponentIds.length == 0 && MainDeviceIds.length == 0) {
for (var k = 0; k <= searchdata.value.length; k++) {
if (searchdata.value[k] != undefined) {
policeId.value.push(searchdata.value[k].id)
var newArr = [...new Set(policeId.value)];
newArr.forEach(element => {
let model = scene.getObjectByProperty('uuid', element)
luminescence.length = 0
cancal(model)
})
}
}
}
if (AlarmMap.value.length == 0) {
giveAlarmDia.value = false
AlarmMap.length = 0
}
// Information()
}
})
}
//
function previousPage() {
Index.value = Index.value - 1
AlarmMapOne.value = AlarmMap.value[Index.value]
}
//
function nextPage() {
Index.value = Index.value + 1
AlarmMapOne.value = AlarmMap.value[Index.value]
}
//
watch(() => userStore.giveanalarmInfo, (newValue, oldValue) => {
Information('03')
giveAnAlarm.value.push(JSON.parse(newValue))
Length.value = Length.value + 1
},
{ deep: true })
watch(() => userStore.trendsInfo, (newValue, oldValue) => {
Information('02')
const valueData = JSON.parse(newValue)
for (var i = 0; i < AlarmMap.value.length; i++) {
AlarmMap.value[i].flag = false
if (AlarmMap.value[i].id == valueData.id) {
AlarmMap.value[i].flag = true
}
}
},
{ deep: true })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -317,6 +820,7 @@ onBeforeUnmount(() => {
justify-content: center; justify-content: center;
z-index: 98; z-index: 98;
} }
.loadingBox1 { .loadingBox1 {
position: absolute; position: absolute;
top: 0; top: 0;
@ -438,4 +942,92 @@ onBeforeUnmount(() => {
} }
} }
.examine {
.examination-title {
width: 100%;
height: 40px;
text-align: center;
line-height: 40px;
font-weight: 700;
font-style: normal;
font-size: 18px;
color: #FFFFFF;
background-size: 100% 100%;
}
.examination-contont {
color: #fff;
font-size: 14px;
.examination-contont-title {
width: 100%;
font-weight: 700;
font-style: normal;
font-size: 14px;
color: #009bff;
}
.examine-contont-body-left-test {
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #FFFFFF;
margin-top: 10px;
padding: 0 10px;
}
.examine-contont-body {
width: 100%;
height: 245px;
display: flex;
align-items: center;
.examine-contont-body-left {
width: 60%;
// border: 1px solid red;
.examine-contont-body-left-test {
font-weight: 400;
font-style: normal;
font-size: 14px;
color: #FFFFFF;
margin-top: 10px;
}
}
.examine-contont-body-right {
width: 40%;
position: relative;
margin-top: -50px;
.examine-contont-body-right-image {
width: 26px;
height: 26px;
position: absolute;
background-color: #0000007f;
right: 8px;
top: 8px;
border-radius: 5px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.examine-contont-body-right-img {
width: 100%;
height: 140px;
object-fit: contain;
}
}
}
}
}
.searchButton1 {
border: #009bff solid 1px !important;
background-color: transparent !important;
color: #fff !important;
margin-left: 10px;
}
</style> </style>

View File

@ -528,7 +528,7 @@ onBeforeUnmount(() => {
// } // }
clearInterval(tableTimer) clearInterval(tableTimer)
}) })
const isautoRotate = ref(true) const isautoRotate = ref(false)
const isModelset = ref(false) const isModelset = ref(false)
function autoRotateClick() { function autoRotateClick() {

View File

@ -471,40 +471,36 @@
style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between; margin:15px 0px"> style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between; margin:15px 0px">
<div style="display: flex;display: -webkit-flex; align-items: center;"> <div style="display: flex;display: -webkit-flex; align-items: center;">
<el-input v-if="sourceType == 1" v-model="paramstable.deviceName" <el-input v-if="sourceType == 1" v-model="paramstable.deviceName" placeholder="请输入巡视点位名称"
placeholder="请输入巡视点位名称" @clear="getdevicedata1()" @change="getdevicedata1()" @clear="getdevicedata1()" @change="getdevicedata1()" style="margin-right:15px ;width: 185px;"
style="margin-right:15px ;width: 185px;" clearable /> clearable />
<el-input v-if="sourceType == 2" v-model="paramstable.signalName" <el-input v-if="sourceType == 2" v-model="paramstable.signalName" placeholder="请输入信号名称"
placeholder="请输入信号名称" @clear="getdevicedata1()" @change="getdevicedata1()" @clear="getdevicedata1()" @change="getdevicedata1()" style="margin-right:15px ;width: 185px;"
style="margin-right:15px ;width: 185px;" clearable /> clearable />
<el-button class="searchButton" type="primary" <el-button class="searchButton" type="primary" @click="getdevicedata1()">搜索</el-button>
@click="getdevicedata1()">搜索</el-button>
<el-button class="searchButton" @click="resetting()">重置</el-button> <el-button class="searchButton" @click="resetting()">重置</el-button>
</div> </div>
</div> </div>
<el-table v-loading="devicedataloading" :data="devicedata" ref="tableref" <el-table v-loading="devicedataloading" :data="devicedata" ref="tableref"
style="width: 100%;height: calc(50vh); overflow: auto;margin-bottom: 15px;" style="width: 100%;height: calc(50vh); overflow: auto;margin-bottom: 15px;" row-key="deviceId"
row-key="deviceId" class="PatrolMonitoring" highlight-current-row default-expand-all class="PatrolMonitoring" highlight-current-row default-expand-all :row-class-name="tableRowClassName"
:row-class-name="tableRowClassName"
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }"> :header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
<el-table-column type="index" label="序号" width="50px" align="center" /> <el-table-column type="index" label="序号" width="50px" align="center" />
<el-table-column v-if="sourceType == 1" label="巡视点位编号" prop="deviceCode" align="center" <el-table-column v-if="sourceType == 1" label="巡视点位编号" prop="deviceCode" align="center"
width="140"></el-table-column> width="140"></el-table-column>
<el-table-column v-if="sourceType == 1" label="巡视点位名称" align="center" <el-table-column v-if="sourceType == 1" label="巡视点位名称" align="center"
prop="deviceName"></el-table-column> prop="deviceName"></el-table-column>
<el-table-column v-if="sourceType == 1" label="所属主设备" prop="mainDeviceName" <el-table-column v-if="sourceType == 1" label="所属主设备" prop="mainDeviceName" align="center"
align="center" width="120"></el-table-column> width="120"></el-table-column>
<el-table-column v-if="sourceType == 1" label="主设备类型" prop="deviceType" align="center" <el-table-column v-if="sourceType == 1" label="主设备类型" prop="deviceType" align="center" width="120">
width="120">
<template #default="scope"> <template #default="scope">
<span>{{ currency(EquipmentType, scope.row.deviceType) }}</span> <span>{{ currency(EquipmentType, scope.row.deviceType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="sourceType == 1" label="所属部件" align="center" prop="componentName" <el-table-column v-if="sourceType == 1" label="所属部件" align="center" prop="componentName"
width="160"></el-table-column> width="160"></el-table-column>
<el-table-column v-if="sourceType == 1" label="表计类型" align="center" prop="meterType" <el-table-column v-if="sourceType == 1" label="表计类型" align="center" prop="meterType" width="100">
width="100">
<template #default="scope"> <template #default="scope">
<span>{{ currency(Metertype, scope.row.meterType) }}</span> <span>{{ currency(Metertype, scope.row.meterType) }}</span>
</template> </template>
@ -515,20 +511,15 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="sourceType == 2" label="信号编号" align="center" prop="signalCode" <el-table-column v-if="sourceType == 2" label="信号编号" align="center" prop="signalCode" width="100" />
width="100" /> <el-table-column v-if="sourceType == 2" label="信号名称" align="center" prop="signalName" min-width="140" />
<el-table-column v-if="sourceType == 2" label="信号名称" align="center" prop="signalName" <el-table-column v-if="sourceType == 2" label="信号单位" align="center" prop="signalUnit" width="80" />
min-width="140" /> <el-table-column v-if="sourceType == 2" label="遥控遥调类型" align="center" prop="ykytType" width="150">
<el-table-column v-if="sourceType == 2" label="信号单位" align="center" prop="signalUnit"
width="80" />
<el-table-column v-if="sourceType == 2" label="遥控遥调类型" align="center" prop="ykytType"
width="150">
<template #default="scope"> <template #default="scope">
<span>{{ isykyttype(scope.row.ykytType) }}</span> <span>{{ isykyttype(scope.row.ykytType) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column v-if="sourceType == 2" label="是否告警信号" align="center" prop="signalType" <el-table-column v-if="sourceType == 2" label="是否告警信号" align="center" prop="signalType" width="100">
width="100">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.signalType === '1'"></span> <span v-if="scope.row.signalType === '1'"></span>
<span v-else></span> <span v-else></span>
@ -541,8 +532,8 @@
<el-table-column v-if="sourceType == 2" label="遥调地址(yt)" align="center" prop="ytAddr" /> <el-table-column v-if="sourceType == 2" label="遥调地址(yt)" align="center" prop="ytAddr" />
</el-table> </el-table>
<Page :total="devicetaotal" v-model:size="paramstable.size" <Page :total="devicetaotal" v-model:size="paramstable.size" v-model:current="paramstable.current"
v-model:current="paramstable.current" @pagination="getdevicedata1()"></Page> @pagination="getdevicedata1()"></Page>
</div> </div>
</div> </div>
</div> </div>
@ -745,6 +736,7 @@ function Information(val) {
if (val == '01') { if (val == '01') {
var newArr = [...new Set(PoliceId.value)]; var newArr = [...new Set(PoliceId.value)];
newArr.forEach((element) => { newArr.forEach((element) => {
let model = scene.getObjectByProperty('uuid', element) let model = scene.getObjectByProperty('uuid', element)
// const box = new THREE.BoxHelper(model, '#fff000') // const box = new THREE.BoxHelper(model, '#fff000')
@ -765,7 +757,6 @@ function Information(val) {
newArr.forEach(element => { newArr.forEach(element => {
let model = scene.getObjectByProperty('uuid', element) let model = scene.getObjectByProperty('uuid', element)
luminescence.length = 0 luminescence.length = 0
// outlineObj()//
cancal(model) cancal(model)
}) })
@ -775,6 +766,7 @@ function Information(val) {
var newArr = [...new Set(PoliceId.value)]; var newArr = [...new Set(PoliceId.value)];
newArr.forEach((element) => { newArr.forEach((element) => {
let model = scene.getObjectByProperty('uuid', element) let model = scene.getObjectByProperty('uuid', element)
console.log(model)
// const box = new THREE.BoxHelper(model, '#fff000') // const box = new THREE.BoxHelper(model, '#fff000')
// box.userData.uuid = model.uuid // box.userData.uuid = model.uuid
// scene.add(box) // scene.add(box)
@ -1623,6 +1615,7 @@ function initData() {
if (selType.value == '05') { if (selType.value == '05') {
data.value = dataJson.value.EquipmentComponentSettings data.value = dataJson.value.EquipmentComponentSettings
searchdata.value = JSON.parse(JSON.stringify(data.value)) searchdata.value = JSON.parse(JSON.stringify(data.value))
console.log(searchdata.value)
Information('01') Information('01')
scene.children[1].traverse(function (obj) { scene.children[1].traverse(function (obj) {
data.value.forEach(element => { data.value.forEach(element => {
@ -3067,7 +3060,6 @@ function determination() {
for (var j = 0; j < luminescence.length; j++) { for (var j = 0; j < luminescence.length; j++) {
if (luminescence[j].uuid == model.uuid) { if (luminescence[j].uuid == model.uuid) {
luminescence.splice(j, 1); luminescence.splice(j, 1);
// outlineObj()//
cancal(model) cancal(model)
return return
} }
@ -3084,7 +3076,6 @@ function determination() {
newArr.forEach(element => { newArr.forEach(element => {
let model = scene.getObjectByProperty('uuid', element) let model = scene.getObjectByProperty('uuid', element)
luminescence.length = 0 luminescence.length = 0
// outlineObj()//
cancal(model) cancal(model)
}) })
@ -3798,6 +3789,7 @@ function nextPage() {
:deep(.el-radio__input.is-checked + .el-radio__label) { :deep(.el-radio__input.is-checked + .el-radio__label) {
color: #009bff !important; color: #009bff !important;
} }
.device_box { .device_box {
width: 100%; width: 100%;
@ -3826,6 +3818,7 @@ function nextPage() {
} }
} }
} }
.faulttemplate-box1 { .faulttemplate-box1 {
width: 100%; width: 100%;
display: flex; display: flex;