From fb8960f8c094f4905ee37ceb09dc6e22d276e8b6 Mon Sep 17 00:00:00 2001
From: liukangdong <898885815@qq.com>
Date: 星期三, 30 十月 2024 13:59:08 +0800
Subject: [PATCH] ll

---
 admin/src/components/business/operaVisitsWindow.vue            |    7 
 admin/src/views/platform/LogisticsRecord/waybill.vue           |    3 
 admin/src/views/login.vue                                      |   16 
 admin/src/views/operation/danger/areaSet.vue                   |   14 
 screen/src/views/LogisticsEfficiency.vue                       |   51 +++
 screen/src/router/index.js                                     |    2 
 admin/src/components/business/OperaHiddenDangerParamWindow.vue |   82 ++--
 screen/src/views/TaskEfficiency.vue                            |  230 ++++++++++----
 admin/src/utils/request.js                                     |    8 
 screen/src/api/index.js                                        |   70 +++
 admin/src/views/business/relativeMember.vue                    |    1 
 admin/src/api/business/company.js                              |    4 
 admin/src/components/operation/HiddenDangerParam.vue           |   18 +
 admin/src/router/index.js                                      |    8 
 admin/src/components/business/operaVisitsReportWindow.vue      |    7 
 admin/src/views/operation/danger/record.vue                    |    5 
 screen/src/views/FireFighting.vue                              |  433 +++++++++++++++-----------
 17 files changed, 643 insertions(+), 316 deletions(-)

diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js
index dd0434d..da1ff1a 100644
--- a/admin/src/api/business/company.js
+++ b/admin/src/api/business/company.js
@@ -41,6 +41,10 @@
 export function companyGetList (data) {
   return request.post('/visitsAdmin/cloudService/business/company/page', data)
 }
+// 鏌ヨ鎵�鏈夐儴闂�
+export function companyGetListPost (data) {
+  return request.post('/visitsAdmin/cloudService/business/company/list', data)
+}
 
 // 鍒犻櫎
 export function deleteById (id) {
diff --git a/admin/src/components/business/OperaHiddenDangerParamWindow.vue b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
index 12155f9..ffe844c 100644
--- a/admin/src/components/business/OperaHiddenDangerParamWindow.vue
+++ b/admin/src/components/business/OperaHiddenDangerParamWindow.vue
@@ -1,71 +1,74 @@
 <template>
-    <GlobalWindow
-        :title="title"
-        width="500px"
-        :visible.sync="visible"
-        :confirm-working="isWorking"
-        @confirm="confirm"
-    >
-      <el-form :model="form" ref="form" :rules="rules">
-          <el-form-item label="鍚嶇О" prop="name">
-            <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
-          </el-form-item>
-          <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
-            <el-input v-model="form.sortnum" type="number"  placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
-          </el-form-item>
-          <el-form-item v-if="form.type==0" label="閫夋嫨瀹夊叏鍛橈細" prop="memberIdList">
-            <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="璇烽�夋嫨">
-              <el-option
-                  v-for="item in memberList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id">
-              </el-option>
-            </el-select>
-          </el-form-item>
-        </el-form>
-    </GlobalWindow>
+  <GlobalWindow :title="title" width="500px" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim />
+      </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyId">
+        <el-select @change="loadMember" v-model="form.companyId">
+          <el-option v-for="op in department" :key="op.id" :label="op.name" :value="op.id"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="form.type == 0" label="閫夋嫨瀹夊叏鍛�" prop="memberIdList">
+        <el-select v-model="form.memberIdList" filterable multiple clearable placeholder="璇烽�夋嫨">
+          <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum">
+        <el-input v-model="form.sortnum" type="number" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim />
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
 </template>
 
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
 import { allList } from '@/api/business/member'
+import { companyGetListPost } from '@/api/business/company'
 export default {
   name: 'OperaHiddenDangerParamWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       memberList: [],
+      department: [],
+      departprops: {
+        label: 'name',
+        value: 'id',
+        checkStrictly: true
+      },
       form: {
         id: null,
         name: null,
+        companyId: null,
         memberIdList: null,
         type: null,
         sortnum: null
       },
       // 楠岃瘉瑙勫垯
       rules: {
-        name: [
-          { required: true, message: '璇疯緭鍏ュ悕绉�' }
-        ]
+        name: [{ required: true, message: '璇疯緭鍏ュ悕绉�' }],
+        companyId: [{ required: true, message: '璇烽�夋嫨' }],
+        memberIdList: [{ required: true, message: '璇烽�夋嫨', type: 'array' }],
       }
     }
   },
