七参数大屏-塔吊监测-升降机监测监控对接

This commit is contained in:
jxj_yjl 2023-07-21 14:52:03 +08:00
parent 67f6aea684
commit 212dee3e70
13 changed files with 175 additions and 113 deletions

View File

@ -14,9 +14,12 @@
<div id="domId" style="width: 100%; height: 98vh"></div> <div id="domId" style="width: 100%; height: 98vh"></div>
<script src="https://static.bimface.com/api/BimfaceSDKLoader/BimfaceSDKLoader@latest-release.js" charset="utf-8"></script> <script src="https://static.bimface.com/api/BimfaceSDKLoader/BimfaceSDKLoader@latest-release.js" charset="utf-8"></script>
<script> <script>
var token = JSON.parse(localStorage.getItem('bimToken'));
console.log('取到的token',token);
let viewer3D; let viewer3D;
let app; let app;
let viewToken = "044bb2418cfd43268ec175abae26dc62"; let viewToken = token;
console.log('viewToken',viewToken);
let loaderConfig = new BimfaceSDKLoaderConfig(); let loaderConfig = new BimfaceSDKLoaderConfig();
loaderConfig.viewToken = viewToken; loaderConfig.viewToken = viewToken;
BimfaceSDKLoader.load(loaderConfig, successCallback, failureCallback); BimfaceSDKLoader.load(loaderConfig, successCallback, failureCallback);
@ -33,6 +36,7 @@
console.log(error); console.log(error);
} }
</script> </script>
</body> </body>
</html> </html>

View File

@ -43,6 +43,11 @@ export const getRelatedInfoApi = (params: {}) => {
return http.get(BASEURL + `/xmgl/lifter/getRelatedInfo`, params); return http.get(BASEURL + `/xmgl/lifter/getRelatedInfo`, params);
}; };
// 通过id查询升降机基本信息信息
export const getLifterQueryByIdApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/lifter/queryById`, params);
};

View File

@ -35,3 +35,9 @@ export const getRelatedInfoApi = (params: {}) => {
export const getNewestDataApi = (params: {}) => { export const getNewestDataApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/towerCurrentData/getNewestTowerCurrentData`, params); return http.post(BASEURL + `/xmgl/towerCurrentData/getNewestTowerCurrentData`, params);
}; };
// 查询启用的视频配置
export const getUseProjectVideoConfigApi = (params: {}) => {
return http.post(BASEURL + `/xmgl/projectVideoConfig/getUseProjectVideoConfig`, params);
};

View File

@ -10,24 +10,20 @@ import { getSelectProjectBimfaceList, getViewTokenByFileId } from "@/api/modules
import { ref, onMounted } from "vue"; import { ref, onMounted } from "vue";
const store = GlobalStore(); const store = GlobalStore();
const url = ref(""); const url = ref("");
const iframe = ref(null); const token = ref("" as any);
const token = ref("");
// function load() {
// iframe.value.contentWindow.postMessage("Message from parentload complate");
// }
//bim //bim
function getBimfaceList() { function getBimfaceList() {
getSelectProjectBimfaceList({ projectSn: store.sn }).then(res => { getSelectProjectBimfaceList({ projectSn: store.sn }).then(res => {
res.result.page.records.forEach(item => { res.result.page.records.forEach(item => {
if (item.isEnable) { if (item.isEnable) {
token.value = res.result.viewToken; token.value = res.result.viewToken;
console.log("token的值", token); console.log("token的值", token.value);
iframe.value.contentWindow.postMessage({ token }); localStorage.setItem('bimToken', JSON.stringify(token.value));
// getBimfaceToken(item.fileId);
} }
}); });
}); });
} }
//token //token
// function getBimfaceToken(fileId) { // function getBimfaceToken(fileId) {
// getViewTokenByFileId({ projectSn: store.sn, fileId }).then(res => { // getViewTokenByFileId({ projectSn: store.sn, fileId }).then(res => {

View File

