Newer
Older
urbanLifeline_YanAn / src / views / oneMap / OverallOverview / RightBox.vue
@jimengfei jimengfei on 21 Oct 16 KB updata
<!-- 总体概览右侧面板 -->
<template>
  <!-- 风险评估 -->
  <div class="RiskAssessment">
    <div class="ListBoxHeader">
      <div class="ListBoxHeader_font">风险评估</div>
    </div>
    <div class="RiskProportion">
      <div class="TopProportion">
        <div class="riskMc">
          <div class="icon"></div>
          <div class="text">风险占比</div>
        </div>
        <div class="riskZs">
          <div class="eachDescribe">
            <div class="icon bgcblue"></div>
            <div class="text">总数</div>
          </div>
          <div class="eachDescribe">
            <div class="icon bgcYellow"></div>
            <div class="text">风险数量</div>
          </div>
        </div>
      </div>
      <div class="ContentNum">
        <div class="dfFlxa" v-for="(item, index) in riskData">
          <div class="middleextA flex">
            <div>
              <img :src="item.Imgurl" alt="" />
            </div>
            <div style="margin-left: 4px; cursor: pointer" @click="FxClick(item.name)">
              {{ item.name }}
            </div>
          </div>
          <div class="middleextB flex">
            <div class="BJ_CenBox1" :style="getWidth(item, 1)"></div>
            <div
              style="
                font-family: Source Han Sans CN;
                font-weight: bold;
                font-size: 13px;
                color: rgba(248, 116, 75, 1);
                text-align: right;
                line-height: 12px;
                margin-left: 5px;
              "
            >
              {{ item.sl }}
            </div>
          </div>
          <div class="middleextC flex">
            <div
              style="
                font-family: Source Han Sans CN;
                font-weight: bold;
                font-size: 16px;
                color: #12f9ff;
                width: 65%;
                text-align: right;
              "
            >
              {{ item.num }}
            </div>

            <div style="font-family: Source Han Sans CN; font-weight: bold; font-size: 13px; color: #12f9ff">
              {{ item.dw }}
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="DrainageRisk">
      <div class="TopProportion">
        <div class="riskMc">
          <div class="icon"></div>
          <div class="text">{{ FxClickName }}风险评估</div>
        </div>
      </div>

      <tslyqk_constituent_3d />
    </div>
  </div>
  <!-- 预警处置 -->
  <div class="WarningSisposal">
    <div class="ListBoxHeader">
      <div class="ListBoxHeader_font">预警处置</div>
    </div>
    <div class="WarningSj">
      <div class="TopProportion">
        <div class="WarningSl">
          <div class="eachDescribe">
            <div class="icon bgcls"></div>
            <div class="text">预警数量</div>
          </div>
          <div class="eachDescribe">
            <div class="icon bgcYellow"></div>
            <div class="text">处置数量</div>
          </div>
        </div>
        <div class="WarningNy">
          <div class="head-right" style="">
            <div
              class="head-item"
              v-for="(item, index) in yearList"
              :key="item"
              :class="activedname == item.name ? 'activedright' : ''"
              @click="yearclick(item, index)"
            >
              {{ item.name }}
            </div>
          </div>
        </div>
      </div>
      <div class="WarningList">
        <div class="Warningpart flex flex-justcontent-spacebetween">
          <div class="part" v-for="(item, index) in tableData" :key="index">
            <div class="parttop">
              <div class="upper">
                <div class="Major">
                  <img :src="item.Imgurl" class="upImg" />
                </div>
                <div class="lower">{{ item.name }}</div>
              </div>
              <div class="below">
                <div class="handIn">{{ item.num }}</div>
                <div
                  class="oflower"
                  :style="{
                    color: item.gm == '较多' ? '#FF4D5DFF' : item.gm == '正常' ? '#2BE7ABFF' : '#F8E270FF',
                  }"
                >
                  {{ item.gm }}
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="WarningEcharts">
      <AssessmentjsEcharts :data="chartData2" :refresh="chartData2.refresh"></AssessmentjsEcharts>
    </div>
  </div>
