386 lines
11 KiB
Vue
Raw Normal View History

2023-07-19 18:09:20 +08:00
<template>
<div class="table-box">
2023-08-02 18:05:45 +08:00
<div class="change-btn" @click="changeScreen">
<img class="changeImg" src="@/assets/images/screenImg/change.png" alt="" />
</div>
2023-07-19 18:09:20 +08:00
<div class="leftBox">
<div class="blockBox">
<div class="blockTitle">
<img src="@/assets/images/hzImg/xm/xmxx.png" alt="" class="title" />
</div>
<div class="blockContent" @click="showProjectDialog">
2023-08-02 18:05:45 +08:00
<projectInfo :engineeringSn="engineeringSn" @projectData="getProjectData"></projectInfo>
2023-07-19 18:09:20 +08:00
</div>
</div>
<projectInfoDialog v-show="projectDialog" @close="closeProjectDialog" :projectData="projectData"></projectInfoDialog>
<div class="blockBox">
<div class="blockTitle">
<img src="@/assets/images/hzImg/xm/zfgl.png" alt="" class="title" />
</div>
<div class="blockContent chartContent">
<div class="chartBox">
<pieChart :colorArr="['#EEA959', '#4CC4F8']" title="支付率" :chartData="payData" :total="payRatio"></pieChart>
</div>
<div class="detailBox">
<!-- <div class="item">
<i class="rect"></i>
<span class="name">请款金额</span>
<span>607.5</span>
</div>
<div class="item">
<i class="rect"></i>
<span class="name">变更金额</span>
<span>7.5</span>
</div> -->
<div class="item">
<!-- <i class="color1 rect"></i> -->
<span class="name">申请金额</span>
<span>{{ dataObj.applyAmountTotal }}</span>
</div>
<div class="item">
<!-- <i class="color2 rect"></i> -->
<span class="name">实际支付</span>
<span>{{ dataObj.payAmountTotal }}</span>
</div>
<div class="item">
<!-- <i class="color1 rect"></i> -->
<span class="name">年度申请金额</span>
<span>{{ dataObj.applyAmountByYear }}</span>
</div>
<div class="item">
<!-- <i class="color2 rect"></i> -->
<span class="name">年度实际支付</span>
<span>{{ dataObj.payAmountByYear }}</span>
</div>
<div class="item">
<!-- <i class="color1 rect"></i> -->
<span class="name">当月申请金额</span>
<span>{{ dataObj.applyAmountByMonth }}</span>
</div>
<div class="item">
<!-- <i class="color2 rect"></i> -->
<span class="name">当月实际支付</span>
<span>{{ dataObj.payAmountByMonth }}</span>
</div>
</div>
</div>
</div>
<div class="blockBox">
<div class="blockTitle">
2023-07-19 18:09:20 +08:00
<img src="@/assets/images/hzImg/xm/gdxcsp.png" alt="" class="title" />
</div>
<div class="blockContent" style="height: 260px">
<!-- <img src="@/assets/images/hzImg/xm/video.png" alt="" width="100%" height="100%" /> -->
<!-- <video style="width: 100%; height: 100%; object-fit: fill" controls :src="videoData.videoUrl"></video> -->
<!-- <div id="playWnd" class="playWnd"></div> -->
<div id="play_window" ref="playWndBox" class="main" style="width: 100%; height: 100%"></div>
</div>
</div>
</div>
<div class="centerBox">
<div class="mapBox">
<!-- <maps :projectData="projectData"></maps> -->
<BDmaps :projectData="projectData"></BDmaps>
</div>
<div class="blockBox">
<div class="blockTitle blockTitle2">
<img src="@/assets/images/hzImg/xm/lcb.png" alt="" class="title" />
</div>
<div class="blockContent">
2023-08-03 10:12:57 +08:00
<milestone :engineeringSn="engineeringSn" :projectData="projectData"></milestone>
2023-07-19 18:09:20 +08:00
</div>
</div>
</div>
<div class="rightBox">
<div class="blockBox">
<div class="blockTitle">
<img src="@/assets/images/hzImg/xm/aqgl.png" alt="" class="title" />
</div>
<div class="blockContent chartContent">
<div class="chartBox">
<pieChart
:colorArr="['#6375C7', '#EC6266']"
:chartData="saftyData"
title="安全问题总数"
:total="safetyTotal"
></pieChart>
</div>
<div class="detailBox">
<div class="item">
<i class="color3 rect"></i>
<span class="name">已整改安全问题</span>
<span>{{ saftyData[0].value }}</span>
</div>
<div class="item">
<i class="color4 rect"></i>
<span class="name">未整改安全问题</span>
<span>{{ saftyData[1].value }}</span>
</div>
</div>
</div>
</div>
<div class="blockBox">
<div class="blockTitle">
<img src="@/assets/images/hzImg/xm/zlgl.png" alt="" class="title" />
</div>
<div class="blockContent chartContent">
<div class="chartBox">
<pieChart
:colorArr="['#82FBEA', '#4CC4F8']"
:chartData="qualityData"
title="质量问题总数"
:total="qualityTotal"
></pieChart>
</div>
<div class="detailBox">
<div class="item">
<i class="color5 rect"></i>
<span class="name">已整改质量问题</span>
<span>{{ qualityData[0].value }}</span>
</div>
<div class="item">
<i class="color6 rect"></i>
<span class="name">未整改质量问题</span>
<span>{{ qualityData[1].value }}</span>
</div>
</div>
</div>
</div>
<div class="blockBox">
<div class="blockTitle">
<img src="@/assets/images/hzImg/xm/hjjc.png" alt="" class="title" />
</div>
<div class="blockContent">
<environment></environment>
</div>
</div>
</div>
</div>
</template>
<script setup lang="tsx" name="largeScreen">
import { ref, reactive, onMounted, getCurrentInstance, nextTick, onBeforeUnmount, Ref, watch } from "vue";
import projectInfo from "./components/projectInfo.vue";
import pieChart from "./components/pieChart.vue";
import milestone from "./components/milestone.vue";
import maps from "./components/maps.vue";
import BDmaps from "./components/BDmaps.vue";
import environment from "./components/environment.vue";
import projectInfoDialog from "./components/projectInfoDialog.vue";
2023-07-20 17:05:40 +08:00
import { screenEntPayment, getEntInspectInfo } from "@/api/modules/huizhou";
import { getpreviewURL } from "@/api/modules/common";
2023-07-19 18:09:20 +08:00
import { GlobalStore } from "@/stores";
import { getvideoEngTreeList } from "@/api/modules/goverment";
2023-07-19 18:09:20 +08:00
const store = GlobalStore();
const playWndBox = ref(null);
//获取项目信息
const projectData = ref({
latitude: "",
longitude: "",
totalDay: ""
});
let playWndHeight = ref("");
let playWndWidth = ref("");
let myPlugin = ref("");
let cameraIndexCode = ref([]);
let playUrl = ref();
2023-07-19 18:09:20 +08:00
let playIndex = ref(0);
2023-08-02 18:05:45 +08:00
const props = defineProps(["engineeringSn"]);
const emits = defineEmits(["change"]);
const changeScreen = () => {
emits("change");
};
2023-07-19 18:09:20 +08:00
const getProjectData = (data: any) => {
projectData.value = data;
};
const dataObj = ref({});
const getPayMentData = async () => {
2023-08-02 18:05:45 +08:00
const res = await screenEntPayment({ engineeringSn: props.engineeringSn });
2023-07-19 18:09:20 +08:00
console.log(res);
if (res && res.result) {
dataObj.value = res.result;
payRatio.value = res.result.payRatio;
payData.value = reactive([
{
name: "支付",
value: res.result.payAmount
},
{
name: "总和",
value: res.result.totalAmount
}
]);
}
};
// 视频弹框 --- start
const projectDialog = ref(false);
const showProjectDialog = () => {
projectDialog.value = true;
};
const closeProjectDialog = () => {
projectDialog.value = false;
};
// 视频弹框 --- end
// 支付管理 --- start
const payRatio = ref("");
let payData = ref([
{
name: "支付",
value: 0
},
{
name: "总和",
value: 0
}
]);
// 支付管理 --- end
// 安全质量 --- start
const safetyTotal = ref(0);
let saftyData = ref([
{
name: "已整改安全问题",
value: 0
},
{
name: "未整改安全问题",
value: 0
}
]);
const qualityTotal = ref(0);
let qualityData = ref([
{
name: "已整改质量问题",
value: 0
},
{
name: "未整改质量问题",
value: 0
}
]);
// 获取安全质量信息
const getInspect = async () => {
2023-08-02 18:05:45 +08:00
const res: any = await getEntInspectInfo({ engineeringSn: props.engineeringSn });
2023-07-19 18:09:20 +08:00
safetyTotal.value = res.result.safetyTotal;
saftyData.value[0].value = res.result.safetyCompleted;
saftyData.value[1].value = res.result.safetyUnCompleted;
qualityTotal.value = res.result.qualityTotal;
qualityData.value[0].value = res.result.qualityCompleted;
qualityData.value[1].value = res.result.qualityUnCompleted;
};
// 安全质量 --- end
// onBeforeUnmount(() => {
// if (oWebControl.value === undefined) {
// // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
// oWebControl.JS_HideWnd();
// // 销毁当前播放的视频
// oWebControl.JS_RequestInterface({ funcName: "destroyWnd" });
// // 断开与插件服务连接
// oWebControl.JS_Disconnect();
// }
// });
// 播放视频流
const playVideo = async () => {
let url = playUrl.value;
let newMyplugin = myPlugin.value;
console.log(url);
console.log(playIndex.value);
newMyplugin
.JS_Play(
url,
{
playURL: url, // 流媒体播放时必传
mode: 1 // 解码类型0=普通模式; 1=高级模式 默认为0
// 设置直连时的认证参数等
// ...
},
playIndex.value //当前窗口下标
)
.then(
() => {
console.info("JS_Play success");
playIndex.value += 1;
// do you want...
},
() => {
console.info("JS_Play failed:");
// playIndex.value += 1;
// do you want...
}
);
};
// 获取视频流
const getVideo = async () => {
// await sendRequest({ code: cameraIndexCode.value });
const { result }: { result: any } = await getvideoEngTreeList({});
let defaultCode: string = "";
if (result.length > 0) {
defaultCode = result[0].code;
if (!defaultCode) {
cameraIndexCode.value = result[0].children.map((item: any) => {
return item.code;
});
defaultCode = cameraIndexCode.value[0];
}
}
const res = await getpreviewURL({ cameraIndexCode: defaultCode, protocol: "ws" });
2023-07-19 18:09:20 +08:00
playUrl.value = res.result;
playVideo();
console.log(res);
};
const BeginPlayer = () => {
console.log(666, "-----------------");
// 初始化插件
myPlugin.value = new JSPlugin({
szId: "play_window", //需要英文字母开头 必填
2023-07-24 10:00:48 +08:00
// szBasePath: "/public/h5player", // 必填,引用H5player.min.js的js相对路径
szBasePath: "/h5player", // 打包后的地址
2023-07-19 18:09:20 +08:00
// szBasePath: "./", // 必填,引用H5player.min.js的js相对路径
iWidth: playWndWidth.value + "px",
iHeight: playWndHeight.value + "px",
iMaxSplit: 4,
iCurrentSplit: 1,
openDebug: true
});
};
onMounted(async () => {
await getInspect();
await getPayMentData();
2023-08-03 10:12:57 +08:00
await BeginPlayer();
2023-07-19 18:09:20 +08:00
// 获取页面的实例对象 ee
const pageInstance = getCurrentInstance();
// 获取dom节点对象
const tagDomObj = pageInstance?.refs.playWndBox;
playWndHeight.value = tagDomObj?.clientHeight;
playWndWidth.value = tagDomObj?.clientWidth;
// 监听scroll事件使插件窗口尺寸跟随DIV窗口变化
window.addEventListener("scroll", () => {
if (myPlugin.value == undefined) {
setTimeout(function () {
myPlugin.value.JS_Resize(tagDomObj?.clientWidth, tagDomObj?.clientHeight);
}, 500);
// setWndCover();
}
});
// 监听resize事件使插件窗口尺寸跟随DIV窗口变化
window.addEventListener("resize", e => {
if (myPlugin.value == undefined) {
// console.log("wwwww", e);
setTimeout(function () {
myPlugin.value.JS_Resize(tagDomObj?.clientWidth, tagDomObj?.clientHeight);
}, 500);
// oWebControl.JS_Resize(playWndHeight.value, playWndWidth.value);
// setWndCover();
}
});
2023-08-03 10:12:57 +08:00
getVideo();
2023-07-19 18:09:20 +08:00
});
</script>
<style scoped lang="scss">
@import url("./style.scss");
</style>