@ -17,6 +17,7 @@
</div> </div>
</div> </div>
<div class="decivList"> <div class="decivList">
<el-scrollbar style="height:90%">
<div class="menuDev" v-for="item in deviceData.list" :key="item.id" :class="item.isClosed != 0 ? 'online' : 'offline'"> <div class="menuDev" v-for="item in deviceData.list" :key="item.id" :class="item.isClosed != 0 ? 'online' : 'offline'">
<div class="decName"> <div class="decName">
<span v-show="item.isClosed != 0"><img src="@/assets/images/dustNoise/onlineImg.png" alt="" /></span> <span v-show="item.isClosed != 0"><img src="@/assets/images/dustNoise/onlineImg.png" alt="" /></span>
@ -25,6 +26,9 @@
</div> </div>
<div class="status">{{ item.isClosed != 0 ? "在线" : "离线" }}</div> <div class="status">{{ item.isClosed != 0 ? "在线" : "离线" }}</div>
</div> </div>
</el-scrollbar>
</div> </div>
</div> </div>
</div> </div>
@ -424,30 +428,7 @@ const option = reactive({
} }
] ]
}); });
// let deciData = reactive({
// devicList: [
// {
// decName: "1",
// status: 0
// },
// {
// decName: "2",
// status: 1
// },
// {
// decName: "3",
// status: 0
// },
// {
// decName: "4",
// status: 0
// },
// {
// decName: "5",
// status: 0
// }
// ]
// });
function drawChart() { function drawChart() {
let leftTopEcharts = echarts.init(document.getElementById("topLeftEcharts")); let leftTopEcharts = echarts.init(document.getElementById("topLeftEcharts"));
leftTopEcharts.setOption(option); leftTopEcharts.setOption(option);
@ -562,5 +543,6 @@ onMounted(() => {
} }
} }
} }
} }
</style> </style>

View File

