Newer
Older
urbanLifeline_YanAn / src / views / oneMap / smartBridge / RightBox.vue
@zhangzhihui zhangzhihui on 17 Oct 16 KB 字体
<!-- 总体概览右侧面板 -->
<template>
  <div class="rightQL">
    <!-- 运行监测 -->
    <div class="topBox">
      <div class="ListBoxHeader">
        <div class="ListBoxHeader_font">运行监测</div>
      </div>
      <div class="topContent">
        <!-- 结构监测 -->
        <div class="jcBox">
          <div class="jcBox_Header">
            <img src="@/assets/images/Sponge_screen/QiaoLiang/JX.png" class="jcBox_HeaderIcon" />
            <span class="jcBox_HeaderFont">结构监测</span>
          </div>
          <div class="jcBox_Content jgBox">
            <div class="jcInfo" v-for="(item, index) in jgjcTitle" :key="item.code">
              <div class="jcInfo_title">{{ item.name }}</div>
              <div class="jcInfo_stateIcon" :class="jgjcData[item.code] == '1' ? '' : 'red'"></div>
            </div>
            <div class="pieBox">
              <pieRing :echartData="pieData" :refresh="chartRefresh"></pieRing>
              <div class="boxCircle">
                <div class="biaoji1"></div>
                <div class="biaoji2"></div>
                <div class="biaoji3"></div>
                <div class="biaoji4"></div>
                <div class="outCircle">
                  <div class="innerCircle"></div>
                </div>
                <div class="circleValue">{{ pieData.data }}<span>分</span></div>
              </div>
            </div>
          </div>
        </div>
        <!-- 通行监测 -->
        <div class="jcBox txBox">
          <div class="jcBox_Header">
            <img src="@/assets/images/Sponge_screen/QiaoLiang/JX.png" class="jcBox_HeaderIcon" />
            <span class="jcBox_HeaderFont">通行监测</span>
          </div>
          <div class="lineBox">
            <twoLine :echartData="lineData" :refresh="chartRefresh" />
          </div>
        </div>
        <!-- 负荷监测 -->
        <div class="jcBox">
          <div class="jcBox_Header">
            <img src="@/assets/images/Sponge_screen/QiaoLiang/JX.png" class="jcBox_HeaderIcon" />
            <span class="jcBox_HeaderFont">负荷监测</span>
          </div>
          <div class="jcBox_Content">
            <div class="YXJC_Box3_tableHeader">
              <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan1">方向</span>
              <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan2">车牌</span>
              <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan3">通行时间</span>
              <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan4">载重</span>
              <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan5">超重</span>
            </div>
            <div class="YXJC_Box3_tableBody">
              <div class="YXJC_Box3_tableList" v-for="item in YXJCTableData">
                <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan1">{{ item.fx }}</span>
                <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan2">{{ item.cp }}</span>
                <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan3">{{ item.sj }}</span>
                <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan4">{{ item.zz }}</span>
                <span class="YXJC_Box3_tableSpan YXJC_Box3_tableSpan5">{{ item.cz }}</span>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- 检测评估 -->
    <div class="bottomBox">
      <div class="ListBoxHeader">
        <div class="ListBoxHeader_font">检测评估</div>
        <img src="@/assets/tunnelImg/bg_img.png" alt="" class="ListBoxHeader_img" />
      </div>
      <div class="bottomContent">
        <div class="contentTop">
          <div class="pgBox">
            <div class="pgInfo">
              <div>{{ assessment.update.slice(0, 4) }}年</div>
              <div>{{ assessment.update.slice(5, 7) }}月{{ assessment.update.slice(8) }}日</div>
            </div>
            <div class="pgTitle">最近一次检测</div>
          </div>
          <div class="pgBox">
            <div class="pgInfo">
              <div>{{ assessment.state }}</div>
            </div>
            <div class="pgTitle">整体工作性能</div>
          </div>
          <div class="pgBox">
            <div class="pgInfo">
              <div>{{ assessment.level }}</div>
            </div>
            <div class="pgTitle">技术状况等级</div>
          </div>
        </div>
        <div class="contentBottom">
          <div>检测单位</div>
          <div class="pgCompany">{{ assessment.company }}</div>
        </div>
      </div>
    </div>
  </div>
