Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/request/map.js
#	src/views/BI/components/bottom_options.vue
#	src/views/BI/js/map.js
pull/1/head
fangjiakai 2024-02-03 10:19:12 +08:00
commit f4490f70b7
6 changed files with 148 additions and 5 deletions

View File

@ -9,6 +9,7 @@ export const getUserByCardNo = (params) =>
export const getEightWorks = (params) => post("/map/getEightWorks", params); export const getEightWorks = (params) => post("/map/getEightWorks", params);
export const getHotworkList = (params) => post("/map/getHotworkList", params); export const getHotworkList = (params) => post("/map/getHotworkList", params);
export const getCameraList = (params) => post("/map/getCameraList", params);
export const getConfinedspaceWorkList = (params) => export const getConfinedspaceWorkList = (params) =>
post("/map/getConfinedspaceWorkList", params); post("/map/getConfinedspaceWorkList", params);

View File

@ -43,6 +43,7 @@ import {
handleConfinedspaceWork, handleConfinedspaceWork,
handleHighWork handleHighWork
} from "@/views/BI/js/eight_work.js"; } from "@/views/BI/js/eight_work.js";
import { handleCamera } from "@/views/BI/js/camera.js";
const props = defineProps({ const props = defineProps({
leftCurrentComponent: { leftCurrentComponent: {
@ -113,6 +114,7 @@ const bottomOptionsList = [
).href, ).href,
title: "电子围栏", title: "电子围栏",
type: "electronicFence", type: "electronicFence",
check: false,
action: handleFence, action: handleFence,
}, },
], ],
@ -225,8 +227,9 @@ const bottomOptionsList = [
import.meta.url import.meta.url
).href, ).href,
title: "摄像头", title: "摄像头",
type: "camera", type: "workSafelyCamera",
check: false, check: false,
action: handleCamera,
}, },
], ],
}, },
@ -342,7 +345,7 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
data.bottomOptionsList[index].list[index1].check = data.bottomOptionsList[index].list[index1].check =
!data.bottomOptionsList[index].list[index1].check; !data.bottomOptionsList[index].list[index1].check;
data.bottomOptionsList[index].list[index1].action( data.bottomOptionsList[index].list[index1].action(
data.bottomOptionsList[index].list[index1].check data.bottomOptionsList[index].list[index1].check,item1.type
); );
}; };
</script> </script>

View File

@ -0,0 +1,91 @@
<template>
<el-dialog v-model="visible" title="摄像头">
<table>
<thead>
<tr>
<td colspan="10" style="border: none">
<el-divider content-position="left">
{{ data.info.cameraType }}
</el-divider>
<div class="tr">摄像头名称:{{ data.info.VIDEONAME }}</div>
</td>
</tr>
</thead>
<tr>
<td class="title">摄像头编码</td>
<td>{{ data.info.CODE }}</td>
</tr>
<tr>
<td colspan="10">
<div class="video">
<iframe
:src="data.info.VIDEOURL"
style="width: 100%; height: 100%"
/>
</div>
</td>
</tr>
</table>
<template #footer>
<el-button @click="fnClose"></el-button>
</template>
</el-dialog>
</template>
<script setup>
import { useVModels } from "@vueuse/core";
import { reactive, onMounted } from "vue";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
pd: {
type: Object,
required: true,
default: () => ({}),
},
});
const data = reactive({
info: {},
});
onMounted(() => {
data.info = props.pd.pd;
});
const emits = defineEmits(["update:visible"]);
const { visible } = useVModels(props, emits);
const fnClose = () => {
visible.value = false;
};
</script>
<style lang="scss" scoped>
table {
border-collapse: collapse;
width: 100%;
.video {
width: 100%;
height: 500px;
border: 2px solid #11acd7;
border-radius: 4px;
}
td,
th {
border: 1px solid var(--el-border-color);
padding: 8px 12px;
font-size: 14px;
}
.title {
background: var(--el-fill-color-light);
width: 200px;
text-align: center;
}
}
</style>

View File

