ll
liukangdong
2025-01-07 9b80c42df73cb99b37d95b5c0a186ceec5e45a27
screen/src/views/LogisticsCenter.vue
@@ -25,7 +25,18 @@
            <div class="second_title">
              <div class="title">
                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
                <div>累计出库量</div>
                <div>累计出库量(箱)</div>
                <div class="question">
                  <img src="@/assets/images/ic_question@2x.png" style="margin-left: 6px;" class="icon" alt="">
                  <div class="hover_wrap">
                    <div class="triangle"></div>
                    <div class="title">出库能力统计说明:</div>
                    <div>当前订单量:截至昨日未完成订单+当日下达的订单数量;</div>
                    <div>当日任务量:截至昨日已配载未出库+当日已配载未出库数量+无需配载的任务;</div>
                    <div>今日出库量:当日按实际出库量(以电子锁上锁为准)</div>
                    <div>剩余任务量:当日任务量-今日出库量</div>
                  </div>
                </div>
              </div>
              <div class="tabs">
                <div class="tab" :class="{ active: activeTab1 == 1 }" @click="tab1Click(1)">本周</div>
@@ -114,7 +125,7 @@
                    <span class="item">{{ item.contractNumber }}</span>
                    <span class="item status">{{ item.statusDesc }}</span>
                    <span class="item">{{ item.receiveEnterprise }}</span>
                    <span class="item">{{ item.transportDate }}</span>
                    <span class="item">{{ item.transportDate || '-' }}</span>
                  </div>
                </div>
              </div>
@@ -133,6 +144,17 @@
              <div class="left">
                <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
                <span>出库能力</span>
                <div class="question">
                  <img src="@/assets/images/ic_question@2x.png" style="margin-left: 4px;" class="icon" alt="">
                  <div class="hover_wrap">
                    <div class="triangle"></div>
                    <div class="title">出库能力统计说明:</div>
                    <div>当前订单量:截至昨日未完成订单+当日下达的订单数量;</div>
                    <div>当日任务量:截至昨日已配载未出库+当日已配载未出库数量+无需配载的任务;</div>
                    <div>今日出库量:当日按实际出库量(以电子锁上锁为准)</div>
                    <div>剩余任务量:当日任务量-今日出库量</div>
                  </div>
                </div>
              </div>
              <div class="right">
                <img @click="showPro = !showPro" src="@/assets/images/LogisticsCenter/position.png" class="posi" alt="">
@@ -147,15 +169,18 @@
              <div class="item">
                <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2x.png" alt="">
                <div class="content">
                  <div class="name">当日订单量</div>
                  <div class="num"><span class="blue">{{ cneterData.currentOrderNum }}</span>万支</div>
                  <div class="name">当前订单量</div>
                  <div class="num"><span class="blue"
                      v-if="cneterData.currentOrderNum || cneterData.currentOrderNum == 0">{{
                        cneterData.currentOrderNum.toFixed(0) }}</span>箱</div>
                </div>
              </div>
              <div class="item">
                <img src="@/assets/images/LogisticsCenter/ic_jinrijihua@2.png" alt="">
                <div class="content">
                  <div class="name">当日计划量</div>
                  <div class="num"><span>{{ cneterData.currentPlanNum }}</span>万支</div>
                  <div class="name">当前任务量</div>
                  <div class="num"><span v-if="cneterData.currentPlanNum || cneterData.currentPlanNum == 0">{{
                    cneterData.currentPlanNum.toFixed(0) }}</span>箱</div>
                  <div class="unit">车次:{{ cneterData.currentPlanCarNum }}</div>
                </div>
              </div>
@@ -163,7 +188,9 @@
                <img src="@/assets/images/LogisticsCenter/ic_jinrichuku@2x.png" alt="">
                <div class="content">
                  <div class="name">今日出库量</div>
                  <div class="num"><span class="finish">{{ cneterData.crrentOutNum }}</span>万支</div>
                  <div class="num"><span v-if="cneterData.crrentOutNum || cneterData.crrentOutNum == 0"
                      class="finish">{{
                        cneterData.crrentOutNum.toFixed(0) }}</span>箱</div>
                  <div class="unit">车次:{{ cneterData.crrentOutCarNum }}</div>
                </div>
              </div>