-  created () {
+  created() {
     this.config({
       api: '/business/hiddenDangerParam',
       'field.id': 'id'
     })
   },
   methods: {
-    open (title, target, type) {
+    open(title, target, type) {
       this.title = title
       this.visible = true
       this.form.type = type
-      this.loadMember()
+      this.getfindCompanyTreePage()
       // 鏂板缓缁勭粐
       if (target == null) {
         this.$nextTick(() => {
@@ -90,10 +93,19 @@
         }
       })
     },
-    loadMember () {
+    getfindCompanyTreePage() {
+      companyGetListPost({})
+        .then(res => {
+          if (res && res.length > 0) {
+            this.department = res
+          }
+        })
+    },
+    loadMember() {
       allList({
         type: 2,
-        companyType: 1
+        companyType: 1,
+        companyId: this.form.companyId
       })
         .then(res => {
           this.memberList = res
diff --git a/admin/src/components/business/operaVisitsReportWindow.vue b/admin/src/components/business/operaVisitsReportWindow.vue
index d45b176..161bfdd 100644
--- a/admin/src/components/business/operaVisitsReportWindow.vue
+++ b/admin/src/components/business/operaVisitsReportWindow.vue
@@ -55,7 +55,7 @@
         ></el-input>
       </el-form-item>
       <el-form-item label="鍏ュ洯杞﹁締" prop="carNos">
-        <el-input v-model="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
+        <el-input v-model.trim="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
       </el-form-item>
       <el-form-item label="闅忚溅浜烘暟" prop="memberNum">
         <el-input
@@ -205,6 +205,11 @@
         if (!valid) {
           return
         }
+        const { param } = this
+        if(param.carNos){
+          param.carNos = param.carNos.replace(/\s*/g,"")
+          param.carNos = param.carNos.replace(/[\r\n]/g, "")
+        }
         // 璋冪敤鏂板缓鎺ュ彛
         this.isWorking = true
         createVisit({
diff --git a/admin/src/components/business/operaVisitsWindow.vue b/admin/src/components/business/operaVisitsWindow.vue
index 7eff5ec..28d9454 100644
--- a/admin/src/components/business/operaVisitsWindow.vue
+++ b/admin/src/components/business/operaVisitsWindow.vue
@@ -117,7 +117,7 @@
         ></el-input>
       </el-form-item>
       <el-form-item label="闅忚杞﹁締">
-        <el-input v-model="param.carNos" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
+        <el-input v-model.trim="param.carNos" onkeyup="this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')" placeholder="璇疯緭鍏ヨ溅鐗屽彿"></el-input>
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -135,6 +135,7 @@
     GlobalWindow,
     UploadFaceImg
   },
+  
   data () {
     return {
       isShowModal: false,
@@ -257,6 +258,10 @@
           return
         }
         const { param } = this
+        if(param.carNos){
+          param.carNos = param.carNos.replace(/\s*/g,"")
+          param.carNos = param.carNos.replace(/[\r\n]/g, "")
+        }
         if (param.starttime.slice(0, 10) !== param.endtime.slice(0, 10)) return this.$tip.error('鍏ュ洯鏃堕棿鍜岀鍥椂闂翠笉鍙法澶�')
         // 璋冪敤鏂板缓鎺ュ彛
         this.isWorking = true
diff --git a/admin/src/components/operation/HiddenDangerParam.vue b/admin/src/components/operation/HiddenDangerParam.vue
index 18cc589..c2b75eb 100644
--- a/admin/src/components/operation/HiddenDangerParam.vue
+++ b/admin/src/components/operation/HiddenDangerParam.vue
@@ -22,6 +22,11 @@
           default-time="08:00:00"
         />
       </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyId">
+        <el-select  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>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
         <el-select v-model="param.areaId" @change="changeArea" placeholder="璇烽�夋嫨">
           <el-option
@@ -106,6 +111,7 @@
 import { allList, memberList } from '@/api/business/hiddenDangerParam'
 import { create } from '@/api/business/hiddenDanger'
 import { Loading } from 'element-ui'
+import { companyGetListPost } from '@/api/business/company'
 export default {
   extends: BaseOpera,
   components: {
@@ -126,11 +132,13 @@
       uploadData: {
         folder: 'HIDDEN_DANGER_FILE'
       },
+      department: [],
       rules: {
         // starttime: [{ required: true, message: '璇烽�夋嫨鏃ユ湡', trigger: 'change' }],
         areaId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         cateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         checkUserId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
+        companyId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }],
         faceImgUrl: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }],
 
         content: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
@@ -142,6 +150,7 @@
     this.initData()
   },
   methods: {
+    
     initData () {
       allList({ type: 1 }).then(res => { // 绫诲瀷
         this.typeList = res || []
@@ -152,6 +161,15 @@
       memberList({}).then(res => {
         this.memberList = res || []
       })
+      this.getfindCompanyTreePage()
+    },
+    getfindCompanyTreePage() {
+      companyGetListPost({})
+        .then(res => {
+          if (res && res.length > 0) {
+            this.department = res
+          }
+        })
     },
     changeArea (e) {
       const item = this.addrList.find(i => i.id === e)
diff --git a/admin/src/router/index.js b/admin/src/router/index.js
index 0078cd0..db35fa8 100644
--- a/admin/src/router/index.js
+++ b/admin/src/router/index.js
@@ -60,10 +60,10 @@
       return
     }
     // 濡傛灉璁块棶鐨勬槸鐧诲綍椤甸潰锛屽垯鐩存帴璺宠浆鑷抽椤�
-    if (to.name === 'login') {
-      next({ name: 'index' })
-      return
-    }
+    // if (to.name === 'login') {
+    //   next({ name: 'index' })
+    //   return
+    // }
     next()
     return
   }
diff --git a/admin/src/utils/request.js b/admin/src/utils/request.js
index 24c674c..b70945d 100644
--- a/admin/src/utils/request.js
+++ b/admin/src/utils/request.js
@@ -4,6 +4,7 @@
 import { trim } from './util'
 import cache from '../plugins/cache'
 import { Message } from 'element-ui'
+import router from '@/router'
 
 axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
 const axiosInstance = axios.create({
@@ -41,6 +42,7 @@
 
 // 鏂板缓鍝嶅簲鎷︽埅鍣�
 axiosInstance.interceptors.response.use((response) => {
+
   // 璇锋眰澶辫触
   if (response.status !== 200) {
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
@@ -54,10 +56,10 @@
     return Promise.reject(new Error('鏈嶅姟鍣ㄧ箒蹇欙紝璇风◢鍚庡啀璇�'))
   }
   if (response.data.code === 401 || response.data.code === 5112) {
-    if (response.config.autoLogin !== false) {
+    // if (response.config.autoLogin !== false) {
       Cookies.set('dm_user_token','')
-      window.location.href = process.env.VUE_APP_ROUTER_MODE === 'hash' ? (process.env.VUE_APP_CONTEXT_PATH +'/#/login') : (process.env.VUE_APP_CONTEXT_PATH+'/login')
-    }
+      router.replace({name: 'login'})
+    // }
     return Promise.reject(response.data)
   }
   // 涓氬姟澶辫触
diff --git a/admin/src/views/business/relativeMember.vue b/admin/src/views/business/relativeMember.vue
index 7d44185..676283c 100644
--- a/admin/src/views/business/relativeMember.vue
+++ b/admin/src/views/business/relativeMember.vue
@@ -119,6 +119,7 @@
             <span v-if="row.status == 2" style="color: red">鎷夐粦/鍐荤粨</span>
           </template>
         </el-table-column>-->
+        <el-table-column prop="trainEndTime" label="鍩硅鏈夋晥鏈�" min-width="100px">  </el-table-column>
         <el-table-column label="閮ㄩ棬绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.companyType == 0">鐩稿叧鏂圭粍缁�</span>
diff --git a/admin/src/views/login.vue b/admin/src/views/login.vue
index ee91131..f75520c 100644
--- a/admin/src/views/login.vue
+++ b/admin/src/views/login.vue
@@ -3,6 +3,7 @@
     <img src="@/assets/images/bg@2x.png" class="main_bg" alt="">
     <div class="login_wrap">
       <div class="login_img">
+        <div class="h2">瀹夊窘瀹夋嘲鐗╂祦鏈夐檺璐d换鍏徃</div>
         <div class="h3">鏅烘収鐗╂祦鍥尯瀹夋秷涓�浣撳寲绯荤粺</div>
       </div>
       <div class="form_wrap">
@@ -264,8 +265,19 @@
       background: url("../assets/images/login_img@2x.png");
       background-size: 100% 100%;
       padding-left: 40px;
-      padding-top: 80px;
-
+      padding-top: 60px;
+      .h2{
+        color: $primary-color;
+        background-color: #fff;
+        height: 24px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-radius: 4px;
+        width: 186px;
+        display: flex;
+        margin-bottom: 12px;
+      }
       .h3 {
         font-size: 28px;
         font-weight: 700;
diff --git a/admin/src/views/operation/danger/areaSet.vue b/admin/src/views/operation/danger/areaSet.vue
index 6505acb..6423fdc 100644
--- a/admin/src/views/operation/danger/areaSet.vue
+++ b/admin/src/views/operation/danger/areaSet.vue
@@ -5,6 +5,9 @@
       <el-form-item label="闅愭偅鍖哄煙" prop="name">
         <el-input v-model="searchForm.name" clearable placeholder="璇疯緭鍏ラ殣鎮e尯鍩�" @keypress.enter.native="search"></el-input>
       </el-form-item>
+      <el-form-item label="璐d换閮ㄩ棬" prop="companyName">
+        <el-input v-model="searchForm.companyName" clearable placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
@@ -23,14 +26,15 @@
           @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="name" label="闅愭偅鍖哄煙" min-width="200px"></el-table-column>
-        <el-table-column prop="sortnum" label="鎺掑簭鐮�"  min-width="100px"></el-table-column>
-        <el-table-column prop="memberNames" label="瀹夊叏鍛�" min-width="200px"></el-table-column>
-        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="200px"></el-table-column>
+        <el-table-column prop="name" label="闅愭偅鍖哄煙" min-width="120px"></el-table-column>
+        <el-table-column prop="companyName" label="璐d换閮ㄩ棬" min-width="120px"></el-table-column>
+        <el-table-column prop="sortnum" label="鎺掑簭鐮�"  min-width="70px"></el-table-column>
+        <el-table-column prop="memberNames" label="瀹夊叏鍛�" min-width="80px"></el-table-column>
+        <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="160px"></el-table-column>
         <el-table-column
             v-if="containPermissions(['business:hiddendangerparam:update', 'business:hiddendangerparam:delete' ])"
             label="鎿嶄綔"
-            min-width="250"
+            min-width="140"
             fixed="right"
         >
           <template slot-scope="{row}">
diff --git a/admin/src/views/operation/danger/record.vue b/admin/src/views/operation/danger/record.vue
index d51731a..31f2fbb 100644
--- a/admin/src/views/operation/danger/record.vue
+++ b/admin/src/views/operation/danger/record.vue
@@ -8,6 +8,9 @@
       <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>
       <el-form-item label="闅愭偅鍖哄煙" prop="areaId">
         <el-select v-model="searchForm.areaId" placeholder="璇烽�夋嫨闅愭偅鍖哄煙" clearable  @change="search">
           <el-option
@@ -72,6 +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="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>
@@ -128,6 +132,7 @@
         memberName: '',
         companyName: '',
         queryStartTime: '',
+        companyName: '',
         queryEndTime: '',
         areaId: null,
         cateId: null,
diff --git a/admin/src/views/platform/LogisticsRecord/waybill.vue b/admin/src/views/platform/LogisticsRecord/waybill.vue
index fef375d..f0b7a3e 100644
--- a/admin/src/views/platform/LogisticsRecord/waybill.vue
+++ b/admin/src/views/platform/LogisticsRecord/waybill.vue
@@ -109,6 +109,9 @@
             type: 'select',
             label: '浣滀笟鐘舵��',
             options: [
+              { value: 0, label: '寰呯‘璁�' },
+              { value: 1, label: '寰呯鍒�' },
+              { value: 2, label: '绛夊緟鍙彿' },
               { value: 3, label: '鍏ュ洯绛夊緟' },
               { value: 4, label: '鏈堝彴绛夊緟' },
               { value: 5, label: '浣滀笟涓�' },
diff --git a/screen/src/api/index.js b/screen/src/api/index.js
index 2d94684..0056ec7 100644
--- a/screen/src/api/index.js
+++ b/screen/src/api/index.js
@@ -26,24 +26,74 @@
 }
 
 // 娑堥槻绠℃帶澶у睆 鎶ヨ淇℃伅
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingalarmData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmData', data)
 }
 // 娑堥槻绠℃帶澶у睆 鍛婅澶勭悊鍒嗘瀽
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingHandle = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/alarmHandleData', data)
 }
 // 娑堥槻绠℃帶澶у睆 涓績鏁版嵁
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingcenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/centerData', data)
 }
 // 娑堥槻绠℃帶澶у睆 浠婃棩鍚勭郴缁熻澶囩姸鎬佸強鍛婅鏁伴噺
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingDeAlarm = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/deviceAlarmData', data)
 }
 // 娑堥槻绠℃帶澶у睆 鏈勾娑堥槻璁惧-璁炬柦缁存姢鎯呭喌
-export const getStoreTaskList = (data) => {
-  return request('visitsAdmin/cloudService/board/api/wholeProvince/transportTaskList', data)
+export const getFightingDeviceY = (data) => {
+  return request('visitsAdmin/cloudService/board/api/fightingAdmin/yearDeviceData', data)
+}
+
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩鏈堝彴瀹屾垚璁㈠崟缁熻
+export const cnplatformGroupFinish = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformGroupFinish', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩鏈堝彴宸ヤ綔鏃堕暱瓒嬪娍
+export const cnplatformDuration = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformDuration', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 瀹炴椂鏈堝彴浣滀笟淇℃伅
+export const cnplatformWorkData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/platformWorkData', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 涓績鏁版嵁
+export const cncenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/centerData', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 浠婃棩杞﹁締浣滀笟鎯呭喌
+export const cncarWorkSituation  = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/carWorkSituation', data)
+}
+// 鍦哄唴璋冨害鐪嬫澘 瀹炴椂浣滀笟鏁堢巼
+export const cnworkEfficiency = (data) => {
+  return request('visitsAdmin/cloudService/board/api/onSitDispatch/workEfficiency', data)
+}
+
+// 鐗╂祦杩愯璋冨害鐪嬫澘 涓績鏁版嵁
+export const wlcenterData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/centerData', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 鍑哄叆搴撲换鍔¢噺
+export const wljobData = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/jobData', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 褰撴棩杩愯緭浠诲姟
+export const wlplatformJobList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/platformJobList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 搴撳瓨鎯呭喌
+export const wlstockList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/stockList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 浠婃棩鍏ュ簱閲忕粺璁�
+export const wltotalInList = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/totalInList', data)
+}
+// 鐗╂祦杩愯璋冨害鐪嬫澘 杩愯緭浠诲姟鍒嗘瀽
+export const wltransportMeasure = (data) => {
+  return request('visitsAdmin/cloudService/board/api/platformJobRun/transportMeasure', data)
 }
 
 
diff --git a/screen/src/router/index.js b/screen/src/router/index.js
index 4449704..74799c6 100644
--- a/screen/src/router/index.js
+++ b/screen/src/router/index.js
@@ -5,7 +5,7 @@
   routes: [
     {
       path: '/',
-      component: () => import('../views/FireFighting.vue')
+      component: () => import('../views/SecurityControl.vue')
     },
     {
       path: '/PlatformCall', // 鏈堝彴鍙彿澶у睆
diff --git a/screen/src/views/FireFighting.vue b/screen/src/views/FireFighting.vue
index 2a5d881..25fd46a 100644
--- a/screen/src/views/FireFighting.vue
+++ b/screen/src/views/FireFighting.vue
@@ -31,14 +31,14 @@
                   <span class="item">鏁呴殰</span>
                   <span class="item">绂荤嚎</span>
                 </div>
-                <template v-for="i in 5">
+                <template v-for="(item, i) in dataList1" :key="i">
                   <div class="line">
-                    <span class="item name">鐏伓鎶ヨ绯荤粺</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
-                    <span class="item">11</span>
+                    <span class="item name">{{ item.deviceTypeName }}</span>
+                    <span class="item">{{ item.statusTotal }}</span>
+                    <span class="item">{{ item.alarmNum }}</span>
+                    <span class="item">{{ item.shieldNum }}</span>
+                    <span class="item">{{ item.errNum }}</span>
+                    <span class="item">{{ item.offlineNum }}</span>
                   </div>
                   <div class="separate"></div>
                 </template>
@@ -54,12 +54,12 @@
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
             <div class="police_wrap">
-              <div class="item" v-for="(ind, i) in 4">
+              <div class="item" v-for="(item, i) in dataList2">
                 <div class="head">
-                  <div class="name">鐪熷疄鎶ヨ鏁�</div>
-                  <div class="name">{{ i }}娆�</div>
+                  <div class="name">{{ item.name }}</div>
+                  <div class="name">{{ item.num }}娆�</div>
                 </div>
-                <FirePercent :color="policeColors[i]" :rate="40" />
+                <FirePercent :color="policeColors[i]" :rate="item.rate" />
               </div>
 
             </div>
@@ -84,35 +84,35 @@
                 <img src="@/assets/images/FireFighting/xiaofang_ic_zaixian@2x.png" alt="">
                 <div class="content">
                   <div class="name">鍦ㄧ嚎</div>
-                  <div class="num">1000</div>
+                  <div class="num">{{ dataList4.onlineDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_baojing@2x.png" alt="">
                 <div class="content">
                   <div class="name">鎶ヨ</div>
-                  <div class="num num2">12</div>
+                  <div class="num num2">{{ dataList4.alarmDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_guzhang@2x.png" alt="">
                 <div class="content">
                   <div class="name">鏁呴殰</div>
-                  <div class="num num3">12</div>
+                  <div class="num num3">{{ dataList4.errDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_lixian@2x.png" alt="">
                 <div class="content">
                   <div class="name">绂荤嚎</div>
-                  <div class="num num4">12</div>
+                  <div class="num num4">{{ dataList4.offlineDeviceNum }}</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/xiaofang_ic_pingbi@2x.png" alt="">
                 <div class="content">
                   <div class="name">灞忚斀</div>
-                  <div class="num num5">12</div>
+                  <div class="num num5">{{ dataList4.shieldDeviceNum }}</div>
                 </div>
               </div>
             </div>
@@ -206,20 +206,26 @@
             </div>
             <div class="content_wrap">
               <div class="list">
-                <template v-for="i in 3">
-                  <div class="item">
-                    <div>宸茬淮淇�</div>
-                    <div class="num active">500</div>
-                  </div>
-                  <div v-if="i < 3" class="separate"></div>
-                </template>
-
+                <div class="item">
+                  <div>宸茬淮淇�</div>
+                  <div class="num active">{{ dataList5.protectNum }}</div>
+                </div>
+                <div class="separate"></div>
+                <div class="item">
+                  <div>璁″垝缁翠繚</div>
+                  <div class="num active">{{ dataList5.planProtectTotal }}</div>
+                </div>
+                <div class="separate"></div>
+                <div class="item">
+                  <div>缁翠繚鐜�</div>
+                  <div v-if="dataList5.protectNum && dataList5.planProtectTotal" class="num active">{{ ((dataList5.protectNum / dataList5.planProtectTotal) * 100).toFixed(0) }}%</div>
+                </div>
               </div>
               <div class="footer">
                 <img src="@/assets/images/FireFighting/ic_weixiu@2x.png" class="icon" alt="">
                 <div class="content">
                   <div>鏈湀鏂板缁翠繚</div>
-                  <div class="num">40 <span>涓�</span></div>
+                  <div class="num">{{ dataList5.monthAddNum }} <span>涓�</span></div>
                 </div>
               </div>
             </div>
@@ -241,14 +247,14 @@
                 <img src="@/assets/images/FireFighting/ic_tibao@2x.png" alt="">
                 <div class="content">
                   <div class="name">鎻愭姤闅愭偅鏁�</div>
-                  <div class="num"><span>10</span>涓�</div>
+                  <div class="num"><span>{{ dataList4.todayDangerNum }}</span>涓�</div>
                 </div>
               </div>
               <div class="item">
                 <img src="@/assets/images/FireFighting/ic_chuli@2x.png" alt="">
                 <div class="content">
                   <div class="name">澶勭悊闅愭偅鏁�</div>
-                  <div class="num"><span class="today">3</span>涓�</div>
+                  <div class="num"><span class="today">{{ dataList4.dealDangerNum }}</span>涓�</div>
                 </div>
               </div>
             </div>
@@ -277,7 +283,7 @@
                     </div>
                     <div class="title">
                       <img class="addr" src="@/assets/images/FireFighting/xiaofang_ic_weizhi@2x.png" alt="">
-                      <span>address</span>
+                      <span>A鍘傛埧3杞﹂棿闂ㄥ彛</span>
                     </div>
                   </div>
                 </div>
@@ -295,8 +301,15 @@
 import VScaleScreen from 'v-scale-screen'
 import FirePercent from '@/components/FirePercent.vue'
 import dayjs from 'dayjs'
-
 import * as echarts from 'echarts'
+import {
+  getFightingalarmData,
+  getFightingHandle,
+  getFightingcenterData,
+  getFightingDeAlarm,
+  getFightingDeviceY,
+} from '@/api'
+
 const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
 const date = ref(dayjs().format('YYYY.MM.DD'))
@@ -309,166 +322,7 @@
 
 }, 1000)
 
-const arr = ['#68e2e3', '#50afd3', '#377cdb', '#d5ae3a']
-const initEchart2 = () => {
-  var myChart = echarts.init(document.querySelector('.echart2'))
-  // 鐢熸垚鏁版嵁鍜屾棩鏈�
-  function getLastSevenDays() {
-    const days = []
-    const today = new Date()
-    for (let i = 10; i >= 0; i--) {
-      days.push(`${i + 1}鏈坄) // 鏍煎紡鍖栨棩鏈熶负 "X鏈圶鏃�"
-    }
-    return days
-  }
 
-  // 绀轰緥鏁版嵁
-  const data1 = [13, 14, 14, 14, 14, 12, 11, 23, 12, 1] // 鍑嗘椂
-  const data2 = [1, 1, 2, 1, 1, 2, 2, 3, 2, 1, 5] // 杩熷埌
-  const data3 = [1, 0, 0, 0, 0, 0, 2, 2, 3, 1, 2] // 璇峰亣
-  const data4 = [8, 5, 4, 7, 4, 5, 7, 4, 2, 1, 3] // 鍔犵彮
-  const option = {
-    legend: {
-      x: "center",
-      textStyle: {
-        color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊
-        fontSize: 12
-      },
-      icon: 'circle',
-      top: '6%',
-      itemWidth: 8,
-      itemHeight: 8,
-      itemGap: 20,
-      data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О
-    },
-    grid: {
-      left: '2%',
-      right: '0%',
-      top: '18%',
-      bottom: '10%',
-      containLabel: true,
-    },
-    tooltip: {
-      trigger: "axis",
-      axisPointer: {
-        type: "shadow"
-      },
-      textStyle: {
-        color: "rgba(255, 255, 255, 1)"
-      },
-      backgroundColor: "rgba(0,0,0,0.8)",
-      borderColor: "rgba(219, 230, 255, 0.8)",
-    },
-    xAxis: {
-      data: getLastSevenDays(), // 浣跨敤杩戜竷澶╂棩鏈�
-      axisLabel: {
-        color: "#FFFFFF", // X 杞存枃瀛楄涓虹櫧鑹�
-        fontSize: 14,
-      },
-      axisLine: {
-        lineStyle: {
-          color: '#1E294C'
-        }
-      },
-      axisTick: {
-        show: false
-      }
-    },
-    yAxis: {
-      show: true,
-      axisLabel: {
-        color: "#FFFFFF", // Y 杞存枃瀛楄涓虹櫧鑹�
-        fontSize: 12,
-      },
-      axisLine: {
-        lineStyle: {
-          color: '#A9AEB2'
-        }
-      },
-      axisTick: {
-        lineStyle: {
-          color: '#A9AEB2'
-        }
-      },
-      splitLine: {
-        show: true,
-        lineStyle: {
-          color: ["#0f1d27"],
-          width: 1
-        },
-      },
-    },
-    series: [
-      {
-        name: "鍛婅鏁�",
-        type: "bar",
-        stack: "attendance",
-        data: data1,
-        itemStyle: {
-          color: '#FEAF01',
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-        barWidth: 6,
-      },
-      {
-        name: "杩涜涓�", // 杩熷埌鏁版嵁
-        type: "bar",
-        stack: "attendance",
-        data: data2,
-        itemStyle: {
-          color: '#28F0C4', // 杩熷埌鐨勯鑹�
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-      {
-        name: "宸插鐞�", // 璇峰亣鏁版嵁
-        type: "bar",
-        stack: "attendance",
-        data: data3,
-        itemStyle: {
-          color: '#0193FE', // 璇峰亣鐨勯鑹�
-        },
-        label: {
-          show: false,
-          color: "#FFFFFF",
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-      {
-        name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛�
-        type: "bar",
-        data: data4,
-        barWidth: 6,
-        itemStyle: {
-          color: '#FEED01', // 楂樹寒鐨勭传鑹�
-        },
-        emphasis: {
-          focus: "series",
-        },
-      },
-    ],
-  }
-  myChart.setOption(option)
-  window.addEventListener('resize', function () {//鎵ц
-    myChart.resize()
-  })
-}
-
-const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
 const initWatergage = () => {
   const myChart = echarts.init(document.getElementById('watergage'))
   var data_value = 2
@@ -834,8 +688,209 @@
   })
 }
 
+const dataList1 = ref([])
+const getData1 = () => {
+  getFightingDeAlarm().then(res => {
+    dataList1.value = res.data
+  })
+}
+const policeColors = ['#01D9FE', '#FE5501', '#0193FE', '#28F0C4']
+const dataList2 = ref([])
+const getData2 = () => {
+  getFightingalarmData().then(res => {
+    const result = res.data || {}
+    let temp = []
+    temp.push({ name: '鐪熷疄鎶ヨ鏁�', num: result.realNum, rate: (result.realNum / result.totalNum) * 100 })
+    temp.push({ name: '璇姤璀︽暟', num: result.errNum, rate: (result.errNum / result.totalNum) * 100 })
+    temp.push({ name: '宸茶В闄�', num: result.liftNum, rate: (result.liftNum / result.totalNum) * 100 })
+    temp.push({ name: '澶勭悊涓�', num: result.processingNum, rate: (result.processingNum / result.totalNum) * 100 })
+    dataList2.value = temp
+  })
+}
+
+const dataList3 = ref([])
+const getData3 = () => {
+  getFightingHandle({ type: 0 }).then(res => {
+    dataList3.value = res.data || []
+    initEchart2()
+  })
+}
+const initEchart2 = () => {
+  var myChart = echarts.init(document.querySelector('.echart2'))
+  // 鐢熸垚鏁版嵁鍜屾棩鏈�
+  // 绀轰緥鏁版嵁
+  const data1 = dataList3.value.map(i => i.alarmNum)
+  const data2 = dataList3.value.map(i => i.processingNum)
+  const data3 = dataList3.value.map(i => i.liftNum)
+  const data4 = dataList3.value.map(i => i.errNum)
+  const option = {
+    legend: {
+      x: "center",
+      textStyle: {
+        color: "#FFFFFF", // 鍥句緥鏂囧瓧璁句负鐧借壊
+        fontSize: 12
+      },
+      icon: 'circle',
+      top: '6%',
+      itemWidth: 8,
+      itemHeight: 8,
+      itemGap: 20,
+      data: ['鍛婅鏁�', '杩涜涓�', '宸插鐞�', '璇姤鏁�'] // 鏇存柊鍥句緥鍚嶇О
+    },
+    grid: {
+      left: '2%',
+      right: '0%',
+      top: '20%',
+      bottom: '10%',
+      containLabel: true,
+    },
+    tooltip: {
+      trigger: "axis",
+      axisPointer: {
+        type: "shadow"
+      },
+      textStyle: {
+        color: "rgba(255, 255, 255, 1)"
+      },
+      backgroundColor: "rgba(0,0,0,0.8)",
+      borderColor: "rgba(219, 230, 255, 0.8)",
+    },
+    xAxis: {
+      data: dataList3.value.map(i => i.monthStr),
+      axisLabel: {
+        color: "#FFFFFF", // X 杞存枃瀛楄涓虹櫧鑹�
+        fontSize: 14,
+      },
+      axisLine: {
+        lineStyle: {
+          color: '#1E294C'
+        }
+      },
+      axisTick: {
+        show: false
+      }
+    },
+    yAxis: {
+      show: true,
+      axisLabel: {
+        color: "#FFFFFF", // Y 杞存枃瀛楄涓虹櫧鑹�
+        fontSize: 12,
+      },
+      axisLine: {
+        lineStyle: {
+          color: '#A9AEB2'
+        }
+      },
+      axisTick: {
+        lineStyle: {
+          color: '#A9AEB2'
+        }
+      },
+      splitLine: {
+        show: true,
+        lineStyle: {
+          color: ["#0f1d27"],
+          width: 1
+        },
+      },
+    },
+    series: [
+      {
+        name: "鍛婅鏁�",
+        type: "bar",
+        stack: "attendance",
+        data: data1,
+        itemStyle: {
+          color: '#FEAF01',
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+        barWidth: 6,
+      },
+      {
+        name: "杩涜涓�", // 杩熷埌鏁版嵁
+        type: "bar",
+        stack: "attendance",
+        data: data2,
+        itemStyle: {
+          color: '#28F0C4', // 杩熷埌鐨勯鑹�
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+      {
+        name: "宸插鐞�", // 璇峰亣鏁版嵁
+        type: "bar",
+        stack: "attendance",
+        data: data3,
+        itemStyle: {
+          color: '#0193FE', // 璇峰亣鐨勯鑹�
+        },
+        label: {
+          show: false,
+          color: "#FFFFFF",
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+      {
+        name: "璇姤鏁�", // 鍗曠嫭鐨勫姞鐝煴瀛�
+        type: "bar",
+        data: data4,
+        barWidth: 6,
+        itemStyle: {
+          color: '#FEED01', // 楂樹寒鐨勭传鑹�
+        },
+        emphasis: {
+          focus: "series",
+        },
+      },
+    ],
+  }
+  myChart.setOption(option)
+  window.addEventListener('resize', function () {//鎵ц
+    myChart.resize()
+  })
+}
+
+const dataList4 = ref({})
+const getData4 = () => {
+  getFightingcenterData().then(res => {
+    dataList4.value = res.data || {}
+  })
+}
+const dataList5 = ref({}) // 缁翠繚
+const getData5 = () => {
+  getFightingDeviceY().then(res => {
+    dataList5.value = res.data || {}
+  })
+}
+const dataList6 = ref([])
+const getData6 = () => {
+  getFightingHandle({type: 1}).then(res => {
+    dataList6.value = res.data
+  })
+}
+
 onMounted(() => {
-  initEchart2()
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+
   initWatergage()
   initLiquidlevel()
 })
diff --git a/screen/src/views/LogisticsEfficiency.vue b/screen/src/views/LogisticsEfficiency.vue
index 6441406..f7dbdd1 100644
--- a/screen/src/views/LogisticsEfficiency.vue
+++ b/screen/src/views/LogisticsEfficiency.vue
@@ -248,6 +248,14 @@
 import dayjs from 'dayjs'
 import * as echarts from 'echarts'
 import ahJSON from '@/assets/anhui.json'
+import {
+  wlcenterData,
+  wljobData,
+  wlplatformJobList,
+  wlstockList,
+  wltotalInList,
+  wltransportMeasure,
+} from '@/api'
 
 const colors = ['#FEAF01', '#01ABFE', '#51F9E4']
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -626,7 +634,50 @@
   })
 }
 
+const dataList1 = ref([])
+const getData1 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList2 = ref([])
+const getData2 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList3 = ref([])
+const getData3 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList4 = ref([])
+const getData4 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList5 = ref([])
+const getData5 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
+const dataList6 = ref([])
+const getData6 = () => {
+  wlcenterData().then(res => {
+    const result = res
+  })
+}
 onMounted(() => {
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+  return
   initEnergy()
   initEchart1()
   initMap()
diff --git a/screen/src/views/TaskEfficiency.vue b/screen/src/views/TaskEfficiency.vue
index 3576b8f..27e6ece 100644
--- a/screen/src/views/TaskEfficiency.vue
+++ b/screen/src/views/TaskEfficiency.vue
@@ -24,20 +24,20 @@
             <div class="car_static">
               <div class="echart_wrap">
                 <div class="pie_text">
-                  <div class="fs30"><strong>300</strong></div>
+                  <div class="fs30"><strong>{{ data1 }}</strong></div>
                   <div>瀹屾垚閲�</div>
                 </div>
                 <div class="echart1" id="echart1"></div>
               </div>
               <div class="list">
-                <div class="item">
+                <div class="item" v-for="item, i in dataList1" :key="i">
                   <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 :style="{ color: colors[i] }" class="num">{{ item.value }}涓囨敮</div>
                 </div>
-                <div class="item">
+                <!-- <div class="item">
                   <div class="line">
                     <div :style="{ background: colors[1] }" class="icon"></div>
                     <div class="text">瀹夋嘲鐗╂祦鍗歌揣鏈堝彴缁�</div>
@@ -50,7 +50,7 @@
                     <div class="text">甯傚叕鍙稿嵏璐ф湀鍙扮粍</div>
                   </div>
                   <div :style="{ color: colors[2] }" class="num">100涓囨敮</div>
-                </div>
+                </div> -->
               </div>
             </div>
           </div>
@@ -63,13 +63,13 @@
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
             <div class="list">
-              <div class="line" v-for="item, i in 5">
+              <div class="line" v-for="item, i in dataList2" :key="i">
                 <div class="top"><span v-if="i < 3">top</span>{{ i }}</div>
-                <div class="id_card">鐨朅12313</div>
+                <div class="id_card">{{ item.platformName }}</div>
                 <div class="wrap">
-                  <ChargeRate :rate="15" :color />
+                  <ChargeRate :rate="item.rate" />
                 </div>
-                <div class="num">6灏忔椂34鍒嗛挓</div>
+                <div class="num">{{ item.workTotalTimeT }}</div>
               </div>
             </div>
           </div>
@@ -80,9 +80,9 @@
                 <div>瀹炴椂浣滀笟鏁堢巼</div>
               </div>
               <div class="tabs">
-                <div class="tab active">鍑哄簱</div>
+                <div class="tab" :class="{ active: activeTab3 == 1 }" @click="tabClick3(1)">鍑哄簱</div>
                 <div class="separate"></div>
-                <div class="tab">鍏ュ簱</div>
+                <div class="tab" :class="{ active: activeTab3 == 0 }" @click="tabClick3(0)">鍏ュ簱</div>
               </div>
               <img src="@/assets/images/title@2x.png" class="bg" alt="" />
             </div>
@@ -96,32 +96,32 @@
             <div class="static_wrap">
               <div class="item">
                 <div class="name">鏈堝彴鏁伴噺</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.platformTotal" class="nums">
+                  <div class="num" v-for="n, i in data4.platformTotal + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">绌洪棽鏈堝彴</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.freePlatform" class="nums">
+                  <div class="num" v-for="n, i in data4.freePlatform + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">棰勭害杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.reservationCar" class="nums">
+                  <div class="num" v-for="n, i in data4.reservationCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">浣滀笟杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div v-if="data4.workingCar" class="nums">
+                  <div class="num" v-for="n, i in data4.workingCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
               <div class="item">
                 <div class="name">鎺掗槦杞﹁締</div>
-                <div class="nums">
-                  <div class="num" v-for="i in '010'">{{ i }}</div>
+                <div class="nums" v-if="data4.lineUpCar">
+                  <div class="num" v-for="n, i in data4.lineUpCar + ''" :key="i">{{ n }}</div>
                 </div>
               </div>
             </div>
@@ -139,13 +139,15 @@
                 <div>棰勮瀹屾垚鏃堕棿</div>
                 <div>鏈堝彴鐘舵��</div>
               </div>
-              <div class="line" v-for="i in 6">
-                <div>鏈堝彴鍚嶇О</div>
-                <div>浣滀笟杞﹁締</div>
-                <div>浣滀笟閲�</div>
-                <div>浣滀笟鏃堕暱</div>
-                <div>棰勮瀹屾垚鏃堕棿</div>
-                <div>鏈堝彴鐘舵��</div>
+              <div class="line" v-for="item, i in dataList5" :key="i">
+                <div>{{ item.platformName }}</div>
+                <div>{{ item.carNo || '-' }}</div>
+                <div>{{ item.workNum }}{{ item.workNum ? '涓囨敮' : '-' }}</div>
+                <div>{{ item.workTime || '-' }}</div>
+                <div>{{ item.finishTime || '-' }}</div>
+                <div :style="{
+                  color: item.status == 1 ? '#869CC9' : item.status == 2 ? '#FE5501' : '#D2E0FF'
+                }">{{ item.statusTemp }}</div>
               </div>
             </div>
           </div>
@@ -162,34 +164,34 @@
             <div class="static_wrap">
               <div class="item">
                 <div class="name">绛惧埌鏁�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.inNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸插彨鍙�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.callNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸蹭綔涓�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.workingNum || 0 }}</div>
               </div>
               <div class="item">
                 <div class="name">宸插畬鎴�</div>
-                <div class="num">1</div>
+                <div class="num">{{ data6.finishNum || 0 }}</div>
               </div>
             </div>
             <div class="echart_wrap">
               <div class="echart3" id="echart3"></div>
             </div>
             <div class="list">
-              <div class="line" v-for=" i in 7">
+              <div class="line" v-for="item, i in data6.platformLogList">
                 <div class="time_wrap">
-                  <div class="time">12.40</div>
+                  <div class="time" v-if="item.createDate">{{ item.createDate.slice(11, 16) }}</div>
                   <div class="sp"></div>
                   <div class="dian"></div>
                 </div>
-                <div class="id_card">鐨朅12313</div>
+                <div class="id_card">{{ item.carCodeFront }}</div>
                 <div class="status">寮�濮嬩綔涓�</div>
-                <div class="desc">鎺掗槦绛夊緟鍙彿</div>
+                <div class="desc">{{ item.content }}</div>
               </div>
             </div>
           </div>
@@ -242,6 +244,14 @@
 import dayjs from 'dayjs'
 import ChargeRate from '@/components/ChargeRate.vue'
 import * as echarts from 'echarts'
+import {
+  cnplatformGroupFinish,
+  cnplatformDuration,
+  cnplatformWorkData,
+  cncenterData,
+  cncarWorkSituation,
+  cnworkEfficiency,
+} from '@/api'
 
 
 const weekMap = ['鏄熸湡鏃�', '鏄熸湡涓�', '鏄熸湡浜�', '鏄熸湡涓�', '鏄熸湡鍥�', '鏄熸湡浜�', '鏄熸湡鍏�',]
@@ -275,11 +285,7 @@
         labelLine: {
           show: false
         },
-        data: [
-          { value: 1048, name: 'Search Engine' },
-          { value: 735, name: 'Direct' },
-          { value: 580, name: 'Email' }
-        ]
+        data: dataList1.value
       }
     ]
   }
@@ -336,7 +342,7 @@
       axisTick: {
         show: false,
       },
-      data: ['2017', '2018', '2019', '2020', '2021', '2022', '2023',],
+      data: dataList3.value.map(i => i.workTime),
     }],
     yAxis: [
       {
@@ -424,7 +430,7 @@
           shadowColor: 'rgba(124,248,255, 0)',
           shadowBlur: 20
         },
-        data: [393, 438, 485, 631, 389, 224, 287]
+        data: dataList3.value.map(i => i.workNum)
       },
       {
         name: '绱浣滀笟閲�',
@@ -452,7 +458,7 @@
           },
           barBorderRadius: [30, 30, 0, 0],
         },
-        data: [393, 438, 485, 631, 689, 524, 687]
+        data: dataList3.value.map(i => i.totalWorkNum)
       },
     ]
   }
@@ -493,6 +499,13 @@
       offset: 1,
       color: '#61d3f9'
     }])]
+  const temp = []
+  temp.push({ name: '棰勭害鏁�', value: data6.value.reservationNum || 0 })
+  temp.push({ name: '宸茶繘鍦�', value: data6.value.inNum || 0 })
+  temp.push({ name: '宸蹭綔涓�', value: data6.value.workingNum || 0 })
+  temp.push({ name: '宸茬鍦�', value: data6.value.leaveNum || 0 })
+  console.log('temp', temp);
+  
   const option = {
     color: colors,
     tooltip: {
@@ -519,12 +532,7 @@
           borderWidth: 0,
           borderColor: '#fff'
         },
-        data: [
-          { value: 100, name: '棰勭害鏁�', },
-          { value: 50, name: '宸茶繘鍦�' },
-          { value: 20, name: '宸蹭綔涓�' },
-          { value: 30, name: '宸茬鍦�' },
-        ]
+        data: temp
       },
       {
         type: 'funnel',
@@ -570,12 +578,7 @@
             opacity: 1
           }
         },
-        data: [
-          { value: 100, name: '棰勭害鏁�', },
-          { value: 50, name: '宸茶繘鍦�' },
-          { value: 20, name: '宸蹭綔涓�' },
-          { value: 30, name: '宸茬鍦�' },
-        ]
+        data: temp
       },
     ]
   }
@@ -585,13 +588,102 @@
   })
 }
 
+const dataList1 = ref([])
+const data1 = ref(0)
+const getData1 = () => {
+  cnplatformGroupFinish().then(res => {
+    const result = res.data || []
+    let count = 0
+    dataList1.value = result.map(i => {
+      count += i.finishData
+      return {
+        value: i.finishData,
+        name: i.platformGroupName
+      }
+    })
+    data1.value = count
+    initEchart1()
+  })
+}
+const dataList2 = ref([])
+const getData2 = () => {
+  cnplatformDuration().then(res => {
+    const result = res.data || []
+    dataList2.value = result.map(item => {
+      if (item.workTotalTime) {
+        if (item.workTotalTime > 60) {
+          item.workTotalTimeT = (item.workTotalTime / 60).toFixed(0) + '灏忔椂' + item.workTotalTime % 60 + '鍒嗛挓'
+        } else {
+          item.workTotalTimeT = item.workTotalTime
+        }
+      }
+      item.rate = ((item.workTotalTime / item.openTotalTime) * 30).toFixed(0)
+      return item
+    })
+  })
+}
+
+const dataList3 = ref([])
+const activeTab3 = ref(1)
+const tabClick3 = (val) => {
+  activeTab3.value = val
+  getData3()
+}
+const getData3 = () => {
+  cnworkEfficiency({ type: activeTab3.value }).then(res => {
+    const result = res.data
+    dataList3.value = result
+    initEchart2()
+  })
+}
+const data4 = ref({})
+const getData4 = () => {
+  cncenterData().then(res => {
+    const result = res.data
+    data4.value = result
+  })
+}
+const dataList5 = ref([])
+const getData5 = () => {
+  cnplatformWorkData().then(res => {
+    const result = res.data || []
+    dataList5.value = result.map(i => {
+      i.statusTemp = i.status == 0 ? '浣滀笟涓�' : i.status == 1 ? '绌洪棽涓�' : '浣滀笟瓒呮椂'
+      if (i.workTime) {
+        if (item.workTime > 60) {
+          item.workTime = (item.workTime / 60).toFixed(0) + 'h' + item.workTime % 60 + 'm'
+        } else {
+          item.workTime = item.workTime
+        }
+      }
+      i.finishTime = dayjs(i.finishTime).format('HH:mm')
+      return i
+    })
+  })
+}
+
+const data6 = ref({})
+const getData6 = () => {
+  cncarWorkSituation().then(res => {
+    const result = res.data
+    data6.value = result
+    initEchart3()
+  })
+}
 
 
 onMounted(() => {
   // initEnergy()
-  initEchart1()
-  initEchart2()
-  initEchart3()
+  getData1()
+  getData2()
+  getData3()
+  getData4()
+  getData5()
+  getData6()
+
+  // initEchart1()
+  // initEchart2()
+  // initEchart3()
 })
 
 
@@ -613,7 +705,6 @@
     .left_box_one {
       width: 100%;
       margin-bottom: 20px;
-      border: 1px solid;
 
       .car_static {
         display: flex;
@@ -692,7 +783,6 @@
       .list {
         padding: 20px 24px 4px;
         height: 227px;
-        border: 1px solid;
 
         .line {
           display: flex;
@@ -715,15 +805,21 @@
           .id_card {
             color: #DBEAEA;
             font-weight: 500;
-            margin-right: 14px;
+            margin-right: 2px;
             font-size: 14px;
+            width: 80px;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
           }
 
           .num {
             font-weight: 500;
+            width: 82px;
+            text-align: right;
             font-size: 13px;
             color: #DBEAEA;
-            margin-left: 15px;
+            margin-left: 2px;
           }
 
           .wrap {
@@ -1161,6 +1257,10 @@
       margin: 0 6px;
     }
 
+    .tab {
+      cursor: pointer;
+    }
+
     .active {
       color: #0094eb;
     }

--
Gitblit v1.9.3