@ -36,8 +36,8 @@
</div> </div>
</div> </div>
<div class="time">{{ item.WARNING_TIME }}</div> <div class="time">{{ item.WARNING_TIME }}</div>
<div class="text">{{ "摄像头名称" + item.VIDEONAME }}</div> <div class="text">{{ "摄像头名称" + item.VIDEONAME }}</div>
<div class="text">{{ "摄像头编号" + item.CODE }}</div> <div class="text">{{ "摄像头编号" + item.CODE }}</div>
</div> </div>
</div> </div>
</div> </div>

37
src/views/BI/js/camera.js Normal file
View File

@ -0,0 +1,37 @@
import { getCameraList } from "@/request/map";
import { addEntity } from "./map.js";
let cameraList = [];
export const handleCamera = (b, type) => {
if (b) {
showCameraList(type);
} else {
if (cameraList) {
cameraList.children.forEach((e) => {
e.destroy();
});
}
}
};
const showCameraList = async (mapPointName) => {
cameraList = new window.CustomCesium.GroupModel(mapPointName);
const { varList } = await getCameraList({ CAMREA_TYPE: mapPointName });
const NAME_POINT = {
workSafelyCamera: "八项作业摄像头",
};
varList.forEach(({ VIDEOMANAGER_ID, VIDEONAME, lon, lat, alt }) => {
addEntity(
cameraList,
VIDEOMANAGER_ID,
NAME_POINT[mapPointName],
VIDEONAME,
lon,
lat,
alt,
"/src/assets/images/map/bottom/ico12_on.png"
);
});
cameraList.show(true);
};

View File

@ -3,6 +3,7 @@ import userDialog from "../components/dialog/user_dialog.vue";
import hotworkDialog from "../components/dialog/hotwork_dialog.vue"; import hotworkDialog from "../components/dialog/hotwork_dialog.vue";
import confinedspaceDialog from "../components/dialog/confinedspace_dialog.vue"; import confinedspaceDialog from "../components/dialog/confinedspace_dialog.vue";
import highworkDialog from "../components/dialog/highwork_dialog.vue"; import highworkDialog from "../components/dialog/highwork_dialog.vue";
import cameraDialog from "../components/dialog/camera_dialog.vue";
import { Loadglb } from "./loadglb.js"; import { Loadglb } from "./loadglb.js";
import { getUserByCardNo } from "@/request/map"; import { getUserByCardNo } from "@/request/map";
@ -11,6 +12,7 @@ import {
getHighWorkView, getHighWorkView,
getHotWorkView, getHotWorkView,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
import { getVideoManagerView } from "@/request/video_manager.js";
// const mapUrl = // const mapUrl =
// "https://gac-geo.googlecnapps.cn/maps/vt?lyrs=s&x={x}&y={y}&z={z}"; // "https://gac-geo.googlecnapps.cn/maps/vt?lyrs=s&x={x}&y={y}&z={z}";
const loadMap = 2; const loadMap = 2;
@ -67,7 +69,6 @@ const handleMouseClick = () => {
const $mouse = new window.CustomCesium.Mouse(window.$icy); const $mouse = new window.CustomCesium.Mouse(window.$icy);
// 隐藏逻辑 // 隐藏逻辑
$mouse.mouseLeft((model) => { $mouse.mouseLeft((model) => {
console.log(model);
if (model._name === "建筑") { if (model._name === "建筑") {
clickBuilding(model); clickBuilding(model);
} }
@ -83,6 +84,9 @@ const handleMouseClick = () => {
if (model._name.indexOf("高处作业") > -1) { if (model._name.indexOf("高处作业") > -1) {
clickHighwork(model); clickHighwork(model);
} }
if (model._name.indexOf("八项作业摄像头") > -1) {
clickCamera(model);
}
}); });
}; };
@ -196,6 +200,13 @@ const clickPerson = async (model) => {
const { pd } = await getUserByCardNo({ CARDNO: cacrdNo }); const { pd } = await getUserByCardNo({ CARDNO: cacrdNo });
handleDialog(userDialog, pd); handleDialog(userDialog, pd);
}; };
const clickCamera = async (model) => {
const id = model._id;
const pd = await getVideoManagerView({ VIDEOMANAGER_ID: id });
pd.pd.cameraType = model._name;
console.log(pd);
handleDialog(cameraDialog, pd);
};
const clickHotwork = async (model) => { const clickHotwork = async (model) => {
const id = model._id; const id = model._id;