@@ -171,7 +198,9 @@
                <img src="@/assets/images/LogisticsCenter/ic_jinriweichu@2x.png" alt="">
                <div class="content">
                  <div class="name">剩余任务量</div>
                  <div class="num"><span class="today">{{ cneterData.crrentRestNum }}</span>万支</div>
                  <div class="num"><span v-if="cneterData.crrentRestNum || cneterData.crrentRestNum == 0"
                      class="today">{{
                        cneterData.crrentRestNum.toFixed(0) }}</span>箱</div>
                  <div class="unit">车次:{{ cneterData.crrentRestCarNum }}</div>
                </div>
              </div>
@@ -197,7 +226,7 @@
                  <div :style="{ width: cneterData.level2 }" class="box box1">
                    <div v-if="cneterData.hoursAbility >= cneterData.currentPlanNum" class="tag tag1">
                      <div class="icon"></div>
                      <span>当日计划</span>
                      <span>当前任务</span>
                    </div>
                  </div>
                </div>
@@ -213,7 +242,7 @@
                    :style="{ width: cneterData.level22 }" class="box box1 box11">
                    <div class="tag tag1">
                      <div class="icon"></div>
                      <span>当日计划</span>
                      <span>当前任务</span>
                    </div>
                  </div>
                  <!-- <div class="box"></div> -->
@@ -278,7 +307,7 @@
              <div class="side">
                全省:
                <span>{{ data5.currentNum }}</span>
                <span class="unit">万支 | </span>
                <span class="unit">箱 | </span>
                <span v-if="data5.totalNum">{{ ((data5.currentNum / data5.totalNum) * 100).toFixed(1) }}%</span>
              </div>
            </div>
@@ -295,7 +324,7 @@
              <div class="side">
                全省:
                <span>{{ data6.currentNum }}</span>
                <span class="unit">万支 | </span>
                <span class="unit">箱 | </span>
                <span v-if="data6.totalNum">{{ ((data6.currentNum / data6.totalNum) * 100).toFixed(1) }}%</span>
              </div>
            </div>
@@ -481,51 +510,60 @@
    { value: [103.9526, 30.7617, 1901], itemStyle: { color: '#fff' }, name: '四川', total: 18, bj: 0, yj: 0, yx: 18, tj: 0, dw: 0 }
  ]
  const mapData = [
    { name: '北京市',code:'110000', value: 0 },
    { name: '天津市',code:'120000', value: 0 },
    { name: '上海市', code:'310000',value: 0 },
    { name: '重庆市', code:'500000',value: 0 },
    { name: '河北省',code:'130000', value: 0 },
    { name: '河南省',code:'410000', value: 0 },
    { name: '云南省',code:'530000', value: 0 },
    { name: '辽宁省',code:'210000', value: 0 },
    { name: '黑龙江省', code:'230000',value: 0 },
    { name: '湖南省',code:'430000', value: 0 },
    { name: '安徽省', code:'340000',value: 0 },
    { name: '山东省',code:'370000', value: 0 },
    { name: '新疆维吾尔自治区', code:'650000',value: 0 },
    { name: '江苏省',code:'320000', value: 0 },
    { name: '浙江省', code:'330000', value: 0 },
    { name: '江西省', code:'360000', value: 0 },
    { name: '湖北省', code:'420000', value: 0 },
    { name: '广西壮族自治区',code:'450000', value: 0 },
    { name: '甘肃省', code:'620000', value: 0 },
    { name: '山西省', code:'140000', value: 0 },
    { name: '内蒙古自治区', code:'150000', value: 0 },
    { name: '陕西省', code:'610000', value: 0 },
    { name: '吉林省',code:'220000', value: 0 },
    { name: '福建省', code:'350000', value: 0 },
    { name: '贵州省', code:'520000', value: 0 },
    { name: '广东省', code:'440000', value: 0 },
    { name: '青海省', code:'630000', value: 0 },
    { name: '西藏自治区',code:'540000', value: 0 },
    { name: '宁夏回族自治区',code:'640000', value: 0 },
    { name: '四川省',code:'510000', value: 0 },
    { name: '宁夏省', code:'640000',value: 0 },
    { name: '海南省', code:'460000',value: 0 },
    { name: '台湾省', code:'710000',value: 0 },
    { name: '香港特别行政区', code:'810000',value: 0 },
    { name: '澳门特别行政区', code:'820003',value: 0 },
    { name: '南海诸岛', code:'',value: 0 },
    { name: '北京市', code: '110000', value: 0 },
    { name: '天津市', code: '120000', value: 0 },
    { name: '上海市', code: '310000', value: 0 },
    { name: '重庆市', code: '500000', value: 0 },
    { name: '河北省', code: '130000', value: 0 },
    { name: '河南省', code: '410000', value: 0 },
    { name: '云南省', code: '530000', value: 0 },
    { name: '辽宁省', code: '210000', value: 0 },
    { name: '黑龙江省', code: '230000', value: 0 },
    { name: '湖南省', code: '430000', value: 0 },
    { name: '安徽省', code: '340000', value: 0 },
    { name: '山东省', code: '370000', value: 0 },
    { name: '新疆维吾尔自治区', code: '650000', value: 0 },
    { name: '江苏省', code: '320000', value: 0 },
    { name: '浙江省', code: '330000', value: 0 },
    { name: '江西省', code: '360000', value: 0 },
    { name: '湖北省', code: '420000', value: 0 },
    { name: '广西壮族自治区', code: '450000', value: 0 },
    { name: '甘肃省', code: '620000', value: 0 },
    { name: '山西省', code: '140000', value: 0 },
    { name: '内蒙古自治区', code: '150000', value: 0 },
    { name: '陕西省', code: '610000', value: 0 },
    { name: '吉林省', code: '220000', value: 0 },
    { name: '福建省', code: '350000', value: 0 },
    { name: '贵州省', code: '520000', value: 0 },
    { name: '广东省', code: '440000', value: 0 },
    { name: '青海省', code: '630000', value: 0 },
    { name: '西藏自治区', code: '540000', value: 0 },
    { name: '宁夏回族自治区', code: '640000', value: 0 },
    { name: '四川省', code: '510000', value: 0 },
    { name: '宁夏省', code: '640000', value: 0 },
    { name: '海南省', code: '460000', value: 0 },
    { name: '台湾省', code: '710000', value: 0 },
    { name: '香港特别行政区', code: '810000', value: 0 },
    { name: '澳门特别行政区', code: '820003', value: 0 },
    { name: '南海诸岛', code: '', value: 0 },
  ]
  let totalNum = 0
  mapList.value.forEach(i => {
    totalNum += i.yearNum
  })
  mapData.forEach(item => {
    item.monthNum = 0
    item.yearNum = 0
    mapList.value.forEach(ite => {
      if (item.code == ite.code) {
        item.value = ite.yearNum
        item.value = 0
        item.monthNum = ite.monthNum
        item.yearNum = ite.yearNum
        if (totalNum > 0) {
          item.rate = ((ite.yearNum / totalNum) * 100).toFixed(2)
          item.value = (ite.yearNum / totalNum).toFixed(4)
        }
      }
    })
  })
