ll
liukangdong
2024-12-24 abfe6985b2678445ea8da974b204d9fe2ffdb887
ll
已添加2个文件
已修改11个文件
6055 ■■■■■ 文件已修改
h5/pages/driver/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/staff/task/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/index.html 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package-lock.json 5603 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/package.json 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/api/index.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/assets/ani/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/components/Loading.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/EnergyConsum.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsCenter.vue 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/LogisticsEfficiency.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/SecurityControl.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen/src/views/TaskEfficiency.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5/pages/driver/index.vue
@@ -64,7 +64,7 @@
            <view class="left">
                <view class="img_wrap img1" @click="jump('/pages/driver/notice')">
                    <image src="@/static/driver/wuliu_ic_ruyuanyuyue@2x.png" class="img"></image>
                    <view class="h1">入园须知</view>
                    <view class="h1">入园预约</view>
                    <view class="h2">RESERVATION</view>
                </view>
                <view class="img_wrap img2" @click="jump('/pages/driver/reservedGuide?str=bookingTips')">
h5/pages/staff/task/index.vue
@@ -358,6 +358,10 @@
          this.getHeadList()
        })
      }
            if (item.type == 7) {
              window.open('https://atwl.ahzyssl.com/dps/web/wxAuth/loginV2?oaId=atwl&redirectId=index')
                return
            }
      if (objType === 2) {
        uni.navigateTo({
          url: `/pages/staff/vehicle/sendACarDetail?id=${objId}&info=${info}`
@@ -370,9 +374,7 @@
        uni.navigateTo({
          url: `/pages/staff/task/vDangetAppr?id=${objId}&objType=${objType}&info=${info}`
        })
      }else if (objType === 7) {
        window.open('https://atwl.ahzyssl.com/dps/web/wxAuth/loginV2?oaId=atwl&redirectId=index')
      } else if (objType === 6 || objType === 5) {
      }else if (objType === 6 || objType === 5) {
        uni.navigateTo({
          url: `/pages/staff/task/driver?id=${objId}&objType=${objType}&info=${info}`
        })
screen/index.html
@@ -8,9 +8,9 @@
  </head>
  <body>
    <div id="app"></div>
    <script src="./public/jquery-1.12.4.min.js"></script>
    <script src="./public/jsencrypt.min.js"></script>
    <script src="./public/web-control_1.2.7.min.js"></script>
    <script src="./jquery-1.12.4.min.js"></script>
    <script src="./jsencrypt.min.js"></script>
    <script src="./web-control_1.2.7.min.js"></script>
    <script type="module" src="/src/main.js"></script>
    <script src="https://webapi.amap.com/maps?v=2.0&key=96b8d96e645290f1de14f5229ee030e4"></script>
screen/package-lock.json
ÎļþÌ«´ó
screen/package.json
@@ -20,8 +20,8 @@
    "uqrcodejs": "^4.0.7",
    "v-scale-screen": "^2.0.0",
    "vue": "^3.4.21",
    "vue-router": "^4.3.0",
    "vue3-loading-spinner": "^1.0.0"
    "vue-loading-overlay": "^6.0.6",
    "vue-router": "^4.3.0"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^5.0.4",
screen/src/api/index.js
@@ -1,9 +1,5 @@
import instance, { request } from '@/utils/request.js'
// åº“制管理看板 åˆ°è´§æƒ…况
export const getStorearriveGoodsList = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/arriveGoodsList', data)
}
// åº“制管理看板 ä¸­å¿ƒæ•°æ®
export const getStorecenterData = (data) => {
  return request('visitsAdmin/cloudService/board/api/wholeProvince/centerData', data)
screen/src/assets/ani/loading.gif
screen/src/components/Loading.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
<template>
  <div class="loading">
    <img style="width: 120px;" src="@/assets/ani/loading.gif" alt="">
  </div>
</template>
<script setup>
// const props = defineProps({
//   loading: Boolean,
// })
// const loadingIns = ref({  })
</script>
<style lang="scss" scoped>
.loading {
  width: 100%;
  height: 100%;
  position: absolute;
  overflow: hidden;
  top: 0;
  left: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  /* background-color: rgba(10, 27, 39, .2); */
  z-index: 999999;
}
</style>
screen/src/views/EnergyConsum.vue
@@ -27,7 +27,7 @@
                <div class="name">本年累计循环烟箱</div>
                <div><span class="num" style="color: #68cfb2;" v-if="data1.smokeBoxTotal || data1.smokeBoxTotal == 0">{{
                  data1.smokeBoxTotal.toLocaleString()
                    }}</span><span>只</span></div>
                    }}</span><span>个</span></div>
              </div>
            </div>
          </div>
@@ -81,11 +81,9 @@
                </div>
                <div class="static" v-if="data1.electricityQuantity">
                  <span class="lab">同比</span>
                  <template v-if="data1.electricityQuantity.sameNum">
                    <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.sameNum" class="icon"
                      src="@/assets/images/ic_up.webp" alt="" />
                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  </template>
                  <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.sameNum" class="icon"
                    src="@/assets/images/ic_up.webp" alt="" />
                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  <span class="val"
                    v-if="data1.electricityQuantity.totalNum && data1.electricityQuantity.totalNum != 0">{{
                      Math.abs(((data1.electricityQuantity.totalNum -
@@ -93,12 +91,9 @@
                    }}%</span>
                  <span class="val" v-else style="margin-left: 4px;"> -</span>
                  <span class="lab">环比</span>
                  <template v-if="data1.electricityQuantity.ringNum">
                    <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.ringNum" class="icon"
                      src="@/assets/images/ic_up.webp" alt="" />
                    <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  </template>
                  <img v-if="data1.electricityQuantity.totalNum > data1.electricityQuantity.ringNum" class="icon"
                    src="@/assets/images/ic_up.webp" alt="" />
                  <img v-else class="icon" src="@/assets/images/ic_down.webp" alt="" />
                  <span class="val"
                    v-if="data1.electricityQuantity.totalNum && data1.electricityQuantity.totalNum != 0">{{
                      Math.abs(((data1.electricityQuantity.totalNum -
@@ -204,21 +199,23 @@
            </template>
            <div class="bottom_wrap" v-if="data1.yesterdayElectricity">
              <div class="bottom bottom1" @click="changeacDay(3)">
                <div :class="{active: activeDays == 3}" class="num fs_linear">{{ data1.yesterdayElectricity.total || 0 }}</div>
                <div :class="{ active: activeDays == 3 }" class="num fs_linear">{{ data1.yesterdayElectricity.total || 0
                  }}</div>
                <div class="name">昨日用电</div>
                <div class="unit">kw·h</div>
                <img v-if="activeDays == 3" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
                <img v-else src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
              </div>
              <div class="bottom bottom2" @click="changeacDay(1)">
                <div :class="{active: activeDays == 1}" class="num">{{ data1.todayElectricity.total || 0 }}</div>
                <div :class="{ active: activeDays == 1 }" class="num">{{ data1.todayElectricity.total || 0 }}</div>
                <div class="name">今日用电</div>
                <div class="unit">kw·h</div>
                <img v-if="activeDays == 1" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
                <img v-else src="@/assets/images/ic_dianliang_b@2x.png" class="bg" alt="" />
              </div>
              <div class="bottom bottom3" @click="changeacDay(2)">
                <div :class="{active: activeDays == 2}" class="num fs_linear">{{ data1.monthElectricity.total || 0 }}</div>
                <div :class="{ active: activeDays == 2 }" class="num fs_linear">{{ data1.monthElectricity.total || 0 }}
                </div>
                <div class="name">本月用电</div>
                <div class="unit">kw·h</div>
                <img v-if="activeDays == 2" src="@/assets/images/ic_dianliang@2x.png" class="bg" alt="" />
@@ -347,6 +344,9 @@
    xAxis: {
      type: 'category',
      boundaryGap: false,
      axisLabel: {
        color: '#D2E0FF'
      },
      data: data5.value.map(i => dayjs(i.timeData).format('M'))
    },
    tooltip: {
@@ -358,8 +358,12 @@
    yAxis: {
      type: 'value',
      name: '单位:L',
      axisLabel: {
        color: '#D2E0FF'
      },
      nameTextStyle: {
        padding: [0, 0, 0, -16]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        color: '#D2E0FF',
        padding: [0, 0, 0, -18]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
      },
      splitLine: {
        show: true,
@@ -464,13 +468,17 @@
    xAxis: {
      type: 'category',
      boundaryGap: false,
      axisLabel: {
        color: '#D2E0FF'
      },
      data: data4.value.map(i => i.timeData)
    },
    yAxis: {
      type: 'value',
      name: '单位:kw·h',
      nameTextStyle: {
        padding: [0, 0, 0, -16]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        padding: [0, 0, 0, -16],    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        color: '#D2E0FF'
      },
      splitLine: {
        show: true,
@@ -480,6 +488,9 @@
          type: 'dashed',
        },
        splitNumber: 4
      },
      axisLabel: {
        color: '#D2E0FF'
      }
    },
    grid: {
@@ -557,7 +568,7 @@
  getData6()
}
const getData6 = () => {
  regionDataRanking({type: activeDays.value}).then(res => {
  regionDataRanking({ type: activeDays.value }).then(res => {
    const result = res.data
    data6.value = result
  })
@@ -591,12 +602,19 @@
    },
    xAxis: {
      type: 'category',
      axisLabel: {
        color: '#D2E0FF'
      },
      data: data2.value.map(i => dayjs(i.timeData).format('M'))
    },
    yAxis: {
      type: 'value',
      name: unit,
      axisLabel: {
        color: '#D2E0FF'
      },
      nameTextStyle: {
        color: '#D2E0FF',
        padding: [0, 0, 4, -30]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
      },
      splitLine: {
@@ -899,6 +917,7 @@
        text-align: center;
        padding-top: 70px;
        cursor: pointer;
        .num {
          font-size: 24px;
          color: #D0FFFA;
@@ -915,6 +934,7 @@
          font-size: 14px;
          color: #D0FFFA;
        }
        .active {
          font-size: 36px;
          color: #01D9FE;
screen/src/views/LogisticsCenter.vue
@@ -21,6 +21,7 @@
            <img src="@/assets/images/title@2x.png" class="bg" alt="" />
          </div>
          <div class="left_box_one">
            <Loading v-if="loading1" />
            <div class="second_title">
              <div class="title">
                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
@@ -36,7 +37,7 @@
            </div>
            <div class="content_wrap">
              <div class="num_wrap">
                <div class="num_list" v-if="StockOutData.currentNum">
                <div class="num_list" v-if="StockOutData.currentNum || StockOutData.currentNum == 0">
                  <div class="num" v-for="i in StockOutData.currentNum + ''">
                    {{ i }}
                    <img class="bg" src="@/assets/images/LogisticsCenter/bg_number@2x.png" alt="">
@@ -89,7 +90,7 @@
            <div class="second_title">
              <div class="title">
                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
                <div>当前运输任务</div>
                <div>当前订单任务</div>
              </div>
              <div class="search_wrap">
                <img src="@/assets/images/LogisticsCenter/ic_search@2x.png" alt="">
@@ -117,7 +118,12 @@
                  </div>
                </div>
              </div>
              <template v-if="isLoadingTask || transportTask.length == 0">
                <Loading v-if="isLoadingTask" />
                <div class="empty" v-else>
                  <img src="@/assets/images/default_nodata.png" alt="">
                </div>
              </template>
            </div>
          </div>
        </div>
@@ -172,7 +178,7 @@
            </div>
            <div class="footer">
              <div class="wrap">
                <div class="content" :style='{ width: cneterData.level1}'>
                <div class="content" :style='{ width: cneterData.level1 }'>
                  <div class="scale">0</div>
                  <!-- <div class="node">
                    <div>8h</div>
@@ -181,13 +187,14 @@
                      <div class="icon icon2"></div>
                    </div>
                  </div> -->
                  <div :style="{width: cneterData.level3}" :class="{box23: cneterData.crrentOutNum >= cneterData.hoursAbility}" class="box" >
                  <div :style="{ width: cneterData.level3 }"
                    :class="{ box23: cneterData.crrentOutNum >= cneterData.hoursAbility }" class="box">
                    <div v-if="cneterData.crrentOutNum < cneterData.hoursAbility" class="tag">
                      <div class="icon"></div>
                      <span>今日出库</span>
                    </div>
                  </div>
                  <div :style="{width: cneterData.level2}" class="box box1">
                  <div :style="{ width: cneterData.level2 }" class="box box1">
                    <div v-if="cneterData.hoursAbility >= cneterData.currentPlanNum" class="tag tag1">
                      <div class="icon"></div>
                      <span>当日计划</span>
@@ -195,13 +202,15 @@
                  </div>
                </div>
                <div class="side">
                  <div v-if="cneterData.crrentOutNum >= cneterData.hoursAbility" :style="{width: cneterData.level33}" class="box box22" >
                  <div v-if="cneterData.crrentOutNum >= cneterData.hoursAbility" :style="{ width: cneterData.level33 }"
                    class="box box22">
                    <div class="tag">
                      <div class="icon"></div>
                      <span>今日出库</span>
                    </div>
                  </div>
                  <div v-if="cneterData.hoursAbility <= cneterData.currentPlanNum" :style="{width: cneterData.level22}" class="box box1 box11">
                  <div v-if="cneterData.hoursAbility <= cneterData.currentPlanNum"
                    :style="{ width: cneterData.level22 }" class="box box1 box11">
                    <div class="tag tag1">
                      <div class="icon"></div>
                      <span>当日计划</span>
@@ -220,13 +229,13 @@
              <div class="list">
                <div class="head line">
                  <div class="item">车牌号</div>
                  <div class="item contract">合同号</div>
                  <div class="item">目的地</div>
                  <div class="item">合同号</div>
                  <div class="item addr">目的地</div>
                </div>
                <div class="line" v-for="item in active1List">
                  <div class="item">{{ item.platNumber }}</div>
                  <div class="item contract">{{ item.contractNumber }}</div>
                  <div class="item">{{ item.repertotyName }}</div>
                  <div class="item">{{ item.contractNumber }}</div>
                  <div class="item addr">{{ item.repertotyName }}</div>
                </div>
              </div>
            </div>
@@ -266,7 +275,7 @@
              </div>
              <div class="side">
                å…¨çœï¼š
                <span>{{ data5.totalNum }}</span>
                <span>{{ data5.currentNum }}</span>
                <span class="unit">万支 | </span>
                <span v-if="data5.totalNum">{{ ((data5.currentNum / data5.totalNum) * 100).toFixed(1) }}%</span>
              </div>
@@ -281,7 +290,12 @@
                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
                <div>出库能力利用率</div>
              </div>
              <div class="side">全省:<span>100<span class="unit">万支 |</span> 40.6%</span></div>
              <div class="side">
                å…¨çœï¼š
                <span>{{ data6.currentNum }}</span>
                <span class="unit">万支 | </span>
                <span v-if="data6.totalNum">{{ ((data6.currentNum / data6.totalNum) * 100).toFixed(1) }}%</span>
              </div>
            </div>
            <div class="echart5_wrap">
              <div class="echart5" id="echart6"></div>
@@ -293,7 +307,12 @@
                <img src="@/assets/images/LogisticsCenter/ic_title@2x.png" class="icon" alt="" />
                <div>运用资源利用率</div>
              </div>
              <div class="side">全省:<span>100<span class="unit">万支 |</span> 40.6%</span></div>
              <div class="side">
                å…¨çœï¼š
                <span>{{ data7.currentNum }}</span>
                <span class="unit">辆 | </span>
                <span v-if="data7.totalNum">{{ ((data7.currentNum / data7.totalNum) * 100).toFixed(1) }}%</span>
              </div>
            </div>
            <div class="echart5_wrap">
              <div class="echart5" id="echart7"></div>
@@ -390,10 +409,10 @@
            </div>
          </div>
        </div>
        <Loading v-if="modalLoading" />
      </div>
      <div class="modal_mask" v-if="showModal" @click="closeModal"></div>
    </div>
    <!-- <Loading v-if="isLoading" /> -->
  </v-scale-screen>
</template>
@@ -409,12 +428,12 @@
import chinaJSON from '@/assets/china.json'
import fahuoImg from '@/assets/images/LogisticsCenter/ic_fahuodi@2x.png'
import shouImg from '@/assets/images/LogisticsCenter/ic_huowu@2x.png'
// import { Loading } from 'vue3-loading-spinner';
// import 'vue3-loading-spinner/dist/style.css';
// import Loading from 'vue-loading-overlay'
// import 'vue-loading-overlay/dist/css/index.css'
import Loading from '@/components/Loading.vue'
import {
  getStoreOperationList,
  getStorearriveGoodsList,
  getStorecenterData,
  getStoreenergyDataList,
  getStorelastMonthOil,
@@ -440,7 +459,6 @@
  time.value = dayjs().format('HH:mm:ss')
}, 1000)
const isLoading = ref(false);
// 
const mapList = ref([])
const mapEchart = ref()
@@ -694,6 +712,9 @@
    },
    xAxis: {
      type: 'value',
      axisLabel: {
        color: '#D2E0FF'
      },
      splitLine: {
        show: true,
        lineStyle: {
@@ -706,6 +727,9 @@
    yAxis: {
      axisTick: {
        show: false,
      },
      axisLabel: {
        color: '#D2E0FF'
      },
      type: 'category',
      axisLine: {
@@ -842,7 +866,7 @@
const dataList1 = ref([])
const getData1 = () => {
  getStorearriveGoodsList({
  arriveGoodsList({
    factoryCode: activeCity.value.code
  }).then(res => {
    dataList1.value = res.data || []
@@ -853,23 +877,25 @@
const transportTask = ref([])
const taskCode = ref('')
const showModal = ref(false)
const modalLoading = ref(false)
const modalInfo = ref({})
const modalTab = ref(0)
const pager = ref({
  page: 0,
  rows: 10
  rows: 50
})
const taskClick = (item) => {
  isLoading.value = true
  modalLoading.value = true
  showModal.value = true
  kzorderInfo({ contractNumber: item.contractNumber }).then(res => {
    modalInfo.value = res.data
    showModal.value = true
    isLoading.value = false
    modalLoading.value = false
    nextTick(() => {
      initGdMap()
    })
  }, () => {
    isLoading.value = false
    modalLoading.value = false
  })
}
const closeModal = () => {
@@ -957,8 +983,9 @@
  })
  map.add(polyline)
}
const isLoadingTask = ref(false)
const getData2 = () => {
  isLoadingTask.value = true
  getStoreTaskList({
    pager: pager.value,
    parameters: {
@@ -966,6 +993,7 @@
      facrotyCodeList: activeCity.value.code ? [activeCity.value.code] : []
    }
  }).then(res => {
    isLoadingTask.value = false
    let temp = res.data.rows || []
    transportTask.value = temp.map(item => {
      if (item.transportDate) {
@@ -973,6 +1001,10 @@
      }
      return item
    })
    console.log('isLoadingTask', isLoadingTask.value)
  }, () => {
    isLoadingTask.value = false
  })
}
@@ -981,7 +1013,7 @@
const cityList = ref()
const getCity = () => {
  kzfactoryList().then(res => {
    cityList.value = res.data
    cityList.value = [{ name: '全省', code: '' }, ...res.data]
  })
}
const activeCity = ref({ name: '全省', code: '' })
@@ -1021,9 +1053,12 @@
}
const activeTab1 = ref(0)
const loading1 = ref(false)
const StockOutData = ref({})
const getStockOut = () => {
  loading1.value = true
  kztotalOutQtyNum({ type: activeTab1.value, factoryCode: activeCity.value.code }).then(res => {
    loading1.value = false
    if (res.code == 200) {
      let obj = res.data
      obj.currentNum = (obj.currentOutNum + obj.currentInNum).toFixed(0) * 1
@@ -1038,6 +1073,8 @@
      initEchart1()
    }
  }, () => {
    loading1.value = false
  })
}
const tab1Click = (val) => {
@@ -1050,38 +1087,38 @@
    factoryCode: activeCity.value.code
  }).then(res => {
    const obj = res.data || {}
    console.log('obj', obj);
    console.log('obj', obj)
    // 8小时 è®¡åˆ’ ä»Šæ—¥
    // obj.hoursAbility = 6000
    // obj.maxAbility = 8000
    // obj.currentPlanNum = 5000
    // obj.crrentOutNum = 7000
    obj.level1 = ((obj.hoursAbility / obj.maxAbility) * 100).toFixed(2) + '%'
    if(obj.currentPlanNum >= obj.hoursAbility){
    obj.level1 = ((obj.hoursAbility / obj.maxAbility) * 100).toFixed(2) + '%'
    if (obj.currentPlanNum >= obj.hoursAbility) {
      obj.level2 = '100%'
      obj.level22 = (((obj.currentPlanNum - obj.hoursAbility) / (obj.maxAbility - obj.hoursAbility)) * 100).toFixed(2)
      obj.level22 = obj.level22 > 100 ? '100%' : obj.level22 + '%'
    }else{
      obj.level2 = ((obj.currentPlanNum / obj.hoursAbility)* 100).toFixed(2) + '%'
    } else {
      obj.level2 = ((obj.currentPlanNum / obj.hoursAbility) * 100).toFixed(2) + '%'
      obj.level22 = 0
    }
    if(obj.crrentOutNum >= obj.hoursAbility){
    if (obj.crrentOutNum >= obj.hoursAbility) {
      obj.level3 = '100%'
      obj.level33 = (((obj.crrentOutNum - obj.hoursAbility) / (obj.maxAbility - obj.hoursAbility)) * 100).toFixed(2)
      obj.level33 = obj.level33 > 100 ? '100%' : obj.level33 + '%'
    }else{
      obj.level3 = ((obj.crrentOutNum / obj.hoursAbility)* 100).toFixed(2) + '%'
    } else {
      obj.level3 = ((obj.crrentOutNum / obj.hoursAbility) * 100).toFixed(2) + '%'
      obj.level33 = 0
    }
    console.log('obj1', obj.level1);
    console.log('obj2', obj.level2);
    console.log('obj22', obj.level22);
    console.log('obj3', obj.level3);
    console.log('obj33', obj.level33);
    // console.log('obj1', obj.level1);
    // console.log('obj2', obj.level2);
    // console.log('obj22', obj.level22);
    // console.log('obj3', obj.level3);
    // console.log('obj33', obj.level33);
    cneterData.value = obj
  })
@@ -1098,7 +1135,7 @@
    legend: {
      itemGap: 12,
      // icon: 'circle',
      right: '16%',
      right: '12%',
      top: '0%',
      data: ['总库存', '当前库存', '库存利用率'],
      itemWidth: 20,
@@ -1128,8 +1165,7 @@
        },
      },
      axisLabel: {
        color: '#869CC9'
        // fontSize: 24,
        color: '#D2E0FF'
      },
      axisTick: {
        show: false,
@@ -1145,7 +1181,6 @@
        nameGap: 16,
        type: 'value',
        axisLabel: {
          show: true,
          color: "#869CC9",
        },
        axisLine: {
@@ -1165,10 +1200,13 @@
        name: '%',
        nameGap: 16,
        min: 0,
        max: 100,
        interval: 25,
        // max: 100,
        axisLabel: {
          formatter: '{value}'
          color: "#869CC9",
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]
        },
        splitLine: false
      }
@@ -1272,7 +1310,7 @@
      // icon: 'circle',
      right: '10%',
      top: '0',
      data: ['出库能力', '当日出库量', '库存利用率'],
      data: ['出库能力', '当日出库量', '出库利用率'],
      itemWidth: 20,
      itemHeight: 10,
      textStyle: {
@@ -1300,8 +1338,10 @@
        },
      },
      axisLabel: {
        color: '#869CC9'
        // fontSize: 24,
        color: "#869CC9",
      },
      nameTextStyle: {
        color: '#869CC9',
      },
      axisTick: {
        show: false,
@@ -1310,15 +1350,15 @@
    }],
    yAxis: [
      {
        nameTextStyle: {
          color: '#869CC9',
        },
        name: '万支',
        nameGap: 16,
        type: 'value',
        axisLabel: {
          show: true,
          color: "#869CC9",
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]
        },
        axisLine: {
          show: true,
@@ -1337,10 +1377,12 @@
        name: '%',
        nameGap: 16,
        min: 0,
        max: 100,
        interval: 25,
        axisLabel: {
          formatter: '{value}'
          color: "#869CC9",
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]
        },
        splitLine: false
      }
@@ -1413,7 +1455,7 @@
        barGap: '-100%' // è®¾ç½®æŸ±å­å®Œå…¨é‡å 
      },
      {
        name: '库存利用率',
        name: '出库利用率',
        type: 'line',
        smooth: false,
        showAllSymbol: true,
@@ -1445,9 +1487,9 @@
    legend: {
      itemGap: 12,
      // icon: 'circle',
      right: '16%',
      right: '10%',
      top: '0%',
      data: ['总库存', '当前库存', '库存利用率'],
      data: ['总运力资源', '当日提报运力', '车辆利用率'],
      itemWidth: 20,
      itemHeight: 10,
      textStyle: {
@@ -1475,8 +1517,11 @@
        },
      },
      axisLabel: {
        color: '#869CC9'
        // fontSize: 24,
        color: "#869CC9",
      },
      nameTextStyle: {
        color: '#869CC9',
        padding: [0, 0, 0, 12]
      },
      axisTick: {
        show: false,
@@ -1488,7 +1533,7 @@
        nameTextStyle: {
          color: '#869CC9',
        },
        name: '万支',
        name: '辆',
        nameGap: 16,
        type: 'value',
        axisLabel: {
@@ -1512,17 +1557,19 @@
        name: '%',
        nameGap: 16,
        min: 0,
        max: 100,
        interval: 25,
        axisLabel: {
          formatter: '{value}'
          color: "#869CC9",
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]
        },
        splitLine: false
      }
    ],
    series: [
      {
        name: '总库存',
        name: '总运力资源',
        type: 'bar',
        barWidth: 10,
        barGap: '60%',
@@ -1536,11 +1583,11 @@
          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
            {
              offset: 0,
              color: '#2e6bf3'
              color: '#73f0c6'
            },
            {
              offset: 1,
              color: '#5fcbab'
              color: '#3f8ca6'
            }
          ], false),
          lineStyle: {
@@ -1552,7 +1599,7 @@
        data: data7.value.detailList.map(i => i.totalNum)
      },
      {
        name: '当前库存',
        name: '当日提报运力',
        type: 'bar',
        barWidth: 10,
        label: {
@@ -1565,15 +1612,15 @@
          color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
            {
              offset: 0,
              color: '#eda13a'
              color: '#ed7e32'
            },
            {
              offset: 0.6,
              color: '#dfb44e'
              color: '#e99b5c'
            },
            {
              offset: 1,
              color: '#ccc16c'
              color: '#e7a774'
            }
          ], false),
          lineStyle: {
@@ -1585,7 +1632,7 @@
        data: data7.value.detailList.map(i => i.currentNum)
      },
      {
        name: '库存利用率',
        name: '车辆利用率',
        type: 'line',
        smooth: false,
        showAllSymbol: true,
@@ -1613,21 +1660,29 @@
  kzinventoryUseRate().then(res => {
    data5.value = res.data
    data5.value.detailList.forEach(item => {
      item.useRate = item.useRate * 100
      if (item.useRate) {
        item.useRate = (item.useRate * 100).toFixed(1)
      }
    })
    initEchart5()
  })
  outAbilityUseRate().then(res => {
    data6.value = res.data
    data6.value.detailList.forEach(item => {
      item.useRate = item.useRate * 100
      if (item.useRate) {
        item.useRate = (item.useRate * 100).toFixed(1)
      }
    })
    initEchart6()
  })
  tranportAbilityUseRate().then(res => {
    data7.value = res.data
    data7.value.detailList.forEach(item => {
      item.useRate = item.useRate * 100
      // item.useRate = item.useRate * 100
      if (item.useRate) {
        item.useRate = (item.useRate * 100).toFixed(1)
      }
    })
    initEchart7()
  })
@@ -1732,6 +1787,7 @@
    .left_box_one {
      margin-top: 20px;
      padding: 0px 10px 30px 20px;
      position: relative;
      .content_wrap {
        display: flex;
@@ -1851,9 +1907,22 @@
      }
      .list_wrap {
        position: relative;
        .list {
          height: 200px;
          overflow: hidden;
        }
        .empty {
          display: flex;
          justify-content: center;
          align-items: center;
          height: 200px;
          img {
            width: 144px;
          }
        }
        .line {
@@ -1876,7 +1945,7 @@
          }
          .status {
            flex: 5;
            flex: 3.2;
          }
        }
@@ -2079,6 +2148,7 @@
              justify-content: center;
              min-width: 76px;
              border: 1px solid #fff;
              .icon {
                position: absolute;
                top: 1px;
@@ -2106,13 +2176,16 @@
            z-index: 9;
            background: linear-gradient(270deg, #68dfd3 0%, #006BFF 100%);
          }
          .box11{
            background: linear-gradient(270deg,#75f8cc 0%, #68dfd3 100%);
          .box11 {
            background: linear-gradient(270deg, #75f8cc 0%, #68dfd3 100%);
          }
          .box22{
          .box22 {
            background: linear-gradient(270deg, #f2a43b 0%, #ecbb61 100%);
          }
          .box23{
          .box23 {
            background: linear-gradient(270deg, #f4b34a 0%, #FFEA70 100%);
          }
@@ -2178,7 +2251,14 @@
            }
            .item {
              flex: 2;
              flex: 3;
            }
            .addr {
              flex: 5;
              display: flex;
              flex-wrap: nowrap;
              overflow: hidden;
            }
          }
screen/src/views/LogisticsEfficiency.vue
@@ -101,7 +101,7 @@
                </div>
                <div class="one-swiper list_temp">
                  <div class="swiper-wrapper">
                    <div class="line swiper-slide one-swiper-slide" @click="showModal = true" v-for="item in dataList3">
                    <div class="line swiper-slide one-swiper-slide" v-for="item in dataList3">
                      <span class="item flag"><span :class="{ flag_bg: item.type == 1 || item.type == 3 }">{{ item.type
                        == 1
                        || item.type == 3 ? '出' : '入' }}</span></span>
@@ -144,11 +144,15 @@
                <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
                <div class="content">
                  <div class="name">当日完成任务总量</div>
                  <div class="num"><span v-if="data1.currentOutDoneNum || data1.currentInDoneNum" class="today">{{
                    activeTab4 ==
                      0 ? data1.currentOutDoneNum :
                      data1.currentInDoneNum
                      }}</span>万支</div>
                  <div class="num">
                    <span v-if="data1.currentOutDoneNum || data1.currentInDoneNum" class="today">{{
                      activeTab4 ==
                        0 ? data1.currentOutDoneNum :
                        data1.currentInDoneNum
                    }}</span>
                    <span v-else>0</span>
                    <span>万支</span>
                  </div>
                </div>
              </div>
              <div class="item">
@@ -435,7 +439,9 @@
        },
        axisLabel: {
          color: '#869CC9'
          // fontSize: 24,
        },
        nameTextStyle: {
          color: '#869CC9'   // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        },
        axisTick: {
          show: false,
@@ -449,8 +455,11 @@
        name: '个',
        min: 0,
        axisLabel: {
          show: true,
          color: "#869CC9",
          color: '#869CC9'
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, -18]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        },
        splitLine: {
          show: true,
@@ -460,17 +469,10 @@
            type: 'dashed'
          }
        },
        // interval: 5,
        axisLabel: {
          formatter: '{value}'
        }
      },
      {
        type: 'value',
        name: '万支',
        nameTextStyle: {
          color: '#869CC9',
        },
        offset: 0,
        type: 'value',
        axisLine: {
@@ -485,8 +487,12 @@
          }
        },
        axisLabel: {
          formatter: '{value}'
        }
          color: '#869CC9'
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        },
      },
    ],
    series: [
screen/src/views/SecurityControl.vue
@@ -111,7 +111,8 @@
          <div v-show="showJk" class="jiankong">
            <img class="jk_bg" src="@/assets/images/SecurityControl/jiankong_bg@2x.png" alt="">
            <div class="content">
              <Video v-if="showJk && activeMenu && activeMenu.indexCode" :href="data.videoPluginUrl" :indexCode="activeMenu.indexCode" />
              <Video v-if="showJk && activeMenu && activeMenu.indexCode" :href="data.videoPluginUrl"
                :indexCode="activeMenu.indexCode" />
              <!-- <div class="player_bg" style="width: 100%;height: 100%;" id="playWnd"> </div> -->
            </div>
            <div class="right_wrap">
@@ -311,6 +312,7 @@
          </div>
        </div> -->
        <div class="safe_warning">
          <Loading v-if="loading1" />
          <div class="com_header">
            <div class="title">
              <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
@@ -373,7 +375,6 @@
                </div>
              </div>
            </div>
          </div>
        </div>
@@ -487,6 +488,7 @@
import 'swiper/css/swiper.min.css'
import Swiper from 'swiper'
import Video from './videoUrl/Video.vue'
import Loading from '@/components/Loading.vue'
import {
  getEnergyCenterData,
  afgetCarmeraPreviemUrl,
@@ -673,10 +675,18 @@
    }]),
  ]
  const data = []
  data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(1) })
  data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(1) })
  data.push({ name: '已离开', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(1) })
  data.push({ name: '滞留', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(1) })
  if (data4.value.total) {
    data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: (data4.value.waitVisitNum / data4.value.total).toFixed(1) })
    data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: (data4.value.registerVisitNum / data4.value.total).toFixed(1) })
    data.push({ name: '已离开', value: data4.value.levelNum, rate: (data4.value.levelNum / data4.value.total).toFixed(1) })
    data.push({ name: '滞留', value: data4.value.retentionNum, rate: (data4.value.retentionNum / data4.value.total).toFixed(1) })
  } else {
    data.push({ name: '待访问', value: data4.value.waitVisitNum, rate: 0 })
    data.push({ name: '已登记', value: data4.value.registerVisitNum, rate: 0 })
    data.push({ name: '已离开', value: data4.value.levelNum, rate: 0 })
    data.push({ name: '滞留', value: data4.value.retentionNum, rate: 0 })
  }
  const option = {
    color: colors,
    tooltip: {
@@ -858,11 +868,14 @@
  })
}
const loading1 = ref(false)
const warningTab = ref('0')
const warningNum = ref(0)
const warningList = ref([])
const getWarning = () => {
  loading1.value = true
  afwarningEventData({ type: warningTab.value }).then(res => {
    loading1.value = false
    if (!res.data) return
    const result = res.data.list || []
    warningNum.value = res.data.total
@@ -885,6 +898,8 @@
    })
    warningList.value = temp
    // console.log('temp', warningList.value);
  }, () => {
    loading1.value = false
  })
}
const tasClick = (val) => {
@@ -910,7 +925,7 @@
}
const changeMon = () => {
  showJk.value = !showJk.value
  if(!showJk.value){
  if (!showJk.value) {
    activeJkIndex.value = -1
    activeMenu.value = {}
  }
@@ -1581,7 +1596,7 @@
  .safe_warning {
    width: 786px;
    margin-right: 20px;
    position: relative;
    /* one-swiper */
    .one_swiper_wrap {
      height: 140px;
screen/src/views/TaskEfficiency.vue
@@ -129,7 +129,8 @@
            </div>
          </div>
          <div class="center_box_bg">
            <img v-if="showWorkModal" class="point_icon" :style="{ left: workModalParam.left + 'px', top: workModalParam.top + 'px' }"
            <img v-if="showWorkModal" class="point_icon"
              :style="{ left: workModalParam.left + 'px', top: workModalParam.top + 'px' }"
              src="@/assets/ani/apngb-animated.png" alt="">
            <div class="work_modal" :style="{ left: workModalParam.left2 + 'px', top: workModalParam.top + 'px' }"
              @click="showWorkModal = false" v-if="showWorkModal">
@@ -364,9 +365,9 @@
  const option = {
    grid: {
      top: '32%',
      left: '0%',
      left: '6%',
      right: '7%',
      bottom: '0%',
      bottom: '10%',
      containLabel: true,
    },
    legend: {
@@ -418,8 +419,11 @@
        name: '万支',
        type: 'value',
        axisLabel: {
          show: true,
          color: "#9eaaba",
          color: '#869CC9'
        },
        nameTextStyle: {
          color: '#869CC9',
          padding: [0, 0, 0, 12]    // å››ä¸ªæ•°å­—分别为上右下左与原位置距离
        },
        axisLine: {
          show: true,
@@ -1185,7 +1189,8 @@
        }
      }
      .modal_bg{
      .modal_bg {
        position: fixed;
        left: 0;
        top: 0;