</template>

<script setup>
import tslyqk_constituent_3d from '@/views/oneMap/Echarts/tslyqk_constituent_3d.vue'; //3d图例
import AssessmentjsEcharts from '@/views/oneMap/Echarts/AssessmentjsEcharts.vue';

import { ref, reactive, toRefs, onMounted } from 'vue';
const AllData = reactive({});
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 bus from '@/bus';
const yearList = ref([
  { name: '月', value: 1 },
  { name: '年', value: 2 },
]);
const chartData2 = ref({
  xAxis: ['12/1', '12/2', '12/3', '12/4', '12/5', '12/6'],
  refresh: 1,
});
const riskData = ref([
  { name: '燃气', num: 4549.53, sl: 1922.11, Imgurl: ranqi_icon, dw: '公里' },
  { name: '排水', num: 435.7, sl: 118, Imgurl: ps_icon, dw: '公里' },
  { name: '桥梁', num: 84, sl: 0, Imgurl: qiaoliang, dw: '座' },
  { name: '隧道', num: 1, sl: 0, Imgurl: sd_icon, dw: '座' },
]);
const tableData = ref([
  { name: '预警数量', num: '60', gm: '较多', Imgurl: yjsj },
  { name: '处置数量', num: '60', gm: '正常', Imgurl: czsj },
  { name: '处置率', num: '75%', gm: '未完成', Imgurl: czl },
]);

const activedname = ref('月');
function yearclick(val) {
  activedname.value = val.name;
}
// 动态计算盒子的宽度
const getWidth = (item, Num) => {
  let widthNum = 0;
  if (Num == 1) {
    widthNum = (item.sl / (item.num + item.sl)) * 100;
  }
  return `width:${widthNum}%`;
};

// 风险评估点击事件
const FxClickName = ref('燃气');
const obj = ref([
  {
    name: '低风险  70%  1345.5',
    value: 1345.5,
    itemStyle: {
      color: '#2BE7ABFF',
    },
  },
  {
    name: '一般风险 20%  384.5',
    value: 384.5,
    itemStyle: {
      color: '#18A7F2FF',
    },
  },
  {
    name: '较大风险 5%  91.11',
    value: 91.11,
    itemStyle: {
      color: '#F8E270FF',
    },
  },
  {
    name: '重大风险 5%  91',
    value: 91,
    itemStyle: {
      color: '#FF5D6CFF',
    },
  },
]);

function FxClick(val) {
  FxClickName.value = val;
  if (FxClickName.value == '燃气') {
    let obj = [
      {
        name: '低风险  70%  1345.5',
        value: 1345.5,
        itemStyle: {
          color: '#2BE7ABFF',
        },
      },
      {
        name: '一般风险 20%  384.5',
        value: 384.5,
        itemStyle: {
          color: '#18A7F2FF',
        },
      },
      {
        name: '较大风险 5%  91.11',
        value: 91.11,
        itemStyle: {
          color: '#F8E270FF',
        },
      },
      {
        name: '重大风险 5%  91',
        value: 91,
        itemStyle: {
          color: '#FF5D6CFF',
        },
      },
    ];
    bus.emit('FxVisible', obj);
    bus.emit('clearAllLayer');
    bus.emit('SetLayerShow', ['燃气视角']);
  } else if (FxClickName.value == '排水') {
    let obj = [
      {
        name: '低风险  65%  76.7',
        value: 76.7,
        itemStyle: {
          color: '#2BE7ABFF',
        },
      },
      {
        name: '一般风险 20%  23.6',
        value: 23.6,
        itemStyle: {
          color: '#18A7F2FF',
        },
      },
      {
        name: '较大风险 10%  11.8',
        value: 11.8,
        itemStyle: {
          color: '#F8E270FF',
        },
      },
      {
        name: '重大风险 5%  5.9',
        value: 5.9,
        itemStyle: {
          color: '#FF5D6CFF',
        },
      },
    ];
    bus.emit('FxVisible', obj);
    bus.emit('clearAllLayer');
    bus.emit('SetLayerShow', ['雨水管网', '综合视角']);
  } else if (FxClickName.value == '桥梁') {
    let obj = [
      {
        name: '低风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#2BE7ABFF',
        },
      },
      {
        name: '一般风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#18A7F2FF',
        },
      },
      {
        name: '较大风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#F8E270FF',
        },
      },
      {
        name: '重大风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#FF5D6CFF',
        },
      },
    ];
    bus.emit('FxVisible', obj);
    bus.emit('clearAllLayer');
    bus.emit('SetLayerShow', ['仿真地图', '桥梁视角']);
  } else {
    let obj = [
      {
        name: '低风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#2BE7ABFF',
        },
      },
      {
        name: '一般风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#18A7F2FF',
        },
      },
      {
        name: '较大风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#F8E270FF',
        },
      },
      {
        name: '重大风险  0%  0',
        value: 0,
        itemStyle: {
          color: '#FF5D6CFF',
        },
      },
    ];
    bus.emit('FxVisible', obj);
    bus.emit('clearAllLayer');
    bus.emit('SetLayerShow', ['仿真地图', '隧道视角']);
  }
}