@@ -535,10 +573,14 @@
    visualMap: {
      type: 'piecewise',
      pieces: [
        { min: 100000, max: 99999999999, label: '出库量10w以上', color: '#be6f2b' },
        { min: 50000, max: 100000, label: '出库量5-10w', color: '#c39332' },
        { min: 20000, max: 50000, label: '出库量2-5w', color: '#5ecbaf' },
        { min: -1, max: 20000, label: '出库量2w以下', color: '#3561a4' },
        { min: 0.05, max: 99999999999, label: '调拨量占比5%以上', color: '#be6f2b' },
        { min: 0.02, max: 0.05, label: '调拨量占比2%~5%', color: '#c39332' },
        { min: 0.01, max: 0.02, label: '调拨量占比1%~2%', color: '#5ecbaf' },
        { min: -1, max: 0.01, label: '调拨量占比1%以下', color: '#3561a4' },
        // { min: 100000, max: 99999999999, label: '出库量10w以上', color: '#be6f2b' },
        // { min: 50000, max: 100000, label: '出库量5-10w', color: '#c39332' },
        // { min: 20000, max: 50000, label: '出库量2-5w', color: '#5ecbaf' },
        // { min: -1, max: 20000, label: '出库量2w以下', color: '#3561a4' },
      ],
      itemWidth: 22,
      itemHeight: 22,
@@ -644,15 +686,22 @@
                        <div class="item-state-con">
                          <span class="dot bj"></span>
                          <span class="item-state-num">
                            <span class="text">本月出库量:</span>
                            <span class="num">${params.data.monthNum}万支</span>
                            <span class="text">本月调拨量:</span>
                            <span class="num">${params.data.monthNum}箱</span>
                          </span>
                        </div>
                         <div class="item-state-con">
                        <div class="item-state-con">
                          <span class="dot yj"></span>
                          <span class="item-state-num">
                           <span class="text">本年出库量:</span>
                            <span class="num">${params.data.yearNum}万支</span>
                           <span class="text">本年调拨量:</span>
                            <span class="num">${params.data.yearNum}箱</span>
                          </span>
                        </div>
                        <div class="item-state-con">
                          <span class="dot yj"></span>
                          <span class="item-state-num">
                           <span class="text">调拨量占比:</span>
                            <span class="num">${params.data.rate || 0}%</span>
                          </span>
                        </div>
                       </div>`
@@ -682,7 +731,7 @@
    mapList.value = temp.map(item => {
      item.value = item.monthNum
      item.name = item.provinceName
      item.code=item.provinceCode
      item.code = item.provinceCode
      return item
    })
    initMap()
@@ -1190,7 +1239,7 @@
          } else if (item.seriesName === '库存利用率') {
            result += `
            <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;">
              <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #5a6fc0;margin-right: 4px;"></div><div>${item.seriesName}</div></div>
              <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #b2bcd1;margin-right: 4px;"></div><div>${item.seriesName}</div></div>
              <div><strong>${item.value}%</strong></div>
            </div>`
          }
@@ -1220,7 +1269,7 @@
        nameTextStyle: {
          color: '#869CC9',
        },
        name: '万支',
        name: '箱',
        nameGap: 16,
        type: 'value',
        axisLabel: {
@@ -1422,7 +1471,7 @@
    }],
    yAxis: [
      {
        name: '万支',
        name: '箱',
        nameGap: 16,
        type: 'value',
        axisLabel: {
@@ -1560,7 +1609,7 @@
      // icon: 'circle',
      right: '10%',
      top: '0%',
      data: ['总运力资源', '当日提报运力', '车辆利用率'],
      data: ['当日可用运力', '当日提报运力', '车辆利用率'],
      itemWidth: 20,
      itemHeight: 10,
      textStyle: {
@@ -1574,7 +1623,7 @@
        // 遍历悬浮时的所有点,定制化显示内容
        let result = `<div style="width: 160px">${params[0].name}</div>`
        params.forEach((item) => {
          if (item.seriesName === '总运力资源') {
          if (item.seriesName === '当日可用运力') {
            result += `
            <div style="display: flex;align-items: center;justify-content: space-between;margin-top: 2px;">
              <div style="display: flex;align-items: center;"><div style="width: 10px;height: 10px; border-radius: 50%;background-color: #88d9cc;margin-right: 4px;"></div><div>${item.seriesName}</div></div>
@@ -1666,7 +1715,7 @@
    ],
    series: [
      {
        name: '总运力资源',
        name: '当日可用运力',
        type: 'bar',
        barWidth: 10,
        barGap: '60%',
@@ -2091,6 +2140,9 @@
        .left {
          display: flex;
          align-items: center;
          position: relative;
          img {
            width: 16px;
@@ -2139,7 +2191,6 @@
      .static_wrap {
        display: flex;
        justify-content: space-between;
        align-items: center;
        margin: 30px 0 14px;
        .item {
@@ -2243,7 +2294,7 @@
              align-items: center;
              justify-content: center;
              min-width: 76px;
              border: 1px solid #fff;
              border: 1px solid #FECE01;
              .icon {
                position: absolute;
@@ -2260,6 +2311,7 @@
            .tag1 {
              background-color: #28F0CC;
              border: 1px solid #28F0CC;
              .icon {
                background-color: #28F0CC;
@@ -2386,6 +2438,55 @@
          height: 192px;
          width: 410px;
        }
      }
    }
  }
  .question {
    display: flex;
    align-items: center;
    &:hover {
      .hover_wrap {
        display: block;
      }
    }
    .hover_wrap {
      display: none;
      position: absolute;
      left: 130px;
      z-index: 999;
      top: -5px;
      width: 407px;
      height: 134px;
      background: rgba(0, 30, 63, 0.6);
      border: 1px solid #003F82;
      backdrop-filter: blur(3px);
      padding: 10px;
      font-size: 13px;
      color: #e2ebfd;
      line-height: 19px;
      font-weight: 400;
      border-radius: 6px;
      .triangle {
        width: 12px;
        height: 12px;
        position: absolute;
        top: 10px;
        left: -6px;
        transform: rotate(45deg);
        border-left: 1px solid #003F82;
        border-bottom: 1px solid #003F82;
        background: rgba(0, 30, 63, 0.6);
        backdrop-filter: blur(3px);
      }
      .title {
        font-weight: bold;
        font-size: 14px;
        color: #e2ebfd;
      }
    }
  }
@@ -2733,6 +2834,11 @@
    font-weight: 500;
    font-size: 16px;
    color: #FFFFFF;
    position: relative;
    .hover_wrap {
      left: 175px;
    }
    .icon {
      width: 16px;