From a030368330d5a6bf1d0ed42b6121b53d13b587d0 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期四, 31 十月 2024 11:35:13 +0800
Subject: [PATCH] ll

---
 h5/pages/staffLogin/login.vue                                  |    9 
 screen/src/views/LogisticsEfficiency.vue                       |  236 +++++---
 screen/vite.config.js                                          |    2 
 screen/src/views/SecurityControl.vue                           |  219 ++++---
 admin/src/components/business/OperaHiddenDangerParamWindow.vue |    1 
 pda/pages/index/queueup.vue                                    |    2 
 screen/src/api/index.js                                        |   18 
 h5/pages/staff/snapshot.vue                                    |  999 +++++++++++++++++++-------------------
 pda/pages/index/set.vue                                        |   14 
 h5/api/staff.js                                                |    8 
 pda/pages/index/center.vue                                     |   21 
 admin/src/components/operation/HiddenDangerParam.vue           |   11 
 admin/src/components/system/role/OperaSystemRoleDataWindow.vue |    3 
 h5/manifest.json                                               |    4 
 screen/src/components/percent.vue                              |    1 
 admin/src/views/operation/danger/record.vue                    |    6 
 16 files changed, 815 insertions(+), 739 deletions(-)

diff --git a/admin/src/components/business/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
index ffe844c..a7a8128 100644
--- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -91,6 +91,7 @@
             })
           }
         }
+        this.loadMember()
       })
     },
     getfindCompanyTreePage() {
diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index c2b75eb..f3e73ea 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -23,7 +23,7 @@
         />
       </el-form-item>
       <el-form-item label="璐d换閮ㄩ棬" prop="companyId">
-        <el-select  v-model="param.companyId">
+        <el-select @change="getAddrList" v-model="param.companyId">
           <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
         </el-select>
       </el-form-item>
@@ -155,9 +155,6 @@
       allList({ type: 1 }).then(res => { // 绫诲瀷
         this.typeList = res || []
       })
-      allList({ type: 0 }).then(res => { // 浣嶇疆
-        this.addrList = res || []
-      })
       memberList({}).then(res => {
         this.memberList = res || []
       })
@@ -171,6 +168,12 @@
           }
         })
     },
+    getAddrList() {
+      const { companyId } = this.param
+      allList({ type: 0,companyId }).then(res => { // 浣嶇疆
+        this.addrList = res || []
+      })
+    },
     changeArea (e) {
       const item = this.addrList.find(i => i.id === e)
       const arr = []
diff --git a/admin/src/components/system/role/OperaSystemRoleDataWindow.vue b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue
index 5727a97..1f81396 100644
--- a/admin/src/components/system/role/OperaSystemRoleDataWindow.vue
+++ b/admin/src/components/system/role/OperaSystemRoleDataWindow.vue
@@ -35,7 +35,8 @@
         { name: '鎵�灞為儴闂ㄥ強涓嬪睘閮ㄩ棬', id: 1 },
         { name: '鎵�灞為儴闂ㄥ強鍏跺瓙瀛欓儴闂�', id: 2 },
         { name: '浠呮墍灞為儴闂�', id: 3 },
-        { name: '鑷畾涔夐儴闂�', id: 4 }
+        { name: '鑷畾涔夐儴闂�', id: 4 },
+        { name: '鍙湅鑷繁', id: -1 },
       ],
       // 琛ㄥ崟鏁版嵁
       form: {
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index 31f2fbb..5b60581 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -8,8 +8,8 @@
       <el-form-item label="鎻愭姤浜虹粍缁�" prop="companyName">
         <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="璐d换閮ㄩ棬" prop="companyName">
-        <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏�" clearable @keypress.enter.native="search"></el-input>
+      <el-form-item label="璐d换閮ㄩ棬" prop="dutyCompanyName">
+        <el-input v-model="searchForm.dutyCompanyName" placeholder="璇疯緭鍏ヨ矗浠婚儴闂�" clearable @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
         <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" clearable  @change="search">
@@ -75,7 +75,7 @@
           @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="companyName" label="璐d换閮ㄩ棬" min-width="150px"></el-table-column>
+        <el-table-column prop="dutyCompanyName" label="璐d换閮ㄩ棬" min-width="150px"></el-table-column>
         <el-table-column prop="areaName" label="闅愭偅鍖哄煙" min-width="150px"></el-table-column>
         <el-table-column prop="categoryName" label="闅愭偅绫诲瀷" min-width="150px"></el-table-column>
         <el-table-column prop="memberName" label="鎻愭姤浜�" min-width="80px"></el-table-column>
diff --git a/h5/api/staff.js b/h5/api/staff.js
index dd2f307..ea64d24 100644
--- a/h5/api/staff.js
+++ b/h5/api/staff.js
@@ -84,6 +84,14 @@
     method: 'get'
   })
 }
