提交diamagnetic

dev_xd
姜玉琦 2025-04-29 22:36:18 +08:00
parent d9a0c5b99e
commit 261bfd443e
6 changed files with 1165 additions and 3 deletions

View File

@ -0,0 +1,152 @@
<template>
<div :style="{ 'height': height + 'px' }" ref="chart">
</div>
</template>
<script>
export default {
props: {
data:{
type:Array
},
height:{
type:Number
}
},
data() {
return {
option:{},
}
},
mounted(){
this.init()
},
methods: {
init(){
this.getChartData()
},
getChartData(){
//
var chChart = echarts.init(this.$refs.chart);
this.echart(chChart,this.data)
},
echart(chChart,chartData){
let newPromise = new Promise((resolve) => {
resolve()
})
//echarts
newPromise.then(() => {
var value = []
var text = []
var total = 0
var bgd = []
for (let i = 0; i < chartData.length; i++) {
value.push(chartData[i].value)
text.push(chartData[i].text)
bgd.push(100)
total += chartData[i].value
}
var prop = []
for (let j = 0; j < value.length; j++) {
prop.push((value[j]/total * 100).toFixed(1))
}
this.option = {
grid: {
left: "5%",
right: "5%",
bottom: "-10%",
top: "2%",
containLabel: true,
},
xAxis: {
show: false,
type: "value",
},
yAxis: [
{
type: "category",
inverse: true,
axisLabel: {
show: true,
textStyle: {
color: "#cbdaff",
fontSize: "14",
},
},
splitLine: {
show: false,
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
data: text,
},
{
type: "category",
inverse: true,
axisTick: "none",
axisLine: "none",
show: true,
axisLabel: {
textStyle: {
color: "#cbdaff",
fontSize: "16",
},
formatter: function(params,i){
var text = "{a|" + value[i] + "}{a| "+ prop[i]+ "%}";
return text;
},
rich: {
a: {
fontSize: '16px',
color: "#cbdaff",
},
},
},
data: prop,
},
],
series: [
{
type: "bar",
zlevel: 1,
itemStyle: {
normal: {
color: "#6ab9fe",
},
},
barWidth: 8,
data: prop,
},
{
type: "bar",
barWidth: 8,
barGap: "-100%",
data: bgd,
itemStyle: {
normal: {
color: "rgba(24,31,68,1)",
},
},
},
],
};
chChart.setOption(this.option);
window.onresize = chChart.resize;
})
},
},
watch:{
data: function (n,o) {
this.getChartData(this.data)
}
}
}
</script>

View File

@ -20,7 +20,7 @@
<button type="button" :class="nav == 305 ? 'active' : ''" class="sub-btn" @click="doNav(305)"></button>
<button type="button" :class="nav == 306 ? 'active' : ''" class="sub-btn" @click="doNav(306)"></button>
<button type="button" :class="nav == 307 ? 'active' : ''" class="sub-btn" @click="doNav(307)"></button>
<button type="button" :class="nav == 308 ? 'active' : ''" class="sub-btn" @click="doNav(308)"></button>
<button type="button" :class="nav == 308 ? 'active' : ''" class="sub-btn" @click="doNav(308)"></button>
</div>
<div class="header-btn-list-padding menu-row1" style="text-align: left;">
<button type="button" :class="nav == 309 ? 'active' : ''" class="sub-btn" @click="doNav(309)"></button>
@ -45,7 +45,6 @@
<button type="button" :class="nav == 405 ? 'active' : ''" class="sub-btn" @click="doNav(405)"></button>
<button type="button" :class="nav == 406 ? 'active' : ''" class="sub-btn" @click="doNav(406)"></button>
<button type="button" :class="nav == 407 ? 'active' : ''" class="sub-btn" @click="doNav(407)"></button>
<button type="button" :class="nav == 408 ? 'active' : ''" class="sub-btn" @click="doNav(408)"></button>
</div>
</div>
</div>
@ -56,7 +55,7 @@
<div class="header-btn-list-arrow"></div>
<div class="header-btn-list-item" style>
<div class="header-btn-list-padding menu-row1" style="text-align: left;">
<button type="button" :class="nav == 5 ? 'active' : ''" class="sub-btn" @click="doNav(5)"></button>
<button type="button" :class="nav == 502 ? 'active' : ''" class="sub-btn" @click="doNav(502)"></button>
<button type="button" :class="nav == 501 ? 'active' : ''" class="sub-btn" @click="doNav(501)"></button>
</div>
</div>
@ -198,6 +197,9 @@ export default {
case 306:
this.$router.push('/powerIot')
break
case 308:
this.$router.push('/dumbwaiter')
break
case 310:
this.$router.push('/aiWarning')
break
@ -213,6 +215,9 @@ export default {
case 501:
this.$router.push('/photography')
break
case 502:
this.$router.push('/planSchedule')
break
}
},
doLogout() {

View File

@ -82,6 +82,15 @@ const routes = [
/* webpackChunkName: "safetyCheck" */ "../views/safety/powerIot.vue"
),
},
{
path: "/dumbwaiter",
name: "dumbwaiter",
meta: { nav: 308 },
component: () =>
import(
/* webpackChunkName: "safetyCheck" */ "../views/safety/dumbwaiter.vue"
),
},
{
path: "/aiWarning",
name: "aiWarning",
@ -100,6 +109,15 @@ const routes = [
/* webpackChunkName: "safetyCheck" */ "../views/schedule/photography.vue"
),
},
{
path: "/planSchedule",
name: "planSchedule",
meta: { nav: 502 },
component: () =>
import(
/* webpackChunkName: "safetyCheck" */ "../views/schedule/planSchedule.vue"
),
},
];
const router = new VueRouter({
mode: "hash",

View File

@ -18,6 +18,7 @@ import moduleOne33 from "../components/module/module-one-3-3.vue";
import staffSurveyChart from "../components/staffSurveyChart.vue";
import trendChartLine from "../components/trend-chart-line.vue";
import trendLineChart from "../components/trend-line-chart.vue";
import certificateBarChart from "../components/certificate-bar-chart.vue";
import peopleNumber from "@/components/people-number.vue";
import dictTag from "@/components/DictTag/index.vue";
import MyDialog from "@/components/MyDialog.vue";
@ -44,6 +45,7 @@ Vue.component("people-number", peopleNumber);
Vue.component("staff-survey-chart", staffSurveyChart);
Vue.component("trend-chart-line", trendChartLine);
Vue.component("trend-line-chart", trendLineChart);
Vue.component("certificate-bar-chart", certificateBarChart);
Vue.component("my-chart", MyChart);
Vue.component("dict-tag", dictTag);
Vue.component("MyDialog", MyDialog);

View File

@ -0,0 +1,721 @@
<template>
<div class="project-dumbwaiter main-page">
<el-col :span="6" class="h100">
<module-one-3-1 label="设备概况">
<div class="czz-number">
<div class="czz-number-content">
<div class="czz-number-img czz-number-img-blue">
<img src="images/circle_icon_25.png" />
</div>
<div class="survey_content_number">
<p>升降机总数</p>
<div class="survey_content_value">
<span v-cloak v-html="deviceToal"></span>
</div>
</div>
</div>
<div class="czz-number-content">
<div class="czz-number-img czz-number-img-green">
<img src="images/circle_icon_9.png" />
</div>
<div class="survey_content_number">
<p>监控总数</p>
<div class="survey_content_value survey_content_value_color_green">
<span v-cloak v-html="deviceOnlineCount"></span>
</div>
</div>
</div>
</div>
<certificate-bar-chart
:data="certificateData"
:height="100"
></certificate-bar-chart>
<div class="rank-chart" style="height: calc(100% - 224px)">
<div class="rank-chart-title">监控列表</div>
<div class="list-max" style="height: calc(100% - 63px)">
<div
class="list-min"
id="listMin"
@mouseout="listMinMouseout"
@mouseover="listMinMouseover"
>
<div
class="list-for"
v-for="(item, i) in listData"
@click="onTowerCraneList(i)"
>
<div :class="index == i ? 'list-con active' : 'list-con'">
<div class="list-top">
<div class="list-img">
<img src="images/list_img_tj.png" />
</div>
<div class="list-info">
<div class="list-info-name">
设备名称<span>{{ item.deviceName }}</span>
</div>
<div class="list-info-name">
设备状态
<span class="list-info-state" v-if="item.deviceState != 0"
>离线</span
>
<span class="list-info-state active" v-if="item.deviceState == 0"
>在线</span
>
</div>
</div>
</div>
<div class="list-bottom">
<el-row>
<el-col :span="10">
<div class="list-details">
司机<span v-cloak>{{ item.driverName }}</span>
</div>
</el-col>
<el-col :span="14">
<div class="list-details">
电话<span v-cloak>{{ item.driverPhone }}</span>
</div>
</el-col>
<el-col :span="10">
<div class="list-details">
安全员<span v-cloak>{{ item.safetyOfficerName }}</span>
</div>
</el-col>
<el-col :span="14">
<div class="list-details">
电话<span v-cloak>{{ item.safetyOfficerPhone }}</span>
</div>
</el-col>
</el-row>
</div>
<div class="list-time">
最后一次启用时间<span v-cloak>{{ item.lastEnabledTime }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</module-one-3-1>
</el-col>
<el-col :span="18" class="h100">
<el-row>
<el-col :span="16">
<div class="safe-height">
<el-row>
<el-col :span="6">
<div class="screen-module">
<div class="safe-small">
<div class="safe-small-title">运行次数</div>
<div class="safe-small-content">
<div class="safe-small-details">
<p>本月</p>
<span v-cloak v-html="topInfo.top0"></span>
</div>
<div class="safe-small-details">
<p>累计</p>
<span v-cloak v-html="topInfo.top1"></span>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="screen-module">
<div class="safe-small">
<div class="safe-small-title">超载次数</div>
<div class="safe-small-content">
<div class="safe-small-details">
<p>本月</p>
<span v-cloak v-html="topInfo.top2"></span>
</div>
<div class="safe-small-details">
<p>累计</p>
<span v-cloak v-html="topInfo.top3"></span>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="screen-module">
<div class="safe-small">
<div class="safe-small-title">超载率%</div>
<div class="safe-small-content">
<div class="safe-small-details">
<p>本月</p>
<span v-cloak v-html="topInfo.top4"></span>
</div>
<div class="safe-small-details">
<p>累计</p>
<span v-cloak v-html="topInfo.top5"></span>
</div>
</div>
</div>
</div>
</el-col>
<el-col :span="6">
<div class="screen-module">
<div class="safe-small">
<div class="safe-small-title">违章次数</div>
<div class="safe-small-content">
<div class="safe-small-details">
<p>本月</p>
<span v-cloak v-html="topInfo.top6"></span>
</div>
<div class="safe-small-details">
<p>累计</p>
<span v-cloak v-html="topInfo.top7"></span>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
<div class="safe-tower-crane-max">
<div
class="safe-tower-crane-min"
@mouseout="listMinMouseout"
@mouseover="listMinMouseover"
>
<el-row>
<el-col :span="2">
<div class="safe-tower-left" @click="safeTowerLeft"></div>
</el-col>
<el-col :span="20">
<div class="safe-tower-content-max">
<transition :name="direction">
<component :is="comName" :value="dumbwaiterValue"></component>
</transition>
</div>
</el-col>
<el-col :span="2">
<div class="safe-tower-right" @click="safeTowerRight"></div>
</el-col>
</el-row>
</div>
</div>
</div>
</el-col>
<el-col :span="8">
<div class="analyse-max">
<div class="analyse-min" style="height: auto">
<div class="analyse-title">
<div class="analyse-text">报警分析</div>
<div class="analyse-equipment">升降机监测</div>
</div>
<div style="padding: 30px 0">
<el-row>
<el-col :span="8">
<div class="time-study-value">
<p>今日报警数</p>
<div class="analyse-num">
<span v-cloak v-html="dayWarnCount"></span>
</div>
</div>
<div class="time-study-value">
<p>本周报警数</p>
<div class="analyse-num">
<span v-cloak v-html="weekWarnCount"></span>
</div>
</div>
</el-col>
<el-col :span="16">
<div class="survey-oil-title">
<div class="survey-oil-hr"></div>
<div class="survey-oil-text">报警类型</div>
</div>
<div
class="analyse-number-max"
id="afootOverflowType"
@mouseout="listMinMouseoutType"
@mouseover="listMinMouseoverType"
>
<div
class="glr-login-number-max analyse-num-max"
v-for="item in warningList"
>
<div class="glr-login-number-bgd glr-login-number-red-bgd"></div>
<div class="glr-login-number analyse-login-numbe">
<div v-cloak>
<img src="images/text_red_spot.png" />{{ item.warnType }}
</div>
<div class="glr-rate-value glr-rate-red-value">
<span v-cloak>{{ item.warnCount }}</span>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
<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="warningData.length == 0" class="not-data"></div>
<div
v-if="warningData.length > 0"
class="afoot-con-for"
style="height: 180px"
v-for="item in warningData"
>
<div class="afoot-machinery-nam safe-afoot-machinery-nam" v-cloak>
{{ item.warn_context }}
</div>
<div class="afoot-machinery-info">
<div class="afoot-machinery-img">
<img :src="item.images" v-if="item.images" />
</div>
<div class="afoot-machinery-data">
<div class="afoot-machinery-state" v-cloak>
预警值{{ item.warn_value }}
</div>
<div class="afoot-machinery-time" v-cloak>
{{ item.warn_time }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</el-col>
</el-row>
<div style="padding: 0 30px">
<div class="analyse-title analyse_title_blue" style="width: 450px">
<div class="analyse-text">运行数据</div>
</div>
<el-row>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_5.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>高度</div>
<p><span v-cloak v-html="footInfo.foot0"></span> m</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_6.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>楼层</div>
<p><span v-cloak v-html="footInfo.foot1"></span> </p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_7.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>当前人数</div>
<p><span v-cloak v-html="footInfo.foot2"></span> </p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_8.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>当前载重</div>
<p><span v-cloak v-html="footInfo.foot3"></span> t</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_9.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>倾角1</div>
<p><span v-cloak v-html="footInfo.foot4"></span> °</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_9.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>倾角2</div>
<p><span v-cloak v-html="footInfo.foot5"></span> °</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_10.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>风速</div>
<p><span v-cloak v-html="footInfo.foot6"></span> m/s</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_11.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>速度</div>
<p><span v-cloak v-html="footInfo.foot7"></span> m/s</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_12.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>速度方向</div>
<p><span v-cloak v-html="footInfo.foot8"></span></p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_2.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>前门状态</div>
<p>
<span
:class="footInfo.foot9 == '打开' ? 'open' : 'close'"
v-cloak
v-html="footInfo.foot9"
></span>
</p>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="xhz-device-data-min" style="padding: 25px 10px">
<div class="survey_content">
<div class="survey_content_img xhz-education_bgd">
<img src="images/education_icon_13.png" />
</div>
</div>
<div class="xhz-current-value-data">
<div>后门状态</div>
<p>
<span
:class="footInfo.foot10 == '打开' ? 'open' : 'close'"
v-cloak
v-html="footInfo.foot10"
></span>
</p>
</div>
</div>
</el-col>
</el-row>
</div>
</el-col>
</div>
</template>
<script>
import debounce from "lodash.debounce";
import "@/components/tower-crane-value-1";
import "@/components/tower-crane-value-2";
export default {
data() {
return {
deviceToal: 4,
deviceOnlineCount: 10,
certificateData: [],
listData: [],
interval: undefined, //
//
index: 0,
//
dumbwaiterValue: {},
comName: "dumbwaiter-1",
direction: "right",
deviceId: 0,
topInfo: {
top0: 0,
top1: 0,
top2: 4250,
top3: 68730,
top4: 0,
top5: 0,
top6: 17000,
top7: 274920,
},
footInfo: {
foot0: 10,
foot1: 10,
foot2: 10,
foot3: 10,
foot4: 10,
foot5: 10,
foot6: 10,
foot7: 10,
foot8: 10,
foot9: "",
foot10: "",
},
warningData: [],
dayWarnCount: 22,
weekWarnCount: 999,
//
warningTypeInterval: undefined,
warningTypeIndex: 0,
warningList: [],
warningInterval: undefined,
forIndex: 0,
warningData: [],
};
},
mounted() {
this.$store.dispatch("ChangeNav", 308);
this.$bus.$on("projectChange", (prj) => {
this.selProject = prj;
this.init();
});
this.selProject = this.$store.getters.selProject;
this.init();
},
created() {},
methods: {
init() {
this.certificateData = JSON.parse(
'[{"text":"在线数量","value":5},{"text":"离线数量","value":1}]'
);
this.listData = JSON.parse(
'[{"createUserid":null,"ratedSpeed":"1.8","delFlag":"0","deviceId":"3223081738","deviceName":"2#-2","ratedPeopleCount":"9","entryTime":"2024-03-09 15:35:42","lastEnabledTime":"2024-03-09 15:35:42","safetyOfficerName":"马宁","maxHeight":120.5,"createTime":"2023-09-12 18:25:13","cageSize":"800*800","ratedLoad":"2000","safetyOfficerPhone":"18629159632","driverName":"张巧团","driverPhone":"17324808902","id":5,"deviceState":"0","projectId":"98"},{"createUserid":null,"ratedSpeed":"4.9","delFlag":"0","deviceId":"3223081741","deviceName":"3223081741","ratedPeopleCount":"9","entryTime":"2024-03-09 15:35:42","lastEnabledTime":"2024-03-10 10:32:49","safetyOfficerName":"马宁","maxHeight":160.2,"createTime":"2023-09-12 18:25:13","cageSize":"800*800","ratedLoad":"2000","safetyOfficerPhone":"18629159632","driverName":null,"driverPhone":null,"id":6,"deviceState":"0","projectId":"98"},{"createUserid":null,"ratedSpeed":"4.9","delFlag":"0","deviceId":"3223081748","deviceName":"3223081748","ratedPeopleCount":"9","entryTime":"2024-03-09 15:35:42","lastEnabledTime":"2024-03-10 10:46:36","safetyOfficerName":"马宁","maxHeight":187.2,"createTime":"2023-09-12 18:25:13","cageSize":"800*800","ratedLoad":"2000","safetyOfficerPhone":"18629159632","driverName":null,"driverPhone":null,"id":7,"deviceState":"0","projectId":"98"},{"createUserid":null,"ratedSpeed":"1.6","delFlag":"0","deviceId":"3223081722","deviceName":"3#-1","ratedPeopleCount":"9","entryTime":null,"lastEnabledTime":"2024-03-10 09:48:34","safetyOfficerName":"马宁","maxHeight":122.9,"createTime":"2023-09-12 18:25:13","cageSize":"800*800","ratedLoad":"2000","safetyOfficerPhone":"18629159632","driverName":"高军平","driverPhone":"15139573902","id":8,"deviceState":"0","projectId":"98"},{"createUserid":null,"ratedSpeed":"1.6","delFlag":"0","deviceId":"3223081749","deviceName":"3#-2","ratedPeopleCount":"9","entryTime":null,"lastEnabledTime":"2024-03-09 13:47:07","safetyOfficerName":"马宁","maxHeight":124.8,"createTime":"2023-09-12 18:25:13","cageSize":null,"ratedLoad":"2000","safetyOfficerPhone":"18629159632","driverName":"郭伟娟","driverPhone":"15239586568","id":9,"deviceState":"0","projectId":"98"}]'
);
this.warningList = [
{ warnType: "报警类型A", warnCount: 4 },
{ warnType: "报警类型B", warnCount: 4 },
{ warnType: "报警类型C", warnCount: 4 },
{ warnType: "报警类型D", warnCount: 4 },
{ warnType: "报警类型E", warnCount: 4 },
{ warnType: "报警类型F", warnCount: 4 },
{ warnType: "报警类型G", warnCount: 4 },
{ warnType: "报警类型H", warnCount: 4 },
];
this.warningData = [
{
warn_value: "预警A",
images: ["images/831.jpg"],
warn_context: "告警内容",
warn_time: "24-02-02 14:00",
project_abbreviation: "xxx项目",
},
{
warn_value: "预警A",
images: ["images/831.jpg"],
warn_context: "告警内容",
time: "24-02-02 14:00",
project_abbreviation: "xxx项目",
},
{
warn_value: "预警A",
images: ["images/831.jpg"],
warn_context: "告警内容",
time: "24-02-02 14:00",
project_abbreviation: "xxx项目",
},
];
//list
if (this.listData.length > 0) {
this.interval = setInterval(this.automaticRoll, 10000);
}
//
this.warningTypeInterval = setInterval(this.automaticRollType, 5000);
//
this.warningInterval = setInterval(this.safeAutomaticRoll, 5000);
this.index = 0;
this.deviceId = this.listData[0].id;
this.updateDumbwaiterValue();
},
onTowerCraneList(n) {
this.index = n;
this.deviceId = this.listData[n].id;
//
this.direction = "right";
if (this.comName == "dumbwaiter-1") {
this.comName = "dumbwaiter-2";
} else {
this.comName = "dumbwaiter-1";
}
},
//
listMinMouseover() {
clearInterval(this.interval);
},
listMinMouseout() {
this.interval = setInterval(this.automaticRoll, 10000);
},
automaticRoll() {
//
if (this.direction == "right") {
if (this.index == this.listData.length - 1) {
this.index = 0;
} else {
this.index = this.index + 1;
}
} else {
if (this.index == 0) {
this.index = this.listData.length - 1;
} else {
this.index = this.index - 1;
}
}
if (this.comName == "dumbwaiter-1") {
this.comName = "dumbwaiter-2";
} else {
this.comName = "dumbwaiter-1";
}
var height = $(".list-for").innerHeight();
$("#listMin").animate({ scrollTop: height * this.index + "px" });
this.deviceId = this.listData[this.index].deviceId;
this.updateDumbwaiterValue();
},
updateDumbwaiterValue() {
this.dumbwaiterValue = {
name: this.listData[this.index].deviceName,
cageSize: this.listData[this.index].cageSize,
loadCapacity: this.listData[this.index].ratedLoad,
numberPeople: this.listData[this.index].ratedPeopleCount,
liftingHeight: this.listData[this.index].ratedPeopleCount,
runningSpeed: this.listData[this.index].ratedSpeed,
enterTime: this.listData[this.index].entryTime,
};
},
safeTowerLeft() {
this.direction = "left";
this.automaticRoll();
},
safeTowerRight() {
//
this.direction = "right";
this.automaticRoll();
},
//
automaticRollType() {
var height = $(".glr-login-number-max").innerHeight();
if (
$("#afootOverflowType").scrollTop() ==
height * this.warningList.length - $("#afootOverflowType").innerHeight()
) {
this.warningTypeIndex = 0;
} else {
this.warningTypeIndex = this.warningTypeIndex + 1;
}
$("#afootOverflowType").animate({
scrollTop: height * this.warningTypeIndex + "px",
});
},
listMinMouseoverType() {
clearInterval(this.warningTypeInterval);
},
listMinMouseoutType() {
this.warningTypeInterval = setInterval(this.automaticRollType, 5000);
},
//
safeAutomaticRoll() {
var height = $(".safe-afoot-overflow").innerHeight();
if (this.forIndex == this.warningData.length) {
this.forIndex = 0;
} else {
this.forIndex = this.forIndex + 1;
}
$("#afootOverflow").animate({ scrollTop: height * this.forIndex + "px" });
},
warningListMinMouseover() {
clearInterval(this.warningInterval);
},
warningListMinMouseout() {
this.warningInterval = setInterval(this.safeAutomaticRoll, 5000);
},
},
};
</script>
<style lang="less">
.project-dumbwaiter {
.left-enter {
left: -100%;
transform: translateX(-100%);
}
.left-leave-to {
left: 0;
transform: translateX(100%);
position: absolute;
}
.left-enter-active,
.left-leave-active {
transition: all 1s ease;
}
.right-enter {
left: 100%;
transform: translateX(100%);
}
.right-leave-to {
left: 0;
transform: translateX(-100%);
position: absolute;
}
.right-enter-active,
.right-leave-active {
transition: all 1s ease;
}
}
</style>

View File

@ -0,0 +1,264 @@
<template>
<div class="project-photography main-page">
<el-col :span="6" class="h100">
<module-one-1-1 label="项目全景">
<div class="photography-list">
<template v-if="photographyList && photographyList.length > 0">
<el-carousel height="100%" :autoplay="false">
<el-carousel-item v-for="(item, idx) in photographyList" :key="idx">
<video controls="controls" class="photography-video" loop="loop">
<source :src="item.videoUrl" type="video/mp4" :key="item.videoUrl" />
您的浏览器不支持Video标签
</video>
<div class="photography-list-title">{{ item.videoDate }}</div>
</el-carousel-item>
</el-carousel>
</template>
<template v-else>
<div class="photography-list-nodata">
<div>
<i class="video-play">
<svg
class="icon"
style="
width: 30px;
height: 30px;
vertical-align: middle;
fill: currentColor;
overflow: hidden;
"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="4551"
>
<path
d="M128 138.666667c0-47.232 33.322667-66.666667 74.176-43.562667l663.146667 374.954667c40.96 23.168 40.853333 60.8 0 83.882666L202.176 928.896C161.216 952.064 128 932.565333 128 885.333333v-746.666666z"
fill="#3D3D3D"
p-id="4552"
/>
</svg>
</i>
</div>
<div class="photography-list-no-title">暂无数据</div>
</div>
</template>
</div>
</module-one-1-1>
<module-one-2-1 label="进行中的计划">
<div
class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"
>
<div class="czz-number-img czz-number-img-blue">
<svg-icon icon-class="notesearch"></svg-icon>
</div>
<div>
<div class="equipment-list-data equipment-list-data_div_top">
<span>测试计划名称1</span>
</div>
<div class="equipment-list-data equipment-list-data_div_bottom">
<span class="sp-data">{{ it.value || 0 }}</span>
</div>
</div>
</div>
<div
class="equipment-list-min equipment-list-min_div quality-target-index-min quality-target-index-min_div"
>
<div class="czz-number-img czz-number-img-blue">
<svg-icon icon-class="notesearch"></svg-icon>
</div>
<div>
<div class="equipment-list-data equipment-list-data_div_top">
<span>测试计划名称2</span>
</div>
<div class="equipment-list-data equipment-list-data_div_bottom">
<span class="sp-data">{{ it.value || 0 }}</span>
</div>
</div>
</div>
</module-one-2-1>
</el-col>
<el-col :span="18" class="no-title">
<module-one-3-3 :notitle="true">
<template v-if="info">
<div class="right-title">
<span class="sp-title">{{ info.videoDate }}</span>
</div>
<video style="width: 98%" controls>
<source :src="info.videoUrl" type="video/mp4" />
您的浏览器不支持Video标签
</video>
</template>
<div v-else style="text-align: center" class="div-no-data">
<img src="images/nodata.png" style="width: 120px" />
<div style="text-align: center; font-size: 12px; color: #888">暂无数据</div>
</div>
</module-one-3-3>
</el-col>
</div>
</template>
<script>
export default {
data() {
return {
photographyList: [],
info: null,
activeNames: [],
infoList: {},
};
},
mounted() {
window.photography = this;
this.$store.dispatch("ChangeNav", 502);
this.$bus.$on("projectChange", (prj) => {
this.selProject = prj;
this.init();
});
this.selProject = this.$store.getters.selProject;
this.init();
},
methods: {
init() {
if (!this.selProject) {
return;
}
this.initPhotographyList();
},
initPhotographyList() {
this.$api.detail.photographyList(this.selProject.id).then((d) => {
this.photographyList = d.data;
});
},
},
};
</script>
<style lang="less">
.project-photography {
.div-no-data {
text-align: center;
height: 600px;
display: flex;
align-items: center;
justify-content: center;
}
.no-title {
.right-title {
height: 200px;
display: flex;
align-items: center;
justify-content: center;
}
.sp-title {
display: inline-block;
line-height: 72px;
padding: 0px 40px;
font-size: 40px;
background-size: 100% 100%;
background-image: url("../../assets/images/bgphoto.png");
}
video {
width: 100%;
height: calc(100% - 201px);
}
/deep/ .screen-one-3-3 {
background-image: none;
border: solid 1px #409eff5c;
.module-title {
display: none;
}
}
}
.left-list {
max-height: calc(100% - 40px);
overflow-y: auto;
&::-webkit-scrollbar {
width: 4px;
height: 4px;
}
}
.screen-one-3-1 {
height: calc(100% - 20px) !important;
.left-list {
padding: 10px 10px 10px 0px;
.video-item {
line-height: 40px;
border: solid 1px #1e8fff83;
padding: 0px 20px;
margin-top: 10px;
position: relative;
cursor: pointer;
&:first-child {
margin-top: 0px;
}
.header-icon {
position: absolute;
right: 10px;
top: 10px;
}
&.is-active {
background-color: #089fff;
color: #fff;
&:hover {
background-color: #089fff;
color: #fff;
}
}
&:hover {
background-color: #08a0ff95;
color: #fff;
}
}
}
}
/deep/ .screen-one-3-1 {
.el-collapse {
border: none;
margin-top: 4px;
.el-collapse-item {
}
.el-collapse-item__header {
background-color: #097fca2e;
color: #089fff;
border-bottom: dotted 1px #089fff77;
}
.el-collapse-item__content {
padding-bottom: 12px;
}
.el-collapse-item__wrap {
background-color: transparent;
border: none;
.img-item {
margin-top: 8px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #fff;
position: relative;
}
.video-item {
position: relative;
line-height: 30px;
display: flex;
align-items: center;
cursor: pointer;
border-bottom: solid 1px #089fff77;
.div-date {
width: calc(90% - 24px);
text-align: left;
bottom: 0px;
color: #089fff;
padding-left: 24px;
}
}
}
}
}
}
</style>