</template>

<script setup name="rightQL">
import twoLine from '../smartTunnel/components/twoLine.vue';
import pieRing from './components/pieRing.vue';
import { ref, reactive, toRefs, onMounted } from 'vue';

import yjsj from '@/assets/newImgs/yjsj.png'; //预警数据
import czsj from '@/assets/newImgs/czsj.png'; //处置数据
import czl from '@/assets/newImgs/czl.png'; //处置率

import ranqi_icon from '@/assets/newImgs/ranqi_icon.png'; //燃气
import qiaoliang from '@/assets/newImgs/qiaoliang.png'; //桥梁
import sd_icon from '@/assets/newImgs/sd_icon.png'; //隧道
import ps_icon from '@/assets/newImgs/ps_icon.png'; //隧道
import fxzb from '@/assets/newImgs/fxzb.png'; //风险占比

import hz_icon from '@/assets/tunnelImg/hz_icon.png';
import jtsg_icon from '@/assets/tunnelImg/jtsg_icon.png';
import ydqt_icon from '@/assets/tunnelImg/ydqt_icon.png';

let chartRefresh = ref(Math.random());

const assessment = ref({
  update: '2023-11-20',
  state: '良好',
  level: '二类',
  company: '陕西海嵘工程试验检测股份有限公司',
});
const jgjcTitle = [
  { name: '挠度', code: 'nd' },
  { name: '振动', code: 'zd' },
  { name: '位移', code: 'wy' },
  { name: '索力', code: 'sl' },
  { name: '裂缝', code: 'lf' },
  { name: '应变', code: 'yb' },
];
const jgjcData = ref({
  nd: '1',
  zd: '1',
  wy: '0',
  sl: '1',
  lf: '1',
  yb: '1',
});
const YXJCTableData = [
  {
    fx: '北向南',
    cp: '陕J-24YU8',
    sj: '2024-09-30 12:26:00',
    zz: '54.6',
    cz: '16.2',
  },
  {
    fx: '南北向',
    cp: '陕J-24YU8',
    sj: '2024-09-29 16:32:00',
    zz: '48',
    cz: '9.6',
  },
];
const tfjcData = ref({
  hz: '0',
  jt: '0',
  dq: '0',
});

const lineData = ref({
  tabX: ['9/1', '9/2', '9/3', '9/4', '9/5', '9/6', '9/7'],
  unit: '辆',
  series: [
    {
      name: '南向北',
      tabY: ['0', '150', '150', '200', '130', '320', '300'],
    },
    {
      name: '北向南',
      tabY: ['100', '200', '200', '150', '240', '240', '180'],
    },
  ],
});

const pieData = ref({
  data: 80,
});

watch(
  () => lineData.value,
  (newVal, oldVal) => {
    // console.log('change', newVal);
    // eData.value = ArrayToObject(newVal.slice(0, 10));
    // eData.value.headerList = headerList.value;
    nextTick(() => {
      chartRefresh.value = Math.random();
    });
    // console.log('obj', rightData.value);
  },
  {
    immediate: true,
    deep: true,
  }
);

onMounted(() => {});
</script>

<style lang="scss" scoped>
.rightQL {
  width: 100%;
  height: 100%;
  // box-sizing: border-box;
  padding: 10px;
  display: flex;
  flex-direction: column;
}