+// 閮ㄩ棬鍒楄〃
+export const deptListPost = (data) => {
+  return http({
+    url: '/visitsAdmin/cloudService/business/company/list',
+    method: 'post',
+    data
+  })
+}
 // 闅愭偅 绫诲瀷
 export const DangerConfigType = (data) => {
   return http({
diff --git a/h5/manifest.json b/h5/manifest.json
index cd8f8b1..e051485 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -129,8 +129,8 @@
                     // 杩欎釜瀛楁鍚嶉渶涓庝綘閰嶇疆鐨刡asePrefixUrl涓�鑷达紝绯荤粺璇嗗埆鍒板甫鏈�/dev-api璇锋眰鐨勫湴鍧�鏃讹紝浼氬湪鍓嶉潰鎷兼帴涓婁唬鐞嗘湇鍔″櫒鍦板潃
                     // "target" : "http://172.20.10.7:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     // "target" : "http://192.168.0.100:10010", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    // "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
-                    "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    "target" : "http://10.50.250.253:8088/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
+                    // "target" : "http://192.168.0.173/gateway_interface", // 浠g悊鏈嶅姟鍣ㄥ煙鍚嶆垨IP鍦板潃
                     "changeOrigin" : true, // 鍏佽璺ㄥ煙 
                     "pathRewrite" : {
                         "^/gateway_interface" : ""
diff --git a/h5/pages/staff/snapshot.vue b/h5/pages/staff/snapshot.vue
index b0677bc..4d14c15 100644
--- a/h5/pages/staff/snapshot.vue
+++ b/h5/pages/staff/snapshot.vue
@@ -1,500 +1,499 @@
-<template>
-  <view class="main_app">
-    <view class="main_wrap">
-      <!--  -->
-      <view class="line">
-        <view class="label">
-          <text>*</text>
-          <text>闅愭偅鍖哄煙</text>
-        </view>
-        <view class="value" @click="isShowArea = true">
-          <text
-            class="mr6"
-            :style="{ color: param.areaName ? '#000000' : '#999999' }"
-            >{{ param.areaName ? param.areaName : "璇烽�夋嫨" }}</text
-          >
-          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-        </view>
-      </view>
-      <view class="line">
-        <view class="label">
-          <text>*</text>
-          <text>鎺ユ敹浜�</text>
-        </view>
-        <view class="value" @click="selMember">
-          <text
-            class="mr6"
-            :style="{ color: param.checkorName ? '#000000' : '#999999' }"
-            >{{ param.checkorName ? param.checkorName : "璇烽�夋嫨" }}</text
-          >
-          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-        </view>
-      </view>
-      <view class="empty"></view>
-      <view class="line">
-        <view class="label">
-          <text>*</text>
-          <text>闅愭偅绫诲瀷</text>
-        </view>
-        <view class="value" @click="isShowType = true">
-          <text
-            class="mr6"
-            :style="{ color: param.categoryName ? '#000000' : '#999999' }"
-            >{{ param.categoryName ? param.categoryName : "璇烽�夋嫨" }}</text
-          >
-          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-        </view>
-      </view>
-      <view class="upload_line">
-        <view class="name">鐜板満鎯呭喌</view>
-        <view class="wrap">
-          <view
-            class="adduser_list_item_ipt1_upload"
-            @click="showUpload = true"
-          >
-            <u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon>
-            <view class="mt6">鍥剧墖/瑙嗛</view>
-          </view>
-          <view
-            class="adduser_list_item_ipt1_upload"
-            v-for="(item, i) in submitFileList"
-            :key="i"
-          >
-            <u-icon
-              class="close"
-              size="20"
-              name="close-circle-fill"
-              color="red"
-              @click="fileDel(i)"
-            ></u-icon>
-            <image
-              v-if="item.type == 0"
-              :src="item.fileurlFull"
-              mode="widthFix"
-            ></image
-            ><video v-if="item.type == 1" :src="item.fileurlFull"></video
-          ></view>
-        </view>
-      </view>
-      <view class="empty"></view>
-      <view class="upload_line" style="padding: 15px 0 0">
-        <view class="name" style="margin-bottom: 10rpx">
-          <text style="color: #e42d2d">*</text>
-          <text>鎯呭喌璇存槑</text>
-        </view>
-        <view class="value">
-          <textarea
-            placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧"
-            minlength="10"
-            v-model="param.content"
-            placeholder-style="color: #999999;"
-          />
-        </view>
-      </view>
-      <view class="empty"></view>
-      <view class="line">
-        <view class="label">
-          <text></text>
-          <text>鎻愭姤浜�</text>
-        </view>
-        <view class="value"
-          ><input
-            type="text"
-            disabled
-            placeholder="璇疯緭鍏ユ彁鎶ヤ汉"
-            v-model="param.memberName"
-            placeholder-style="color: #999999;"
-        /></view>
-      </view>
-      <view class="line">
-        <view class="label">
-          <text></text>
-          <text>鑱旂郴鐢佃瘽</text>
-        </view>
-        <view class="value"
-          ><input
-            type="text"
-            disabled
-            placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
-            v-model="param.memberPhone"
-            placeholder-style="color: #999999;"
-        /></view>
-      </view>
-      <view class="line">
-        <view class="label">
-          <text></text>
-          <text>鎻愭姤鏃堕棿</text>
-        </view>
-        <view class="value" @click="isShowTime = true">
-          <text
-            class="mr6"
-            :style="{ color: param.submitTime ? '#000000' : '#999999' }"
-            >{{ param.submitTime ? param.submitTime : "璇烽�夋嫨" }}</text
-          >
-          <u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
-        </view>
-      </view>
-
-      <view class="footer"
-        ><view class="footer_btn" @click="onSubmit">鎻愪氦</view></view
-      >
-    </view>
-    <!--  -->
-    <!-- 鍖哄煙 -->
-    <u-picker
-      keyName="name"
-      :show="isShowArea"
-      closeOnClickOverlay
-      :columns="areaOptions"
-      @confirm="seletedArea"
-      @close="isShowArea = false"
-      @cancel="isShowArea = false"
-    ></u-picker>
-    <u-picker
-      keyName="name"
-      :show="isShowType"
-      closeOnClickOverlay
-      :columns="areaType"
-      @confirm="seletedType"
-      @close="isShowType = false"
-      @cancel="isShowType = false"
-    ></u-picker>
-    <!--  -->
-    <u-datetime-picker
-      :show="isShowTime"
-      :minDate="new Date().getTime()"
-      mode="datetime"
-      closeOnClickOverlay
-      @cancel="isShowTime = false"
-      @close="isShowTime = false"
-      @confirm="seletedDate"
-    ></u-datetime-picker>
-    <!--  -->
-    <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
-      <view class="upload_wrap">
-        <view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
-        <view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
-      </view>
-    </u-popup>
-  </view>
-</template>
-
-<script>
-import {
-  uploadUrl,
-  DangerCreate,
-  DangerConfigType
-} from '@/api'
-import dayjs from 'dayjs'
-export default {
-  data() {
-    return {
-      param: {},
-      submitFileList: [],
-
-      isShowArea: false,
-      isShowType: false,
-      isShowTime: false,
-      showUpload: false,
-
-      areaOptions: [],
-      areaType: [],
-    }
-  },
-  onLoad(option) {
-    this.initConfig()
-    const userInfo = uni.getStorageSync('userInfo') || {}
-    this.$set(this.param, 'memberName', userInfo.realname)
-    this.$set(this.param, 'memberPhone', userInfo.mobile)
-    this.$set(this.param, 'memberId', userInfo.id)
-    this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
-  },
-  mounted() {
-    this.$eventBus.$on('snapshotSel', (option) => {
-      this.$set(this.param, 'checkUserId', option.id)
-      this.$set(this.param, 'applyCheckUserId', option.id)
-      this.$set(this.param, 'checkorName', option.name)
-    })
-  },
-  methods: {
-    onSubmit() {
-      const { param, submitFileList } = this
-      if (!param.areaName) return uni.showToast({
-        title: '璇烽�夋嫨闅愭偅鍖哄煙',
-        icon: 'none'
-      })
-      if (!param.applyCheckUserId) return uni.showToast({
-        title: '璇烽�夋嫨鎺ユ敹浜�',
-        icon: 'none'
-      })
-      if (!param.categoryName) return uni.showToast({
-        title: '璇烽�夋嫨闅愭偅绫诲瀷',
-        icon: 'none'
-      })
-      if (!param.content) return uni.showToast({
-        title: '璇疯緭鍏ユ儏鍐佃鏄�',
-        icon: 'none'
-      })
-      if (param.content.length < 10) return uni.showToast({
-        title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧',
-        icon: 'none'
-      })
-
-      DangerCreate({
-        ...param,
-        submitFileList
-      }).then(res => {
-        if (res.code === 200) {
-          this.$jump('/pages/staff/snapshotResult')
-        }
-      })
-    },
-    seletedArea(e) {
-      const item = e.value[0]
-      this.$set(this.param, 'areaId', item.id)
-      this.$set(this.param, 'areaName', item.name)
-      console.log(item)
-      if (item.memberIds && item.memberIds.indexOf(',') === -1) {
-        this.$set(this.param, 'checkUserId', item.memberIds)
-        this.$set(this.param, 'applyCheckUserId', item.memberIds)
-        this.$set(this.param, 'checkorName', item.memberNames)
-      } else {
-        this.$set(this.param, 'checkUserId', '')
-        this.$set(this.param, 'applyCheckUserId', '')
-        this.$set(this.param, 'checkorName', '')
-      }
-      this.isShowArea = false
-    },
-    seletedType(e) {
-      const item = e.value[0]
-      this.$set(this.param, 'cateId', item.id)
-      this.$set(this.param, 'categoryName', item.name)
-      console.log(item)
-      this.isShowType = false
-    },
-    seletedSafety(e) {
-
-    },
-    seletedDate(e) {
-      this.$set(this.param, 'submitTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
-      this.isShowTime = false
-    },
-    initConfig() {
-      DangerConfigType({ type: '1' }).then(res => {
-        this.areaType = [res.data]
-      })
-      DangerConfigType({ type: '0' }).then(res => {
-        this.areaOptions = [res.data]
-      })
-    },
-    selMember() {
-      if (!this.param.areaId) return uni.showToast({
-        title: '璇峰厛閫夋嫨闅愭偅鍖哄煙',
-        icon: 'none'
-      })
-      uni.navigateTo({
-        url: '/pages/staff/memberSel?areaId=' + this.param.areaId
-      })
-    },
-    fileDel(i) {
-      this.submitFileList.splice(i, 1)
-    },
-    uploadImage() {
-      this.showUpload = false
-      let token = uni.getStorageSync('token') || ''
-      uni.chooseImage({
-        count: 4,
-        success: (chooseImageRes) => {
-          uni.showLoading({ title: '涓婁紶涓�', mask: true })
-          const tempFilePaths = chooseImageRes.tempFilePaths
-          let imgs = tempFilePaths.map((value, index) => {
-            return {
-              name: 'file',
-              uri: value
-            }
-          })
-          uni.uploadFile({
-            url: `${uploadUrl}`,
-            files: imgs,
-            name: 'file',
-            formData: {
-              folder: 'HIDDEN_DANGER_FILE'
-            },
-            header: {
-              Dm_user_token: token
-            },
-            success: (uploadFileRes) => {
-              let res = JSON.parse(uploadFileRes.data)
-              console.log('res', res.data)
-              if (res.data && res.data.length > 0) {
-                res.data.forEach(i => {
-                  i.type = 0
-                  i.fileurl = i.imgaddr
-                  i.fileurlFull = i.url
-                  this.submitFileList.push(i)
-                })
-              }
-            },
-            fail(err) {
-              console.log('err', err)
-            },
-            complete() {
-              uni.hideLoading()
-              // if (i === chooseImageRes.tempFilePaths.length - 1) {
-              //   uni.hideLoading()
-              // }
-            }
-          })
-          // }
-        }
-      })
-    },
-    uploadVideo() {
-      this.showUpload = false
-      let that = this
-      let token = uni.getStorageSync('token') || ''
-      uni.chooseVideo({
-        success: (chooseImageRes) => {
-          uni.showLoading({ title: '涓婁紶涓�', mask: true })
-          uni.uploadFile({
-            url: `${uploadUrl}`,
-            filePath: chooseImageRes.tempFilePath,
-            header: {
-              Dm_user_token: token
-            },
-            name: 'file',
-            formData: {
-              folder: 'HIDDEN_DANGER_FILE'
-            },
-            success: (uploadFileRes) => {
-              let res = JSON.parse(uploadFileRes.data)
-              if (res.data && res.data.length > 0) {
-                res.data.forEach(i => {
-                  i.type = 1
-                  i.fileurl = i.imgaddr
-                  i.fileurlFull = i.url
-                  this.submitFileList.push(i)
-                })
-              }
-            },
-            complete() {
-              uni.hideLoading()
-            }
-          })
-        }
-      })
-    },
-
-    getUser() { }
-  }
-};
-</script>
-
-<style lang="scss">
-.main_wrap {
-  padding-bottom: 200rpx;
-  .line {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    border-bottom: 1rpx solid #e5e5e5;
-    padding: 30rpx 0;
-    .label {
-      font-size: 30rpx;
-      font-weight: 400;
-      text {
-        &:nth-child(1) {
-          color: #e42d2d;
-          margin-right: 4rpx;
-        }
-      }
-    }
-    .value {
-      flex: 1;
-      height: 100%;
-      margin-left: 30rpx;
-      display: flex;
-      align-items: center;
-      justify-content: flex-end;
-      input {
-        width: 100%;
-        height: 100%;
-        text-align: right;
-        font-size: 28rpx;
-        font-weight: 400;
-        color: #222222;
-      }
-    }
-  }
-  .upload_line {
-    padding: 30rpx 0;
-    .wrap {
-      display: flex;
-      flex-wrap: wrap;
-    }
-    .adduser_list_item_ipt1_upload {
-      margin-top: 24rpx;
-      width: 120rpx;
-      height: 120rpx;
-      margin-right: 24rpx;
-      border: 2rpx solid #e5e5e5;
-      background: #f7f7f7;
-      color: #666666;
-      font-size: 22rpx;
-      display: flex;
-      flex-direction: column;
-      align-items: center;
-      justify-content: center;
-      position: relative;
-      .close {
-        position: absolute;
-        right: -20rpx;
-        top: -20rpx;
-        z-index: 9999;
-      }
-      image {
-        width: 100%;
-        height: 100%;
-      }
-      video {
-        width: 100%;
-        max-height: 120rpx;
-      }
-    }
-  }
-}
-.upload_wrap {
-  width: 100%;
-  .btn {
-    height: 90rpx;
-    line-height: 90rpx;
-    text-align: center;
-  }
-}
-.footer {
-  width: 100%;
-  padding: 0 30rpx;
-  padding-bottom: env(safe-area-inset-bottom);
-  box-sizing: border-box;
-  position: fixed;
-  left: 0;
-  bottom: 68rpx;
-
-  .footer_btn {
-    width: 100%;
-    height: 88rpx;
-    line-height: 88rpx;
-    text-align: center;
-    background: $uni-color-primary;
-    border-radius: 44rpx;
-    font-size: 32rpx;
-    color: #ffffff;
-  }
-}
-.empty {
-  width: 750rpx;
-  height: 20rpx;
-  background-color: #f7f7f7;
-  margin: 0 -30rpx;
-}
-</style>
+<template>
+	<view class="main_app">
+		<view class="main_wrap">
+			<!--  -->
+			<view class="line">
+				<view class="label">
+					<text>*</text>
+					<text>璐d换閮ㄩ棬</text>
+				</view>
+				<view class="value" @click="isShowCompany = true">
+					<text class="mr6"
+						:style="{ color: param.companyName ? '#000000' : '#999999' }">{{ param.companyName ? param.companyName : "璇烽�夋嫨" }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">
+					<text>*</text>
+					<text>闅愭偅鍖哄煙</text>
+				</view>
+				<view class="value" @click="isShowArea = true">
+					<text class="mr6"
+						:style="{ color: param.areaName ? '#000000' : '#999999' }">{{ param.areaName ? param.areaName : "璇烽�夋嫨" }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+				</view>
+			</view>
+			<view class="line">
+				<view class="label">
+					<text>*</text>
+					<text>鎺ユ敹浜�</text>
+				</view>
+				<view class="value" @click="selMember">
+					<text class="mr6"
+						:style="{ color: param.checkorName ? '#000000' : '#999999' }">{{ param.checkorName ? param.checkorName : "璇烽�夋嫨" }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="line">
+				<view class="label">
+					<text>*</text>
+					<text>闅愭偅绫诲瀷</text>
+				</view>
+				<view class="value" @click="isShowType = true">
+					<text class="mr6"
+						:style="{ color: param.categoryName ? '#000000' : '#999999' }">{{ param.categoryName ? param.categoryName : "璇烽�夋嫨" }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+				</view>
+			</view>
+			<view class="upload_line">
+				<view class="name">鐜板満鎯呭喌</view>
+				<view class="wrap">
+					<view class="adduser_list_item_ipt1_upload" @click="showUpload = true">
+						<u-icon name="plus" color="rgb(153, 153, 153)" size="20"></u-icon>
+						<view class="mt6">鍥剧墖/瑙嗛</view>
+					</view>
+					<view class="adduser_list_item_ipt1_upload" v-for="(item, i) in submitFileList" :key="i">
+						<u-icon class="close" size="20" name="close-circle-fill" color="red" @click="fileDel(i)"></u-icon>
+						<image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image><video v-if="item.type == 1"
+							:src="item.fileurlFull"></video>
+					</view>
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="upload_line" style="padding: 15px 0 0">
+				<view class="name" style="margin-bottom: 10rpx">
+					<text style="color: #e42d2d">*</text>
+					<text>鎯呭喌璇存槑</text>
+				</view>
+				<view class="value">
+					<textarea placeholder="璇疯缁嗘弿杩扮幇鍦烘儏鍐碉紝涓嶅皯浜�10涓瓧" minlength="10" v-model="param.content"
+						placeholder-style="color: #999999;" />
+				</view>
+			</view>
+			<view class="empty"></view>
+			<view class="line">
+				<view class="label">
+					<text></text>
+					<text>鎻愭姤浜�</text>
+				</view>
+				<view class="value"><input type="text" disabled placeholder="璇疯緭鍏ユ彁鎶ヤ汉" v-model="param.memberName"
+						placeholder-style="color: #999999;" /></view>
+			</view>
+			<view class="line">
+				<view class="label">
+					<text></text>
+					<text>鑱旂郴鐢佃瘽</text>
+				</view>
+				<view class="value"><input type="text" disabled placeholder="璇疯緭鍏ヨ仈绯荤數璇�" v-model="param.memberPhone"
+						placeholder-style="color: #999999;" /></view>
+			</view>
+			<view class="line">
+				<view class="label">
+					<text></text>
+					<text>鎻愭姤鏃堕棿</text>
+				</view>
+				<view class="value" @click="isShowTime = true">
+					<text class="mr6"
+						:style="{ color: param.submitTime ? '#000000' : '#999999' }">{{ param.submitTime ? param.submitTime : "璇烽�夋嫨" }}</text>
+					<u-icon name="arrow-right" color="#CCCCCC" size="20"></u-icon>
+				</view>
+			</view>
+
+			<view class="footer">
+				<view class="footer_btn" @click="onSubmit">鎻愪氦</view>
+			</view>
+		</view>
+		<!--  -->
+		<u-picker keyName="name" :show="isShowCompany" closeOnClickOverlay :columns="deptList" @confirm="seletedCompany"
+			@close="isShowCompany = false" @cancel="isShowCompany = false"></u-picker>
+		<!-- 鍖哄煙 -->
+		<u-picker keyName="name" :show="isShowArea" closeOnClickOverlay :columns="areaOptions" @confirm="seletedArea"
+			@close="isShowArea = false" @cancel="isShowArea = false"></u-picker>
+		<u-picker keyName="name" :show="isShowType" closeOnClickOverlay :columns="areaType" @confirm="seletedType"
+			@close="isShowType = false" @cancel="isShowType = false"></u-picker>
+		<!--  -->
+		<u-datetime-picker :show="isShowTime" :minDate="new Date().getTime()" mode="datetime" closeOnClickOverlay
+			@cancel="isShowTime = false" @close="isShowTime = false" @confirm="seletedDate"></u-datetime-picker>
+		<!--  -->
+		<u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay>
+			<view class="upload_wrap">
+				<view class="btn" @click="uploadImage">閫夋嫨鍥剧墖</view>
+				<view class="btn" @click="uploadVideo">閫夋嫨瑙嗛</view>
+			</view>
+		</u-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		uploadUrl,
+		DangerCreate,
+		DangerConfigType,
+		deptListPost
+	} from '@/api'
+	import dayjs from 'dayjs'
+	export default {
+		data() {
+			return {
+				param: {},
+				submitFileList: [],
+
+				isShowCompany: false,
+				isShowArea: false,
+				isShowType: false,
+				isShowTime: false,
+				showUpload: false,
+
+				deptList: [],
+				areaOptions: [],
+				areaType: [],
+			}
+		},
+		onLoad(option) {
+			this.initConfig()
+			const userInfo = uni.getStorageSync('userInfo') || {}
+			this.$set(this.param, 'memberName', userInfo.realname)
+			this.$set(this.param, 'memberPhone', userInfo.mobile)
+			this.$set(this.param, 'memberId', userInfo.id)
+			this.$set(this.param, 'submitTime', dayjs().format('YYYY-MM-DD HH:mm:ss'))
+		},
+		mounted() {
+			this.$eventBus.$on('snapshotSel', (option) => {
+				this.$set(this.param, 'checkUserId', option.id)
+				this.$set(this.param, 'applyCheckUserId', option.id)
+				this.$set(this.param, 'checkorName', option.name)
+			})
+		},
+		methods: {
+			onSubmit() {
+				const {
+					param,
+					submitFileList
+				} = this
+				if (!param.companyName) return uni.showToast({
+					title: '璇烽�夋嫨璐d换閮ㄩ棬',
+					icon: 'none'
+				})
+				if (!param.areaName) return uni.showToast({
+					title: '璇烽�夋嫨闅愭偅鍖哄煙',
+					icon: 'none'
+				})
+				if (!param.applyCheckUserId) return uni.showToast({
+					title: '璇烽�夋嫨鎺ユ敹浜�',
+					icon: 'none'
+				})
+				if (!param.categoryName) return uni.showToast({
+					title: '璇烽�夋嫨闅愭偅绫诲瀷',
+					icon: 'none'
+				})
+				if (!param.content) return uni.showToast({
+					title: '璇疯緭鍏ユ儏鍐佃鏄�',
+					icon: 'none'
+				})
+				if (param.content.length < 10) return uni.showToast({
+					title: '鎯呭喌璇存槑涓嶅緱灏忎簬10涓瓧',
+					icon: 'none'
+				})
+
+				DangerCreate({
+					...param,
+					submitFileList
+				}).then(res => {
+					if (res.code === 200) {
+						this.$jump('/pages/staff/snapshotResult')
+					}
+				})
+			},
+			seletedCompany(e) {
+				const item = e.value[0]
+				this.$set(this.param, 'companyId', item.id)
+				this.$set(this.param, 'companyName', item.name)
+				this.$set(this.param, 'areaId', '')
+				this.$set(this.param, 'areaName', '')
+				DangerConfigType({
+					type: '0',
+					companyId: item.id
+				}).then(res => {
+					this.areaOptions = [res.data]
+				})
+				this.isShowCompany = false
+			},
+			seletedArea(e) {
+				const item = e.value[0]
+				this.$set(this.param, 'areaId', item.id)
+				this.$set(this.param, 'areaName', item.name)
+				console.log(item)
+				if (item.memberIds && item.memberIds.indexOf(',') === -1) {
+					this.$set(this.param, 'checkUserId', item.memberIds)
+					this.$set(this.param, 'applyCheckUserId', item.memberIds)
+					this.$set(this.param, 'checkorName', item.memberNames)
+				} else {
+					this.$set(this.param, 'checkUserId', '')
+					this.$set(this.param, 'applyCheckUserId', '')
+					this.$set(this.param, 'checkorName', '')
+				}
+				this.isShowArea = false
+			},
+			seletedType(e) {
+				const item = e.value[0]
+				this.$set(this.param, 'cateId', item.id)
+				this.$set(this.param, 'categoryName', item.name)
+				console.log(item)
+				this.isShowType = false
+			},
+			seletedSafety(e) {
+
+			},
+			seletedDate(e) {
+				this.$set(this.param, 'submitTime', dayjs(e.value).format('YYYY-MM-DD HH:mm:ss'))
+				this.isShowTime = false
+			},
+			initConfig() {
+				deptListPost({}).then(res => {
+					this.deptList = [res.data]
+				})
+				DangerConfigType({
+					type: '1'
+				}).then(res => {
+					this.areaType = [res.data]
+				})
+				DangerConfigType({
+					type: '0'
+				}).then(res => {
+					this.areaOptions = [res.data]
+				})
+			},
+			selMember() {
+				if (!this.param.areaId) return uni.showToast({
+					title: '璇峰厛閫夋嫨闅愭偅鍖哄煙',
+					icon: 'none'
+				})
+				uni.navigateTo({
+					url: '/pages/staff/memberSel?areaId=' + this.param.areaId
+				})
+			},
+			fileDel(i) {
+				this.submitFileList.splice(i, 1)
+			},
+			uploadImage() {
+				this.showUpload = false
+				let token = uni.getStorageSync('token') || ''
+				uni.chooseImage({
+					count: 4,
+					success: (chooseImageRes) => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						})
+						const tempFilePaths = chooseImageRes.tempFilePaths
+						let imgs = tempFilePaths.map((value, index) => {
+							return {
+								name: 'file',
+								uri: value
+							}
+						})
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							files: imgs,
+							name: 'file',
+							formData: {
+								folder: 'HIDDEN_DANGER_FILE'
+							},
+							header: {
+								Dm_user_token: token
+							},
+							success: (uploadFileRes) => {
+								let res = JSON.parse(uploadFileRes.data)
+								console.log('res', res.data)
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 0
+										i.fileurl = i.imgaddr
+										i.fileurlFull = i.url
+										this.submitFileList.push(i)
+									})
+								}
+							},
+							fail(err) {
+								console.log('err', err)
+							},
+							complete() {
+								uni.hideLoading()
+								// if (i === chooseImageRes.tempFilePaths.length - 1) {
+								//   uni.hideLoading()
+								// }
+							}
+						})
+						// }
+					}
+				})
+			},
+			uploadVideo() {
+				this.showUpload = false
+				let that = this
+				let token = uni.getStorageSync('token') || ''
+				uni.chooseVideo({
+					success: (chooseImageRes) => {
+						uni.showLoading({
+							title: '涓婁紶涓�',
+							mask: true
+						})
+						uni.uploadFile({
+							url: `${uploadUrl}`,
+							filePath: chooseImageRes.tempFilePath,
+							header: {
+								Dm_user_token: token
+							},
+							name: 'file',
+							formData: {
+								folder: 'HIDDEN_DANGER_FILE'
+							},
+							success: (uploadFileRes) => {
+								let res = JSON.parse(uploadFileRes.data)
+								if (res.data && res.data.length > 0) {
+									res.data.forEach(i => {
+										i.type = 1
+										i.fileurl = i.imgaddr
+										i.fileurlFull = i.url
+										this.submitFileList.push(i)
+									})
+								}
+							},
+							complete() {
+								uni.hideLoading()
+							}
+						})
+					}
+				})
+			},
+
+			getUser() {}
+		}
+	};
+</script>
+
+<style lang="scss">
+	.main_wrap {
+		padding-bottom: 200rpx;
+
+		.line {
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			border-bottom: 1rpx solid #e5e5e5;
+			padding: 30rpx 0;
+
+			.label {
+				font-size: 30rpx;
+				font-weight: 400;
+
+				text {
+					&:nth-child(1) {
+						color: #e42d2d;
+						margin-right: 4rpx;
+					}
+				}
+			}
+
+			.value {
+				flex: 1;
+				height: 100%;
+				margin-left: 30rpx;
+				display: flex;
+				align-items: center;
+				justify-content: flex-end;
+
+				input {
+					width: 100%;
+					height: 100%;
+					text-align: right;
+					font-size: 28rpx;
+					font-weight: 400;
+					color: #222222;
+				}
+			}
+		}
+
+		.upload_line {
+			padding: 30rpx 0;
+
+			.wrap {
+				display: flex;
+				flex-wrap: wrap;
+			}
+
+			.adduser_list_item_ipt1_upload {
+				margin-top: 24rpx;
+				width: 120rpx;
+				height: 120rpx;
+				margin-right: 24rpx;
+				border: 2rpx solid #e5e5e5;
+				background: #f7f7f7;
+				color: #666666;
+				font-size: 22rpx;
+				display: flex;
+				flex-direction: column;
+				align-items: center;
+				justify-content: center;
+				position: relative;
+
+				.close {
+					position: absolute;
+					right: -20rpx;
+					top: -20rpx;
+					z-index: 9999;
+				}
+
+				image {
+					width: 100%;
+					height: 100%;
+				}
+
+				video {
+					width: 100%;
+					max-height: 120rpx;
+				}
+			}
+		}
+	}
+
+	.upload_wrap {
+		width: 100%;
+
+		.btn {
+			height: 90rpx;
+			line-height: 90rpx;
+			text-align: center;
+		}
+	}
+
+	.footer {
+		width: 100%;
+		padding: 0 30rpx;
+		padding-bottom: env(safe-area-inset-bottom);
+		box-sizing: border-box;
+		position: fixed;
+		left: 0;
+		bottom: 68rpx;
+
+		.footer_btn {
+			width: 100%;
+			height: 88rpx;
+			line-height: 88rpx;
+			text-align: center;
+			background: $uni-color-primary;
+			border-radius: 44rpx;
+			font-size: 32rpx;
+			color: #ffffff;
+		}
+	}
+
+	.empty {
+		width: 750rpx;
+		height: 20rpx;
+		background-color: #f7f7f7;
+		margin: 0 -30rpx;
+	}
+</style>
\ No newline at end of file
diff --git a/h5/pages/staffLogin/login.vue b/h5/pages/staffLogin/login.vue
index a0a5506..510a544 100644
--- a/h5/pages/staffLogin/login.vue
+++ b/h5/pages/staffLogin/login.vue
@@ -71,12 +71,13 @@
   data() {
     return {
       form: {
-        username: '18056814089',
-        password: '123456',
-				code: 1
+        // username: '18056814089',
+        username: '',
+        password: '',
+				code: ''
       },
       isShowProtocol: false,
-      ProtocolFlag: true,
+      ProtocolFlag: false,
       captcha: {},
       htmlText: ''
     }
diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index 1e91669..0bd09a4 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -48,7 +48,7 @@
 				</view>
 				<view class="line">
 					<text class="label">鎬昏繍杈撻噺</text>
-					<text class="value">{{ item.totalNum }}涓囨敮</text>
+					<text class="value">{{ item.totalNum || item.ioQty}}涓囨敮</text>
 				</view>
 				<view class="line" v-if="item.carrierName">
 					<text class="label">杩愯緭鍏徃</text>
@@ -113,7 +113,7 @@
 							</view>
 							<view class="line">
 								<text class="label">鎬昏繍杈撻噺</text>
-								<text class="value">{{ item.totalNum }}涓囨敮</text>
+								<text class="value">{{ item.totalNum || item.ioQty }}涓囨敮</text>
 							</view>
 							<view class="line" v-if="item.carrierName">
 								<text class="label">杩愯緭鍏徃</text>
@@ -525,19 +525,20 @@
 				flex-wrap: wrap;
 
 				.item {
-					width: 210rpx;
-					height: 80rpx;
-					display: flex;
-					justify-content: center;
-					align-items: center;
+					width: 220rpx;
+					height: 80rpx;
+					line-height: 80rpx;
+					text-align: center;
 					background: #ffffff;
 					border-radius: 8rpx;
 					border: 1rpx solid #999999;
 					font-size: 30rpx;
 					color: #222222;
-					margin-bottom: 20rpx;
-					margin-right: 30rpx;
-
+					margin-bottom: 15rpx;
+					margin-right: 15rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
 					&:nth-of-type(3n) {
 						margin-right: 0;
 					}
diff --git a/pda/pages/index/queueup.vue b/pda/pages/index/queueup.vue
index aad2d5b..0909f05 100644
--- a/pda/pages/index/queueup.vue
+++ b/pda/pages/index/queueup.vue
@@ -56,7 +56,7 @@
         </view>
         <view class="line">
           <text class="label">鎬昏繍杈撻噺</text>
-          <text class="value">{{ item.totalNum }}涓囨敮</text>
+          <text class="value">{{ item.totalNum || item.ioQty }}涓囨敮</text>
         </view>
         <view class="line" v-if="item.carrierName">
           <text class="label">杩愯緭鍏徃</text>
diff --git a/pda/pages/index/set.vue b/pda/pages/index/set.vue
index 9764a7d..694261b 100644
--- a/pda/pages/index/set.vue
+++ b/pda/pages/index/set.vue
@@ -88,16 +88,18 @@
 			 margin-bottom: 120rpx;
 		 }
     .item {
-      width: 210rpx;
+      width: 220rpx;
       height: 80rpx;
       background: #f3f3f3;
       border-radius: 40rpx;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      margin-bottom: 20rpx;
+      line-height: 80rpx;
+			text-align: center;
+      margin-bottom: 15rpx;
       font-size: 30rpx;
-      margin-right: 30rpx;
+      margin-right: 15rpx;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
       &:nth-of-type(3n){
         margin-right: 0;
       }
diff --git a/screen/src/api/index.js b/screen/src/api/index.js
index 0056ec7..09598d0 100644
--- a/screen/src/api/index.js
+++ b/screen/src/api/index.js
@@ -101,25 +101,13 @@
 
 // 瀹夐槻绠℃帶澶у睆 涓績鏁版嵁
 export const getEnergyCenterData = (data) => {
-  return instance({
-    url: 'visitsAdmin/cloudService/board/api/energy/centerData',
-    method: 'get',
-    data
-  })
+  return request('visitsAdmin/cloudService/board/api/security/centerData', data)
 }
 // 瀹夐槻绠℃帶澶у睆 鍥尯瀹夐槻璁惧
 export const getSecurityDeviceData = (data) => {
-  return instance({
-    url: 'visitsAdmin/cloudService/board/api/energy/securityDeviceData',
-    method: 'get',
-    data
-  })
+  return request('visitsAdmin/cloudService/board/api/security/securityDeviceData', data)
 }
 // 瀹夐槻绠℃帶澶у睆 璁垮婊炵暀鎯呭喌
 export const getVisitRetentionData = (data) => {
-  return instance({
-    url: 'visitsAdmin/cloudService/board/api/energy/visitRetentionData',
-    method: 'get',
-    data
-  })
+  return request('visitsAdmin/cloudService/board/api/security/visitRetentionData', data)
 }
\ No newline at end of file
diff --git a/screen/src/components/percent.vue b/screen/src/components/percent.vue
index aaf5112..fd8e94a 100644
--- a/screen/src/components/percent.vue
+++ b/screen/src/components/percent.vue
@@ -20,6 +20,7 @@
   background-color: #172630;
   padding: 4px;
   height: 18px;
+  overflow: hidden;
   .plan{
     height: 10px;
   }
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index f7dbdd1..cde3e9f 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -20,19 +20,23 @@
                 <div>绱鍑哄簱閲忕粺璁�</div>
               </div>
               <div class="tabs">
-                <div class="tab active">鏈湀</div>
+                <div class="tab" :class="{ active: activeTab1 == 0 }" @click="tabClick1(0)">鏈湀</div>
                 <div class="separate"></div>
-                <div class="tab">鏈勾</div>
+                <div class="tab" :class="{ active: activeTab1 == 1 }" @click="tabClick1(1)">鏈勾</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
             <div class="content_wrap">
               <div class="content">
-                <div class="num">1000000</div>
-                <div class="unit_wrap">
+                <div class="num">{{ activeTab1 == 0 ? data1.monthOutTotal : data1.yearOutTotal }}</div>
+                <div class="unit_wrap" v-if="data1.monthOutTotalOnYear || data1.yearOutTotalOnYear">
                   <span style="color: #869CC9;">鍚屾瘮</span>
-                  <img src="@/assets/images/ic_up.png" class="icon" alt="">
-                  <span>10.2%</span>
+                  <img
+                    v-if="(activeTab1 == 0 && data1.monthOutTotalOnYear > 0) || (activeTab1 == 1 && data1.yearOutTotalOnYear > 0)"
+                    src="@/assets/images/ic_up.png" class="icon" alt="">
+                  <img v-else src="@/assets/images/ic_down.png" class="icon" alt="">
+                  <span>{{ activeTab1 == 0 ? Math.abs(data1.monthOutTotalOnYear) : Math.abs(data1.yearOutTotalOnYear)
+                    }}%</span>
                 </div>
               </div>
               <div class="train_wrap">
@@ -41,7 +45,8 @@
                 </div>
                 <div class="total">
                   <span>绱鍑哄簱杞︽</span>
-                  <span><strong>3900</strong><span class="unit">娆�</span></span>
+                  <span><strong>{{ activeTab1 == 0 ? data1.monthOutTimes : data1.yearOutTimes }}</strong><span
+                      class="unit">娆�</span></span>
                 </div>
               </div>
             </div>
@@ -50,14 +55,14 @@
             <div class="com_header">
               <div class="title">
                 <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" />
-                <div>鏈堣兘鑰楀垎鏋�</div>
+                <div>杩愯緭浠诲姟鍒嗘瀽</div>
               </div>
               <div class="tabs">
-                <div class="tab active">杩�7鏃�</div>
+                <div class="tab" :class="{ active: activeTab2 == 0 }" @click="tabClick2(0)">杩�7鏃�</div>
                 <div class="separate"></div>
-                <div class="tab">鏈湀</div>
+                <div class="tab" :class="{ active: activeTab2 == 1 }" @click="tabClick2(1)">鏈湀</div>
                 <div class="separate"></div>
-                <div class="tab">鏈勾</div>
+                <div class="tab" :class="{ active: activeTab2 == 2 }" @click="tabClick2(2)">鏈勾</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
@@ -83,13 +88,14 @@
                   <span class="item addr">鏀惰揣鍗曚綅</span>
                   <span class="item time">浠诲姟寮�濮嬫椂闂�</span>
                 </div>
-                <div class="line" v-for="i in 7">
-                  <span class="item flag"><span class="flag_bg">鍑�</span></span>
-                  <span class="item order">11</span>
-                  <span class="item id_card">11</span>
-                  <span class="item status">11</span>
-                  <span class="item addr">11</span>
-                  <span class="item time">11</span>
+                <div class="line" 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>
+                  <span class="item order">{{ item.billCode || item.contractNum }}</span>
+                  <span class="item id_card">{{ item.carCodeFront }}</span>
+                  <span class="item status">{{ statusMap[item.status].label }}</span>
+                  <span class="item addr">{{ item.repertotyAddress }}</span>
+                  <span class="item time" v-if="item.confirmTaskDate">{{ item.confirmTaskDate.slice(5, 16) }}</span>
                 </div>
               </div>
             </div>
@@ -98,12 +104,14 @@
         <div class="center_box">
           <div class="center_box_one">
             <div class="tabs">
-              <div class="tab active">
-                <img src="@/assets/images/energy_ef/chuku_task_ac.png" alt="">
+              <div class="tab" :class="{ active: activeTab4 == 0 }" @click="tabClick4(0)">
+                <img v-if="activeTab4 == 0" src="@/assets/images/energy_ef/chuku_task_ac.png" alt="">
+                <img v-else src="@/assets/images/energy_ef/chuku_task.png" alt="">
                 <span>鍑哄簱浠诲姟</span>
               </div>
-              <div class="tab">
-                <img src="@/assets/images/energy_ef/ruku_task.png" alt="">
+              <div class="tab" :style="{ color: activeTab4 == 1 ? '#387df0' : '#d8e4f8' }" @click="tabClick4(1)">
+                <img v-if="activeTab4 == 1" src="@/assets/images/energy_ef/ruku_task_ac.png" alt="">
+                <img v-if="activeTab4 == 0" src="@/assets/images/energy_ef/ruku_task.png" alt="">
                 <span>鍏ュ簱浠诲姟</span>
               </div>
             </div>
@@ -112,21 +120,22 @@
                 <img src="@/assets/images/energy_ef/ic_renwuzongliang@2x.png" alt="">
                 <div class="content">
                   <div class="name">褰撳墠浠诲姟閲�</div>
-                  <div class="num"><span>1000</span>涓囨敮</div>
+                  <div class="num"><span>{{ data4.planTaskNum }}</span>涓囨敮</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/energy_ef/ic_wanchengrenwu@2x.png" alt="">
                 <div class="content">
                   <div class="name">褰撴棩瀹屾垚浠诲姟鎬婚噺</div>
-                  <div class="num"><span class="today">1000</span>涓囨敮</div>
+                  <div class="num"><span class="today">{{ data4.finishTaskNum }}</span>涓囨敮</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/energy_ef/ic_bili@2x.png" alt="">
                 <div class="content">
                   <div class="name">宸插畬鎴愭瘮渚�</div>
-                  <div class="num"><span class="finish">1000</span>涓囨敮</div>
+                  <div class="num" v-if="data4.finishTaskNum && data4.planTaskNum"><span class="finish">{{ ((
+                    data4.finishTaskNum / data4.planTaskNum) * 100).toFixed(1) }}%</span>涓囨敮</div>
                 </div>
               </div>
             </div>
@@ -143,9 +152,9 @@
                 <div>鍑哄叆搴撴晥鐜�</div>
               </div>
               <div class="tabs">
-                <div class="tab active">浠婃棩</div>
+                <div class="tab" :class="{ active: activeTab12 == 0 }" @click="tabClick12(0)">浠婃棩</div>
                 <div class="separate"></div>
-                <div class="tab">鏈湀</div>
+                <div class="tab" :class="{ active: activeTab12 == 1 }" @click="tabClick12(1)">鏈湀</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
@@ -154,14 +163,16 @@
                 <img src="@/assets/images/energy_ef/ic_chukuxiaolv@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍑哄簱鏁堢巼</div>
-                  <div class="num"><span>1000</span>涓囨敮/灏忔椂</div>
+                  <div class="num"><span>{{ activeTab12 == 0 ? data1.todayInRata : data1.monthInRata }}</span>涓囨敮/灏忔椂
+                  </div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/energy_ef/ic_rukuxiaolv@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍏ュ簱鏁堢巼</div>
-                  <div class="num"><span class="today">1000</span>涓囨敮/灏忔椂</div>
+                  <div class="num"><span class="today">{{ activeTab12 == 0 ? data1.monthOutTotal : data1.yearOutTotal
+                      }}</span>涓囨敮/灏忔椂</div>
                 </div>
               </div>
             </div>
@@ -177,32 +188,18 @@
             <div class="content">
               <div class="echart_wrap">
                 <div class="pie_text">
-                  <div class="fs30"><strong>300</strong></div>
+                  <div class="fs30"><strong>{{ data5 }}</strong></div>
                   <div>鍏ュ簱鏁伴噺</div>
                 </div>
                 <div class="echart" id="echart1"></div>
               </div>
               <div class="list">
-                <div class="item">
+                <div class="item" v-for="item, i in dataList5">
                   <div class="line">
-                    <div :style="{ background: colors[0] }" class="icon"></div>
-                    <div class="text">鍚堣偉鍘�</div>
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
                   </div>
-                  <div :style="{ color: colors[0] }" class="num">100涓囨敮 | 55%</div>
-                </div>
-                <div class="item">
-                  <div class="line">
-                    <div :style="{ background: colors[1] }" class="icon"></div>
-                    <div class="text">闆嗘暎涓績</div>
-                  </div>
-                  <div :style="{ color: colors[1] }" class="num">100涓囨敮 | 55%</div>
-                </div>
-                <div class="item">
-                  <div class="line">
-                    <div :style="{ background: colors[2] }" class="icon"></div>
-                    <div class="text">甯傚叕鍙�</div>
-                  </div>
-                  <div :style="{ color: colors[2] }" class="num">100涓囨敮 | 55%</div>
+                  <div :style="{ color: colors[i] }" class="num">{{ item.value }}涓囨敮 | {{ item.rate }}%</div>
                 </div>
               </div>
             </div>
@@ -218,19 +215,15 @@
             <div class="repertory">
               <div class="use_ratio">
                 <div class="header">
-                  <div>搴撳瓨閲� <span class="num">80/100</span></div>
-                  <div>鍒╃敤鐜� 88%</div>
+                  <div>搴撳瓨閲� <span class="num">{{data1.stockTotal}}/{{data1.stockMax}}</span></div>
+                  <div v-if="data1.stockTotal && data1.stockMax">鍒╃敤鐜噞{ ((data1.stockTotal / data1.stockMax) * 100).toFixed(0) }}%</div>
                 </div>
-                <Percent :rate="80" />
+                <Percent v-if="data1.stockTotal && data1.stockMax" :rate="((data1.stockTotal / data1.stockMax) * 100).toFixed(0)" />
               </div>
               <div class="list">
-                <div class="item">
-                  <div class="la">榛勫北(鏂板埗鐨栫儫)</div>
-                  <div class="val">400涓囨敮</div>
-                </div>
-                <div class="item">
-                  <div class="la">榛勫北(鏂板埗鐨栫儫)</div>
-                  <div class="val">400涓囨敮</div>
+                <div class="item" v-for="item in dataList6">
+                  <div class="la">{{ item.name }}</div>
+                  <div class="val">{{item.num}}涓囨敮</div>
                 </div>
               </div>
             </div>
@@ -278,10 +271,10 @@
       itemGap: 12,
       // icon: 'circle',
       right: '12px',
-      top: '0',
-      data: ['鎬诲簱瀛�', '褰撳墠搴撳瓨', '搴撳瓨鍒╃敤鐜�'],
-      itemWidth: 20,
-      itemHeight: 10,
+      top: '10px',
+      data: ['璁″垝浠诲姟閲�', '浠诲姟瀹屾垚閲�', '璁″垝浠诲姟鏁�'],
+      itemWidth: 12,
+      itemHeight: 4,
       textStyle: {
         color: '#fff',
         borderColor: '#fff'
@@ -291,7 +284,7 @@
       left: '3%',
       right: '4%',
       bottom: '3%',
-      top: '16%',
+      top: '18%',
       containLabel: true
     },
     tooltip: {
@@ -313,7 +306,7 @@
       axisTick: {
         show: false,
       },
-      data: ['7.1', '7.1', '7.1', '7.1', '7.1'],
+      data: dataList2.value.map(i => i.planDate),
     }],
     yAxis: [
       {
@@ -353,7 +346,7 @@
     ],
     series: [
       {
-        name: '璁″垝瀹屾垚鏁伴噺',
+        name: '璁″垝浠诲姟閲�',
         type: 'bar',
         barWidth: 10,
         barGap: '60%',
@@ -379,7 +372,7 @@
           },
           barBorderRadius: [3, 3, 0, 0],
         },
-        data: [900, 438, 485, 631, 689]
+        data: dataList2.value.map(i => i.planTaskNum)
       },
       {
         name: '浠诲姟瀹屾垚閲�',
@@ -407,7 +400,7 @@
           },
           barBorderRadius: [3, 3, 0, 0],
         },
