<template>
|
<div class="container">
|
<div class="big-title" @click="goBack()">国泰新华智能巡检系统</div>
|
<div style="height: 20px;font-size: 14px;line-height: 20px; color: #00ffff; margin-top: 4px">{{ present }}</div>
|
<div class="btns">
|
<div class="fullbtn" @click="onScreenfullClick">
|
<div class="toFull">
|
<i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i>
|
</div>
|
<div>全屏</div>
|
</div>
|
<div class="backBtn" @click="goBack()">
|
<img src="../../../assets/loginPage/back-icon.png"/>
|
<div>退出</div>
|
</div>
|
</div>
|
<div class="blocks">
|
<div>
|
<div class="star-pic">
|
<dv-decoration-12 scanDur="5" haloDur="4" class="scan"/>
|
<div class="star-bg"><img src="../../../assets/loginPage/star-bg.png" /></div>
|
<div class="star"><img src="../../../assets/loginPage/device-pic.png" /></div>
|
</div>
|
<div class="line-map" v-if="dataList && dataList.length > 0">
|
<div class="line-item" v-for="(item, index) in dataList" :key="index">
|
<div class="picbox">
|
<div class="imgbox">
|
<img :src="item.rfidImage==null?defaultImg:item.rfidImage"/>
|
</div>
|
<p>
|
RFID: <span>{{ item.rfid }}</span>
|
</p>
|
<p>
|
位置: <span>{{ item.region.toString() }}</span>
|
</p>
|
</div>
|
<div class="area-head">
|
<div class="indicator" :class="item.points.some((e) => e.reportResult == 1) ? 'somewarning' : (item.points.some((e) => e.reportResult == null) ? 'someUndone' : '')">
|
<div class="indi-dot"></div>
|
<!-- <div class="indi-pulse"></div>-->
|
<!-- <div class="indi-pulse1"></div>-->
|
</div>
|
<div class="arrow" v-if="item.points.some((e) => e.reportResult != null)"></div>
|
<div class="top-line" :class="item.points.some((e) => e.reportResult !== null) ? '' : 'fadeLine'"></div>
|
</div>
|
<div class="more-info">
|
<div class="item" v-for="(t, i) in item.points" :key="i" :class="t.reportResult == null ? 'undone' : t.reportResult == 1 ? 'warning' : ''">
|
<section>
|
<div class="dot"></div>
|
<div class="pulse"></div>
|
<div class="pulse1"></div>
|
</section>
|
<div :class="t.reportResult == null ? 'noBorder' : t.reportResult == 1 ? 'redBorder' : ''">
|
<div>
|
<span>巡检点:</span><span>{{ t.point }}</span>
|
</div>
|
<div>
|
<span>巡检状态:</span><span>{{ t.pointCheckStatus == 1 ? '未完成' : '已完成' }}</span>
|
</div>
|
<div v-if="t.reportResult != null">
|
<span>巡检指标:</span><span>{{ t.quotaContent }}</span>
|
</div>
|
<div v-if="(t.dataReportType == 2 || t.dataReportType == 3) && t.secondReferenceResult">
|
<span>参数:</span><span class="target">{{ t.secondReferenceResult + t.quotaUnit }}</span>
|
</div>
|
<div>
|
<span>巡检结果:</span><span class="target">{{ t.reportResult == null ? '--' : t.reportResult == 0 ? '正常' : '异常' }}</span>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="line-item finish">
|
<div class="picbox"></div>
|
<div class="area-head">
|
<div class="finish-point">
|
<div>完成巡检</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="tip" v-else>抱歉,暂时查询不到巡检路线...</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script lang="ts">
|
import screenfull from 'screenfull';
|
import { lineApi } from '/@/api/intelligentLine';
|
import {toRefs, reactive, ref, onMounted, onUnmounted, computed, nextTick} from 'vue';
|
import {useRoute} from 'vue-router';
|
import { storeToRefs } from 'pinia';
|
import { initBackEndControlRoutes } from '/@/router/backEnd';
|
import { Session } from '/@/utils/storage';
|
import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
|
import { ElTable } from 'element-plus';
|
import { FormInstance, FormRules, ElMessage } from 'element-plus';
|
import { useUserInfo } from '/@/stores/userInfo';
|
|
// 定义接口来定义对象的类型
|
interface stateType {
|
present: string;
|
isScreenfull: boolean;
|
path: string;
|
socket: any;
|
socketData: string;
|
data: Array<any>;
|
id: string;
|
defaultImg: string
|
}
|
export default {
|
name: 'intelligentLine',
|
components: {},
|
setup() {
|
const userInfo = useUserInfo();
|
const { userInfos } = storeToRefs(userInfo);
|
const route = useRoute();
|
const state = reactive<stateType>({
|
present: '',
|
isScreenfull: false,
|
path: '',
|
socketData: '',
|
socket: null,
|
data: [],
|
id: '',
|
defaultImg: new URL('../../../assets/default-img.jpg',import.meta.url).href
|
});
|
|
onMounted(() => {
|
setInterval(() => {
|
state.present = new Date().toLocaleString();
|
}, 1000);
|
let curId = route.query.id
|
state.id = curId.toString()
|
getLine(state.id)
|
getUrl(state.id)
|
});
|
|
const dataList = computed(() => {
|
return userInfos.value.dataList;
|
});
|
|
// 获取url
|
|
const getUrl =async (id:string)=>{
|
const res = await lineApi().getUrl();
|
if (res.data.code === '200') {
|
state.path = 'http://' + res.data.data.ip + ':' + res.data.data.port + '/ws/test/'
|
if (typeof WebSocket === 'undefined') {
|
alert('您的浏览器不支持socket');
|
} else {
|
// 实例化socket
|
debugger
|
let uid = userInfos.value.uid.toString()
|
var url = state.path + uid + '*' + id;
|
console.log(url,'url',uid,'uid')
|
url = url.replace('https', 'ws').replace('http', 'ws');
|
console.log(url, '获取地址');
|
state.socket = new WebSocket(url);
|
// 监听socket连接
|
state.socket.onopen = () => {
|
console.log('socket连接成功');
|
};
|
// 监听socket错误信息
|
state.socket.onerror = () => {
|
console.log('socket连接错误');
|
};
|
// 监听socket消息
|
state.socket.onmessage = (msg) => {
|
if (msg.data === '连接成功') return;
|
console.log(msg.data,'data')
|
userInfos.value.dataList = JSON.parse(msg.data);
|
};
|
}
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
}
|
}
|
|
// const send = () => {
|
// state.socket.send(params);
|
// };
|
|
// 接口获取数据
|
const getLine = async (id:string) => {
|
let res = await lineApi().getLine({ id: id });
|
if (res.data.code === '200') {
|
userInfos.value.dataList = res.data.data;
|
} else {
|
ElMessage({
|
type: 'warning',
|
message: res.data.msg
|
});
|
}
|
};
|
|
// 全屏
|
const onScreenfullClick = () => {
|
if (!screenfull.isEnabled) {
|
ElMessage.warning('暂不不支持全屏');
|
return false;
|
}
|
screenfull.toggle();
|
screenfull.on('change', () => {
|
if (screenfull.isFullscreen) {
|
state.isScreenfull = true;
|
} else {
|
state.isScreenfull = false;
|
}
|
});
|
};
|
|
// 返回
|
const goBack = () => {
|
window.history.go(-1);
|
};
|
|
// 页面关闭处理
|
onUnmounted(() => {
|
// 销毁监听
|
nextTick(()=>{
|
state.socket.onclose = () => {
|
console.log('socket已经关闭');
|
};
|
})
|
});
|
return {
|
dataList,
|
goBack,
|
onScreenfullClick,
|
...toRefs(state)
|
};
|
}
|
};
|
</script>
|
|
<!-- Add "scoped" attribute to limit CSS to this components only -->
|
<style scoped lang="scss">
|
@media screen and (min-width: 1366px) {
|
.big-title {
|
font-size: 28px;
|
margin: 10px 0 20px;
|
}
|
.btns {
|
position: absolute;
|
z-index: 99999;
|
right: 60px;
|
top: 40px;
|
div {
|
font-size: 16px;
|
color: #00ffff;
|
}
|
}
|
.line-item {
|
width: calc((100vw - 40px) / 6);
|
padding-left: 20px;
|
display: flex;
|
flex-direction: column;
|
align-items: flex-start;
|
margin-right: 20px;
|
flex-wrap: nowrap;
|
|
.picbox {
|
width: 100%;
|
height: 200px;
|
padding: 10px;
|
margin-bottom: 20px;
|
box-sizing: border-box;
|
.imgbox{
|
width: 100%;
|
height: 120px;
|
position: relative;
|
margin-bottom: 10px;
|
border-radius: 4px;
|
overflow: hidden;
|
img {
|
display: block;
|
width: 100%;
|
height: auto;
|
position: absolute;
|
top: 0;
|
left: 0;
|
bottom: 0;
|
right: 0;
|
margin: auto;
|
}
|
}
|
|
p {
|
font-size: 14px;
|
white-space: nowrap;
|
color: rgba(255, 255, 255, 0.8);
|
margin-bottom: 4px;
|
span {
|
color: #fff;
|
}
|
}
|
}
|
}
|
.item {
|
width: calc((100vw - 40px) / 6);
|
height: calc((100vh - 130px) / 5);
|
padding: 0 40px 20px 50px;
|
position: relative;
|
box-sizing: border-box;
|
border-left: 1px solid #36fcfc;
|
|
&:last-of-type {
|
border: none;
|
}
|
|
section {
|
width: 24px;
|
height: 24px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid rgba(0, 114, 255, 0.6);
|
top: -12px;
|
left: 10px;
|
|
.dot {
|
position: absolute;
|
width: 12px;
|
height: 12px;
|
left: 5px;
|
top: 5px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #0072ff;
|
border-radius: 50%;
|
background-color: #0072ff;
|
z-index: 2;
|
}
|
.pulse {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072ff;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn 2s ease-out;
|
-moz-animation: warn 2s ease-out;
|
animation: warn 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072ff;
|
}
|
.pulse1 {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072ff;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn1 2s ease-out;
|
-moz-animation: warn1 2s ease-out;
|
animation: warn1 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072ff;
|
}
|
}
|
& > div {
|
padding: 10px 0;
|
transform: translateY(-14px);
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));
|
border: 1px solid rgba(54, 252, 252, 1);
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
|
div {
|
margin-bottom: 5px;
|
&:last-of-type {
|
margin-bottom: 0;
|
}
|
span {
|
display: inline-block;
|
white-space: nowrap;
|
width: 50%;
|
font-size: 13px;
|
color: #fff;
|
text-align: left;
|
|
&:first-of-type {
|
text-align: right;
|
color: rgba(255, 255, 255, 0.8);
|
}
|
}
|
}
|
}
|
.noBorder{
|
border: 1px solid rgba(54, 252, 252, 0.1);
|
}
|
.redBorder{
|
border: 1px solid #ff0000;
|
}
|
p {
|
width: 140px;
|
height: 50px;
|
font-size: 18px;
|
line-height: 48px;
|
text-align: center;
|
color: #fff;
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));
|
border: 1px solid rgba(54, 252, 252, 0.6);
|
}
|
}
|
.finish-point {
|
position: absolute;
|
width: 90px;
|
height: 90px;
|
border: 2px solid #0072ff;
|
left: -30px;
|
top: -45px;
|
border-radius: 50%;
|
|
& > div {
|
width: 80px;
|
height: 80px;
|
position: absolute;
|
left: 3px;
|
top: 3px;
|
background: #0072ff;
|
border-radius: 50%;
|
color: #fff;
|
font-size: 16px;
|
line-height: 80px;
|
text-align: center;
|
font-weight: bolder;
|
}
|
}
|
}
|
|
@media screen and (min-width: 1200px) and (max-width: 1366px){
|
.big-title {
|
font-size: 28px;
|
margin: 10px 0 20px;
|
}
|
.btns {
|
position: absolute;
|
z-index: 99999;
|
right: 40px;
|
top: 40px;
|
div {
|
font-size: 14px;
|
color: #00ffff;
|
}
|
}
|
.line-item {
|
width: calc((100vw - 40px) / 5);
|
padding-left: 20px;
|
display: flex;
|
flex-direction: column;
|
align-items: flex-start;
|
margin-right: 20px;
|
flex-wrap: nowrap;
|
.picbox {
|
width: 100%;
|
height: 180px;
|
padding: 10px;
|
margin-bottom: 40px;
|
box-sizing: border-box;
|
.imgbox{
|
width: 100%;
|
height: 100px;
|
position: relative;
|
margin-bottom: 6px;
|
border-radius: 4px;
|
overflow: hidden;
|
img {
|
display: block;
|
width: 100%;
|
height: auto;
|
position: absolute;
|
top: 0;
|
left: 0;
|
bottom: 0;
|
right: 0;
|
margin: auto;
|
}
|
}
|
p {
|
font-size: 14px;
|
white-space: nowrap;
|
color: rgba(255, 255, 255, 0.8);
|
margin-top: 10px;
|
span {
|
color: #fff;
|
}
|
}
|
}
|
}
|
.item {
|
width: calc((100vw - 40px) / 5);
|
height: calc((100vh - 130px) / 5);
|
padding: 0 20px 20px 40px;
|
position: relative;
|
box-sizing: border-box;
|
border-left: 1px solid #36fcfc;
|
|
&:last-of-type {
|
border: none;
|
}
|
|
section {
|
width: 24px;
|
height: 24px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid rgba(0, 114, 255, 0.6);
|
top: -12px;
|
left: 10px;
|
|
.dot {
|
position: absolute;
|
width: 12px;
|
height: 12px;
|
left: 5px;
|
top: 5px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #0072FF;
|
border-radius: 50%;
|
background-color: #0072FF;
|
z-index: 2;
|
}
|
.pulse {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072FF;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn 2s ease-out;
|
-moz-animation: warn 2s ease-out;
|
animation: warn 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072FF;
|
}
|
.pulse1 {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072FF;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn1 2s ease-out;
|
-moz-animation: warn1 2s ease-out;
|
animation: warn1 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072FF;
|
}
|
}
|
& > div {
|
width: 90%;
|
padding: 10px 0;
|
transform: translateY(-14px);
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));
|
border: 1px solid rgba(54, 252, 252, 1);
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
|
div {
|
width: 100%;
|
margin-bottom: 5px;
|
&:last-of-type {
|
margin-bottom: 0;
|
}
|
span {
|
display: inline-block;
|
white-space: nowrap;
|
width: 50%;
|
font-size: 13px;
|
color: #fff;
|
text-align: left;
|
|
&:first-of-type {
|
text-align: right;
|
color: rgba(255, 255, 255, 0.8);
|
}
|
}
|
}
|
}
|
.noBorder{
|
border: 1px solid rgba(54, 252, 252, 0.1);
|
}
|
.redBorder{
|
border: 1px solid #ff0000;
|
}
|
p {
|
width: 140px;
|
height: 50px;
|
font-size: 18px;
|
line-height: 48px;
|
text-align: center;
|
color: #fff;
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));
|
border: 1px solid rgba(54, 252, 252, 0.6);
|
}
|
}
|
.finish-point {
|
position: absolute;
|
width: 80px;
|
height: 80px;
|
border: 1px solid #0072ff;
|
left: -20px;
|
top: -40px;
|
border-radius: 50%;
|
|
& > div {
|
width: 70px;
|
height: 70px;
|
position: absolute;
|
left: 4px;
|
top: 4px;
|
background: #0072ff;
|
border-radius: 50%;
|
color: #fff;
|
font-size: 14px;
|
line-height: 70px;
|
text-align: center;
|
font-weight: bolder;
|
}
|
}
|
}
|
|
@media screen and (max-width: 1200px){
|
.big-title {
|
font-size: 20px;
|
margin: 5px 0 10px;
|
}
|
.btns {
|
position: absolute;
|
z-index: 99999;
|
right: 20px;
|
top: 40px;
|
div {
|
font-size: 12px;
|
color: #00ffff;
|
}
|
}
|
.line-item {
|
width: 20vw;
|
padding-left: 10px;
|
display: flex;
|
flex-direction: column;
|
align-items: flex-start;
|
margin-right: 20px;
|
flex-wrap: nowrap;
|
.picbox {
|
width: 100%;
|
height: 160px;
|
padding: 10px;
|
margin-bottom: 30px;
|
box-sizing: border-box;
|
.imgbox{
|
width: 100%;
|
height: 80px;
|
position: relative;
|
margin-bottom: 10px;
|
border-radius: 4px;
|
overflow: hidden;
|
img {
|
display: block;
|
width: 100%;
|
height: auto;
|
position: absolute;
|
top: 0;
|
left: 0;
|
bottom: 0;
|
right: 0;
|
margin: auto;
|
}
|
}
|
p {
|
font-size: 12px;
|
color: rgba(255, 255, 255, 0.8);
|
margin-top: 6px;
|
span {
|
color: #fff;
|
}
|
}
|
}
|
}
|
.item {
|
width: 20vw;
|
height: calc((100vh - 130px) / 5);
|
padding: 0 0 20px 30px;
|
position: relative;
|
box-sizing: border-box;
|
border-left: 1px solid #36fcfc;
|
|
&:last-of-type {
|
border: none;
|
}
|
|
section {
|
width: 24px;
|
height: 24px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid rgba(0, 114, 255, 0.6);
|
top: -12px;
|
left: 2px;
|
|
.dot {
|
position: absolute;
|
width: 12px;
|
height: 12px;
|
left: 5px;
|
top: 5px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #0072ff;
|
border-radius: 50%;
|
background-color: #0072ff;
|
z-index: 2;
|
}
|
.pulse {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072ff;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn 2s ease-out;
|
-moz-animation: warn 2s ease-out;
|
animation: warn 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072ff;
|
}
|
.pulse1 {
|
position: absolute;
|
width: 48px;
|
height: 48px;
|
left: -13px;
|
top: -13px;
|
border: 1px solid #0072ff;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn1 2s ease-out;
|
-moz-animation: warn1 2s ease-out;
|
animation: warn1 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #0072ff;
|
}
|
}
|
& > div {
|
width: 80%;
|
padding: 4px 0;
|
transform: translateY(-14px);
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(8, 109, 209, 0.4), rgba(11, 255, 255, 0.2));
|
border: 1px solid rgba(54, 252, 252, 1);
|
display: flex;
|
flex-direction: column;
|
justify-content: center;
|
|
div {
|
width: 100%;
|
margin-bottom: 2px;
|
&:last-of-type {
|
margin-bottom: 0;
|
}
|
span {
|
width: 50%;
|
display: inline-block;
|
white-space: nowrap;
|
font-size: 12px;
|
color: #fff;
|
text-align: left;
|
|
&:first-of-type {
|
text-align: right;
|
color: rgba(255, 255, 255, 0.8);
|
}
|
}
|
}
|
}
|
.noBorder{
|
border: 1px solid rgba(54, 252, 252, 0.1);
|
}
|
.redBorder{
|
border: 1px solid #ff0000;
|
}
|
p {
|
width: 140px;
|
height: 50px;
|
font-size: 18px;
|
line-height: 48px;
|
text-align: center;
|
color: #fff;
|
border-radius: 8px;
|
background-image: linear-gradient(to right, rgba(11, 255, 255, 0.2), rgba(8, 109, 209, 0.4));
|
border: 1px solid rgba(54, 252, 252, 0.6);
|
}
|
}
|
.finish-point {
|
position: absolute;
|
width: 70px;
|
height: 70px;
|
border: 1px solid #0072ff;
|
left: -10px;
|
top: -35px;
|
border-radius: 50%;
|
|
& > div {
|
width: 60px;
|
height: 60px;
|
position: absolute;
|
left: 4px;
|
top: 4px;
|
background: #0072ff;
|
border-radius: 50%;
|
color: #fff;
|
font-size: 12px;
|
line-height: 60px;
|
text-align: center;
|
font-weight: bolder;
|
}
|
}
|
}
|
|
@keyframes warn {
|
0% {
|
transform: scale(0.3);
|
-webkit-transform: scale(0.3);
|
opacity: 0;
|
}
|
|
25% {
|
transform: scale(0.3);
|
-webkit-transform: scale(0.3);
|
opacity: 0.1;
|
}
|
|
50% {
|
transform: scale(0.5);
|
-webkit-transform: scale(0.5);
|
opacity: 0.3;
|
}
|
|
75% {
|
transform: scale(0.8);
|
-webkit-transform: scale(0.8);
|
opacity: 0.6;
|
}
|
|
100% {
|
transform: scale(1);
|
-webkit-transform: scale(1);
|
opacity: 0;
|
}
|
}
|
|
@keyframes warn1 {
|
0% {
|
transform: scale(0.3);
|
-webkit-transform: scale(0.3);
|
opacity: 0;
|
}
|
|
25% {
|
transform: scale(0.3);
|
-webkit-transform: scale(0.3);
|
opacity: 0.1;
|
}
|
|
50% {
|
transform: scale(0.3);
|
-webkit-transform: scale(0.3);
|
opacity: 0.3;
|
}
|
|
75% {
|
transform: scale(0.5);
|
-webkit-transform: scale(0.5);
|
opacity: 0.6;
|
}
|
|
100% {
|
transform: scale(0.8);
|
-webkit-transform: scale(0.8);
|
opacity: 0;
|
}
|
}
|
|
@keyframes circle {
|
0% {
|
transform: rotate(0);
|
-webkit-transform: rotate(0);
|
}
|
100% {
|
transform: rotate(360deg);
|
-webkit-transform: rotate(360deg);
|
}
|
}
|
@keyframes run {
|
to {
|
transform: translateX(calc((100vw - 180px) / 6 - 80px));
|
}
|
}
|
.container {
|
width: 100%;
|
height: 100%;
|
position: relative;
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
background: url('../../../assets/loginPage/map-bg.jpg') no-repeat center;
|
background-size: 100% 100%;
|
.big-title {
|
height: 40px;
|
line-height: 40px;
|
font-weight: bold;
|
text-align: center;
|
color: #fff;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
}
|
.btns {
|
display: flex;
|
align-items: center;
|
.fullbtn {
|
cursor: pointer;
|
display: flex;
|
align-items: center;
|
margin-right: 20px;
|
.toFull {
|
font-weight: bolder;
|
color: #00ffff;
|
margin-right: 10px;
|
}
|
}
|
|
.backBtn {
|
cursor: pointer;
|
display: flex;
|
align-items: center;
|
img {
|
width: 14px;
|
height: 14px;
|
margin-right: 10px;
|
}
|
}
|
}
|
.blocks {
|
width: 100%;
|
height: calc(100% - 90px);
|
padding: 10px 40px 35px;
|
box-sizing: border-box;
|
|
&>div{
|
width: 100%;
|
height: 100%;
|
display: flex;
|
justify-content: center;
|
align-items: flex-start;
|
overflow: auto;
|
&::-webkit-scrollbar { width: 0; height: 0; color: transparent; }
|
&::scrollbar { width: 0; height: 0; color: transparent; }
|
}
|
|
.line-map {
|
display: flex;
|
justify-content: center;
|
align-items: flex-start;
|
|
.line-item {
|
|
.area-head {
|
position: relative;
|
width: 100%;
|
height: 80px;
|
padding-left: 38px;
|
border-left: 1px solid #36fcfc;
|
|
.indicator {
|
width: 36px;
|
height: 36px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid #00ff66;
|
top: -18px;
|
left: -18px;
|
|
.indi-dot {
|
position: absolute;
|
width: 20px;
|
height: 20px;
|
left: 7px;
|
top: 7px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #00ff66;
|
border-radius: 50%;
|
background-color: #00ff66;
|
z-index: 2;
|
}
|
.indi-pulse {
|
position: absolute;
|
width: 56px;
|
height: 56px;
|
left: -11px;
|
top: -11px;
|
border: 1px solid #00ff66;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn 2s ease-out;
|
-moz-animation: warn 2s ease-out;
|
animation: warn 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #00ff66;
|
}
|
.indi-pulse1 {
|
position: absolute;
|
width: 56px;
|
height: 56px;
|
left: -11px;
|
top: -11px;
|
border: 1px solid #3399ff;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border-radius: 50%;
|
z-index: 1;
|
opacity: 0;
|
-webkit-animation: warn1 2s ease-out;
|
-moz-animation: warn1 2s ease-out;
|
animation: warn1 2s ease-out;
|
-webkit-animation-iteration-count: infinite;
|
-moz-animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
box-shadow: 1px 1px 30px #3399ff;
|
}
|
}
|
.someUndone {
|
width: 36px;
|
height: 36px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid #ccc;
|
top: -18px;
|
left: -18px;
|
|
.indi-dot {
|
position: absolute;
|
width: 20px;
|
height: 20px;
|
left: 7px;
|
top: 7px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #ccc;
|
border-radius: 50%;
|
background-color: #ccc;
|
z-index: 2;
|
}
|
}
|
.somewarning {
|
width: 36px;
|
height: 36px;
|
border-radius: 50%;
|
position: absolute;
|
border: 1px solid #ff0000;
|
top: -18px;
|
left: -18px;
|
|
.indi-dot {
|
position: absolute;
|
width: 20px;
|
height: 20px;
|
left: 7px;
|
top: 7px;
|
-webkit-border-radius: 50%;
|
-moz-border-radius: 50%;
|
border: 1px solid #ff0000;
|
border-radius: 50%;
|
background-color: #ff0000;
|
z-index: 2;
|
}
|
}
|
.arrow {
|
position: absolute;
|
width: 58px;
|
height: 20px;
|
left: 38px;
|
top: -10px;
|
background: url('../../../assets/loginPage/arrow-r.png') 0 / cover no-repeat;
|
animation: run 2s steps(4) 0s infinite;
|
}
|
.top-line {
|
width: 100%;
|
border-top: 2px solid #36fcfc;
|
}
|
.fadeLine {
|
width: 100%;
|
border-top: 1px solid rgba(54,252,252,.6);
|
}
|
}
|
.fadeBorder {
|
border-left: 1px solid #ccc;
|
}
|
.more-info {
|
width: 100%;
|
|
.warning {
|
& > section {
|
border: 1px solid #ff0000;
|
|
.dot {
|
border: 1px solid #ff0000;
|
background: #ff0000;
|
}
|
.pulse {
|
border: 1px solid #ff0000;
|
box-shadow: 1px 1px 30px #ff0000;
|
}
|
.pulse1 {
|
border: 1px solid #ff0000;
|
box-shadow: 1px 1px 30px #ff0000;
|
}
|
}
|
|
& > div {
|
div {
|
span.target {
|
color: #ff2929;
|
font-weight: bolder;
|
}
|
}
|
}
|
}
|
.undone {
|
& > section {
|
border: 1px solid #ccc;
|
|
.dot {
|
border: 1px solid #ccc;
|
background: #ccc;
|
}
|
.pulse {
|
display: none;
|
}
|
.pulse1 {
|
display: none;
|
}
|
}
|
}
|
}
|
}
|
.finish {
|
.area-head {
|
position: relative;
|
width: 100%;
|
height: 80px;
|
border-left: none;
|
}
|
}
|
.pic-tit {
|
display: flex;
|
width: calc((100vw - 120px) / 7);
|
height: 160px;
|
padding: 20px;
|
transform: translate(-20px, -40%);
|
flex-direction: column;
|
align-items: flex-start;
|
|
img {
|
width: calc((100vw - 120px) / 7 - 40px);
|
height: 90px;
|
margin-bottom: 10px;
|
border-radius: 4px;
|
}
|
p {
|
font-size: 16px;
|
color: #00ffff;
|
font-weight: bold;
|
}
|
}
|
|
.water {
|
transform: none;
|
}
|
.start {
|
padding: 40px 0;
|
p {
|
margin-top: -21px;
|
margin-left: 20px;
|
}
|
span {
|
width: 1px;
|
height: 50px;
|
background: #36fcfc;
|
position: absolute;
|
top: -10px;
|
left: 0;
|
}
|
section {
|
position: absolute;
|
top: 30px;
|
left: -14px;
|
}
|
}
|
}
|
.tip {
|
width: 100%;
|
font-size: 30px;
|
text-align: center;
|
margin-top: 100px;
|
color: #fff;
|
font-weight: bolder;
|
}
|
.current-task {
|
position: absolute;
|
width: calc((500vw - 600px) / 7);
|
z-index: 999999;
|
top: 0;
|
right: 0;
|
padding: 0 60px;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
|
.task-des {
|
padding: 10px 20px;
|
display: flex;
|
align-items: center;
|
border: 1px solid #36fcfc;
|
|
.task-des-l {
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
font-size: 20px;
|
color: #36fcfc;
|
border-right: 1px solid #36fcfc;
|
padding-right: 20px;
|
img {
|
margin-bottom: 10px;
|
}
|
}
|
.task-des-r {
|
width: calc((200vw - 240px) / 7);
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
font-size: 20px;
|
line-height: 28px;
|
color: #fcfc36;
|
padding-left: 20px;
|
}
|
}
|
.current-data {
|
width: 267px;
|
height: 138px;
|
padding: 20px 30px;
|
box-sizing: border-box;
|
background: url('../../../assets/loginPage/xj-bg.png') no-repeat center;
|
background-size: 100% 100%;
|
|
.data-area {
|
display: flex;
|
align-items: center;
|
border-bottom: 1px solid #040c3b;
|
font-weight: bold;
|
padding-bottom: 10px;
|
box-sizing: border-box;
|
|
img {
|
width: 30px;
|
height: 30px;
|
margin-right: 10px;
|
animation: circle 1s ease-in-out infinite;
|
}
|
|
div {
|
font-size: 15px;
|
color: rgba(4, 12, 59, 0.8);
|
|
span {
|
color: #040c3b;
|
}
|
}
|
}
|
|
.data-spot {
|
display: flex;
|
align-items: flex-start;
|
margin-top: 10px;
|
|
& > div {
|
display: flex;
|
flex-direction: column;
|
align-items: center;
|
width: 50%;
|
font-size: 14px;
|
color: rgba(4, 12, 59, 0.8);
|
|
p {
|
margin-top: 6px;
|
color: #040c3b;
|
}
|
|
&:first-of-type {
|
border-right: 1px solid #040c3b;
|
}
|
}
|
}
|
}
|
}
|
.star-pic {
|
position: absolute;
|
width: calc((100vw - 120px) / 7);
|
height: calc((100vw - 120px) / 7);
|
z-index: 9999;
|
bottom: 40px;
|
right: 40px;
|
padding: 20px;
|
|
.scan{
|
position: inherit;
|
width: 65%;
|
height: 65%;
|
z-index: 99997;
|
left: 0;
|
top: 0;
|
right: 0;
|
bottom: 0;
|
margin: auto;
|
}
|
|
.star-bg {
|
position: inherit;
|
width: 100%;
|
height: 100%;
|
z-index: 99998;
|
left: 0;
|
top: 0;
|
img {
|
width: 100%;
|
height: auto;
|
animation: circle 30s linear infinite;
|
}
|
}
|
.star {
|
position: inherit;
|
width: 100%;
|
height: 100%;
|
z-index: 99999;
|
left: 0;
|
top: 0;
|
img {
|
width: 100%;
|
height: auto;
|
}
|
}
|
}
|
}
|
}
|
</style>
|