.topBox {
  width: 100%;
  flex: 1;
  // height: 49%;
  // background: yellowgreen;
  .topContent {
    width: 100%;
    margin: 0px 0 5px;
    height: calc(100% - 49px);
    display: flex;
    flex-direction: column;
    // border: 1px solid red;
    .jcBox {
      width: 100%;
      margin-top: 5px;
      .jcBox_Header {
        height: 24px;
        width: 100%;
        .jcBox_HeaderIcon {
          width: 24px;
          height: 24px;
          vertical-align: middle;
        }
        .jcBox_HeaderFont {
          display: inline-block;
          font-family: Source Han Sans CN;
          font-weight: bold;
          font-size: 16px;
          color: #ebfeff;
          height: 24px;
          line-height: 24px;
          position: relative;

          &::after {
            content: '';
            width: 100%;
            height: 10px;
            background: linear-gradient(0deg, rgba(0, 242, 255, 0.5) 0%, rgba(0, 242, 255, 0) 100%);
            position: absolute;
            bottom: 0;
            left: 0;
          }
        }
      }
      .jgBox {
        position: relative;
        height: 140px;
        .pieBox {
          position: absolute;
          top: 0;
          left: 50%;
          transform: translateX(-50%);
          width: 140px;
          height: 140px;
          box-sizing: border-box;
          // border: 1px solid rgba(255, 255, 255, 0.2);
          .boxCircle {
            position: absolute;
            left: 50%;
            top: 50%;
            transform: translate(-50%, -50%);

            .circleValue {

              width: 60px;
              position: absolute;
              left: 50%;
              top: 50%;
              transform: translate(-50%, -50%);
              font-weight: bold;
              font-size: 28px;
              color: #3efeca;
              text-align: center;
              span {
                font-weight: 500;
                font-size: 16px;
                color: #cef6ff;
              }
            }

            .biaoji1 {
              width: 10px;
              height: 2px;
              position: absolute;
              top: 50%;
              left: 0;
              background-color: #ffffff;
              z-index: 99;
            }
            .biaoji2 {
              width: 10px;
              height: 2px;
              position: absolute;
              top: 50%;
              right: 0;
              background-color: #ffffff;
              z-index: 99;
            }
            .biaoji4 {
              width: 2px;
              height: 10px;
              position: absolute;
              left: 50%;
              bottom: 0;
              background-color: #ffffff;
              z-index: 99;
            }
            .biaoji3 {
              width: 2px;
              height: 10px;
              position: absolute;
              left: 50%;
              top: 0;
              background-color: #ffffff;
              z-index: 99;
            }

            .outCircle {
              position: relative;
              // left: 0;
              // top: 0;
              width: 90px;
              height: 90px;
              border-radius: 50%;
              display: flex;
              align-items: center;
              justify-content: center;
              /* border: 1px solid red; */
              background: conic-gradient(from 0deg at 50% 50%, rgba(62, 255, 203, 0) 0%, #3effcb 100%);
              animation: rotateGradient 5s linear infinite;
              overflow: hidden;
            }

            .innerCircle {
              position: absolute;
              top: 10px;
              left: 10px;
              width: 70px;
              height: 70px;
              border-radius: 50%;
              background-color: #235b7c;
            }

            @keyframes rotateGradient {
              0% {
                transform: rotate(0deg);
              }
              100% {
                transform: rotate(360deg);
              }
            }
          }
        }
      }
      .jcBox_Content {
        margin-top: 5px;
        // border: 1px solid red;
        display: flex;
        justify-content: space-between;
        flex-wrap: wrap;
        align-content: space-between;
        .jcInfo {
          position: relative;
          width: 200px;
          height: 40px;
          display: flex;
          align-items: center;
          &:nth-child(2n + 1) {
            background: linear-gradient(90deg, rgba(21, 210, 253, 0.2) 0%, rgba(21, 210, 253, 0.05) 100%);
            .jcInfo_title {
              margin-left: 15px;
            }
            .jcInfo_stateIcon {
              margin-left: 10px;
            }
            &::before {
              content: '';
              width: 4px;
              height: 40px;
              position: absolute;
              left: 0;
              top: 0;
              background: #00f2ff;
            }
          }
          &:nth-child(2n) {
            flex-direction: row-reverse;
            background: linear-gradient(90deg, rgba(21, 210, 253, 0.05) 0%, rgba(21, 210, 253, 0.2) 100%);
            .jcInfo_title {
              margin-right: 15px;
            }
            .jcInfo_stateIcon {
              margin-right: 10px;
            }
            &::after {
              content: '';
              width: 4px;
              height: 40px;
              position: absolute;
              right: 0;
              top: 0;
              background: #00f2ff;
            }
          }
          .jcInfo_title {
            font-weight: bold;
            font-size: 16px;
            color: #ebfeff;
            // margin-left: 15px;
          }

          .jcInfo_stateIcon {
            width: 10px;
            height: 10px;
            background: #00ff9c;
            border-radius: 50%;
            // margin-right: 3px;
            &.red {
              background: #fe667b;
            }
          }

        }
        .tfInfo {
          width: 136px;
          height: 130px;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
          background: url('@/assets/tunnelImg/tfjcBg.png') no-repeat;
          background-size: 100% 100%;
          .tfInfo_icon {
            width: 60px;
            height: 60px;
          }
        }
        .YXJC_Box3_tableHeader {
          width: 100%;
          height: 35px;
          line-height: 35px;
          background: linear-gradient(0deg, rgba(21, 210, 253, 0.2) 0%, rgba(0, 158, 164, 0.5) 100%);
          border-radius: 2px;
        }

        .YXJC_Box3_tableBody {
          width: 100%;
          // height: calc(100% - 40px);
          overflow: auto;

          .YXJC_Box3_tableList {
            width: 100%;
            height: 40px;
            line-height: 40px;
            font-size: 16px;
            background: linear-gradient(0deg, rgba(21, 210, 253, 0.2) 0%, rgba(0, 158, 164, 0.05) 100%);
            border-radius: 2px;

            .YXJC_Box3_tableSpan5 {
              color: #ff3f3f;
            }
          }
        }

        .YXJC_Box3_tableSpan {
          display: inline-block;
          font-family: Source Han Sans CN;
          font-weight: bold;
          font-size: 14px;
          color: #ebfeff;
          text-align: center;
        }
        .YXJC_Box3_tableSpan1 {
          width: 60px;
        }
        .YXJC_Box3_tableSpan2 {
          width: 100px;
        }
        .YXJC_Box3_tableSpan3 {
          width: 158px;
        }
        .YXJC_Box3_tableSpan4 {
          width: 50px;
        }
        .YXJC_Box3_tableSpan5 {
          width: 50px;
        }
      }
    }
    .txBox {
      flex: 1;
      // border: 1px solid red;
      display: flex;
      flex-direction: column;
      .lineBox {
        flex: 1;
        // border: 1px solid red;
      }
    }
  }
}
.bottomBox {
  width: 100%;
  // height: 49%;
  // background: red;
  // border: 1px solid red;
  .bottomContent {
    width: 100%;
    .contentTop {
      display: flex;
      justify-content: space-between;
      align-items: center;
      margin: 8px 0;
      .pgBox {
        width: 136px;
        height: 130px;
        background: url('@/assets/images/Sponge_screen/QiaoLiang/FBox.png') no-repeat;
        background-size: 100% 100%;
        text-align: center;
        .pgInfo {
          width: 100%;
          height: 89px;
          display: flex;
          flex-direction: column;
          font-weight: bold;
          font-size: 20px;
          color: #00f2ff;
          align-items: center;
          justify-content: center;
        }

        .pgTitle {
          font-family: Source Han Sans CN;
          font-weight: 500;
          font-size: 16px;
          color: #ffffff;
          height: 16px;
          line-height: 16px;
          // border: 1px solid red;
        }
      }
    }
    .contentBottom {
      width: 100%;
      height: 39px;
      box-sizing: border-box;
      line-height: 39px;
      background: url('@/assets/images/Sponge_screen/QiaoLiang/CBox.png') no-repeat;
      background-size: 100% 100%;
      display: flex;
      align-items: center;
      padding: 0 20px;
      font-family: Source Han Sans CN;
      font-weight: bold;
      font-size: 16px;
      color: #ebfeff;
      .pgCompany {
        color: #00f2ff;
        margin-left: 20px;
      }
    }
  }
}
.ListBoxHeader {
  height: 44px;
  line-height: 50px;
  width: 98%;
  background: url('@/assets/newImgs/partBg.png') no-repeat;
  background-size: 100% 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  // margin: 7px 0px 0px 8px;
  .ListBoxHeader_font {
    font-family: PangMenZhengDao;
    font-weight: 400;
    font-size: 23px;
    color: #ebfeff;
    padding-left: 34px;
  }
  .ListBoxHeader_img {
    width: 23px;
    height: 27px;
    margin-right: 5px;
  }
}
</style>