2023-10-07 00:48:12 +08:00
|
|
|
|
<template>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
<div class="project-aivideo">
|
|
|
|
|
<div class="screen-content">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<module-one-2-1 label="预警概况">
|
|
|
|
|
<div class="labour-warning-title">
|
|
|
|
|
<div class="labour-warning-img">
|
|
|
|
|
<div class="labour-warning-bgd">
|
|
|
|
|
<img src="images/labour_warning_icon.png" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="labour-warning-data">
|
|
|
|
|
<p>今日预警</p>
|
|
|
|
|
<div class="labour-warning-number">
|
|
|
|
|
<span>{{ overviewTotalDay }}</span> 次
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="labour-warning-data">
|
|
|
|
|
<p>累计预警</p>
|
|
|
|
|
<div class="labour-warning-number">
|
|
|
|
|
<span>{{ overviewTotal }}</span> 次
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<project-overview-chart
|
|
|
|
|
:key="'ai1' + overviewDay"
|
|
|
|
|
:sp="''"
|
|
|
|
|
txtTop="12"
|
|
|
|
|
gifTop="70px"
|
|
|
|
|
:maintitle="overviewTotalDay"
|
|
|
|
|
:legend-opt="legendOpt2"
|
|
|
|
|
:typedata="typeDistributionDataDay"
|
|
|
|
|
:text="overviewTextDay"
|
|
|
|
|
:height="250"
|
|
|
|
|
></project-overview-chart>
|
2023-10-13 04:00:16 +08:00
|
|
|
|
|
2024-03-24 01:36:02 +08:00
|
|
|
|
<project-overview-chart
|
|
|
|
|
:key="'ai2' + overview"
|
|
|
|
|
:sp="''"
|
|
|
|
|
txtTop="12"
|
|
|
|
|
gifTop="70px"
|
|
|
|
|
:maintitle="overviewTotal"
|
|
|
|
|
:legend-opt="legendOpt1"
|
|
|
|
|
:typedata="typeDistributionData"
|
|
|
|
|
:text="overviewText"
|
|
|
|
|
:height="250"
|
|
|
|
|
></project-overview-chart>
|
|
|
|
|
</module-one-2-1>
|
|
|
|
|
<module-one-1-1 label="预警分布">
|
|
|
|
|
<rank-chart
|
|
|
|
|
:data="availabilityData"
|
|
|
|
|
:showval="true"
|
|
|
|
|
:height="300"
|
|
|
|
|
></rank-chart>
|
|
|
|
|
</module-one-1-1>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="12">
|
|
|
|
|
<div class="ai-video-info">
|
|
|
|
|
<div class="ai-video-info-flex">
|
|
|
|
|
<div class="ai-content-nav-max" style="width: 100%">
|
|
|
|
|
<div
|
|
|
|
|
class="ai-content-nav-min"
|
|
|
|
|
v-for="(alertorType, index) in alertorTypeList"
|
|
|
|
|
:key="index"
|
|
|
|
|
>
|
|
|
|
|
<div class="ai-content-nav-con">
|
|
|
|
|
<div
|
|
|
|
|
:class="nav == index ? 'ai-content-nav active' : 'ai-content-nav'"
|
|
|
|
|
@click="aiNav(index, alertorType.dictValue)"
|
|
|
|
|
v-html="alertorType.dictLabel"
|
|
|
|
|
></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ai-content-info-max">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col
|
|
|
|
|
style="position: relative"
|
|
|
|
|
:span="8"
|
|
|
|
|
v-for="(video, index) in videoList"
|
|
|
|
|
:key="index"
|
|
|
|
|
>
|
|
|
|
|
<div class="ai-content-info-min">
|
|
|
|
|
<div
|
|
|
|
|
class="ai-content-videos"
|
|
|
|
|
:class="video.state ? 'active-video' : 'videobo'"
|
|
|
|
|
>
|
|
|
|
|
<div v-if="video.state" :id="'vd0' + index"></div>
|
|
|
|
|
<div
|
|
|
|
|
class="ai-video-name"
|
|
|
|
|
style="
|
|
|
|
|
position: absolute;
|
|
|
|
|
height: 35px;
|
|
|
|
|
line-height: 35px;
|
|
|
|
|
padding: 0px 15px;
|
|
|
|
|
z-index: 99999;
|
|
|
|
|
bottom: 8px;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<span v-if="video.state"
|
|
|
|
|
>{{ video.videoName }}({{ video.passageName }})</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="video.state" class="style-con style-red"></div>
|
|
|
|
|
<div v-if="video.state" class="style-con style-green"></div>
|
2023-10-07 00:48:12 +08:00
|
|
|
|
</div>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ai-content-padding">
|
|
|
|
|
<div class="ai-key-videos">
|
|
|
|
|
<div class="ai-video-title">
|
|
|
|
|
<div>重点视频</div>
|
|
|
|
|
<div class="ai-video-number">重点关注 视频({{ majorVideoSize }})</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ai-key-videos-info">
|
|
|
|
|
<!-- <div class="ai-slip">
|
2023-10-07 00:48:12 +08:00
|
|
|
|
<img src="/images/ai/left_slip.png" id="leftSlip">
|
2023-10-13 04:00:16 +08:00
|
|
|
|
</div> -->
|
2024-03-24 01:36:02 +08:00
|
|
|
|
<div class="ai-key-videos-content" id="videosContent">
|
|
|
|
|
<div
|
|
|
|
|
class="ai-key-videos-max"
|
|
|
|
|
style="position: relative"
|
|
|
|
|
v-for="(video, index) in majorVideoList"
|
|
|
|
|
:key="index"
|
|
|
|
|
>
|
|
|
|
|
<div
|
|
|
|
|
class="ai-key-videos-min"
|
|
|
|
|
:class="video.state ? 'imp-video' : 'videobo'"
|
|
|
|
|
>
|
|
|
|
|
<!-- <H265Player v-if="video.state" :url="getVideoUrl(video)"/> -->
|
|
|
|
|
<div v-if="video.state" :id="'wVd0' + index"></div>
|
|
|
|
|
<div
|
|
|
|
|
class="ai-video-name"
|
|
|
|
|
style="
|
|
|
|
|
position: absolute;
|
|
|
|
|
height: 35px;
|
|
|
|
|
line-height: 35px;
|
|
|
|
|
padding: 0px 15px;
|
|
|
|
|
z-index: 1;
|
|
|
|
|
bottom: 8px;
|
|
|
|
|
font-size: 13px;
|
|
|
|
|
"
|
|
|
|
|
>
|
|
|
|
|
<span v-if="video.state"
|
|
|
|
|
>{{ video.videoName }}({{ video.passageName }})</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="video.state" class="style-con style-red"></div>
|
|
|
|
|
<div v-if="video.state" class="style-con style-green"></div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- <div class="ai-slip">
|
2023-10-07 00:48:12 +08:00
|
|
|
|
<img src="/images/ai/right_slip.png" id="rightSlip">
|
2023-10-13 04:00:16 +08:00
|
|
|
|
</div> -->
|
2024-03-24 01:36:02 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="6">
|
|
|
|
|
<div class="analyse-map">
|
|
|
|
|
<div class="analyse-title">
|
|
|
|
|
<div class="analyse-text">最近预警</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="afoot-content safe-afoot-content">
|
|
|
|
|
<div
|
|
|
|
|
class="afoot-overflow safe-afoot-overflow"
|
|
|
|
|
id="afootOverflow"
|
|
|
|
|
@mouseout="warningListMinMouseout"
|
|
|
|
|
@mouseover="warningListMinMouseover"
|
|
|
|
|
>
|
|
|
|
|
<div v-if="warningList.length == 0" class="not-data">暂无预警数据</div>
|
|
|
|
|
<div
|
|
|
|
|
v-if="warningList.length > 0"
|
|
|
|
|
class="afoot-con-for"
|
|
|
|
|
style="height: 180px"
|
|
|
|
|
v-for="item in warningList"
|
|
|
|
|
>
|
|
|
|
|
<div class="project-expect-con">
|
|
|
|
|
<div class="project-expect-title">
|
|
|
|
|
<div class="project-expect-title-No">
|
|
|
|
|
{{ item.projectName }}
|
|
|
|
|
</div>
|
2023-10-07 00:48:12 +08:00
|
|
|
|
</div>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
<div class="project-expect-info">
|
|
|
|
|
<el-image
|
|
|
|
|
:src="getImageUrl(item)"
|
|
|
|
|
:preview-src-list="[$apiPath + item.imageUrl]"
|
|
|
|
|
></el-image>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="project-expect-info">
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
单位名称:{{ item.deptName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
预警类型:{{ item.alarmTypeName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
预警时间:<span class="project-expect-time">{{
|
|
|
|
|
item.createTime
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<!-- <div class="ai-content-padding">
|
|
|
|
|
<div class="ai-warning-list">
|
|
|
|
|
<div class="ai-video-title">
|
|
|
|
|
<div>
|
|
|
|
|
最新预警
|
|
|
|
|
<span class="ai-video-number"
|
|
|
|
|
>(<span v-html="warningList.length"></span>)</span
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="ai-warning-list-content">
|
|
|
|
|
<div
|
|
|
|
|
class="ai-warning-list-max scroll"
|
|
|
|
|
id="warningListMax"
|
|
|
|
|
style="overflow-y: auto"
|
|
|
|
|
>
|
|
|
|
|
<div id="warningListMin">
|
|
|
|
|
<div
|
|
|
|
|
class="project-expect-list active"
|
|
|
|
|
v-for="(item, idx) in warningList"
|
|
|
|
|
v-if="idx < 50"
|
|
|
|
|
:key="idx"
|
|
|
|
|
>
|
|
|
|
|
<div class="project-expect-con">
|
|
|
|
|
<div class="project-expect-title">
|
|
|
|
|
<div class="project-expect-title-No">
|
|
|
|
|
{{ item.projectName }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="project-expect-info">
|
|
|
|
|
<el-image
|
|
|
|
|
:src="getImageUrl(item)"
|
|
|
|
|
:preview-src-list="[$apiPath + item.imageUrl]"
|
|
|
|
|
></el-image>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="project-expect-info">
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
单位名称:{{ item.deptName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
预警类型:{{ item.alarmTypeName }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="el-row" style="padding-top: 5px">
|
|
|
|
|
预警时间:<span class="project-expect-time">{{
|
|
|
|
|
item.createTime
|
|
|
|
|
}}</span>
|
|
|
|
|
</div>
|
2023-10-13 04:00:16 +08:00
|
|
|
|
</div>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
</div>
|
2023-10-13 04:00:16 +08:00
|
|
|
|
</div>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div> -->
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2023-10-07 00:48:12 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
2024-03-24 01:36:02 +08:00
|
|
|
|
import "../components/module/module-one-2-1";
|
|
|
|
|
import "../components/module/module-one-3-1";
|
|
|
|
|
import "../components/module/module-one-0-5";
|
|
|
|
|
import "../components/module/module-one-video";
|
|
|
|
|
import "../components/staff-survey-chart";
|
|
|
|
|
import "../components/classify-bar";
|
|
|
|
|
import "../components/amplify/shipinguanli/amplify-spjk";
|
|
|
|
|
import "../components/rank-chart";
|
2024-03-20 01:26:33 +08:00
|
|
|
|
|
2024-03-24 01:36:02 +08:00
|
|
|
|
import debounce from "lodash.debounce";
|
|
|
|
|
import gsap from "gsap";
|
2023-10-07 00:48:12 +08:00
|
|
|
|
export default {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
data() {
|
|
|
|
|
return {
|
|
|
|
|
active: 3,
|
|
|
|
|
scrollLeft: "",
|
|
|
|
|
nav: 0,
|
|
|
|
|
alertorId: 0,
|
|
|
|
|
videoList: [],
|
|
|
|
|
scaleData: [],
|
|
|
|
|
majorVideoList: [],
|
|
|
|
|
alertorTypeList: [],
|
|
|
|
|
warningList: [],
|
|
|
|
|
distributeData: {},
|
|
|
|
|
ptz: false,
|
|
|
|
|
autoPlay: true,
|
|
|
|
|
popupUrl: "",
|
|
|
|
|
popupShow: false,
|
|
|
|
|
majorVideoSize: 0,
|
|
|
|
|
//预警概况
|
|
|
|
|
overview: 0,
|
|
|
|
|
overviewDay: 0,
|
|
|
|
|
overviewInterval: "",
|
|
|
|
|
overviewTotal: 0,
|
|
|
|
|
legendOpt1: {
|
|
|
|
|
icon: "rect",
|
|
|
|
|
textStyle: {
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
color: "#c3dbfd",
|
|
|
|
|
rich: {
|
|
|
|
|
name: {
|
|
|
|
|
color: "#c3dbfd",
|
|
|
|
|
padding: [0, 20, 0, 0],
|
2023-10-13 04:00:16 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
percent: {
|
|
|
|
|
color: "#4676FD",
|
2023-10-14 18:28:58 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
overviewText: "累计预警",
|
|
|
|
|
//原因类型分析
|
|
|
|
|
availabilityData: [],
|
|
|
|
|
projectCategoryWidth: 200,
|
|
|
|
|
//预警概况
|
|
|
|
|
typeDistributionData: [
|
|
|
|
|
{ name: "未戴安全帽", value: "0" },
|
|
|
|
|
{ name: "未穿工服", value: "0" },
|
|
|
|
|
{ name: "反光衣/带检测", value: "0" },
|
|
|
|
|
],
|
|
|
|
|
overviewTextDay: "今日预警",
|
|
|
|
|
overviewTotalDay: 0,
|
|
|
|
|
legendOpt2: {
|
|
|
|
|
icon: "rect",
|
|
|
|
|
textStyle: {
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
color: "#c3dbfd",
|
|
|
|
|
rich: {
|
|
|
|
|
name: {
|
|
|
|
|
color: "#c3dbfd",
|
|
|
|
|
padding: [0, 20, 0, 0],
|
|
|
|
|
},
|
|
|
|
|
percent: {
|
|
|
|
|
color: "#f73647",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
typeDistributionDataDay: [
|
|
|
|
|
{ name: "未戴安全帽", value: "0" },
|
|
|
|
|
{ name: "未穿工服", value: "0" },
|
|
|
|
|
{ name: "反光衣/带检测", value: "0" },
|
|
|
|
|
],
|
|
|
|
|
initfunc: null,
|
|
|
|
|
players: [],
|
|
|
|
|
wPlayers: [],
|
|
|
|
|
warningInterval: undefined,
|
|
|
|
|
forIndex: 0,
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
beforeDestroy() {
|
|
|
|
|
console.log("-----beforeDestroy------>");
|
|
|
|
|
this.players.forEach((p) => {
|
|
|
|
|
if (p) {
|
|
|
|
|
try {
|
|
|
|
|
p.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.wPlayers.forEach((wp) => {
|
|
|
|
|
if (wp) {
|
|
|
|
|
try {
|
|
|
|
|
wp.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
clearInterval(this.warningInterval);
|
|
|
|
|
this.forIndex = 0;
|
|
|
|
|
},
|
|
|
|
|
mounted() {
|
2024-05-06 21:56:00 +08:00
|
|
|
|
this.$bus.$on("headerChange",()=>{
|
|
|
|
|
this.initMe();
|
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
if (this.$root.hasInitHeader) {
|
|
|
|
|
this.initMe();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
|
//this.init()
|
|
|
|
|
},
|
|
|
|
|
computed: {
|
|
|
|
|
playDivCss() {
|
|
|
|
|
return {
|
|
|
|
|
width: (this.width + "").replace("px", "") + "px",
|
|
|
|
|
height: (this.height + "").replace("px", "") + "px",
|
|
|
|
|
position: "relative",
|
|
|
|
|
};
|
2023-10-07 00:48:12 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
exStyle() {
|
|
|
|
|
return {
|
|
|
|
|
textAlign: "center",
|
|
|
|
|
width: (this.width + "").replace("px", "") + "px",
|
|
|
|
|
height: (this.height + "").replace("px", "") + "px",
|
|
|
|
|
};
|
2023-10-07 00:48:12 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
PTZDiv() {
|
|
|
|
|
let W = parseInt((this.width + "").replace("px", ""));
|
|
|
|
|
let H = parseInt((this.height + "").replace("px", ""));
|
|
|
|
|
if (W < 400) {
|
|
|
|
|
W = "100px";
|
|
|
|
|
H = "100px";
|
|
|
|
|
} else {
|
|
|
|
|
W = "150px";
|
|
|
|
|
H = "150px";
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
backgroundImage: "url('https://video.makalu.cc/img/jt.png')",
|
|
|
|
|
width: W,
|
|
|
|
|
height: H,
|
|
|
|
|
backgroundSize: "100%",
|
|
|
|
|
position: "relative",
|
|
|
|
|
};
|
2023-10-07 00:48:12 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
PTZTop() {
|
|
|
|
|
return {
|
|
|
|
|
width: "33%",
|
|
|
|
|
height: "25%",
|
|
|
|
|
position: "absolute",
|
|
|
|
|
top: "0px",
|
|
|
|
|
left: "33%",
|
|
|
|
|
cursor: "pointer",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
PTZBottom() {
|
|
|
|
|
return {
|
|
|
|
|
width: "33%",
|
|
|
|
|
height: "25%",
|
|
|
|
|
position: "absolute",
|
|
|
|
|
bottom: "0px",
|
|
|
|
|
left: "33%",
|
|
|
|
|
cursor: "pointer",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
PTZLeft() {
|
|
|
|
|
return {
|
|
|
|
|
width: "25%",
|
|
|
|
|
height: "33%",
|
|
|
|
|
position: "absolute",
|
|
|
|
|
top: "33%",
|
|
|
|
|
left: "0px",
|
|
|
|
|
cursor: "pointer",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
PTZRight() {
|
|
|
|
|
return {
|
|
|
|
|
width: "25%",
|
|
|
|
|
height: "33%",
|
|
|
|
|
position: "absolute",
|
|
|
|
|
top: "33%",
|
|
|
|
|
right: "0px",
|
|
|
|
|
cursor: "pointer",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
VIBtnCss() {
|
|
|
|
|
return {
|
|
|
|
|
width: "30px",
|
|
|
|
|
height: "30px",
|
|
|
|
|
background: "#38314b",
|
|
|
|
|
border: "1px solid #38314b",
|
|
|
|
|
fontSize: "20px",
|
|
|
|
|
outline: "0",
|
|
|
|
|
color: "#FFFFFF",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
zoomViewCss() {
|
|
|
|
|
return {
|
|
|
|
|
width: "75px",
|
|
|
|
|
height: "30px",
|
|
|
|
|
color: "#dddddd",
|
|
|
|
|
background: "rgba(65, 63, 70, 0.5)",
|
|
|
|
|
textAlign: "center",
|
|
|
|
|
border: "0px solid rgba(65, 63, 70, 0.5)",
|
|
|
|
|
outline: "0",
|
|
|
|
|
fontSize: "14px",
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
initMe() {
|
|
|
|
|
this.projectInfo = this.$root.project;
|
|
|
|
|
this.dept = this.$root.dept;
|
|
|
|
|
this.projectInfos = this.$root.projects;
|
|
|
|
|
console.log("initMe");
|
|
|
|
|
this.init();
|
|
|
|
|
},
|
|
|
|
|
init() {
|
|
|
|
|
clearTimeout(this.initfunc);
|
2024-03-24 20:10:25 +08:00
|
|
|
|
clearInterval(this.warningInterval);
|
|
|
|
|
//最近预警 定时器
|
|
|
|
|
this.warningInterval = setInterval(this.safeAutomaticRoll, 5000);
|
|
|
|
|
this.players.forEach((p) => {
|
|
|
|
|
if (p) {
|
|
|
|
|
try {
|
|
|
|
|
p.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.wPlayers.forEach((wp) => {
|
|
|
|
|
if (wp) {
|
|
|
|
|
try {
|
|
|
|
|
wp.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
let initfunc = () => {
|
|
|
|
|
this.getAlertorTypeList();
|
|
|
|
|
this.getAiVideoInfoList("", "");
|
|
|
|
|
this.getMajorAiVideoInfoList();
|
|
|
|
|
this.getAnalysisDetailList();
|
|
|
|
|
this.getAiVideoAlertorTypeCount();
|
|
|
|
|
this.initAiVideoAlertorTypeDistribution();
|
|
|
|
|
};
|
2024-03-24 20:10:25 +08:00
|
|
|
|
this.initfunc = setTimeout(initfunc, 100); // 定时时间
|
2024-03-24 01:36:02 +08:00
|
|
|
|
},
|
|
|
|
|
//正在发生
|
|
|
|
|
safeAutomaticRoll() {
|
|
|
|
|
var height = $(".safe-afoot-overflow").innerHeight();
|
|
|
|
|
if (this.forIndex == this.warningList.length) {
|
|
|
|
|
this.forIndex = 0;
|
|
|
|
|
} else {
|
|
|
|
|
this.forIndex = parseFloat(this.forIndex + 0.22221);
|
|
|
|
|
}
|
|
|
|
|
$("#afootOverflow").animate({ scrollTop: parseInt(height * this.forIndex) + "px" });
|
|
|
|
|
},
|
|
|
|
|
warningListMinMouseover() {
|
|
|
|
|
clearInterval(this.warningInterval);
|
|
|
|
|
},
|
|
|
|
|
warningListMinMouseout() {
|
|
|
|
|
this.warningInterval = setInterval(this.safeAutomaticRoll, 5000);
|
|
|
|
|
},
|
|
|
|
|
//head选择项目返回值
|
|
|
|
|
onItemData(e) {
|
|
|
|
|
if (e.type == 1) {
|
|
|
|
|
location.href = "/weixin/screen/toVideo";
|
|
|
|
|
} else {
|
|
|
|
|
location.href = "/weixin/screen/toVideoProject";
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
amplify(url) {
|
|
|
|
|
this.popupUrl = url;
|
|
|
|
|
this.popupShow = true;
|
|
|
|
|
},
|
|
|
|
|
getAlertorTypeList() {
|
|
|
|
|
// axios.post(Host + "/api/video/getAiVideoAlertorTypes", {
|
|
|
|
|
// projectId: JSON.parse(localStorage.getItem("data")).aqzg
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
// var list = [{'alertor_id': 0,'alertor_type': "", 'alertor_type_name': "全部"}];
|
|
|
|
|
// var data = res.data;
|
|
|
|
|
|
|
|
|
|
// data.forEach(item =>{
|
|
|
|
|
// list.push(item)
|
|
|
|
|
// })
|
|
|
|
|
// if(JSON.parse(localStorage.getItem("data")).id == "98") {
|
|
|
|
|
// var newArr = [];
|
|
|
|
|
// newArr.push(list[0]);
|
|
|
|
|
// newArr.push(data[1])
|
|
|
|
|
// newArr.push(data[3])
|
|
|
|
|
// newArr.push(data[2])
|
|
|
|
|
// newArr.push(data[0])
|
|
|
|
|
// this.alertorTypeList = newArr;
|
|
|
|
|
// } else {
|
|
|
|
|
// this.alertorTypeList = list;
|
|
|
|
|
// }
|
|
|
|
|
// }).catch(err => {
|
|
|
|
|
// })
|
|
|
|
|
this.$api.dict("aibox_alarm_type").then((d) => {
|
|
|
|
|
this.alertorTypeList = d || [];
|
|
|
|
|
if (this.alertorTypeList && this.alertorTypeList[0].dictValue != "") {
|
|
|
|
|
this.alertorTypeList.unshift({ dictLabel: "全部", dictValue: "" });
|
2023-10-07 00:48:12 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
});
|
2023-10-07 00:48:12 +08:00
|
|
|
|
},
|
2024-03-24 01:36:02 +08:00
|
|
|
|
getVideoUrl(it) {
|
|
|
|
|
if (it.state) {
|
|
|
|
|
return (
|
|
|
|
|
"http://111.21.209.230:7086/live/cameraid/" +
|
|
|
|
|
it.videoDvrNumber +
|
|
|
|
|
"$" +
|
|
|
|
|
it.passageValue +
|
|
|
|
|
"/substream/2.m3u8"
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
getAiVideoInfoList(passageType, importance) {
|
|
|
|
|
// axios.post(Host + "/api/video/getAiVideoInfoList", {
|
|
|
|
|
// projectId:JSON.parse(localStorage.getItem("data")).aqzg,
|
|
|
|
|
// alertorId: this.alertorId
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
// var data = res.data;
|
|
|
|
|
// if(data.length < 6){
|
|
|
|
|
// var len = 6 - data.length
|
|
|
|
|
// for (let i = 0; i < len ; i++) {
|
|
|
|
|
// data.push({})
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// this.videoList = data;
|
|
|
|
|
// }).catch(err => {
|
|
|
|
|
// })
|
|
|
|
|
let that = this;
|
|
|
|
|
this.players.forEach((p) => {
|
|
|
|
|
if (p) {
|
|
|
|
|
try {
|
|
|
|
|
p.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.getVideoPassage(
|
|
|
|
|
this.dept?.id || 0,
|
|
|
|
|
this.projectInfo?.id || 0,
|
|
|
|
|
passageType,
|
|
|
|
|
importance
|
|
|
|
|
)
|
|
|
|
|
.then((response) => {
|
|
|
|
|
let list = [];
|
|
|
|
|
if (response.data) {
|
|
|
|
|
response.data.forEach((it) => {
|
|
|
|
|
it.surProjectVideoPassageList.forEach((v) => {
|
|
|
|
|
list.push({
|
|
|
|
|
videoName: it.videoName,
|
|
|
|
|
passageName: v.passageName,
|
|
|
|
|
videoDvrNumber: v.videoDvrNumber,
|
|
|
|
|
passageValue: v.passageValue,
|
|
|
|
|
state: true,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
let vList = list;
|
|
|
|
|
//补全
|
|
|
|
|
let len = 6 - list.length;
|
|
|
|
|
for (let i = 0; i < len; i++) {
|
|
|
|
|
list.push({ state: false });
|
2023-10-15 15:43:00 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
this.videoList = list;
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (vList.length > 0) {
|
|
|
|
|
vList.forEach((v, vidx) => {
|
|
|
|
|
if (v.state) {
|
|
|
|
|
let player = new WasmPlayer(null, "vd0" + vidx, null, {
|
|
|
|
|
Height: true,
|
|
|
|
|
});
|
|
|
|
|
that.players.push(player);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}, 400);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (vList.length > 0) {
|
|
|
|
|
vList.forEach((v, vidx) => {
|
|
|
|
|
if (v.state) {
|
|
|
|
|
let url =
|
2024-03-24 20:10:25 +08:00
|
|
|
|
"https://szgc.jhncidg.com/video/live/cameraid/" +
|
2024-03-24 01:36:02 +08:00
|
|
|
|
v.videoDvrNumber +
|
|
|
|
|
"$" +
|
|
|
|
|
v.passageValue +
|
|
|
|
|
"/substream/2.m3u8";
|
|
|
|
|
that.players[vidx].play(url, 1);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-03-24 20:10:25 +08:00
|
|
|
|
}, 600);
|
2024-03-24 01:36:02 +08:00
|
|
|
|
} else {
|
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
|
|
|
list.push({ state: false });
|
2023-10-15 15:43:00 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
this.videoList = list;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getMajorAiVideoInfoList() {
|
|
|
|
|
// axios.post(Host + "/api/video/getAiVideoInfoList", {
|
|
|
|
|
// projectId: JSON.parse(localStorage.getItem("data")).aqzg,
|
|
|
|
|
// majorState: "1",
|
|
|
|
|
// alertorId: this.alertorId
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
// var data = res.data;
|
|
|
|
|
// /*if(data.length < 4){
|
|
|
|
|
// var len = 4 - data.length
|
|
|
|
|
// for (let i = 0; i < len ; i++) {
|
|
|
|
|
// data.push({})
|
|
|
|
|
// }
|
|
|
|
|
// }*/
|
|
|
|
|
// this.majorVideoList = data;
|
|
|
|
|
// }).catch(err => {
|
|
|
|
|
// })
|
|
|
|
|
let that = this;
|
|
|
|
|
this.wPlayers.forEach((wp) => {
|
|
|
|
|
if (wp) {
|
|
|
|
|
try {
|
|
|
|
|
wp.stop();
|
|
|
|
|
} catch (e) {}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.getVideoPassage(this.dept?.id || 0, this.projectInfo?.id || 0, "", "Y")
|
|
|
|
|
.then((response) => {
|
|
|
|
|
let list = [];
|
|
|
|
|
if (response.data) {
|
|
|
|
|
response.data.forEach((it) => {
|
|
|
|
|
it.surProjectVideoPassageList.forEach((v) => {
|
|
|
|
|
list.push({
|
|
|
|
|
videoName: it.videoName,
|
|
|
|
|
passageName: v.passageName,
|
|
|
|
|
videoDvrNumber: v.videoDvrNumber,
|
|
|
|
|
passageValue: v.passageValue,
|
|
|
|
|
state: true,
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
let zdVList = list;
|
|
|
|
|
that.majorVideoSize = list.length;
|
|
|
|
|
//补全
|
|
|
|
|
let len = 3 - list.length;
|
|
|
|
|
for (let i = 0; i < len; i++) {
|
|
|
|
|
list.push({ state: false });
|
2023-10-15 15:43:00 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
that.majorVideoList = list;
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (zdVList.length > 0) {
|
|
|
|
|
zdVList.forEach((zdv, zdidx) => {
|
|
|
|
|
if (zdv.state) {
|
|
|
|
|
let player = new WasmPlayer(null, "wVd0" + zdidx, null, {
|
|
|
|
|
Height: true,
|
2023-10-15 15:43:00 +08:00
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
that.wPlayers.push(player);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}, 400);
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
if (zdVList.length > 0) {
|
|
|
|
|
zdVList.forEach((zdv, zdidx) => {
|
|
|
|
|
if (zdv.state) {
|
|
|
|
|
let url =
|
2024-03-24 20:10:25 +08:00
|
|
|
|
"https://szgc.jhncidg.com/video/live/cameraid/" +
|
2024-03-24 01:36:02 +08:00
|
|
|
|
zdv.videoDvrNumber +
|
|
|
|
|
"$" +
|
|
|
|
|
zdv.passageValue +
|
|
|
|
|
"/substream/2.m3u8";
|
|
|
|
|
that.wPlayers[zdidx].play(url, 1);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2024-03-24 20:10:25 +08:00
|
|
|
|
}, 600);
|
2024-03-24 01:36:02 +08:00
|
|
|
|
} else {
|
|
|
|
|
this.majorVideoSize = 0;
|
|
|
|
|
for (let i = 0; i < 6; i++) {
|
|
|
|
|
list.push({ state: false });
|
|
|
|
|
}
|
|
|
|
|
this.majorVideoList = list;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getAnalysisDetailList() {
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.listView(this.dept?.id || 0, this.projectInfo?.id)
|
|
|
|
|
.then((response) => {
|
|
|
|
|
this.warningList = response.data || [];
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getAiVideoAlertorTypeCount() {
|
|
|
|
|
// axios.post(Host + "/api/video/getAiVideoAlertorTypeCount", {
|
|
|
|
|
// projectId: JSON.parse(localStorage.getItem("data")).aqzg
|
|
|
|
|
// }).then(res => {
|
|
|
|
|
// var data = res.data;
|
|
|
|
|
// var num = 0;
|
|
|
|
|
// data.forEach(item =>{
|
|
|
|
|
// num += item.value;
|
|
|
|
|
// })
|
|
|
|
|
// data.forEach(item =>{
|
|
|
|
|
// item.percent = (item.value/num*100)
|
|
|
|
|
// })
|
|
|
|
|
// this.scaleData = data;
|
|
|
|
|
// }).catch(err => {
|
|
|
|
|
// })
|
2023-10-13 04:00:16 +08:00
|
|
|
|
|
2024-03-24 01:36:02 +08:00
|
|
|
|
//今日视图
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.groupCountByAlarmType(this.dept?.id || 0, this.projectInfo?.id, "Y")
|
|
|
|
|
.then((response) => {
|
|
|
|
|
if (response.data) {
|
|
|
|
|
let sum = 0;
|
|
|
|
|
response.data.forEach((datum) => {
|
|
|
|
|
sum += datum.value;
|
2023-10-15 15:43:00 +08:00
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
this.overviewTotalDay = sum;
|
|
|
|
|
this.typeDistributionDataDay = response.data;
|
|
|
|
|
this.overviewDay++;
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-10-13 23:57:20 +08:00
|
|
|
|
|
2024-03-24 01:36:02 +08:00
|
|
|
|
//累计视图
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.groupCountByAlarmType(this.dept?.id || 0, this.projectInfo?.id, "N")
|
|
|
|
|
.then((response) => {
|
|
|
|
|
if (response.data) {
|
|
|
|
|
let sum = 0;
|
|
|
|
|
response.data.forEach((datum) => {
|
|
|
|
|
sum += datum.value;
|
2023-10-15 15:43:00 +08:00
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
this.overviewTotal = sum;
|
|
|
|
|
this.typeDistributionData = response.data;
|
|
|
|
|
this.overview++;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
initAiVideoAlertorTypeDistribution() {
|
|
|
|
|
this.$api.aiBoxVideo
|
|
|
|
|
.selectGroupCountVideoConfig(this.dept?.id || 0, this.projectInfo?.id)
|
|
|
|
|
.then((response) => {
|
|
|
|
|
let list = [];
|
|
|
|
|
if (response.data) {
|
|
|
|
|
let sum = 0;
|
|
|
|
|
response.data.forEach((datum) => {
|
|
|
|
|
sum += datum.value;
|
2023-10-15 15:43:00 +08:00
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
response.data.forEach((datum) => {
|
|
|
|
|
datum.text = datum.name;
|
|
|
|
|
if (sum == 0) {
|
|
|
|
|
datum.prop = 0.0;
|
|
|
|
|
} else {
|
|
|
|
|
datum.prop = ((datum.value / sum) * 100).toFixed(1);
|
|
|
|
|
}
|
|
|
|
|
list.push(datum);
|
2023-10-15 15:43:00 +08:00
|
|
|
|
});
|
2024-03-24 01:36:02 +08:00
|
|
|
|
this.availabilityData = list;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
getAiVideoAlertorTypeWarningCount() {
|
|
|
|
|
axios
|
|
|
|
|
.post(Host + "/api/video/getAiVideoAlertorTypeWarningCount", {
|
|
|
|
|
projectId: JSON.parse(localStorage.getItem("data")).aqzg,
|
|
|
|
|
})
|
|
|
|
|
.then((res) => {
|
|
|
|
|
//预警分布
|
|
|
|
|
var distributeData = {
|
|
|
|
|
legend: ["接入视频", "预警路数"],
|
|
|
|
|
color: [],
|
|
|
|
|
yAxis: [],
|
|
|
|
|
data: [],
|
|
|
|
|
};
|
|
|
|
|
var data = res.data;
|
|
|
|
|
var data1 = [];
|
|
|
|
|
var data2 = [];
|
|
|
|
|
data.forEach((item) => {
|
|
|
|
|
distributeData.yAxis.push(item.alertor_type_name);
|
|
|
|
|
data1.push(item.total);
|
|
|
|
|
data2.push(item.yjTotal);
|
|
|
|
|
});
|
|
|
|
|
var color1 = ["#183e65", "#4bbcff"];
|
|
|
|
|
var color2 = ["#225254", "#5cd6ad"];
|
|
|
|
|
distributeData.data.push(data1);
|
|
|
|
|
distributeData.data.push(data2);
|
|
|
|
|
distributeData.color.push(color1);
|
|
|
|
|
distributeData.color.push(color2);
|
|
|
|
|
this.distributeData = distributeData;
|
|
|
|
|
})
|
|
|
|
|
.catch((err) => {});
|
|
|
|
|
},
|
|
|
|
|
aiNav(n, id) {
|
|
|
|
|
this.nav = n;
|
|
|
|
|
this.alertorId = id;
|
|
|
|
|
this.getAiVideoInfoList(this.alertorId, "");
|
|
|
|
|
},
|
|
|
|
|
getImageUrl(it) {
|
|
|
|
|
return "/jhapi" + it.imageUrl + ".min.jpg";
|
|
|
|
|
},
|
|
|
|
|
//预警概况 Echart
|
|
|
|
|
warningChart(data, id) {
|
|
|
|
|
let newPromise = new Promise((resolve) => {
|
|
|
|
|
resolve();
|
|
|
|
|
});
|
|
|
|
|
//然后异步执行echarts的初始化函数
|
|
|
|
|
newPromise.then(() => {
|
|
|
|
|
var myChart = echarts.init(document.getElementById(id));
|
|
|
|
|
option = {
|
|
|
|
|
color: [
|
|
|
|
|
"#00fff1",
|
|
|
|
|
"#04c8fa",
|
|
|
|
|
"#aa01fe",
|
|
|
|
|
"#4e84fe",
|
|
|
|
|
"#ff7b79",
|
|
|
|
|
"#edae5e",
|
|
|
|
|
"#fe4101",
|
|
|
|
|
"#14d18f",
|
|
|
|
|
],
|
|
|
|
|
series: [
|
|
|
|
|
// 主要展示层的
|
|
|
|
|
{
|
|
|
|
|
radius: ["45%", "60%"],
|
|
|
|
|
center: ["50%", "50%"],
|
|
|
|
|
type: "pie",
|
|
|
|
|
label: {
|
|
|
|
|
normal: {
|
|
|
|
|
show: true,
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
return (
|
|
|
|
|
params.value +
|
|
|
|
|
" " +
|
|
|
|
|
params.percent +
|
|
|
|
|
"%\n{white|" +
|
|
|
|
|
params.name +
|
|
|
|
|
"}"
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
rich: {
|
|
|
|
|
white: {
|
|
|
|
|
color: "#c5d9fe",
|
|
|
|
|
align: "center",
|
|
|
|
|
padding: [0, 0, 5],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
textStyle: {
|
|
|
|
|
fontSize: 14,
|
|
|
|
|
},
|
|
|
|
|
position: "outside",
|
|
|
|
|
},
|
|
|
|
|
emphasis: {
|
|
|
|
|
show: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
labelLine: {
|
|
|
|
|
normal: {
|
|
|
|
|
show: true,
|
|
|
|
|
length: 20,
|
|
|
|
|
length2: 25,
|
|
|
|
|
},
|
|
|
|
|
emphasis: {
|
|
|
|
|
show: true,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data: data,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: "外边框",
|
|
|
|
|
type: "pie",
|
|
|
|
|
clockWise: false, //顺时加载
|
|
|
|
|
hoverAnimation: false, //鼠标移入变大
|
|
|
|
|
center: ["50%", "50%"],
|
|
|
|
|
radius: ["70%", "70%"],
|
|
|
|
|
label: {
|
|
|
|
|
normal: {
|
|
|
|
|
show: false,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
data: [
|
|
|
|
|
{
|
|
|
|
|
value: 1,
|
|
|
|
|
name: "",
|
|
|
|
|
itemStyle: {
|
|
|
|
|
normal: {
|
|
|
|
|
borderWidth: 3,
|
|
|
|
|
borderColor: "#57639d",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
};
|
|
|
|
|
myChart.setOption(option);
|
|
|
|
|
window.onresize = myChart.resize;
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
goVideoPage() {
|
|
|
|
|
location.href = "/weixin/screen/toVideoProject";
|
|
|
|
|
},
|
|
|
|
|
},
|
2023-10-07 00:48:12 +08:00
|
|
|
|
};
|
|
|
|
|
</script>
|
|
|
|
|
|
2024-03-20 01:26:33 +08:00
|
|
|
|
<style lang="less">
|
2023-10-13 04:00:16 +08:00
|
|
|
|
.style-green {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
background: #00c240;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2023-10-07 00:48:12 +08:00
|
|
|
|
|
2023-10-13 04:00:16 +08:00
|
|
|
|
.style-con {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
position: absolute;
|
|
|
|
|
width: 20px;
|
|
|
|
|
height: 20px;
|
|
|
|
|
background: #00c240;
|
|
|
|
|
border-radius: 50%;
|
|
|
|
|
top: 15px;
|
|
|
|
|
right: 15px;
|
|
|
|
|
z-index: 1;
|
|
|
|
|
}
|
|
|
|
|
.active-video {
|
|
|
|
|
border: 1px solid #ddcd04;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.imp-video {
|
|
|
|
|
border: 2px solid aqua;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.videobo {
|
|
|
|
|
border: 1px solid #655f5f;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.project-expect-list {
|
|
|
|
|
width: 100%;
|
|
|
|
|
margin-bottom: 10px;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.project-expect-title-No {
|
|
|
|
|
min-width: 100px;
|
|
|
|
|
text-align: left;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.project-video {
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.project-expect-info {
|
|
|
|
|
width: 50%;
|
|
|
|
|
float: left;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.project-expect-info img {
|
|
|
|
|
width: 90%;
|
2023-10-13 04:00:16 +08:00
|
|
|
|
}
|
2023-10-14 18:28:58 +08:00
|
|
|
|
.my-svg-icon {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
width: 40px;
|
|
|
|
|
height: 40px;
|
|
|
|
|
margin-bottom: 20px;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.my-svg-icon * {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
fill: #389de3;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.people-number-con div.is-split {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
background: none;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.labour-education .number-unit {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
position: relative;
|
|
|
|
|
bottom: -8px;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.number-unit {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
word-break: keep-all;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.cost-out {
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.labour-education {
|
|
|
|
|
height: 70px;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
|
2024-03-24 01:36:02 +08:00
|
|
|
|
.people-number-con {
|
|
|
|
|
padding: 0px;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
.safe-afoot-overflow {
|
|
|
|
|
height: 900px !important;
|
2023-10-14 18:28:58 +08:00
|
|
|
|
}
|
2024-03-24 01:36:02 +08:00
|
|
|
|
</style>
|