-        data: [438, 485, 631, 689, 900]
+        data: dataList2.value.map(i => i.finishTaskNum)
       },
       {
         name: '璁″垝浠诲姟鏁�',
@@ -423,7 +416,7 @@
           position: 'top',
           color: '#fff',
         },
-        data: [485, 631, 389, 224, 287]
+        data: dataList2.value.map(i => i.planTimes)
       }
     ]
   })
@@ -451,11 +444,7 @@
         labelLine: {
           show: false
         },
-        data: [
-          { value: 1048, name: 'Search Engine' },
-          { value: 735, name: 'Direct' },
-          { value: 580, name: 'Email' }
-        ]
+        data: dataList5.value
       }
     ]
   }
@@ -634,40 +623,87 @@
   })
 }
 
-const dataList1 = ref([])
+const data1 = ref({})
+const activeTab1 = ref(0)
+const activeTab12 = ref(0)
+const tabClick1 = (val) => {
+  activeTab1.value = val
+}
+const tabClick12 = (val) => {
+  activeTab12.value = val
+}
 const getData1 = () => {
   wlcenterData().then(res => {
-    const result = res
+    const result = res.data
+    data1.value = result
   })
 }
+
 const dataList2 = ref([])
+const activeTab2 = ref(0)
+const tabClick2 = (val) => { activeTab2.value = val }
 const getData2 = () => {
-  wlcenterData().then(res => {
-    const result = res
+  wltransportMeasure({ queryType: activeTab2.value }).then(res => {
+    const result = res.data
+    dataList2.value = result
+    initEnergy()
   })
 }
+
 const dataList3 = ref([])
+const statusMap = [
+  { value: 0, label: '寰呯‘璁�' },
+  { value: 1, label: '寰呯鍒�' },
+  { value: 2, label: '绛夊緟鍙彿' },
+  { value: 3, label: '鍏ュ洯绛夊緟' },
+  { value: 4, label: '鏈堝彴绛夊緟' },
+  { value: 5, label: '浣滀笟涓�' },
+  { value: 6, label: '浣滀笟瀹屾垚' },
+  { value: 7, label: '杞Щ涓�' },
+  { value: 8, label: '寮傚父鎸傝捣' },
+  { value: 9, label: '宸叉巿鏉冪鍥�' },
+  { value: 10, label: '宸茬鍥�' },
+  { value: 11, label: '宸茶繃鍙�' },
+  { value: 12, label: '宸插彇娑�' },
+]
 const getData3 = () => {
-  wlcenterData().then(res => {
-    const result = res
+  wlplatformJobList().then(res => {
+    const result = res.data
+    dataList3.value = result
   })
 }
-const dataList4 = ref([])
+const data4 = ref({})
+const activeTab4 = ref(0)
+const tabClick4 = (val) => { activeTab4.value = val }
 const getData4 = () => {
-  wlcenterData().then(res => {
-    const result = res
+  wljobData({ queryType: activeTab4.value }).then(res => {
+    const result = res.data
+    data4.value = result
   })
 }
 const dataList5 = ref([])
+const data5 = ref(0)
 const getData5 = () => {
-  wlcenterData().then(res => {
-    const result = res
+  wltotalInList().then(res => {
+    const result = res.data || []
+    let count = 0
+    dataList5.value = result.map(i => {
+      i.value = i.num
+      count += i.num
+      return i
+    })
+    dataList5.value.forEach(i => {
+      i.rate = ((i.num / count) * 100).toFixed(0)
+    })
+    data5.value = count
+    initEchart1()
   })
 }
 const dataList6 = ref([])
 const getData6 = () => {
-  wlcenterData().then(res => {
-    const result = res
+  wlstockList().then(res => {
+    const result = res.data
+    dataList6.value = result
   })
 }
 onMounted(() => {
@@ -677,9 +713,7 @@
   getData4()
   getData5()
   getData6()
-  return
-  initEnergy()
-  initEchart1()
+
   initMap()
 })
 
@@ -811,10 +845,6 @@
 
             &:nth-of-type(2n) {
               background: rgba(27, 64, 97, 0.52);
-
-              .flag_bg {
-                background: #01ABFE !important;
-              }
             }
 
             .item {
@@ -828,7 +858,7 @@
               flex: 3;
               display: flex;
 
-              .flag_bg {
+              span {
                 width: 22px;
                 height: 22px;
                 display: flex;
@@ -838,6 +868,10 @@
                 background: #00F2F3;
                 font-weight: 500;
                 color: #001B3C;
+              }
+
+              .flag_bg {
+                background: #4eacf6;
               }
             }
 
@@ -876,6 +910,7 @@
           display: flex;
           align-items: center;
           margin-right: 30px;
+          cursor: pointer;
 
           img {
             width: 20px;
@@ -900,12 +935,13 @@
 
       .static_wrap {
         display: flex;
-        justify-content: space-between;
         align-items: center;
         margin: 30px 0 54px;
 
         .item {
           display: flex;
+          justify-content: center;
+          flex: 1;
 
           img {
             width: 68px;
@@ -959,7 +995,6 @@
       .echart_map {
         width: 100%;
         height: 100%;
-        border: 1px solid;
       }
     }
   }
@@ -1032,7 +1067,6 @@
         justify-content: center;
         align-items: center;
         height: 200px;
-        border: 1px solid;
 
         .echart_wrap {
           position: relative;
@@ -1118,7 +1152,9 @@
 
         .list {
           margin-top: 22px;
-
+          height: 240px;
+          overflow: auto;
+          scrollbar-width: none;
           .item {
             width: 100%;
             height: 36px;
@@ -1241,6 +1277,10 @@
       margin: 0 6px;
     }
 
+    .tab {
+      cursor: pointer;
+    }
+
     .active {
       color: #0094eb;
     }
diff --git a/screen/src/views/SecurityControl.vue b/screen/src/views/SecurityControl.vue
index e2bcac9..a8f450a 100644
--- a/screen/src/views/SecurityControl.vue
+++ b/screen/src/views/SecurityControl.vue
@@ -28,25 +28,26 @@
               </div>
               <div class="num_wrap">
                 <div class="la">鎬昏溅浣嶏細</div>
-                <div class="val">100</div>
+                <div class="val">{{ data.parkingLotTotal }}</div>
               </div>
             </div>
             <div class="stall_static">
               <div class="residue">
                 <div class="la">鍓╀綑杞︿綅</div>
-                <div class="val">50</div>
+                <div class="val">{{ data.freeParkingLot }}</div>
               </div>
               <div class="total">
                 <div class="la">杞︿綅鎬绘暟</div>
-                <div class="val">50</div>
+                <div class="val">{{ data.parkingLotTotal }}</div>
               </div>
               <div class="rate">
                 <div class="la">
                   <span>杞︿綅浣跨敤鐜�</span>
-                  <span class="num">50%</span>
+                  <span v-if="data.inParkCarTotal && data.parkingLotTotal" class="num">{{ ((data.inParkCarTotal /
+                    data.parkingLotTotal) * 100).toFixed(0) }}%</span>
                 </div>
                 <div class="val">
-                  <Percent :rate="50" />
+                  <Percent :rate="((data.inParkCarTotal / data.parkingLotTotal) * 100).toFixed(0)" />
                 </div>
               </div>
             </div>
@@ -59,22 +60,22 @@
             <div class="private_car">
               <div class="item">
                 <div class="name">鍛樺伐杞﹁締</div>
-                <div class="num">20</div>
+                <div class="num">{{ data.internalCarTotal }}</div>
               </div>
               <div class="item">
                 <div class="name">鐩稿叧鏂硅溅杈�</div>
-                <div class="num num2">20</div>
+                <div class="num num2">{{ data.relatedCarTotal }}</div>
               </div>
               <div class="item">
 
                 <div class="name">鏉ヨ杞﹁締</div>
-                <div class="num num3">20</div>
+                <div class="num num3">{{ data.visitCarTotal }}</div>
               </div>
             </div>
             <div class="section">
-              <div class="item"></div>
-              <div class="item"></div>
-              <div class="item"></div>
+              <div class="item" :style="{ flex: data.internalCarTotal }"></div>
+              <div class="item" :style="{ flex: data.relatedCarTotal }"></div>
+              <div class="item" :style="{ flex: data.visitCarTotal }"></div>
             </div>
             <div class="second_title">
               <div class="title">
@@ -85,32 +86,19 @@
             <div class="car_static">
               <div class="echart_wrap">
                 <div class="pie_text">
-                  <div class="fs30"><strong>300</strong></div>
+                  <div class="fs30"><strong v-if="data.visitJobCarTotal">{{ data.internalJobCarTotal +
+                    data.relatedJobCarTotal + data.visitJobCarTotal }}</strong></div>
                   <div>璐ц溅</div>
                 </div>
                 <div class="echart" id="echart1"></div>
               </div>
               <div class="list">
-                <div class="item">
+                <div class="item" v-for="item, i in dataList1">
                   <div class="line">
-                    <div :style="{ background: colors[0] }" class="icon"></div>
-                    <div class="text">鍐呰繍杞﹁締</div>
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
                   </div>
-                  <div :style="{ color: colors[0] }" class="num">100</div>
-                </div>
-                <div class="item">
-                  <div class="line">
-                    <div :style="{ background: colors[1] }" class="icon"></div>
-                    <div class="text">澶栧崗杩愯緭杞﹁締</div>
-                  </div>
-                  <div :style="{ color: colors[1] }" class="num">100</div>
-                </div>
-                <div class="item">
-                  <div class="line">
-                    <div :style="{ background: colors[2] }" class="icon"></div>
-                    <div class="text">甯傚叕鍙稿嵏璐ц溅杈�</div>
-                  </div>
-                  <div :style="{ color: colors[2] }" class="num">100</div>
+                  <div :style="{ color: colors[i] }" class="num">{{ item.value }}</div>
                 </div>
               </div>
             </div>
@@ -125,7 +113,7 @@
                   <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
                 </div>
                 <div class="num_wrap">
-                  <div class="num">200</div>
+                  <div class="num">{{ data.inParkTotal }}</div>
                   <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
                 </div>
               </div>
@@ -135,7 +123,7 @@
                   <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
                 </div>
                 <div class="num_wrap">
-                  <div class="num">200</div>
+                  <div class="num">{{ data.inParkCarTotal }}</div>
                   <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
                 </div>
               </div>
@@ -145,7 +133,7 @@
                   <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
                 </div>
                 <div class="num_wrap">
-                  <div class="num">200</div>
+                  <div class="num">{{ data.deviceTotal }}</div>
                   <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
                 </div>
               </div>
@@ -155,7 +143,7 @@
                   <img src="@/assets/images/SecurityControl/title_short@2x.png" class="bg" alt="">
                 </div>
                 <div class="num_wrap">
-                  <div class="num">200</div>
+                  <div class="num">{{ data.errTotal }}</div>
                   <img src="@/assets/images/SecurityControl/anfang_ic_data@2x.png" class="bg" alt="">
                 </div>
               </div>
@@ -182,21 +170,24 @@
                 <img src="@/assets/images/SecurityControl/staff_ic_neibu@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍐呴儴鍛樺伐</div>
-                  <div class="num"><span>1000</span> | 66.6%</div>
+                  <div class="num" v-if="data.internalTotal && data.inParkTotal"><span>{{ data.internalTotal }}</span> |
+                    {{ ((data.internalTotal / data.inParkTotal) * 100).toFixed(1) }}%</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/SecurityControl/staff_ic_xiangguanfang@2x.png" alt="">
                 <div class="content">
                   <div class="name">闀挎湡鐩稿叧鏂�</div>
-                  <div class="num today"><span>1000</span> | 66.6%</div>
+                  <div class="num today" v-if="data.relatedTotal && data.inParkTotal"><span>{{ data.relatedTotal
+                      }}</span> | {{ ((data.relatedTotal / data.inParkTotal) * 100).toFixed(1) }}%</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/SecurityControl/staff_ic_fangke@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍦ㄥ洯璁垮</div>
-                  <div class="num finish"><span>1000</span> | 66.6%</div>
+                  <div class="num finish" v-if="data.visitTotal && data.inParkTotal"><span>{{ data.visitTotal }}</span>
+                    | {{ ((data.visitTotal / data.inParkTotal) * 100).toFixed(1) }}%</div>
                 </div>
               </div>
             </div>
@@ -351,26 +342,21 @@
             <div class="sa_static">
               <div class="echart_wrap">
                 <div class="pie_text">
-                  <div class="fs30"><strong>300</strong></div>
+                  <div class="fs30"><strong v-if="dataListT2 && dataListT2.length == 2">{{ dataListT2[0].value +
+                    dataListT2[1].value }}</strong></div>
                   <div>鎬昏</div>
                 </div>
                 <div class="echart" id="echart2"></div>
               </div>
               <div class="list">
-                <div class="item">
+                <div class="item" v-for="item, i in dataListT2">
                   <div class="line">
-                    <div :style="{ background: colors[1] }" class="icon"></div>
-                    <div class="text">鍦ㄧ嚎</div>
+                    <div :style="{ background: colors[i] }" class="icon"></div>
+                    <div class="text">{{ item.name }}</div>
                   </div>
-                  <div :style="{ color: colors[1] }" class="num">100</div>
+                  <div :style="{ color: colors[i] }" class="num">{{ item.value }} | {{ item.rate }}%</div>
                 </div>
-                <div class="item">
-                  <div class="line">
-                    <div :style="{ background: colors[2] }" class="icon"></div>
-                    <div class="text">绂荤嚎</div>
-                  </div>
-                  <div :style="{ color: colors[2] }" class="num">100</div>
-                </div>
+
               </div>
             </div>
             <div class="table">
@@ -381,22 +367,18 @@
                 <div>绂荤嚎鏁�</div>
                 <div>鍦ㄧ嚎鐜�</div>
               </div>
-              <div class="line">
-                <div class="driver">闂ㄧ璁惧</div>
-                <div>10</div>
-                <div>10</div>
-                <div>10</div>
-                <div>10</div>
-              </div>
-              <div class="separate"></div>
-              <div class="line">
-                <div class="driver">闂ㄧ璁惧</div>
-                <div>10</div>
-                <div>10</div>
-                <div>10</div>
-                <div>10</div>
-              </div>
-              <div class="separate"></div>
+              <template v-for="item, i in dataList2">
+                <div class="line">
+                  <div class="driver">{{ item.deviceType }}</div>
+                  <div>{{ item.totalNum }}</div>
+                  <div>{{ item.onlineNum }}</div>
+                  <div>{{ item.offlineDeviceNum }}</div>
+                  <div v-if="item.onlineNum && item.totalNum">{{ ((item.onlineNum / item.totalNum) * 100).toFixed(0) }}%
+                  </div>
+                </div>
+                <div class="separate"></div>
+              </template>
+
             </div>
           </div>
         </div>
@@ -414,18 +396,14 @@
               <div class="dept">鎷滆閮ㄩ棬</div>
               <div class="dept">瓒呮椂鏃堕暱</div>
             </div>
-            <div class="line">
-              <div>name</div>
-              <div class="dept">缁煎悎绠$悊绉�</div>
-              <div class="dept">10:21</div>
-            </div>
-            <div class="separate"></div>
-            <div class="line">
-              <div>name</div>
-              <div class="dept">缁煎悎绠$悊绉�</div>
-              <div class="dept">10:21</div>
-            </div>
-            <div class="separate"></div>
+            <template v-for="item in dataList3">
+              <div class="line">
+                <div>{{ item.name }}</div>
+                <div class="dept">{{ item.companyName }}</div>
+                <div class="dept">{{ item.timeOutMinuteT }}</div>
+              </div>
+              <div class="separate"></div>
+            </template>
           </div>
         </div>
       </div>
@@ -438,11 +416,12 @@
 import VScaleScreen from 'v-scale-screen'
 import Percent from '@/components/percent.vue'
 import dayjs from 'dayjs'
+import duration from 'dayjs/plugin/duration'
+dayjs.extend(duration)
 import * as echarts from 'echarts'
 import { getEnergyCenterData, getSecurityDeviceData, getVisitRetentionData } from '@/api'
 
 
-const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
 const date = ref(dayjs().format('YYYY.MM.DD'))
 const week = ref(weekMap[new Date().getDay()])
@@ -515,8 +494,18 @@
     myChart.resize()
   })
 }
+
+const dataList1 = ref([])
 const initEchart1 = () => {
   const myChart = echarts.init(document.getElementById('echart1'))
+  const temp = []
+  temp.push({ name: '鍐呰繍杞﹁締', value: data.value.internalJobCarTotal })
+  temp.push({ name: '澶栧崗杩愯緭杞﹁締', value: data.value.relatedJobCarTotal })
+  temp.push({ name: '甯傚叕鍙稿嵏璐ц溅杈�', value: data.value.visitJobCarTotal })
+  temp.sort((a, b) => {
+    return a.value - b.value
+  })
+  dataList1.value = temp
   const option = {
     series: [
       {
@@ -534,11 +523,7 @@
         labelLine: {
           show: false
         },
-        data: [
-          { value: 1048, name: 'Search Engine' },
-          { value: 735, name: 'Direct' },
-          { value: 580, name: 'Email' }
-        ]
+        data: temp
       }
     ]
   }
@@ -547,6 +532,8 @@
     myChart.resize()
   })
 }
+
+const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const initEchart2 = () => {
   const myChart = echarts.init(document.getElementById('echart2'))
   const option = {
@@ -566,11 +553,7 @@
         labelLine: {
           show: false
         },
-        data: [
-          { value: 1048, name: 'Search Engine' },
-          { value: 735, name: 'Direct' },
-          { value: 580, name: 'Email' }
-        ]
+        data: dataListT2.value
       }
     ]
   }
@@ -723,14 +706,59 @@
     myChart.resize()
   })
 }
-const ininDate = () => {
-  getEnergyCenterData()
+
+const data = ref({})
+const getData1 = () => {
+  getEnergyCenterData().then(res => {
+    const result = res.data
+    data.value = result
+    initEchart1()
+  })
 }
+
+const dataList2 = ref([])
+const dataListT2 = ref([])
+const getData2 = () => {
+  getSecurityDeviceData().then(res => {
+    const result = res.data
+    let temp = []
+    let online = 0
+    let outline = 0
+    dataList2.value = result.map(item => {
+      online += item.onlineNum
+      outline += item.offlineDeviceNum
+      return item
+    })
+    if (online >= outline) {
+      temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) })
+      temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) })
+    } else {
+      temp.push({ name: '绂荤嚎', value: outline, rate: ((outline / (online + outline)) * 100).toFixed(1) })
+      temp.push({ name: '鍦ㄧ嚎', value: online, rate: ((online / (online + outline)) * 100).toFixed(1) })
+    }
+
+    dataListT2.value = temp
+    initEchart2()
+  })
+}
+
+const dataList3 = ref([])
+const getData3 = () => {
+  getVisitRetentionData().then(res => {
+    const result = res.data || []
+    dataList3.value = result.map(i => {
+      i.timeOutMinuteT = dayjs.duration(i.timeOutMinute * 60 * 1000).format('HH:mm')
+      return i
+    })
+  })
+}
+
 onMounted(() => {
-  ininDate()
+  getData1()
+  getData2()
+  getData3()
   initEchart3()
-  initEchart1()
-  initEchart2()
+  // initEchart1()
 })
 
 
@@ -1293,6 +1321,7 @@
     flex: 1;
     margin-right: 20px;
     position: relative;
+
     .content {
       display: flex;
 
@@ -1406,9 +1435,11 @@
       background: linear-gradient(180deg, #021F4A 0%, #054281 100%), linear-gradient(180deg, #011738 0%, rgba(5, 66, 129, 0.26) 100%), #00141F;
       border-radius: 2px;
       border: 1px solid rgba(12, 153, 236, 0.68);
-      .icon{
+
+      .icon {
         width: 30px;
       }
+
       .top {
         width: 12px;
         height: 12px;
diff --git a/screen/vite.config.js b/screen/vite.config.js
index 1afa5c0..4074074 100644
--- a/screen/vite.config.js
+++ b/screen/vite.config.js
@@ -25,7 +25,7 @@
   server: {
     proxy: {
       "/gateway_interface": {
-        // target: "http://192.168.0.103:10010",
+        // target: "http://192.168.0.138:10010",
         // target: "http://10.50.250.253:8088/gateway_interface",
         target: "http://192.168.0.173/gateway_interface",
         changeOrigin: true,

--
Gitblit v1.9.3