lct
Your Name
2022-08-12 9bc4417c85acb89059a5dc039dcad218a1c0d468
lct
已修改4个文件
1778 ■■■■ 文件已修改
src/router/route.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/stores/interface/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/stores/userInfo.ts 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/intellectInspect/intelligentLine/index.vue 1650 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/route.ts
@@ -87,5 +87,13 @@
        meta: {
            title: '巡检路线'
        }
    },
    {
        path: '/intelligentLine',
        name: 'intelligentMap',
        component: () => import('/@/views/intellectInspect/intelligentLine/index.vue'),
        meta: {
            title: '巡检路线'
        }
    }
];
src/stores/interface/index.ts
@@ -12,6 +12,7 @@
    userName: string;
    uid: string;
    projectId: string;
    dataList: [];
}
export interface UserInfosStates {
    userInfos: UserInfosState;
src/stores/userInfo.ts
@@ -8,63 +8,64 @@
 * @methods setUserInfos 设置用户信息
 */
export const useUserInfo = defineStore('userInfo', {
    state: (): UserInfosStates => ({
        userInfos: {
            userName: '',
            photo: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
            time: 0,
            roles: [],
            authBtnList: [],
            uid:'',
            projectId:''
        },
    }),
    actions: {
        async setUserInfos(value: any) {
            this.userInfos.userName = value.username
            this.userInfos.uid = value.uid
            this.userInfos.roles = value.role
            // const userName = Cookies.get('userName');
            // // 模拟数据
            // let defaultRoles: Array<string> = [];
            // let defaultAuthBtnList: Array<string> = [];
            // // admin 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏
            // let adminRoles: Array<string> = ['admin'];
            // // admin 按钮权限标识
            // let adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
            // // test 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏
            // let testRoles: Array<string> = ['common'];
            // // test 按钮权限标识
            // let testAuthBtnList: Array<string> = ['btn.add', 'btn.link'];
            // // 不同用户模拟不同的用户权限
            // if (userName === 'admin') {
            //     defaultRoles = adminRoles;
            //     defaultAuthBtnList = adminAuthBtnList;
            // } else {
            //     defaultRoles = testRoles;
            //     defaultAuthBtnList = testAuthBtnList;
            // }
            // // 用户信息模拟数据
            // const userInfos = {
            //     userName: userName,
            //     photo:
            //         userName === 'admin'
            //             ? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg'
            //             : 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
            //     time: new Date().getTime(),
            //     roles: defaultRoles,
            //     authBtnList: defaultAuthBtnList,
            //     uid:'',
            //     projectId:'',
            // };
            // // 存储用户信息到浏览器缓存
            // Session.set('userInfo', userInfos);
            //
            // if (Session.get('userInfo')) {
            //     this.userInfos = Session.get('userInfo');
            // } else {
            //     this.userInfos = userInfos;
            // }
        },
    },
    state: (): UserInfosStates => ({
        userInfos: {
            userName: '',
            photo: 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
            time: 0,
            roles: [],
            authBtnList: [],
            uid: '',
            projectId: '',
            dataList: []
        }
    }),
    actions: {
        async setUserInfos(value: any) {
            this.userInfos.userName = value.username;
            this.userInfos.uid = value.uid;
            this.userInfos.roles = value.role;
            // const userName = Cookies.get('userName');
            // // 模拟数据
            // let defaultRoles: Array<string> = [];
            // let defaultAuthBtnList: Array<string> = [];
            // // admin 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏
            // let adminRoles: Array<string> = ['admin'];
            // // admin 按钮权限标识
            // let adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link'];
            // // test 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏
            // let testRoles: Array<string> = ['common'];
            // // test 按钮权限标识
            // let testAuthBtnList: Array<string> = ['btn.add', 'btn.link'];
            // // 不同用户模拟不同的用户权限
            // if (userName === 'admin') {
            //     defaultRoles = adminRoles;
            //     defaultAuthBtnList = adminAuthBtnList;
            // } else {
            //     defaultRoles = testRoles;
            //     defaultAuthBtnList = testAuthBtnList;
            // }
            // // 用户信息模拟数据
            // const userInfos = {
            //     userName: userName,
            //     photo:
            //         userName === 'admin'
            //             ? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg'
            //             : 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg',
            //     time: new Date().getTime(),
            //     roles: defaultRoles,
            //     authBtnList: defaultAuthBtnList,
            //     uid:'',
            //     projectId:'',
            // };
            // // 存储用户信息到浏览器缓存
            // Session.set('userInfo', userInfos);
            //
            // if (Session.get('userInfo')) {
            //     this.userInfos = Session.get('userInfo');
            // } else {
            //     this.userInfos = userInfos;
            // }
        }
    }
});
src/views/intellectInspect/intelligentLine/index.vue
@@ -1,210 +1,226 @@
<template>
  <div class="container">
    <div class="big-title" @click="goBack()">国泰新华智能巡检系统</div>
    <div style="font-size: 14px;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 class="star-pic">
        <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="data&&data.length>0">
        <div class="line-item" v-for="(item,index) in data" :key="index">
          <div class="picbox">
            <img src="../../../assets/loginPage/equipment.jpg">
            <p>RFID: <span>{{item.rfid}}</span></p>
            <p>位置: <span>{{item.region.toString()}}</span></p>
          </div>
          <div class="area-head" :class="item.points.some(e=>e.reportResult == null)?'fadeBorder':''">
            <div class="indicator" :class="item.points.some(e=>e.reportResult == null)?'someUndone':(item.points.some(e=>e.reportResult == 1)?'somewarning':'')">
              <div class="indi-dot"></div>
<!--              <div class="indi-pulse"></div>-->
<!--              <div class="indi-pulse1"></div>-->
    <div class="container">
        <div class="big-title" @click="goBack()">国泰新华智能巡检系统</div>
        <div style="font-size: 14px; 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="arrow" v-if="item.points.some(e=>e.reportResult != null)">
            <div class="backBtn" @click="goBack()">
                <img src="../../../assets/loginPage/back-icon.png" />
                <div>退出</div>
            </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>
                  <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 class="blocks">
            <div class="star-pic">
                <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">
                        <img src="../../../assets/loginPage/equipment.jpg" />
                        <p>
                            RFID: <span>{{ item.rfid }}</span>
                        </p>
                        <p>
                            位置: <span>{{ item.region.toString() }}</span>
                        </p>
                    </div>
                    <div class="area-head" :class="item.points.some((e) => e.reportResult == null) ? 'fadeBorder' : ''">
                        <div class="indicator" :class="item.points.some((e) => e.reportResult == null) ? 'someUndone' : item.points.some((e) => e.reportResult == 1) ? 'somewarning' : ''">
                            <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>
                                <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>
            <div class="tip" v-else>抱歉,暂时查询不到巡检路线...</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>
</template>
<script lang="ts">
import screenfull from 'screenfull';
import { lineApi } from '/@/api/intelligentLine';
import { toRefs, reactive, ref, onMounted, onUnmounted } from 'vue';
import { toRefs, reactive, ref, onMounted, onUnmounted, computed } from 'vue';
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";
import { useUserInfo } from '/@/stores/userInfo';
// 定义接口来定义对象的类型
interface stateType {
  present: string,
  isScreenfull: boolean,
  path: string,
  socket: any,
  socketData: string,
  data: Array<any>
    present: string;
    isScreenfull: boolean;
    path: string;
    socket: any;
    socketData: string;
    data: Array<any>;
}
export default {
  name: 'intelligentLine',
  components: {},
  setup() {
    const state = reactive<stateType>({
      present: '',
      isScreenfull: false,
      path: "http://192.168.0.29:8008/ws/test/",
      socketData: '',
      socket: null,
      data: []
    });
    onMounted(()=>{
      setInterval(() => {
        state.present = new Date().toLocaleString()
      }, 1000)
      init()
      // getLine()
    })
    // socket获取数据
    const init=()=>{
      if(typeof(window.WebSocket) === "undefined"){
        alert("您的浏览器不支持socket")
      }else{
        // 实例化socket
        var url = state.path + '80938081556545536'
        url = url.replace("https","ws").replace("http","ws");
        console.log(url,'获取地址')
        state.socket = new window.WebSocket(url)
        // 监听socket连接
        state.socket.onopen=()=>{
          console.log("socket连接成功")
        }
        // 监听socket错误信息
        state.socket.onerror = ()=>{
          console.log("socket连接错误")
        }
        // 监听socket消息
        state.socket.onmessage = (msg)=>{
          console.log(msg,'msg')
          console.log(typeof msg.data,'type')
          if(msg.data =='连接成功') return
          state.socketData = msg.data
          console.log(JSON.parse(state.socketData),'------------------',)
          if(typeof JSON.parse(state.socketData) == Array){
            state.data = JSON.parse(state.socketData)
            console.log(state.data)
          }
          // console.log(msg,'msg')
          // console.log(this.data,'data-------')
        }
      }
    }
    const send= ()=> {
      state.socket.send(params)
    }
    // 接口获取数据
    const getLine = async()=>{
      let res = await lineApi().getLine({ id: '80647416891768832' });
      if (res.data.code === '200') {
        console.log(res.data.data,'获取巡检点')
        state.data = res.data.data
        console.log(state.data,'---')
      } else {
        ElMessage({
          type: 'warning',
          message: res.data.msg
    name: 'intelligentLine',
    components: {},
    setup() {
        const userInfo = useUserInfo();
        const { userInfos } = storeToRefs(userInfo);
        const state = reactive<stateType>({
            present: '',
            isScreenfull: false,
            path: 'http://192.168.0.29:8008/ws/test/',
            socketData: '',
            socket: null,
            data: []
        });
      }
        onMounted(() => {
            setInterval(() => {
                state.present = new Date().toLocaleString();
            }, 1000);
            init();
            // getLine()
        });
        const dataList = computed(() => {
            return userInfos.value.dataList;
        });
        // socket获取数据
        const init = () => {
            if (typeof window.WebSocket === 'undefined') {
                alert('您的浏览器不支持socket');
            } else {
                // 实例化socket
                var url = state.path + '80938081556545536';
                url = url.replace('https', 'ws').replace('http', 'ws');
                console.log(url, '获取地址');
                state.socket = new window.WebSocket(url);
                // 监听socket连接
                state.socket.onopen = () => {
                    console.log('socket连接成功');
                };
                // 监听socket错误信息
                state.socket.onerror = () => {
                    console.log('socket连接错误');
                };
                // 监听socket消息
                state.socket.onmessage = (msg) => {
                    // console.log(msg, 'msg');
                    // console.log(typeof msg.data, 'type');
                    if (msg.data === '连接成功') return;
                    // state.socketData = msg.data;
                    // console.log(JSON.parse(state.socketData), '------------------');
                    // if (typeof JSON.parse(state.socketData) == Array) {
                    //     debugger;
                    debugger;
                    userInfos.value.dataList = JSON.parse(msg.data);
                    console.log(state.data);
                    // }
                    // console.log(msg,'msg')
                    // console.log(this.data,'data-------')
                };
            }
        };
        const send = () => {
            state.socket.send(params);
        };
        // 接口获取数据
        const getLine = async () => {
            let res = await lineApi().getLine({ id: '80647416891768832' });
            if (res.data.code === '200') {
                console.log(res.data.data, '获取巡检点');
                state.data = res.data.data;
                console.log(state.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(() => {
            // 销毁监听
            state.socket.onclose = () => {
                console.log('socket已经关闭');
            };
        });
        return {
            dataList,
            goBack,
            onScreenfullClick,
            ...toRefs(state)
        };
    }
    // 全屏
    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( ()=> {
    // 销毁监听
      state.socket.onclose = ()=>{
        console.log("socket已经关闭")
      }
    })
    return{
      goBack,
      onScreenfullClick,
      ...toRefs(state)
    }
  }
}
};
// export default {
//   name: 'NewForm',
//   props: {
@@ -319,713 +335,713 @@
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
  @keyframes warn {
@keyframes warn {
    0% {
      transform: scale(0.3);
      -webkit-transform: scale(0.3);
      opacity: 0.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;
        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;
        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;
        transform: scale(0.8);
        -webkit-transform: scale(0.8);
        opacity: 0.6;
    }
    100% {
      transform: scale(1);
      -webkit-transform: scale(1);
      opacity: 0.0;
        transform: scale(1);
        -webkit-transform: scale(1);
        opacity: 0;
    }
  }
}
  @keyframes warn1 {
@keyframes warn1 {
    0% {
      transform: scale(0.3);
      -webkit-transform: scale(0.3);
      opacity: 0.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;
        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;
        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;
        transform: scale(0.5);
        -webkit-transform: scale(0.5);
        opacity: 0.6;
    }
    100% {
      transform: scale(0.8);
      -webkit-transform: scale(0.8);
      opacity: 0.0;
        transform: scale(0.8);
        -webkit-transform: scale(0.8);
        opacity: 0;
    }
  }
  @keyframes circle {
}
@keyframes circle {
    0% {
      transform: rotate(0);
      -webkit-transform: rotate(0);
        transform: rotate(0);
        -webkit-transform: rotate(0);
    }
    100% {
      transform: rotate(360deg);
      -webkit-transform: rotate(360deg);
        transform: rotate(360deg);
        -webkit-transform: rotate(360deg);
    }
  }
  @keyframes run {
}
@keyframes run {
    to {
      transform: translateX(calc((100vw - 180px)/ 6 - 80px));
        transform: translateX(calc((100vw - 180px) / 6 - 80px));
    }
  }
  .container{
}
.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: url('../../../assets/loginPage/map-bg.jpg') no-repeat center;
    background-size: 100% 100%;
    .big-title{
      height: 40px;
      line-height: 40px;
      font-size: 28px;
      font-weight: bold;
      margin: 10px 0 20px;
      text-align: center;
      color: #fff;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .btns{
      position: absolute;
      z-index: 99999;
      right: 60px;
      top: 40px;
      display: flex;
      align-items: center;
      .fullbtn{
        cursor: pointer;
    .big-title {
        height: 40px;
        line-height: 40px;
        font-size: 28px;
        font-weight: bold;
        margin: 10px 0 20px;
        text-align: center;
        color: #fff;
        display: flex;
        align-items: center;
        margin-right: 20px;
        .toFull{
          font-weight: bolder;
          color: #00FFFF;
          margin-right: 10px;
        }
        div{
          font-size: 16px;
          color: #00FFFF;
        }
      }
      .backBtn{
        cursor: pointer;
        display: flex;
        align-items: center;
        img{
          width: 14px;
          height: 14px;
          margin-right: 10px;
        }
        div{
          font-size: 16px;
          color: #00FFFF;
        }
      }
    }
    .blocks{
      width: 100%;
      height: calc(100% - 90px);
      padding: 20px 40px 30px;
      box-sizing: border-box;
      display: flex;
      align-items: flex-start;
      overflow: hidden;
      overflow-x: scroll;
      overflow-y: scroll;
      .line-map{
        display: flex;
        justify-content: center;
    }
    .btns {
        position: absolute;
        z-index: 99999;
        right: 60px;
        top: 40px;
        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;
            }
            div {
                font-size: 16px;
                color: #00ffff;
            }
        }
        .backBtn {
            cursor: pointer;
            display: flex;
            align-items: center;
            img {
                width: 14px;
                height: 14px;
                margin-right: 10px;
            }
            div {
                font-size: 16px;
                color: #00ffff;
            }
        }
    }
    .blocks {
        width: 100%;
        height: calc(100% - 90px);
        padding: 20px 40px 30px;
        box-sizing: border-box;
        display: flex;
        align-items: flex-start;
        overflow: hidden;
        overflow-x: scroll;
        overflow-y: scroll;
        .line-item{
          width: calc((100vw - 180px)/ 6);
          padding-left: 20px;
          display: flex;
          flex-direction: column;
          align-items: flex-start;
          margin-right: 20px;
          flex-wrap: nowrap;
        .line-map {
            display: flex;
            justify-content: center;
            align-items: flex-start;
          .picbox{
            width: 100%;
            height: calc((100vh - 130px)/ 5);
            padding: 10px;
            margin-bottom: 40px;
            box-sizing: border-box;
            img{
              display: block;
              width: 100%;
              height: 100px;
              margin-bottom: 10px;
              border-radius: 4px;
            }
            p{
              font-size: 14px;
              color: rgba(255,255,255,.8);
              margin-top: 10px;
              span{
                color: #fff;
              }
            }
          }
          .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 #ccc;
            }
          }
          .fadeBorder{
            border-left: 1px solid rgba(54,252,252,.4);
          }
          .more-info{
            width: 100%;
            .item{
              width: calc((100vw - 120px)/ 6);
              height: calc((100vh - 130px)/ 5);
              padding: 0 50px 20px;
              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,225,255,.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:#00e1ff;
                  z-index: 2;
                }
                .pulse {
                  position: absolute;
                  width: 48px;
                  height: 48px;
                  left: -13px;
                  top: -13px;
                  border: 1px solid #00e1ff;
                  -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 #00e1ff;
                }
                .pulse1 {
                  position: absolute;
                  width: 48px;
                  height: 48px;
                  left: -13px;
                  top: -13px;
                  border: 1px solid #00e1ff;
                  -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 #00e1ff;
                }
              }
              &>div{
                padding: 10px 0;
                transform: translateY(-14px);
                border-radius: 8px;
                background-image: linear-gradient(to right,rgba(8,109,209,.4),rgba(11,255,255,.2));
                border: 1px solid rgba(54,252,252,.6);
            .line-item {
                width: calc((100vw - 180px) / 6);
                padding-left: 20px;
                display: flex;
                flex-direction: column;
                justify-content: center;
                align-items: flex-start;
                margin-right: 20px;
                flex-wrap: nowrap;
                div{
                  margin-bottom: 5px;
                  &:last-of-type{
                    margin-bottom: none;
                  }
                  span{
                    display: inline-block;
                    width: 50%;
                    font-size: 13px;
                    color: #fff;
                    text-align: left;
                .picbox {
                    width: 100%;
                    height: calc((100vh - 130px) / 5);
                    padding: 10px;
                    margin-bottom: 40px;
                    box-sizing: border-box;
                    &:first-of-type{
                      text-align: right;
                      color: rgba(255,255,255,.8);
                    img {
                        display: block;
                        width: 100%;
                        height: 100px;
                        margin-bottom: 10px;
                        border-radius: 4px;
                    }
                  }
                    p {
                        font-size: 14px;
                        color: rgba(255, 255, 255, 0.8);
                        margin-top: 10px;
                        span {
                            color: #fff;
                        }
                    }
                }
              }
                .area-head {
                    position: relative;
                    width: 100%;
                    height: 80px;
                    padding-left: 38px;
                    border-left: 1px solid #36fcfc;
              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,.2),rgba(8,109,209,.4));
                border: 1px solid rgba(54,252,252,.6);
              }
                    .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 #ccc;
                    }
                }
                .fadeBorder {
                    border-left: 1px solid rgba(54, 252, 252, 0.4);
                }
                .more-info {
                    width: 100%;
                    .item {
                        width: calc((100vw - 120px) / 6);
                        height: calc((100vh - 130px) / 5);
                        padding: 0 50px 20px;
                        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, 225, 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: #00e1ff;
                                z-index: 2;
                            }
                            .pulse {
                                position: absolute;
                                width: 48px;
                                height: 48px;
                                left: -13px;
                                top: -13px;
                                border: 1px solid #00e1ff;
                                -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 #00e1ff;
                            }
                            .pulse1 {
                                position: absolute;
                                width: 48px;
                                height: 48px;
                                left: -13px;
                                top: -13px;
                                border: 1px solid #00e1ff;
                                -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 #00e1ff;
                            }
                        }
                        & > 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, 0.6);
                            display: flex;
                            flex-direction: column;
                            justify-content: center;
                            div {
                                margin-bottom: 5px;
                                &:last-of-type {
                                    margin-bottom: none;
                                }
                                span {
                                    display: inline-block;
                                    width: 50%;
                                    font-size: 13px;
                                    color: #fff;
                                    text-align: left;
                                    &:first-of-type {
                                        text-align: right;
                                        color: rgba(255, 255, 255, 0.8);
                                    }
                                }
                            }
                        }
                        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);
                        }
                    }
                    .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 {
                        border-left: 1px solid rgba(54, 252, 252, 0.4);
                        & > section {
                            border: 1px solid #ccc;
                            .dot {
                                border: 1px solid #ccc;
                                background: #ccc;
                            }
                            .pulse {
                                display: none;
                            }
                            .pulse1 {
                                display: none;
                            }
                        }
                    }
                }
            }
            .warning{
              &>section{
                border: 1px solid #ff0000;
            .finish {
                .area-head {
                    position: relative;
                    width: 100%;
                    height: 80px;
                    border-left: none;
                    .finish-point {
                        position: absolute;
                        width: 90px;
                        height: 90px;
                        border: 2px solid #0072ff;
                        left: -30px;
                        top: -45px;
                        border-radius: 50%;
                .dot{
                  border: 1px solid #ff0000;
                  background: #ff0000;
                        & > 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;
                        }
                    }
                }
                .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{
              border-left: 1px solid rgba(54,252,252,.4);
              &>section{
                border: 1px solid #ccc;
            .pic-tit {
                display: flex;
                width: calc((100vw - 120px) / 7);
                height: 160px;
                padding: 20px;
                transform: translate(-20px, -40%);
                flex-direction: column;
                align-items: flex-start;
                .dot{
                  border: 1px solid #ccc;
                  background: #ccc;
                img {
                    width: calc((100vw - 120px) / 7 - 40px);
                    height: 90px;
                    margin-bottom: 10px;
                    border-radius: 4px;
                }
                .pulse{
                  display: none;
                p {
                    font-size: 16px;
                    color: #00ffff;
                    font-weight: bold;
                }
                .pulse1{
                  display: none;
                }
              }
            }
          }
            .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;
                }
            }
        }
        .finish{
          .area-head{
            position: relative;
        .tip {
            width: 100%;
            height: 80px;
            border-left: none;
            .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;
              }
            }
          }
            font-size: 30px;
            text-align: center;
            margin-top: 100px;
            color: #fff;
            font-weight: bolder;
        }
          .pic-tit{
        .current-task {
            position: absolute;
            width: calc((500vw - 600px) / 7);
            z-index: 999999;
            top: 0;
            right: 0;
            padding: 0 60px;
            display: flex;
            width: calc((100vw - 120px)/ 7);
            height: 160px;
            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: 999999999;
            bottom: 40px;
            right: 40px;
            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;
            .star-bg {
                position: inherit;
                width: 100%;
                height: 100%;
                left: 0;
                top: 0;
                img {
                    width: 100%;
                    height: auto;
                    animation: circle 30s linear infinite;
                }
            }
            p{
              font-size: 16px;
              color: #00ffff;
              font-weight: bold;
            }
          }
          .water{
            transform: none;
          }
          .start{
            padding: 40px 0;
            p{
              margin-top: -21px;
              margin-left: 20px;
            .star {
                position: inherit;
                width: 100%;
                height: 100%;
                left: 0;
                top: 0;
                img {
                    width: 100%;
                    height: auto;
                }
            }
            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,.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,.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: 999999999;
        bottom: 40px;
        right: 40px;
        padding: 20px;
        .star-bg{
          position: inherit;
          width: 100%;
          height: 100%;
          left: 0;
          top: 0;
          img{
            width: 100%;
            height: auto;
            animation: circle 30s linear infinite;
          }
        }
        .star{
          position: inherit;
          width: 100%;
          height: 100%;
          left: 0;
          top: 0;
          img{
            width: 100%;
            height: auto;
          }
        }
      }
    }
  }
}
</style>