添加监控模型聚合标签

main
jinna 4 months ago
parent b450b642cc
commit a689a91356
  1. 5
      src/components/monitoring/backHome.vue
  2. 3
      src/components/monitoring/clickCp.vue
  3. 181
      src/components/monitoring/monitoring.vue
  4. 67
      src/page/index/sidebar/opsSidebar.vue
  5. 12
      src/page/index/sidebar/sidebarItem.vue
  6. 10
      src/permission.js
  7. 10
      src/store/modules/user.js
  8. 79
      src/util/bfHelper.js
  9. 3
      src/views/garden/index.vue

@ -95,7 +95,7 @@
bfHelper.clearTags()
// }
console.log('返回')
console.log('返回-------------------------------')
if (this.bimModel == 1) {
window.sessionStorage.removeItem('build');
@ -164,10 +164,11 @@
this.$parent.isControl = false;
this.$parent.$refs.clickcp.tower = null;
} else if (this.type == '监控') {
console.log('监控------------------------------------')
this.$parent.initial();
this.$parent.setTowerMonitor();
this.$parent.reload = 100;
this.$parent.getAllDevice();
if (this.bimModel == 1) {
bfHelper.lookPipeline(null, null, this.condition, '监控');
this.$parent.$refs.clickcp.active = 25;

@ -305,6 +305,7 @@ export default {
this.active = this.active == '' ? 25 : this.active
this.ttActive = this.ttActive == '' ? 20 : this.ttActive
console.log('进入此方法111111111111111',this.type);
// bfHelper.clearCluster();
this.getTypeList(this.type)
},500)
@ -340,6 +341,7 @@ export default {
console.log('typeList ====>',this.typeList, this.page)
})
}else if(type == 'floor'){
bfHelper.clearCluster()
this.typeList = [];
let build = this.bimModel == 1 ? (this.tower + 1) :3;
let layer = this.bimModel == 1 ? this.active : this.ttActive
@ -589,6 +591,7 @@ export default {
} else if (this.sbType == '暖') {
this.$parent.setTowerWarm();
} else if (this.sbType == '监控') {
console.log('11111111111111111111111111')
this.$parent.$refs.backHome.clickBack();
} else if (this.sbType == '空调') {
bfHelper.extObjMngClear(); //

@ -319,7 +319,9 @@ export default {
zoom: 1,
},
isShowAll: true, //
dialogItem: {}
dialogItem: {},
tagsArr:[], //
changeBim:false //bim
};
},
created() {
@ -346,6 +348,8 @@ export default {
watch: {
bimModel: {
handler(newVal, oldVal) {
console.log('bimModel-------------------------------',bimModel)
this.changeBim = true
this.checkList = [];
this.build = "";
this.current = 1; //
@ -384,8 +388,12 @@ export default {
"$store.state.bfHelperState.bfState": {
immediate: true,
handler(newval, olval) {
console.log('bfState',newval)
bfHelper.resetStatus(2);
console.log('bfState--------------------------',newval)
if (newval) {
bfHelper.clearCluster();
bfHelper.clearDrawableContainer()
this.changeBim = false
//
bfHelper.resetStatus(2);
this.onClick();
@ -394,10 +402,12 @@ export default {
"camera",
JSON.stringify(bfHelper.getCameraStatus())
);
let build = sessionStorage.getItem("build");
let build = sessionStorage.getItem("build") == 26 ? null : sessionStorage.getItem("build");
let floor = sessionStorage.getItem("floor");
let type = sessionStorage.getItem('type') ? sessionStorage.getItem('type') : 'build'
this.getCameraPosi();
console.log('build------------------------------',build)
if (build) {
if (build == 10) {
setTimeout(() => {
@ -415,10 +425,12 @@ export default {
"监控"
);
} else if (build == 26) {
console.log('bulid26----------------------------->')
bfHelper.lookPipeline(null, null, this.condition, "监控");
this.$refs.clickcp.active = 26;
this.$refs.clickcp.type = 'build';
this.$refs.clickcp.area = 1;
bfHelper.lookPipeline(null, null, this.condition, "监控");
console.log('bulid26-----------------------------')
bfHelper.setOpacityFun();
setTimeout(() => {
this.setTowerMonitor();
@ -576,6 +588,7 @@ export default {
this.comeBim()
}
}
this.getAllDevice()
},
},
@ -889,6 +902,7 @@ export default {
this.$message.error('对不起,暂无该设备模型,请稍后点击');
} else {
// bfHelper.resetStatus(2);
bfHelper.clearCluster()
bfHelper.clearDrawableContainer();
id = bfHelper.disposeId(item.area, item.build, item.modelId);
// let id = disposeId(item.area, item.build, item.modelId);
@ -935,9 +949,12 @@ export default {
if (item.modelId == "") {
this.$message.error('对不起,暂无该设备模型,请稍后点击');
} else {
bfHelper.mapDestroy();
// bfHelper.mapDestroy();
bfHelper.clearCluster()
bfHelper.clearDrawableContainer();
id = bfHelper.disposeId(item.area, item.build, item.modelId);
console.log('item-----------------------------',item)
this.addLabel(
id,
item.name,
@ -1902,6 +1919,7 @@ export default {
//
getMonitorIds(build, floor, code) {
getMonitoringList(this.bimModel, build, floor).then((res) => {
// bfHelper.clearDrawableContainer();
const data = res.data.data;
let idArr = [];
@ -2195,6 +2213,159 @@ export default {
});
});
},
//
getAllDevice(){
if(((!this.build && !this.floor) || (this.build == '' && this.floor == '') ) && !this.changeBim){
getMonitoringList(
this.bimModel,
'',
''
).then(res =>{
this.tagsArr = res.data.data
console.log('tagsArr----------------------',this.tagsArr)
this.initMonitTags(this.bimModel)
})
}
},
//
monitorContent(id, status) {
//
let content1 = `<div class="leadTips" style="transform: translateY(-40px);">
<div style="display: flex;width:max-content">
<img id='minitoring${id}' class = 'montorImg' src="${require(status == 90000
? "../../../public/img/monitoring/electricity/camera11.png"
: status == 90001
? "../../../public/img/monitoring/electricity/camera-off.png"
: "../../../public/img/monitoring/electricity/camera-bj.png")}" style="width:40px;height:40px;"/>
</div>
</div>`;
return content1;
},
initMonitTags(bimModel) {
console.log('bimType-----------------------------',this.$refs.clickcp.type)
if(this.$refs.clickcp.type != 'floor'){
//
for (let i = 0; i < this.tagsArr.length; i++) {
if(this.tagsArr[i].modelId != '' && this.tagsArr[i].modelId != '模型无'){
let id = bfHelper.disposeId(
this.tagsArr[i].area,
this.tagsArr[i].build,
this.tagsArr[i].modelId
);
if (JSON.stringify(bfHelper.getBoxMessage(id, true))) {
let zb = bfHelper.getBoxMessage(id, true).max;
bfHelper.customTag(
zb,
null,
this.monitorContent(id, this.tagsArr[i].status)
);
}
}
}
bfHelper.createClusterItem()
window.addEventListener("click", (e) => {
//
if (e.target.id.indexOf("minitoring") != -1) {
getmonData(this.bimModel, e.target.id.substring(25)).then((res) => {
const data = res.data.data;
this.bjClick(data)
})
// if(this.bimModel == 2){
// getmonData(this.bimModel, e.target.id.substring(10)).then((res) => {
// this.bjClick(data)
// })
// }else{
// getmonData(this.bimModel, e.target.id.substring(25)).then((res) => {
// const data = res.data.data;
// this.bjClick(data)
// // if (res.data.data.status != 90001) {
// // console.log('data-----------------',data)
// // id = bfHelper.disposeId(data.area, data.build, data.modelId)
// // this.addLabel(
// // id,
// // data.name,
// // data.status,
// // data.location,
// // data.dataNum
// // );
// // this.$refs.clickcp.active = commonValue.activeValue(
// // Number(data.build),
// // Number(data.floored)
// // );
// // this.$refs.clickcp.tower = commonValue.towerValue(data.build);
// // let camera = bfHelper.cameraPosition[Number(data.build) - 1];
// // window.sessionStorage.setItem("camera", JSON.stringify(camera));
// // if (data.build == "00") {
// // bfHelper.navigationMap(
// // ".mapDom",
// // require("../../../public/img/monitoring/mapviewer/total.png"),
// // 8,
// // 1
// // );
// // this.buildMessage = "";
// // bfHelper.lookPipeline(null, null, this.condition, "");
// // } else if (data.build == "07") {
// // bfHelper.navigationMap(
// // ".mapDom",
// // require("../../../public/img/monitoring/mapviewer/electricity7b.png"),
// // 7,
// // 1
// // );
// // this.buildMessage = "";
// // let camera = bfHelper.cameraPosition[9];
// // window.sessionStorage.setItem("camera", JSON.stringify(camera));
// // bfHelper.lookPipeline2(
// // this.condition,
// // bfHelper.equipmentCopColors[0],
// // 9,
// // null,
// // "",
// // null,
// // null,
// // true
// // );
// // } else {
// // bfHelper.navigationMap(
// // ".mapDom",
// // require("../../../public/img/monitoring/mapviewer/monitor" +
// // Number(data.build) +
// // "b" +
// // Number(data.floored) +
// // "f.png"),
// // Number(data.build),
// // Number(data.floored)
// // );
// // this.buildMessage =
// // Number(data.build) + "" + Number(data.floored) + "";
// // // let camera = bfHelper.cameraPosition[Number(data.build) - 1];
// // // window.sessionStorage.setItem("camera", JSON.stringify(camera));
// // bfHelper.lookPipeline2(
// // this.condition,
// // bfHelper.equipmentCopColors[0],
// // data.build - 1,
// // Number(data.floored),
// // "",
// // null,
// // null,
// // true
// // );
// // }
// // bfHelper.setOpacityFun(false);
// // } else {
// // this.$message.warning("线");
// // }
// })
// }
}
})
}
},
},
};
</script>

@ -46,41 +46,52 @@
</template>
<script>
import { mapGetters } from "vuex";
export default {
data() {
return {};
},
watch: {
$route(to, from) {
if (
this.$route.path == "/opsVisualization/tuobu" ||
this.$route.path == "/opsVisualization/systemMonitoring"
) {
document.getElementsByClassName(
"el-submenu__title"
)[0].style.background =
"linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
document.getElementsByClassName(
"el-submenu__title"
)[1].style.background = "#1E283D";
} else if (
this.$route.path == "/opsVisualization/alarmProcess" ||
this.$route.path == "/opsVisualization/serviceDataOAM"
) {
document.getElementsByClassName(
"el-submenu__title"
)[1].style.background =
"linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
document.getElementsByClassName(
"el-submenu__title"
)[0].style.background = "#1E283D";
}
},
// $route(to, from) {
// if (
// this.$route.path == "/opsVisualization/index" ||
// this.$route.path == "/opsVisualization/tuobu" ||
// this.$route.path == "/opsVisualization/systemMonitoring"
// ) {
// let menu = this.menu.slice(-1) //
// this.$store.commit('SET_MENU', menu); //
// document.getElementsByClassName(
// "el-submenu__title"
// )[0].style.background =
// "linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
// document.getElementsByClassName(
// "el-submenu__title"
// )[1].style.background = "#1E283D";
// //
// // document.getElementsByClassName("el-menu-item")[0].style.background = "linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
// } else if (
// this.$route.path == "/opsVisualization/alarmProcess" ||
// this.$route.path == "/opsVisualization/serviceDataOAM"
// ) {
// //
// // document.getElementsByClassName(
// // "el-submenu__title"
// // )[1].style.background =
// // "linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
// document.getElementsByClassName(
// "el-submenu__title"
// )[0].style.background = "#1E283D";
// }
// },
},
computed: {},
computed: mapGetters(["isMenu", "isLock", "isCollapse", "website", "menu"]),
mounted() {
document.getElementsByClassName("el-submenu__title")[0].style.background =
"linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
// document.getElementsByClassName("el-submenu__title")[0].style.background =
// "linear-gradient(90deg, #07a7ff 0%, #142a43 100%)";
// // document.getElementsByClassName("el-menu-item")[0].style.background = "linear-gradient(90deg, #07a7ff 0%, #142a43 100%)"; //
let menu = this.menu.slice(-1) //
this.$store.commit('SET_MENU', menu); //
},
methods: {},
};

@ -1,11 +1,17 @@
<template>
<div class="menu-wrapper">
<template v-for="item in menu">
<el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item)" :index="item[pathKey]"
<el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item) && item.path.indexOf('opsVisualization') == -1" :index="item[pathKey]"
@click="open(item)" :key="item[labelKey]" :class="{'is-active':vaildActive(item)}">
<!-- <i :class="item[iconKey]"></i> -->
<span slot="title" :alt="item[pathKey]">{{generateTitle(item)}}</span>
</el-menu-item>
<!-- 单独部署监控服务时注释此代码 el-menu-item -->
<el-menu-item v-if="validatenull(item[childrenKey]) && vaildRoles(item) && item.path.indexOf('opsVisualization') != -1" :index="item[pathKey]"
@click="open(item)" :key="item[labelKey]" >
<!-- <i :class="item[iconKey]"></i> -->
<span slot="title" :alt="item[pathKey]">{{generateTitle(item)}}</span>
</el-menu-item>
<el-submenu v-else-if="!validatenull(item[childrenKey])&&vaildRoles(item)" :index="item[pathKey]"
:key="item[labelKey]">
<template slot="title">
@ -101,6 +107,7 @@
const groupFlag = (item["group"] || []).some(ele =>
this.$route.path.includes(ele)
);
if(item.path == '/opsVisualization/index') return false //
return this.nowTagValue === item[this.pathKey] || groupFlag;
},
vaildRoles(item) {
@ -116,6 +123,7 @@
}
},
open(item) {
if(this.menu.length == 1 && this.menu[0].name == '监控管理') return //
if (this.screen <= 1) this.$store.commit("SET_COLLAPSE");
if (this.validIsOpen(item)) {
window.open(item[this.pathKey]);
@ -173,4 +181,4 @@
background: #ffffff;
position: absolute;
}
</style>
</style>

@ -45,18 +45,13 @@ router.beforeEach((to, from, next) => {
const meta = to.meta || router.$avueRouter.meta || {};
const i18n = to.query.i18n;
if (to.query.target) {
console.log('1111111111111111111111111')
window.open(value)
} else if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
console.log('4444444444444444444444444444',to,from)
if(from.path.indexOf('/garden/index') != -1){
if(to.path.indexOf('sourceAnaly/index') == -1){
console.log('2222222222222222222222222222222222')
const routerUrl = router.resolve({ path: to.path, query: to.query,params:to.params });
window.open(routerUrl.href,'_blank')
}else{
console.log('333333333333333333333333333333333')
next()
}
}else if(from.path.indexOf('sourceAnaly/index') != -1){
@ -77,7 +72,10 @@ router.beforeEach((to, from, next) => {
}else{
next()
}
console.log('5555555555555555555555555555555555',to,from)
// 单独部署监控模块删除此代码
if(to.path.indexOf('/opsVisualization/index') != -1){ // 单独部署监控模块删除此代码
next('/opsVisualization/tuobu') // 单独部署监控模块删除此代码
} // 单独部署监控模块删除此代码
}
// store.commit('ADD_TAG', {
// label: label,

@ -222,8 +222,14 @@ const user = {
setStore({ name: 'menuAll', content: state.menuAll })
},
SET_MENU: (state, menu) => {
state.menu = menu
setStore({ name: 'menu', content: state.menu })
if(window.location.href.indexOf('opsVisualization') != -1){ // 单独部署监控服务时注释此代码
state.menu = menu.slice(-1) // 单独部署监控服务时注释此代码
setStore({ name: 'menu', content: state.menu }) // 单独部署监控服务时注释此代码
}else{ // 单独部署监控服务时注释此代码
state.menu = menu
setStore({ name: 'menu', content: state.menu })
} // 单独部署监控服务时注释此代码
},
SET_REFRESH_TOKEN: (state, refreshToken) => {
setRefreshToken(refreshToken)

@ -2860,6 +2860,7 @@ const loadModel = (i) => {
store.commit("modification", false);
modelNum = i;
BimfaceLoaderConfig = new BimfaceSDKLoaderConfig();
// BimfaceLoaderConfig.APIHost = "http://192.168.1.6:8001";
// BimfaceLoaderConfig.APIHost = "http://10.90.100.203:8080";
BimfaceLoaderConfig.dataEnvType = BimfaceEnvOption.Local;
BimfaceLoaderConfig.sdkPath = "static/jssdk@3.6.293/jssdk";
@ -2870,6 +2871,11 @@ const loadModel = (i) => {
// ? "http://10.90.100.203:8080/ywq/viewToken.json"
// : "http://10.90.100.203:8080/tt/viewToken.json";
// BimfaceLoaderConfig.path =
// i == 1
// ? "http://192.168.1.6:8001/ywq/viewToken.json"
// : "http://192.168.1.6:8001/tt/viewToken.json";
BimfaceSDKLoader.load(BimfaceLoaderConfig, onSDKLoadSucceeded, (err) => {
console.log('err', err)
});
@ -3237,6 +3243,7 @@ const clearTags = () => {
// 构造聚合标签容器配置项
const createClusterItem = () => {
console.log('创建聚合标签---------------------------------------')
let clusterContainerConfig =
new Glodon.Bimface.Plugins.Cluster.ClusterContainerConfig();
clusterContainerConfig.viewer = viewer3D;
@ -3255,16 +3262,73 @@ const createClusterItem = () => {
clusterItemConfig
);
// 定义聚合标签的点击事件
clusterItem.onClick(function (data) {
let boundingBox = data.boundingBox;
viewer3D.zoomToBoundingBox(boundingBox, 5);
clusterItem.onClick(function() {
// // 销毁聚合标签,展示所有原始标签
clusterContainer.clear();
// 计算标签群包围盒并缩放视角
const bbox = calculateTagsBoundingBox(drawableContainer.getAllItems());
viewer3D.zoomToBoundingBox(bbox);
});
// clusterItemConfig.clusterClickCallback = handleClusterClick; // 点击事件绑定
// clusterItem.onClick(function (data) {
// console.log('data----------------------',data)
// // // let boundingBox = data.boundingBox;
// // // viewer3D.zoomToBoundingBox(boundingBox, -2);
// // // viewer3D.zoomIn();
// let position = data.position
// const scaleFactor = 1.5; // 缩放系数(调整可视范围大小)
// // 计算边界框的min/max点(以标签位置为中心扩展)
// const maxPoint = {
// x: position.x * scaleFactor,
// y: position.y * scaleFactor,
// z: position.z * scaleFactor
// };
// const minPoint = {
// x: position.x / scaleFactor,
// y: position.y / scaleFactor,
// z: position.z / scaleFactor
// };
// // 构建边界框对象
// const boundingBox = { max: maxPoint, min: minPoint };
// // 执行视角缩放
// viewer3D.zoomToBoundingBox(boundingBox);
// });
clusterContainer.addCluster(clusterItem);
clusterContainer.update();
// 渲染3D模型
render();
};
const calculateTagsBoundingBox = (tags) => {
let minX = Infinity, minY = Infinity, minZ = Infinity;
let maxX = -Infinity, maxY = -Infinity, maxZ = -Infinity;
tags.forEach(tag => {
const pos = tag.worldPosition;
minX = Math.min(minX, pos.x);
minY = Math.min(minY, pos.y);
minZ = Math.min(minZ, pos.z);
maxX = Math.max(maxX, pos.x);
maxY = Math.max(maxY, pos.y);
maxZ = Math.max(maxZ, pos.z);
});
return {
min: {x: minX, y: minY, z: minZ},
max: {x: maxX, y: maxY, z: maxZ}
};
}
// 隐藏聚合标签
const clearCluster = () => {
clusterContainer && clusterContainer.clear(); // 清除聚合标签
}
const getAll = () => {
return drawableContainer.getAllItems();
};
@ -3396,6 +3460,10 @@ const getExternalComponentId = (name) => {
return extObjMng.getObjectIdByName(name);
};
const getNameIds = (name) =>{
return extObjMng.getObjectIdsByName(name)
}
// 设置指定外部构件z坐标位置
const setExternalComponentZ = (name, offsetZ) => {
extObjMng.offsetZ(getExternalComponentId(name), offsetZ);
@ -3572,6 +3640,8 @@ const setBimBg = (type) => {
// 查看管道
const lookPipeline = (conditions, color, conditions2, type, type1) => {
console.log('管到type----------------------------',type)
console.log('管道type1---------------------------',type1)
let wallColor = new Glodon.Web.Graphics.Color("#09aef2", 0.2);
let floorColor = new Glodon.Web.Graphics.Color("#066fab", 0.2);
// 隐藏全部构件
@ -5986,6 +6056,8 @@ export {
getselectGather,
getBoxMessage,
customTag,
createClusterItem,
clearCluster,
clearTags,
setFlicker,
setColor,
@ -5997,6 +6069,7 @@ export {
setExternalComponentPosition,
setExternalComponentScale,
getExternalComponentId,
getNameIds,
setExternalComponentZ,
setGlowEffectById,
clearGlowEffect,

@ -200,10 +200,11 @@ export default {
// bfHelper.mapDestroy();
// }
console.log('模型切换')
console.log('模型切换=============',i)
window.sessionStorage.removeItem('build');
window.sessionStorage.removeItem('floor');
window.sessionStorage.removeItem('ttbuild');
bfHelper.clearCluster()
bfHelper.destroyViewer(); //
bfHelper.loadModel(i);
// bfHelper.resetStatus(null,this.cameraState1[i]); //

Loading…
Cancel
Save