@ -12,13 +12,14 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, onBeforeUnmount, getCurrentInstance, nextTick, watch, Ref } from "vue"; import { ref, onMounted, onBeforeUnmount, getCurrentInstance, nextTick, Ref } from "vue";
import { ElMessage, ElMessageBox, ElStep } from "element-plus"; import { ElMessage } from "element-plus";
import { GlobalStore } from "@/stores"; import { GlobalStore } from "@/stores";
import { useRouter } from "vue-router"; import { getLifterQueryByIdApi } from "@/api/modules/elevator";
const router = useRouter(); import { getUseProjectVideoConfigApi } from "@/api/modules/tower";
import mitts from "@/utils/bus"; //
let shipinList = ref([] as any);
const store = GlobalStore(); const store = GlobalStore();
const parentTitle = ref<string>("");
const playWndBox = ref(null); const playWndBox = ref(null);
let playWndHeight = ref(""); let playWndHeight = ref("");
let playWndWidth = ref(""); let playWndWidth = ref("");
@ -27,47 +28,45 @@ let initCount = ref(0);
let oWebControl = ref(null); let oWebControl = ref(null);
let cameraIndexCode = ref<Array<string>>([]); let cameraIndexCode = ref<Array<string>>([]);
let objData = ref({ let objData = ref({
appkey: "24017757", //appkey appkey: "23914849", //appkey
ip: "182.101.141.23", //ip ip: "221.12.137.200", //ip
secret: "VJz0FbzmE6drPQ7egsBi", //secret secret: "UV4xyujBtOGA4D0kvXG7", //secret
port: 18443, port: 444,
playMode: 0, // 0 1 playMode: 0, // 0 1
layout: "1x1" //16 layout: "1x1" //16
}); });
let eletorSelectId = ref("" as any);
const changeTreeFilter = async (item: { //
data: { code: string | null; title: any; children: any[] }; const getTowerDetail = async () => {
parent: { data: { title: any } }; const res: any = await getLifterQueryByIdApi({
}) => { id: eletorSelectId.value
console.log("我是你要的数据", item); });
// if (res.result.videoList.length > 0) {
cameraIndexCode.value = [item.data.code]; cameraIndexCode.value = res.result.videoList[0].serialNumber;
parentTitle.value = item.parent.data.title || item.data.title; previewVideo(cameraIndexCode.value);
}; } else {
// cameraIndexCode.value = "";
const getVideo = async () => { previewVideo();
// await sendRequest({ code: cameraIndexCode.value });
// await getpreviewURL({ cameraIndexCode: cameraIndexCode.value });
};
//
watch(
() => store.editPassword,
val => {
val ? oWebControl.JS_HideWnd() : oWebControl.JS_ShowWnd();
} }
// { };
// immediate: true //
// } const gerEletorUserVideo = async () => {
); const res = await getUseProjectVideoConfigApi({
projectSn: store.sn
/** 设备列表的点击操作 */ });
objData.value.appkey = res.result.appId;
// window.addEventListener("keyup", () => { objData.value.ip = res.result.account;
// oWebControl.JS_CuttingPartWindow(0, 0, 20, 20); objData.value.secret = res.result.appSecret;
// }); objData.value.port = res.result.password;
await getTowerDetail();
};
onMounted(async () => { onMounted(async () => {
mitts.on("elevaTorSelectId", e => {
eletorSelectId.value = e;
gerEletorUserVideo();
});
// ee // ee
const pageInstance = getCurrentInstance(); const pageInstance = getCurrentInstance();
// dom // dom
@ -79,7 +78,6 @@ onMounted(async () => {
window.addEventListener("scroll", () => { window.addEventListener("scroll", () => {
if (oWebControl.value == undefined) { if (oWebControl.value == undefined) {
oWebControl.JS_Resize(tagDomObj?.clientWidth, tagDomObj?.clientHeight); oWebControl.JS_Resize(tagDomObj?.clientWidth, tagDomObj?.clientHeight);
// setWndCover();
} }
}); });
@ -95,8 +93,8 @@ onMounted(async () => {
}); });
// //
nextTick(() => { nextTick(async () => {
initPlugin(); await initPlugin();
}); });
}); });
@ -213,6 +211,7 @@ const init = (callback: (() => void) | undefined) => {
argument: JSON.stringify({ argument: JSON.stringify({
appkey: appkey, //APIappkey appkey: appkey, //APIappkey
secret: secret, //APIsecret secret: secret, //APIsecret
// ip: ip + ":" + port, //APIIP
ip: ip, //APIIP ip: ip, //APIIP
playMode: playMode, // playMode: playMode, //
port: port, // port: port, //
@ -264,6 +263,7 @@ const getPubKey = (callback: { (): void; (): void }) => {
// //
// //
const previewVideo = (data: string | null) => { const previewVideo = (data: string | null) => {
console.log("监控点编号值", data);
let cameraIndexCode = data; // let cameraIndexCode = data; //
let streamMode = 0; // 0-1- let streamMode = 0; // 0-1-
let transMode = 1; // 0-UDP1-TCP let transMode = 1; // 0-UDP1-TCP
@ -287,6 +287,7 @@ const previewVideo = (data: string | null) => {
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.main { .main {
border-radius: 8px; border-radius: 8px;

View File

@ -121,6 +121,10 @@ onMounted(() => {
.text2 { .text2 {
font-size: calc(100vw * 12 / 1920); font-size: calc(100vw * 12 / 1920);
color: #65d7f9; color: #65d7f9;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-left: 9%;
} }
} }
} }

View File

@ -9,7 +9,7 @@
:key="index" :key="index"
:label="item.devName" :label="item.devName"
:value="item.id" :value="item.id"
@click="checkItem(item.devSn)" @click="checkItem(item)"
/> />
</el-select> </el-select>
</div> </div>
@ -127,6 +127,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import mitts from "@/utils/bus"; //
import Monitor from "@/views/sevenLargeScreen/elevatorMonitoring/eleMonitor.vue"; import Monitor from "@/views/sevenLargeScreen/elevatorMonitoring/eleMonitor.vue";
import { import {
getLifterListApi, getLifterListApi,
@ -143,7 +144,13 @@ let lifterDevSn = ref("" as any);
// //
function checkItem(val: any) { function checkItem(val: any) {
lifterDevSn.value = val; console.log('下拉框选中',val);
lifterDevSn.value = val.devSn;
mitts.emit("elevaTorSelectId", val.id);
console.log('发送的id',val.id);
getLifterList() getLifterList()
} }

View File

@ -75,13 +75,13 @@
>{{ towerSituationData.devCount.devOnline }}/{{ towerSituationData.devCount.devNum }}</span >{{ towerSituationData.devCount.devOnline }}/{{ towerSituationData.devCount.devNum }}</span
> >
</div> </div>
<div class="towerList"> <el-scrollbar style="height: 50%">
<div class="menStyleList" v-for="item in towerSituationData.deviceList" :key="item.id"> <div class="menStyleList" v-for="item in towerSituationData.deviceList" :key="item.id">
<span class="text">{{ item.devName }}</span> <span class="text">{{ item.devName }}</span>
<span class="devState" v-if="item.devOnline == 1" style="color: #82fbea"> 在线 </span> <span class="devState" v-if="item.devOnline == 1" style="color: #82fbea"> 在线 </span>
<span class="devState" v-else style="color: #ec6266"> 离线 </span> <span class="devState" v-else style="color: #ec6266"> 离线 </span>
</div> </div>
</div> </el-scrollbar>
</div> </div>
</div> </div>
</div> </div>
@ -193,8 +193,8 @@ onMounted(async () => {
} }
} }
} }
.towerList { // .towerList {
overflow: scroll; // overflow: scroll;
height: 50px; // height: 50px;
} // }
</style> </style>

View File

@ -15,10 +15,9 @@
import { ref, onMounted, onBeforeUnmount, getCurrentInstance, nextTick, Ref } from "vue"; import { ref, onMounted, onBeforeUnmount, getCurrentInstance, nextTick, Ref } from "vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { GlobalStore } from "@/stores"; import { GlobalStore } from "@/stores";
import { selectProjectVideoListApi} from "@/api/modules/video"; import { getQueryByIdApi, getUseProjectVideoConfigApi } from "@/api/modules/tower";
import mitts from "@/utils/bus"; //
let shipinList = ref([] as any); let shipinList = ref([] as any);
const store = GlobalStore(); const store = GlobalStore();
const playWndBox = ref(null); const playWndBox = ref(null);
let playWndHeight = ref(""); let playWndHeight = ref("");
@ -35,30 +34,43 @@ let objData = ref({
playMode: 0, // 0 1 playMode: 0, // 0 1
layout: "1x1" //16 layout: "1x1" //16
}); });
let selectId = ref("" as any);
// // //
// const checkVideo = async (item: any) => { const getTowerDetail = async () => {
// cameraIndexCode.value = item.serialNumber; const res: any = await getQueryByIdApi({
// previewVideo(cameraIndexCode.value); id: selectId.value
// }; });
// if (res.result) {
const getVideoList = async () => { cameraIndexCode.value = res.result.videoList[0].serialNumber;
const res = await selectProjectVideoListApi({
console.log("塔吊监控点", cameraIndexCode.value);
previewVideo(cameraIndexCode.value);
}
};
//
const gerUserVideo = async () => {
const res = await getUseProjectVideoConfigApi({
projectSn: store.sn projectSn: store.sn
}); });
shipinList.value = res.result.videoList[0].list; console.log("获取塔吊视频播放配置", res);
objData.value.appkey = res.result.videoList[0].list[0].appId; objData.value.appkey = res.result.appId;
objData.value.ip = res.result.videoList[0].list[0].account; objData.value.ip = res.result.account;
objData.value.secret = res.result.videoList[0].list[0].appSecret; objData.value.secret = res.result.appSecret;
objData.value.port = res.result.videoList[0].list[0].password; objData.value.port = res.result.password;
cameraIndexCode.value = res.result.videoList[0].list[0].serialNumber; await getTowerDetail();
console.log("视频列表", res);
previewVideo(res.result.videoList[0].list[0].serialNumber);
}; };
let serialNumberValue=ref("" as any)
onMounted(async () => { onMounted(async () => {
setTimeout(() => { mitts.on("serialNumberId", val => {
getVideoList(); previewVideo(val);//
}, 1500); serialNumberValue.value=val
});
mitts.on("selectId", e => {
selectId.value = e;
gerUserVideo();
});
// ee // ee
const pageInstance = getCurrentInstance(); const pageInstance = getCurrentInstance();
// dom // dom
@ -255,6 +267,8 @@ const getPubKey = (callback: { (): void; (): void }) => {
// //
// //
const previewVideo = (data: string | null) => { const previewVideo = (data: string | null) => {
console.log("监控点编号值", data);
let cameraIndexCode = data; // let cameraIndexCode = data; //
let streamMode = 0; // 0-1- let streamMode = 0; // 0-1-
let transMode = 1; // 0-UDP1-TCP let transMode = 1; // 0-UDP1-TCP

View File

@ -191,6 +191,8 @@
import Monitor from "@/views/sevenLargeScreen/towerCraneMonitoring/monitor.vue"; import Monitor from "@/views/sevenLargeScreen/towerCraneMonitoring/monitor.vue";
import { onMounted, ref } from "vue"; import { onMounted, ref } from "vue";
// import * as echarts from "echarts"; // import * as echarts from "echarts";
import mitts from "@/utils/bus"; //
import { import {
getQueryByIdApi, getQueryByIdApi,
getTowerNumAndAlarmApi, getTowerNumAndAlarmApi,
@ -227,7 +229,9 @@ function moveAnimation() {
// //
function selectTower(e: any) { function selectTower(e: any) {
console.log("选中", e); mitts.emit("selectId", e);
console.log('发送的id',e);
getTowerDetail(); getTowerDetail();
getTowerData(); getTowerData();
} }
@ -242,6 +246,7 @@ const getTowerDetail = async () => {
if (res.result) { if (res.result) {
towerDetailData.value = res.result; towerDetailData.value = res.result;
towerDevSn.value = res.result.devSn; towerDevSn.value = res.result.devSn;
mitts.emit("serialNumberId", res.result.videoList[0].serialNumber);
console.log("塔吊信息详情", res.result); console.log("塔吊信息详情", res.result);
} }
}; };

View File

@ -26,6 +26,10 @@
<div>{{ item.releaseOperation }}</div> <div>{{ item.releaseOperation }}</div>
<div>{{ item.vehicleStateName }}</div> <div>{{ item.vehicleStateName }}</div>
</div> </div>
<div class="notoDta" v-if="vehicleData.length == 0">
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -157,7 +161,7 @@ const list = reactive([
} }
]); ]);
let vehicleData = ref(null as any); let vehicleData = ref([] as any);
const getVehicleList = async () => { const getVehicleList = async () => {
const res: any = await getEntryAndExitRecordsApi({ const res: any = await getEntryAndExitRecordsApi({
projectSn: store.sn projectSn: store.sn
@ -235,4 +239,19 @@ onMounted(async () => {
} }
} }
} }
.notoDta {
top: 73%;
width: 12%;
left: 44%;
position: absolute;
img {
width: 40%;
margin: 5% 30%;
}
p {
color: #fff;
font-size: calc(100vw * 14 / 1920);
margin: -6% 37%;
}
}
</style> </style>

View File

@ -21,6 +21,10 @@
</div> </div>
</div> </div>
</el-scrollbar> </el-scrollbar>
<div class="notoDta" v-if="shipinList.length == 0">
<img src="@/assets/images/noData.png" alt="" />
<p>暂无数据</p>
</div>
</div> </div>
</div> </div>
<div class="right"> <div class="right">
@ -63,7 +67,7 @@ let objData = ref({
secret: "UV4xyujBtOGA4D0kvXG7", //secret secret: "UV4xyujBtOGA4D0kvXG7", //secret
port: 444, port: 444,
playMode: 0, // 0 1 playMode: 0, // 0 1
layout: "2x2" //16 layout: "1x1" //16
}); });
// //
@ -419,5 +423,20 @@ const previewVideo = (data: string | null) => {
} }
} }
} }
.notoDta {
top: 50%;
width: 12%;
left: 2%;
position: absolute;
img {
width: 40%;
margin: 5% 30%;
}
p {
color: #fff;
font-size: calc(100vw * 14 / 1920);
margin: -6% 37%;
}
}
} }
</style> </style>