const showPanel = ref(true); //面板展开收起
// 面板内容展开收起控制
const props = defineProps({
  showPanel: {
    type: Boolean,
  },
});
watch(
  () => props.showPanel,
  () => {
    showPanel.value = props.showPanel;
  },
  { immediate: true }
);
onMounted(() => {
  bus.emit('FxVisible', obj.value);
});
</script>

<style lang="scss" scoped>
.RiskAssessment {
  width: 450px;
  height: 410px;
  // background: yellowgreen;
  .RiskProportion {
    width: 450px;
    height: 175px;
    // background: red;
    .ContentNum {
      margin-top: 4px;
      width: 450px;
      height: 140px;
      .dfFlxa {
        width: 420px;
        height: 30px;
        margin: 5px auto;
        display: flex;

        .middleextA {
          height: 30px;
          width: 17%;
          align-items: center;
          font-family: Source Han Sans CN;
          font-weight: 500;
          font-size: 14px;
          color: #ebfeff;
        }
        .middleextB {
          height: 14px;
          width: 58%;
          margin-top: 8px;
          background: linear-gradient(0deg, rgba(0, 43, 67, 0.8) 0%, rgba(0, 76, 118, 0.8) 100%);
          border-radius: 16px;
          border: 1px solid #15d2fd;
          // background: yellow;
          .BJ_CenBox1 {
            display: inline-block;
            height: 12px;
            background: #00f2ff;
            border-radius: 15px;
            box-sizing: border-box;
            // padding: 0 5px;
          }
        }
        .middleextC {
          margin-left: 13px;
          height: 30px;
          width: 22%;
          justify-content: space-between;
          align-items: center;
        }
      }
    }
  }
  .DrainageRisk {
    margin-top: 5px;
    width: 450px;
    // height: 41%;
    height: calc(100% - 225px);
    // background: blue;
  }
}
.WarningSisposal {
  width: 450px;
  height: calc(100vh - 530px);
  // background: red;
  .WarningSj {
    width: 450px;
    height: 190px;
    margin-top: 5px;
    // background: yellowgreen;
    .WarningList {
      margin-top: 5px;
      width: 425px;
      height: 85%;
      // background: yellow;
      margin: auto;
      .Warningpart {
        margin-top: 5px;
        .part {
          width: 130px;
          height: 160px;
          background: url('@/assets/newImgs/iSpt.png') no-repeat;
          background-size: 100% 100%;
          .parttop {
            height: 160px;
            .upper {
              height: 50%;
              .Major {
                height: 70%;
                .upImg {
                  width: 30px;
                  height: 30px;
                  position: relative;
                  top: 20px;
                  left: 38%;
                }
              }
              .lower {
                height: 30%;
                font-family: Source Han Sans CN;
                font-weight: 500;
                font-size: 14px;
                color: #c1d3d4;
                display: flex;
                // align-items: center;
                justify-content: center;
              }
            }
            .below {
              height: 50%;
              .handIn {
                height: 50%;
                display: flex;
                align-items: center;
                justify-content: center;
                font-family: Source Han Sans CN;
                font-weight: bold;
                font-size: 22px;
                color: #12f9ff;
              }
              .oflower {
                height: 50%;
                display: flex;
                // align-items: center;
                justify-content: center;
                font-family: Source Han Sans CN;
                font-weight: 500;
                font-size: 14px;
                color: #c1d3d4;
              }
            }
          }
        }
      }
    }
  }
  .WarningEcharts {
    margin-top: 5px;
    width: 450px;
    // height: 38%;
    height: calc(100% - 245px);
    // background: rgb(228, 228, 228);
  }
}
.partTitleHM {
  top: 8px;
  position: relative;
  width: 408px;
  height: 44px;
  background: url('@/assets/newImgs/partBg.png') no-repeat;
  background-size: 100% 100%;
  font-family: PangMenZhengDao;
  font-weight: 400;
  font-size: 23px;
  color: #ebfeff;
  line-height: 44px;
  padding-left: 35px;
  margin-left: 10px;
}
.TopProportion {
  display: flex;
  width: 100%;
  .riskMc {
    display: flex;
    width: 60%;
    .icon {
      margin-left: 5px;
      width: 25px;
      height: 25px;
      background: url('@/assets/newImgs/xtb_img.png') no-repeat;
    }
    .text {
      font-family: Source Han Sans CN;
      font-weight: bold;
      font-size: 16px;
      color: #ebfeff;
      line-height: 25px;
      padding-left: 5px;
      background: linear-gradient(0deg, rgba(0, 242, 255, 0.5) 0%, rgba(0, 242, 255, 0) 100%);
      height: 10px;
      line-height: 0px;
      margin-top: 10px;
    }
  }
  .riskZs {
    display: flex;
    justify-content: space-around;
    align-items: center;
    width: 40%;
    .eachDescribe {
      display: flex;
      align-items: center;
      font-family: Source Han Sans CN;
      font-weight: 400;
      // padding-top: 5px;
      .icon {
        width: 8px;
        height: 8px;
        border-radius: 50%;
      }
      .bgcYellow {
        background: #f8744bff;
      }
      .bgcblue {
        background: #18ffff;
      }
      .text {
        padding: 0 10px 0 6px;
        font-family: Source Han Sans CN;
        font-weight: 500;
        font-size: 16px;
        color: #c1d3d4;
      }
    }
  }
  .WarningSl {
    display: flex;
    justify-content: space-around;
    align-items: center;
    width: 55%;
    .eachDescribe {
      display: flex;
      align-items: center;
      font-family: Source Han Sans CN;
      font-weight: 400;
      // padding-top: 5px;
      .icon {
        width: 8px;
        height: 8px;
        border-radius: 50%;
      }
      .bgcYellow {
        background: #2be7abff;
      }
      .bgcls {
        background: #18a7f2ff;
      }
      .text {
        padding: 0 10px 0 6px;
        font-family: Source Han Sans CN;
        font-weight: 500;
        font-size: 14px;
        color: #c1d3d4;
      }
    }
  }
  .WarningNy {
    display: flex;
    width: 45%;
    .head-right {
      cursor: pointer;
      font-size: 14px;
      color: #ffffff;
      display: flex;
      line-height: 18px;
      .head-item {
        width: 70px;
        margin-right: 10px;
        padding: 2px 3px;
        background: #00344f;
        height: 23px;
        text-align: center;
        position: relative;
        left: 40px;
      }
      .activedright {
        border: 1px solid #2cfce9;
        color: #e4f5ff;
        background: #166f84;
      }
    }
  }
}
.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;
  }
}
</style>