From 5309f0aae4dc789cee92a8d7de4985c22d6ce259 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 19 三月 2024 17:32:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/home/data-rank/index.vue                                      |    6 
 src/views/screen/components/wrapper-title/index.vue                     |   28 
 src/views/system/check-result/index.vue                                 |   33 
 src/views/home/data-view/components/data-hola.vue                       |    6 
 src/api/platform/video-monitor.js                                       |   44 +
 src/views/screen/components/screen-wrapper/index.vue                    |   30 
 src/views/screen/components/screen-map/index.vue                        |  154 ++++
 src/views/system/check-rule/index.vue                                   |  119 +++
 src/views/screen/components/screen-face/index.vue                       |   87 --
 src/views/screen/components/screen-video/index.vue                      |  129 +++
 src/api/platform/vehicle-data-monitor.js                                |   44 +
 src/views/system/face/index.vue                                         |    6 
 src/views/screen/components/screen-examine/components/examine-hola.vue  |  157 ++++
 src/views/system/video/index.vue                                        |   51 
 src/views/screen/components/screen-examine/components/examine-chart.vue |   71 +
 src/api/platform/check-result.js                                        |    8 
 src/views/system/data-manage/index.vue                                  |   55 +
 src/views/screen/components/screen-car/index.vue                        |  117 +++
 src/views/system/car/index.vue                                          |    6 
 src/views/screen/components/screen-examine/index.vue                    |    5 
 src/views/system/publish/index.vue                                      |  145 +++
 src/views/system/work-order/index.vue                                   |    1 
 src/views/system/recovery/index.vue                                     |   11 
 src/views/system/check-result/city/index.vue                            |  509 ++++++++++++++
 src/views/home/data-view/index.vue                                      |    6 
 src/views/system/contract/index.vue                                     |    4 
 src/views/home/data-view/components/data-icon.vue                       |    6 
 src/views/system/vehicle-data-monitor/index.vue                         |  316 ++++++++
 28 files changed, 1,967 insertions(+), 187 deletions(-)

diff --git a/src/api/platform/check-result.js b/src/api/platform/check-result.js
index 8f25d9a..0563673 100644
--- a/src/api/platform/check-result.js
+++ b/src/api/platform/check-result.js
@@ -43,6 +43,14 @@
   })
 }
 
+// 鍙戝竷鑰冩牳缁撴灉
+export function publishCheckResult(id) {
+  return request({
+    url: '/check-result/publish/' + id,
+    method: 'put'
+  })
+}
+
 // 鎻愪氦浜哄伐鍒嗘暟
 export function manualScore(data) {
   return request({
diff --git a/src/api/platform/vehicle-data-monitor.js b/src/api/platform/vehicle-data-monitor.js
new file mode 100644
index 0000000..3be6f2c
--- /dev/null
+++ b/src/api/platform/vehicle-data-monitor.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ鍗″彛杩囪溅鏁版嵁涓�鑷存�у垪琛�
+export function listPlatform(query) {
+  return request({
+    url: '/platform/platform/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ鍗″彛杩囪溅鏁版嵁涓�鑷存�ц缁�
+export function getPlatform(id) {
+  return request({
+    url: '/platform/platform/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板鍗″彛杩囪溅鏁版嵁涓�鑷存��
+export function addPlatform(data) {
+  return request({
+    url: '/platform/platform',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼鍗″彛杩囪溅鏁版嵁涓�鑷存��
+export function updatePlatform(data) {
+  return request({
+    url: '/platform/platform',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎鍗″彛杩囪溅鏁版嵁涓�鑷存��
+export function delPlatform(id) {
+  return request({
+    url: '/platform/platform/' + id,
+    method: 'delete'
+  })
+}
diff --git a/src/api/platform/video-monitor.js b/src/api/platform/video-monitor.js
new file mode 100644
index 0000000..ca14d0f
--- /dev/null
+++ b/src/api/platform/video-monitor.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ璁惧璧勪骇鍒楄〃
+export function listMonitor(query) {
+  return request({
+    url: '/system/video/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ璁惧璧勪骇璇︾粏
+export function getMonitor(id) {
+  return request({
+    url: '/system/video/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板璁惧璧勪骇
+export function addMonitor(data) {
+  return request({
+    url: '/system/videor',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼璁惧璧勪骇
+export function updateMonitor(data) {
+  return request({
+    url: '/system/video',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎璁惧璧勪骇
+export function delMonitor(id) {
+  return request({
+    url: '/system/video/' + id,
+    method: 'delete'
+  })
+}
diff --git a/src/views/home/data-rank/index.vue b/src/views/home/data-rank/index.vue
index 31d6e40..5a63d26 100644
--- a/src/views/home/data-rank/index.vue
+++ b/src/views/home/data-rank/index.vue
@@ -4,7 +4,7 @@
     <el-card class="data-card" :body-style="{ height: '100%' }">
       <div class="card-content">
         <div class="title-container">
-          <h1>杩愮淮鍗曚綅杩濈害璐d换鎺掑悕</h1>
+          <h1>杩愮淮鍗曚綅瓒呮湡璐d换鏁版帓鍚�</h1>
           <div class="more-button">
             <span>鏇村</span>
             <i class="el-icon-arrow-right"></i>
@@ -13,7 +13,7 @@
         <el-table :data="tableData" style="width: 100%" height="350">
           <el-table-column prop="name" label="鍗曚綅" align="center">
           </el-table-column>
-          <el-table-column prop="num" label="杩濈害鏁�" align="center">
+          <el-table-column prop="num" label="瓒呮湡鏁�" align="center">
           </el-table-column>
         </el-table>
       </div>
@@ -141,4 +141,4 @@
 .data-table {
   width: 100%;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/home/data-view/components/data-hola.vue b/src/views/home/data-view/components/data-hola.vue
index 3ea7044..57afcc4 100644
--- a/src/views/home/data-view/components/data-hola.vue
+++ b/src/views/home/data-view/components/data-hola.vue
@@ -50,8 +50,8 @@
   data1: '宸ュ崟鏁�',
   data2: '鎭㈠鏁�',
   data3: '寰呮仮澶嶆暟',
-  data4: '浜х敓杩濈害浜嬮」鏁�',
-  data5: '浜х敓杩濈害璐d换鏁�',
+  data4: '瓒呮湡寰呭鐞嗘暟',
+  data5: '瓒呮湡璐d换鏁�',
 }
 export default {
   props: {
@@ -131,4 +131,4 @@
     height: 100%;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/home/data-view/components/data-icon.vue b/src/views/home/data-view/components/data-icon.vue
index c793f56..e11e88e 100644
--- a/src/views/home/data-view/components/data-icon.vue
+++ b/src/views/home/data-view/components/data-icon.vue
@@ -22,8 +22,8 @@
   data1: '宸ュ崟鏁�',
   data2: '鎭㈠鏁�',
   data3: '寰呮仮澶嶆暟',
-  data4: '浜х敓杩濈害浜嬮」鏁�',
-  data5: '浜х敓杩濈害璐d换鏁�',
+  data4: '瓒呮湡寰呭鐞嗘暟',
+  data5: '瓒呮湡璐d换鏁�',
 }
 
 
@@ -157,4 +157,4 @@
     text-indent: 3px;
   }
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/home/data-view/index.vue b/src/views/home/data-view/index.vue
index 948df3f..54e595c 100644
--- a/src/views/home/data-view/index.vue
+++ b/src/views/home/data-view/index.vue
@@ -53,8 +53,8 @@
         { id: 1, type: '宸ュ崟鏁�', num: 523, },
         { id: 2, type: '鎭㈠鏁�', num: 50, },
         { id: 3, type: '寰呮仮澶嶆暟', num: 523, },
-        { id: 4, type: '浜х敓杩濈害浜嬮」鏁�', num: 123, },
-        { id: 5, type: '浜х敓杩濈害璐d换涔�', num: 512323, },
+        { id: 4, type: '瓒呮湡鏈鐞嗘暟', num: 123, },
+        { id: 5, type: '瓒呮湡璐d换鏁�', num: 512323, },
       ],
       iconList: [
         { icon: 'el-icon-tickets', color: '#7868d9' },
@@ -122,7 +122,7 @@
         {
           value: 2,
           label: '甯傚眬鏁版嵁'
-        }, 
+        },
       ],
       selectOption: 1
     }
diff --git a/src/views/screen/components/screen-car/index.vue b/src/views/screen/components/screen-car/index.vue
index 76da509..a8a6446 100644
--- a/src/views/screen/components/screen-car/index.vue
+++ b/src/views/screen/components/screen-car/index.vue
@@ -1,19 +1,130 @@
 <template>
   <div class="car-container">
-    <wrapper-title :title="'浜鸿劯鏁版嵁瓒嬪娍'"></wrapper-title>
+    <wrapper-title :title="'杞﹁締璁惧鏁版嵁'"></wrapper-title>
 
+    <div class="car-content">
+      <div class="data-plane">
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧鎬绘暟</div>
+              <div class="data-num">{{ formatNumber(1123) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧姝e父鏁�</div>
+              <div class="data-num">{{ formatNumber(200000) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧寮傚父鏁�</div>
+              <div class="data-num">{{ formatNumber(112313141111) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+      </div>
+
+    </div>
   </div>
+
 </template>
 
 <script>
 import WrapperTitle from '../wrapper-title/index';
-
 export default {
   name: 'ScreenCar',
   components: {
     WrapperTitle
   },
+  data() {
+    return {
+      dataList: {
+        state: { '01:00': 1000, '02:00': 2131, '03:00': 1233, '04:00': 2132, '05:00': 3211, '06:00': 213, '07:00': 123, '08:00': 566 },
+        state2: { '01:00': 900, '02:00': 1131, '03:00': 1533, '04:00': 2132, '05:00': 3011, '06:00': 13, '07:00': 113, '08:00': 566 },
+      },
+    }
+  },
+
+  methods: {
+    formatNumber(value) {
+      return new Intl.NumberFormat('en-US').format(value);
+    }
+  },
+
+  mounted() {
+  },
+  beforeDestroy() {
+  },
 }
 </script>
 
-<style lang="scss" scoped></style>
\ No newline at end of file
+<style lang="scss" scoped>
+.car-container {
+  width: 100%;
+  height: fit-content;
+  display: flex;
+  flex-direction: column;
+}
+
+.car-content {
+  flex: 1;
+  background: rgba(67, 102, 155, 0.3);
+  border: 1px solid rgba(47, 91, 157, 0.8);
+
+  .plane {
+    margin-bottom: 10px;
+  }
+
+  .data-plane {
+    .data-item {
+      width: 100%;
+      padding: 10px 20px;
+      display: flex;
+      align-items: center;
+
+      .data-icon {
+        width: 40px;
+        margin: 0 20px;
+      }
+
+      .data-info {
+        flex: 1;
+        color: #5b83bd;
+        font-size: 16px;
+
+        .data-num {
+          margin-top: 5px;
+          font-size: 24px;
+          color: #fff;
+        }
+      }
+    }
+  }
+
+  #faceChart {
+    width: 100%;
+    height: 300px;
+  }
+}
+
+.width-img {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/screen/components/screen-examine/components/examine-chart.vue b/src/views/screen/components/screen-examine/components/examine-chart.vue
index 0a6b467..32dfd86 100644
--- a/src/views/screen/components/screen-examine/components/examine-chart.vue
+++ b/src/views/screen/components/screen-examine/components/examine-chart.vue
@@ -1,61 +1,68 @@
 <template>
   <div class="chart-container">
-    <div class="rank-chart" ref="rankChart"></div>
+    <div class="rank-chart">
+      <div class="hola-item" v-for="item in dataList" :key="item.id">
+        <examine-hola :startColor="'#02C77E'" :endColor="'#017770'" :centerValue="item.value"
+          :bottomTitle="item.name"></examine-hola>
+      </div>
+    </div>
   </div>
 </template>
 
 <script>
-import * as echarts from 'echarts';
+import ExamineHola from './examine-hola.vue';
 let barChart = null;
 export default {
   name: 'ExamineChart',
+  components: {
+    ExamineHola
+  },
   data() {
     return {
-
+      dataList: [
+        {id: 1,name: '骞冲彴鍦ㄧ嚎鐜�', value: 60},
+        {id: 2,name: '涓�鏈轰竴妗e悎鏍肩巼', value: 20},
+        {id: 3,name: '妗f鑰冩牳姣�', value: 60},
+        {id: 4,name: '鐐逛綅鍦ㄧ嚎鐜�', value: 40},
+        {id: 5,name: '褰曞儚鍙敤鐜�', value: 80},
+        {id: 6,name: '閲嶇偣鐐逛綅褰曞儚鍙敤鐜�', value: 20},
+        {id: 7,name: '涓�鏈轰竴妗e悎鏍肩巼', value: 60},
+        {id: 8,name: '鍗¢棬杩囪溅鏁版嵁涓�鑷存��', value: 40},
+        
+      ]
     }
   },
 
   methods: {
-    initChart() {
-      const options = {
-        xAxis: {
-          type: 'category',
-          data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-        },
-        yAxis: {
-          type: 'value'
-        },
-        series: [
-          {
-            data: [120, 200, 150, 80, 70, 110, 130],
-            type: 'bar'
-          }
-        ]
-      }
-      barChart.setOption(options,true);
-    }
+
+
   },
   mounted() {
-    barChart = echarts.init(this.$refs.rankChart);
-
-    this.initChart();
-  },
-  beforeDestroy() {
-    if (lineChart) {
-      barChart.dispose();
-    }
-  },
-
+  }
 }
 </script>
 
 <style lang="scss" scoped>
 .chart-container {
   width: 100%;
-  height: 400px;
+  height: 100%;
+
   .rank-chart {
     width: 100%;
     height: 100%;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    align-content: space-between;
+    padding: 20px 0;
+    box-sizing: border-box;
+
+    .hola-item {
+      flex-shrink: 0;
+      width: 240px;
+      height: 200px;
+      color: #008000
+    }
   }
 }
 </style>
\ No newline at end of file
diff --git a/src/views/screen/components/screen-examine/components/examine-hola.vue b/src/views/screen/components/screen-examine/components/examine-hola.vue
new file mode 100644
index 0000000..e034ab7
--- /dev/null
+++ b/src/views/screen/components/screen-examine/components/examine-hola.vue
@@ -0,0 +1,157 @@
+<template>
+  <!-- 杩涘害鏉$被鍨嬬粍浠� -->
+  <div class="progressChart">
+    <div class="chart" id="progressChart" ref="chartRef"></div>
+    <label class="bottom le-0-font">{{ bottomTitle }}</label>
+  </div>
+</template>
+<script>
+import * as echarts from 'echarts';
+export default {
+  data() {
+    return {
+      series: [
+        {
+          type: 'gauge', // 浠〃鐩樼被鍨�
+          name: '绯诲垪鍚嶇О', // 鐢ㄤ簬tooltip鐨勬樉绀�
+          startAngle: 90, // 浠〃鐩樺紑濮嬭搴︼紙璁剧疆鑳屾櫙鍦嗙殑瑙掑害锛�
+          endAngle: -270, // 浠〃鐩樼粨鏉熻搴�
+          center: ['50%', '50%'], // 涓績鐐癸紙鍦嗗績鍧愭爣锛�
+          radius: '100%', // 鍦嗗ぇ灏忥紙浠〃鐩樺崐寰勶級
+          clockwise: true, // 浠〃鐩樺埢搴︽槸鍚︽槸椤烘椂閽堝闀�
+          // 浠〃鐩樿酱绾跨浉鍏抽厤缃�
+          axisLine: {
+            show: true,
+            roundCap: false, // 涓ょ鏄剧ず鎴愬渾褰紙鑳屾櫙鐜級
+            clip: false, // 鏄惁瑁佸壀瓒呭嚭閮ㄥ垎
+            // 璁剧疆鑳屾櫙鍦嗙幆鏍峰紡
+            lineStyle: {
+              width: 10, // 鍦嗙幆瀹藉害
+              color: [[1, '#002865']] // 鍦嗙幆鑳屾櫙鑹�
+            }
+          },
+          // 浠〃鐩樻寚閽�
+          pointer: {
+            show: false
+          },
+          // 杩涘害璁剧疆
+          progress: {
+            show: true,
+            overlap: false, // 澶氱粍鏁版嵁鏃惰繘搴︽潯鏄惁閲嶅彔
+            roundCap: true, // 鏄惁鍦ㄤ袱绔樉绀烘垚鍦嗗舰
+            clip: false, // 鏄惁瑁佹帀瓒呭嚭閮ㄥ垎
+            // 杩涘害鏉℃牱寮�
+            itemStyle: {
+              borderWidth: 0,
+              shadowColor: '',
+              color: {
+                type: 'linear',
+                x: 0,
+                y: 0,
+                x2: 0,
+                y2: 1,
+                colorStops: [
+                  {
+                    offset: 0,
+                    color: this.startColor // 0% 澶勭殑棰滆壊  '#02C77E'
+                  },
+                  {
+                    offset: 1,
+                    color: this.endColor // 100% 澶勭殑棰滆壊  '#017770'
+                  }
+                ],
+                global: false // 缂虹渷涓� false
+              }
+            }
+          },
+          // 浠〃鐩樺垎鍓茬嚎
+          splitLine: {
+            show: false
+          },
+          // 鍒诲害鏍峰紡
+          axisTick: {
+            show: false
+          },
+          // 鍒诲害鏍囩
+          axisLabel: {
+            show: false
+          },
+          title: {
+            show: false,
+            fontSize: 24
+          },
+          detail: {
+            // width: 50,
+            // height: 14,
+            fontSize: 14,
+            color: 'auto'
+          },
+          data: [
+            {
+              value: this.centerValue,
+              name: '345',
+              title: {},
+              detail: {
+                // 涓績title璁剧疆
+                offsetCenter: ['0%', '0%'],
+                color: '#01F8FF',
+                formatter: '{value}%'
+                // borderColor: '#01F8FF',
+                // borderRadius: 20,
+                // borderWidth: 1,
+              }
+            }
+          ],
+        }
+      ]
+    }
+  },
+  setup() { },
+  props: {
+    startColor: {
+      type: String,
+      default: ''
+    },
+    endColor: {
+      type: String,
+      default: ''
+    },
+    centerValue: {
+      type: [Number, String],
+      default: 0
+    },
+    bottomTitle: {
+      type: String,
+      default: ''
+    }
+  },
+  methods: {},
+  created() { },
+  mounted() {
+    let myChart = echarts.init(this.$refs['chartRef']) // 浣跨敤Id鏃犳硶瀹炵幇
+    myChart.setOption({
+      series: this.series
+    })
+  }
+}
+</script>
+<style lang="scss" scoped>
+.progressChart {
+  width: 100%;
+  height: 100%;
+
+  .chart {
+    width: 100%;
+    height: 75%;
+  }
+
+  .bottom {
+    display: inline-block;
+    width: 100%;
+    color: #01f8ff;
+    text-align: center;
+    font-size: 16px;
+    margin-top: 10px;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/screen/components/screen-examine/index.vue b/src/views/screen/components/screen-examine/index.vue
index 3e7ef83..5447573 100644
--- a/src/views/screen/components/screen-examine/index.vue
+++ b/src/views/screen/components/screen-examine/index.vue
@@ -1,10 +1,10 @@
 <template>
   <div class="examine-container">
-    <wrapper-title :title="'鑰冩牳鎴愮哗鏁版嵁'"></wrapper-title>
+    <wrapper-title :title="'鑰冩牳鏁版嵁'"></wrapper-title>
     <div class="examine-content">
       <div class="examine-wrapper">
         <examine-chart class="wrapper-item"></examine-chart>
-        <examine-table class="wrapper-item"></examine-table>
+        <!-- <examine-table class="wrapper-item"></examine-table> -->
       </div>
     </div>
   </div>
@@ -39,6 +39,7 @@
   position: relative;
 
   .examine-wrapper {
+    position: absolute;
     width: 100%;
     height: 100%;
     display: flex;
diff --git a/src/views/screen/components/screen-face/index.vue b/src/views/screen/components/screen-face/index.vue
index 978f2a5..cf1a29a 100644
--- a/src/views/screen/components/screen-face/index.vue
+++ b/src/views/screen/components/screen-face/index.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="face-container">
-    <wrapper-title :title="'浜鸿劯鏁版嵁瓒嬪娍'"></wrapper-title>
+    <wrapper-title :title="'浜鸿劯璁惧鏁版嵁'"></wrapper-title>
 
     <div class="face-content">
       <div class="data-plane">
@@ -10,8 +10,8 @@
               <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img">
             </div>
             <div class="data-info">
-              <div class="data-lable">鏄ㄦ棩浜鸿劯閲囬泦璁惧鎬绘暟</div>
-              <div class="data-num">{{formatNumber(1123)}}</div>
+              <div class="data-lable">璁惧鎬绘暟</div>
+              <div class="data-num">{{ formatNumber(1123) }}</div>
             </div>
           </div>
         </dv-border-box-13>
@@ -22,7 +22,7 @@
               <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
             </div>
             <div class="data-info">
-              <div class="data-lable">鏄ㄦ棩鎶撴媿鏁版嵁閲�</div>
+              <div class="data-lable">璁惧姝e父鏁�</div>
               <div class="data-num">{{ formatNumber(200000) }}</div>
             </div>
           </div>
@@ -34,13 +34,12 @@
               <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
             </div>
             <div class="data-info">
-              <div class="data-lable">鍘嗗彶鎶撴媿鏁版嵁閲�</div>
+              <div class="data-lable">璁惧寮傚父鏁�</div>
               <div class="data-num">{{ formatNumber(112313141111) }}</div>
             </div>
           </div>
         </dv-border-box-13>
       </div>
-      <div id="faceChart" ref="faceChart"></div>
     </div>
   </div>
 
@@ -48,8 +47,6 @@
 
 <script>
 import WrapperTitle from '../wrapper-title/index';
-import * as echarts from 'echarts';
-let lineChart = null;
 export default {
   name: 'ScreenFace',
   components: {
@@ -65,62 +62,6 @@
   },
 
   methods: {
-    initChart() {
-      const option = {
-        legend: {
-          right: 'right',
-          top: 'top',
-          orient: "vertical",
-          icon: 'rect',
-          data: [
-            {
-              name: '姝e父鏁�',
-              itemStyle: {
-                color: 'rgba(62, 144, 247, 1)'
-              }
-            },
-            {
-              name: '寮傚父鏁�',
-              itemStyle: {
-                color: 'rgba(85, 192, 191, 1)'
-              }
-            },
-          ],
-        },
-        grid: {
-          left: '2%',
-          right: '5%',
-          bottom: '5%',
-          top: '8%',
-          containLabel: true
-        },
-        tooltip: {},
-        xAxis: {
-          type: 'category',
-          data: Object.keys(this.dataList.state),
-        },
-        yAxis: {},
-        series: [
-          {
-            name: '浠婃棩',
-            data: Object.entries(this.dataList.state).map(([key, value]) => value),
-            type: 'line',
-            itemStyle: {
-              color: 'rgba(62, 144, 247, 1)'
-            }
-          },
-          {
-            name: '鏄ㄦ棩',
-            data: Object.entries(this.dataList.state2).map(([key, value]) => value),
-            type: 'line',
-            itemStyle: {
-              color: 'rgba(85, 192, 191, 1)'
-            }
-          }
-        ]
-      };
-      lineChart.setOption(option, true);
-    },
 
     formatNumber(value) {
       return new Intl.NumberFormat('en-US').format(value);
@@ -128,19 +69,21 @@
   },
 
   mounted() {
-    lineChart = echarts.init(this.$refs.faceChart);
-    this.initChart();
-  },
-  beforeDestroy() {
-    if (lineChart) {
-      lineChart.dispose();
-    }
+
   },
 }
 </script>
 
 <style lang="scss" scoped>
+.face-container {
+  width: 100%;
+  height: fit-content;
+  display: flex;
+  flex-direction: column;
+}
+
 .face-content {
+  flex: 1;
   background: rgba(67, 102, 155, 0.3);
   border: 1px solid rgba(47, 91, 157, 0.8);
 
@@ -151,7 +94,7 @@
   .data-plane {
     .data-item {
       width: 100%;
-      padding: 20px 20px;
+      padding: 10px 20px;
       display: flex;
       align-items: center;
 
diff --git a/src/views/screen/components/screen-map/index.vue b/src/views/screen/components/screen-map/index.vue
new file mode 100644
index 0000000..8a263a0
--- /dev/null
+++ b/src/views/screen/components/screen-map/index.vue
@@ -0,0 +1,154 @@
+<template>
+  <div class="map-container">
+    <wrapper-title :title="'鍖哄煙鍦板浘'"></wrapper-title>
+    <div class="map-content">
+      <div ref="map" class="map-style"></div>
+    </div>
+  </div>
+
+</template>
+
+<script>
+import * as echarts from 'echarts';
+import 'echarts-gl';
+import mapData from '@/assets/map/zigong.json';
+import WrapperTitle from '../wrapper-title/index';
+
+echarts.registerMap('zigong', mapData);
+console.log(mapData);
+let mapChart = null;
+let tempName = '';
+let observer = null;
+const mapConfig = {
+  series: [{
+    map: "zigong", //娉ㄥ唽鍦板浘鐨勫悕瀛�
+    type: "map3D",
+    bottom: 0,
+    left: 0,
+    top: 0,
+    right: 0,
+    itemStyle: {
+      color: "#4189f2", // 鑳屾櫙
+      opacity: 1, //閫忔槑搴�
+      borderWidth: 1, // 杈规瀹藉害
+      borderColor: "#fff", // 杈规棰滆壊
+      fontSize: 18, //
+    },
+
+    // 鏍囩
+    label: {
+      show: true,
+      color: "#fff", //鍦板浘鍒濆鍖栧尯鍩熷瓧浣撻鑹�
+      fontSize: 18,
+    },
+    // 鎺у埗鍣�
+    viewControl: {
+      beta: -30,
+      alpha: 90,
+      distance: 100,
+      maxBeta: 180,
+      panSensitivity: 0
+    },
+    // 榧犳爣绉诲叆鏃舵牱寮�
+    emphasis: {
+      itemStyle: {
+        color: "#F63545"
+      }
+    },
+
+    // 鏁版嵁
+    data: mapData.features.map((item) => {
+      return {
+        name: item.properties.name,
+        itemStyle: {
+          color: "#4189f2"
+        }
+      }
+    }),
+  }
+  ]
+
+};
+export default {
+  name: 'DataMap',
+  data() {
+    return {
+
+    }
+  },
+  components: {
+    WrapperTitle
+  },
+  methods: {
+    filterData(name) {
+      this.initConfig();
+      let temp = mapConfig.series[0].data.find(item => item.name === name);
+      temp.itemStyle.color = '#F63545';
+      mapChart.setOption(mapConfig, true);
+      this.$emit('filterData', name);
+    },
+    initConfig() {
+      mapConfig.series[0].data.forEach(item => {
+        item.itemStyle.color = '#4189f2';
+      });
+    },
+    // 鐩戝惉鍙樺寲
+    observe() {
+      if (!observer) {
+        observer = new ResizeObserver(entries => {
+          this.handleResize();
+        })
+      }
+      observer.observe(this.$refs.map);
+    },
+    // 绐楀彛鍙樻崲
+    handleResize() {
+      if (mapChart) {
+        mapChart.resize();
+      }
+    }
+  },
+  mounted() {
+    mapChart = echarts.init(this.$refs.map);
+    mapChart.setOption(mapConfig, true);
+    mapChart.on('click', (params) => {
+      if (tempName === params.name) {
+        tempName = '';
+        this.initConfig();
+        mapChart.setOption(mapConfig, true);
+        this.$emit('filterData', '');
+      } else {
+        tempName = params.name;
+        this.filterData(params.name);
+      }
+    });
+    this.observe();
+  },
+  beforeDestroy() {
+    if (observer) {
+      mapChart.dispose();
+      observer.unobserve(this.$refs.map);
+    }
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.map-container {
+  width: 100%;
+  flex: 1;
+  margin-bottom: 20px;
+  display: flex;
+  flex-direction: column;
+
+  .map-content {
+    flex: 1;
+    background: rgba(67, 102, 155, 0.3);
+  border: 1px solid rgba(47, 91, 157, 0.8);
+  }
+  .map-style {
+    width: 100%;
+    height: 100%;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/screen/components/screen-video/index.vue b/src/views/screen/components/screen-video/index.vue
new file mode 100644
index 0000000..3fa66d1
--- /dev/null
+++ b/src/views/screen/components/screen-video/index.vue
@@ -0,0 +1,129 @@
+<template>
+  <div class="video-container">
+    <wrapper-title :title="'瑙嗛璁惧鏁版嵁'"></wrapper-title>
+
+    <div class="video-content">
+      <div class="data-plane">
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon1.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧鎬绘暟</div>
+              <div class="data-num">{{ formatNumber(1123) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧姝e父鏁�</div>
+              <div class="data-num">{{ formatNumber(200000) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+
+        <dv-border-box-13 class="plane">
+          <div class="data-item">
+            <div class="data-icon">
+              <img src="@/assets/images/screen/icon/icon2.png" alt="" class="width-img">
+            </div>
+            <div class="data-info">
+              <div class="data-lable">璁惧寮傚父鏁�</div>
+              <div class="data-num">{{ formatNumber(112313141111) }}</div>
+            </div>
+          </div>
+        </dv-border-box-13>
+      </div>
+    </div>
+  </div>
+
+</template>
+
+<script>
+import WrapperTitle from '../wrapper-title/index';
+export default {
+  name: 'ScreenFace',
+  components: {
+    WrapperTitle
+  },
+  data() {
+    return {
+      dataList: {
+        state: { '01:00': 1000, '02:00': 2131, '03:00': 1233, '04:00': 2132, '05:00': 3211, '06:00': 213, '07:00': 123, '08:00': 566 },
+        state2: { '01:00': 900, '02:00': 1131, '03:00': 1533, '04:00': 2132, '05:00': 3011, '06:00': 13, '07:00': 113, '08:00': 566 },
+      },
+    }
+  },
+
+  methods: {
+
+    formatNumber(value) {
+      return new Intl.NumberFormat('en-US').format(value);
+    }
+  },
+
+  mounted() {
+
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.video-container {
+  width: 100%;
+  height: fit-content;
+  display: flex;
+  flex-direction: column;
+}
+
+.video-content {
+  flex: 1;
+  background: rgba(67, 102, 155, 0.3);
+  border: 1px solid rgba(47, 91, 157, 0.8);
+
+  .plane {
+    margin-bottom: 10px;
+  }
+
+  .data-plane {
+    .data-item {
+      width: 100%;
+      padding: 10px 20px;
+      display: flex;
+      align-items: center;
+
+      .data-icon {
+        width: 40px;
+        margin: 0 20px;
+      }
+
+      .data-info {
+        flex: 1;
+        color: #5b83bd;
+        font-size: 16px;
+
+        .data-num {
+          margin-top: 5px;
+          font-size: 24px;
+          color: #fff;
+        }
+      }
+    }
+  }
+
+  #faceChart {
+    width: 100%;
+    height: 300px;
+  }
+}
+
+.width-img {
+  width: 100%;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/screen/components/screen-wrapper/index.vue b/src/views/screen/components/screen-wrapper/index.vue
index 0dbff49..b314a67 100644
--- a/src/views/screen/components/screen-wrapper/index.vue
+++ b/src/views/screen/components/screen-wrapper/index.vue
@@ -1,11 +1,16 @@
 <template>
   <div class="wrapper-container">
+
     <div class="wrapper-content">
       <div class="left-container wrapper">
         <screen-face></screen-face>
+        <screen-car></screen-car>
+        <screen-video></screen-video>
       </div>
-      <div class="center-container wrapper">
+      <div class="center-container center-wrapper">
+        <screen-map></screen-map>
         <screen-detection></screen-detection>
+
       </div>
       <div class="right-container wrapper">
         <screen-examine></screen-examine>
@@ -18,12 +23,18 @@
 import ScreenFace from '../screen-face/index';
 import ScreenDetection from '../screen-detection/index';
 import ScreenExamine from '../screen-examine/index';
+import ScreenVideo from '../screen-video/index';
+import ScreenCar from '../screen-car/index';
+import ScreenMap from '../screen-map/index';
 export default {
   name: 'ScreenWrapper',
   components: {
     ScreenFace,
     ScreenDetection,
     ScreenExamine,
+    ScreenVideo,
+    ScreenCar,
+    ScreenMap
   },
 }
 </script>
@@ -36,33 +47,44 @@
   top: 0;
   left: 0;
   z-index: 1;
+
   .wrapper-content {
     width: 100%;
     height: calc(100% - 100px);
     margin-top: 100px;
-    border: 1px solid red;
     position: relative;
     box-sizing: border-box;
     padding: 20px;
     display: flex;
     align-items: center;
+    justify-content: space-between;
   }
 }
 
 .wrapper {
-  width: 33.3%;
+  width: 27%;
   height: 100%;
   box-sizing: border-box;
   padding: 0 10px;
-  border: 1px solid red;
   display: flex;
   flex-direction: column;
   justify-content: space-between;
+
   &:first-of-type {
     padding-left: 0;
   }
+
   &:last-of-type {
     padding-right: 0;
   }
 }
+.center-wrapper {
+  width: 46%;
+  height: 100%;
+  box-sizing: border-box;
+  padding: 0 10px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
 </style>
\ No newline at end of file
diff --git a/src/views/screen/components/wrapper-title/index.vue b/src/views/screen/components/wrapper-title/index.vue
index 9e7593f..81de806 100644
--- a/src/views/screen/components/wrapper-title/index.vue
+++ b/src/views/screen/components/wrapper-title/index.vue
@@ -1,6 +1,14 @@
 <template>
   <div class="title-container">
     <span class="title">{{ title }}</span>
+
+    <div class="more-button">
+      <dv-border-box-12>
+        <div class="button-text">
+          璇︽儏
+        </div>
+      </dv-border-box-12>
+    </div>
   </div>
 </template>
 
@@ -11,6 +19,9 @@
     title: {
       type: String,
       required: true
+    },
+    path: {
+      type: String,
     }
   }
 }
@@ -25,6 +36,7 @@
   width: 100%;
   position: relative;
   display: flex;
+  justify-content: space-between;
   align-items: center;
   margin-bottom: 10px;
 
@@ -36,5 +48,21 @@
     font-size: 20px;
     font-style: italic;
   }
+
+  .more-button {
+    width: 100px;
+    height: 40px;
+    cursor: pointer;
+
+    .button-text {
+      width: 100%;
+      height: 100%;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      color: #ffffff81;
+      font-size: 20px;
+    }
+  }
 }
 </style>
\ No newline at end of file
diff --git a/src/views/system/car/index.vue b/src/views/system/car/index.vue
index 91b35be..3fc493a 100644
--- a/src/views/system/car/index.vue
+++ b/src/views/system/car/index.vue
@@ -22,7 +22,7 @@
               <p>寮傚父鏁�</p >
             </div>
             <div class="dashboard-item">
-              <h3 style="color: #7868d9">{{ totalViews }}</h3>
+              <h3>{{ totalViews }}</h3>
               <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
             </div>
             <div class="dashboard-item">
@@ -95,7 +95,7 @@
 
     <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" />
+      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" width="180px"/>
       <el-table-column label="璁惧鍚嶇О" align="center" prop="name" />
       <el-table-column label="涓婃姤閮ㄩ棬" align="center" prop="deptName" />
       <el-table-column label="璁惧鐘舵��" align="center" prop="onState">
@@ -110,7 +110,7 @@
         </template>
       </el-table-column>
       <el-table-column label="寮傚父鍘熷洜" align="center" prop="reason" />
-      <el-table-column label="瀹夎鏃堕棿" align="center" prop="installedTime" width="180">
+      <el-table-column label="鏁版嵁鏃堕棿" align="center" prop="installedTime" width="180">
       </el-table-column>
       <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" />
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
diff --git a/src/views/system/check-result/city/index.vue b/src/views/system/check-result/city/index.vue
new file mode 100644
index 0000000..20982a9
--- /dev/null
+++ b/src/views/system/check-result/city/index.vue
@@ -0,0 +1,509 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="鑰冩牳瀵硅薄" prop="checkUnitId">
+        <el-input
+          v-model="queryParams.checkUnitName"
+          placeholder="璇疯緭鍏ヨ�冩牳瀵硅薄"
+          clearable
+          @clear="handleQuery"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鑰冩牳棰戠巼" prop="frequency">
+        <el-select v-model="queryParams.frequency" clearable @clear="handleQuery" placeholder="鑰冩牳棰戠巼">
+          <el-option
+            label="鏈堝害鑰冩牳"
+            value="1">
+          </el-option>
+          <el-option
+            label="瀛e害鑰冩牳"
+            value="2">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鑰冩牳鑼冨洿" prop="examineRange">
+        <el-select v-model="queryParams.examineRange" clearable  @clear="handleQuery" placeholder="鑰冩牳鑼冨洿">
+          <el-option
+            label="甯傚眬鑰冩牳"
+            value="2">
+          </el-option>
+          <el-option
+            label="鍒嗗眬鑰冩牳"
+            value="1">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鑰冩牳鏃堕棿">
+        <el-date-picker
+          v-model="daterangeCheckTime"
+          style="width: 240px"
+          value-format="yyyy-MM-dd HH:mm:ss"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="寮�濮嬫棩鏈�"
+          end-placeholder="缁撴潫鏃ユ湡"
+        ></el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          type="primary"-->
+<!--          plain-->
+<!--          icon="el-icon-plus"-->
+<!--          size="mini"-->
+<!--          @click="handleAdd"-->
+<!--          v-hasPermi="['system:checkResult:add']"-->
+<!--        >鏂板</el-button>-->
+<!--      </el-col>-->
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+        >鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-card class="box-card" v-for="(item) in checkResultList">
+      <div slot="header" class="clearfix">
+        <span>{{ "杞﹁締鑰冩牳" }}</span>
+        <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">璇︽儏</el-button>
+      </div>
+      <div class="text item">鑰冩牳鏍囩<span class="time">{{ "鍥涘尯澶╃綉浜屾湡" }}</span></div>
+      <div class="text item">鑰冩牳鑼冨洿<span class="time">{{ "甯傚尯鑰冩牳" }}</span></div>
+      <div class="text item">鑰冩牳棰戠巼<span class="time">{{ "瀛e害" }}</span></div>
+      <div class="text item">鑰冩牳鏃堕棿
+        <span class="time">{{ item.checkTime }}</span>
+        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1">纭鍙戝竷</el-button>
+        <el-button size="small" round style="float: right;" v-show="item.publish == 1" disabled="true">宸插彂甯�</el-button>
+      </div>
+    </el-card>
+
+    <!-- <el-table v-loading="loading" :data="checkResultList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="鑰冩牳瀵硅薄" align="center" prop="checkUnitName" />
+      <el-table-column label="鑰冩牳" align="center" prop="examineName" />
+      <el-table-column label="鑰冩牳鑼冨洿":formatter="examineRangeFormatter" align="center" prop="examineRange" />
+      <el-table-column label="鑰冩牳棰戠巼" :formatter="frequencyFormatter" align="center" prop="frequency" />
+      <el-table-column label="鑰冩牳鍒嗘暟" falign="center" prop="checkScore" />
+      <el-table-column label="鑰冩牳鏃堕棿" align="center" prop="checkTime" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-view"
+            @click="handleDetail(scope.row)"
+          >璇︽儏</el-button>
+         <el-button
+           type="text"
+           size="mini"
+           icon="el-icon-edit"
+           @click="handleSetManualScore(scope.row)"
+         >浜哄伐鎵撳垎</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+          >鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    /> -->
+
+    <el-dialog :title="detailName" :visible.sync="detail" width="800px" append-to-body>
+      <el-form label-position="left" inline class="table-expand">
+        <el-collapse v-model="activeNames" @change="handleChange">
+          <el-collapse-item  name="1">
+            <template slot="title">
+              <div style="width: 10%">鑷祦浜曞尯</div><div style="margin-left: 75%">寰楀垎:0.97</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item  name="2">
+            <template slot="title">
+              <div style="width: 10%">璐′簳鍖�</div><div style="margin-left: 75%">寰楀垎:0.94</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item title="澶у畨鍖�" name="3">
+            <template slot="title">
+              <div style="width: 10%">澶у畨鍖�</div><div style="margin-left: 75%">寰楀垎:0.95</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item title="娌挎哗鍖�" name="4">
+            <template slot="title">
+              <div style="width: 10%">娌挎哗鍖�</div><div style="margin-left: 75%">寰楀垎:0.94</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item title="鑽e幙" name="5">
+            <template slot="title">
+              <div style="width: 10%">鑽e幙</div><div style="margin-left: 75%">寰楀垎:0.93</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item title="瀵岄『鍖�" name="6">
+            <template slot="title">
+              <div style="width: 10%">瀵岄『鍖�</div><div style="margin-left: 75%">寰楀垎:0.95</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+          <el-collapse-item title="楂樻柊鍖�" name="7">
+            <template slot="title">
+              <div style="width: 10%">楂樻柊鍖�</div><div style="margin-left: 75%;">寰楀垎:0.96</div>
+            </template>
+            <div>瑙嗗浘搴撳鎺ョǔ瀹氭��:95.32%</div>
+            <div>鐐逛綅鍦ㄧ嚎鐜�:96.46%</div>
+            <div>鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼:97.26%</div>
+            <div>杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�:92.33%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�:94.26%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�:94.78%</div>
+            <div>杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�:93.98%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�:95.86%</div>
+            <div>杞﹁締鍗″彛璁惧url鍙敤鎬�:94.56%</div>
+            <div>杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�:91.77%</div>
+          </el-collapse-item>
+        </el-collapse>
+      </el-form>
+    </el-dialog>
+
+    <!-- 娣诲姞鎴栦慨鏀硅�冩牳缁撴灉瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore, publishCheckResult } from "@/api/platform/check-result";
+
+export default {
+  name: "CheckResult",
+  data() {
+    return {
+      detailTitle: '',
+      detailOpen: false,
+      // 鏄惁鏄剧ず璇︽儏
+      detail: false,
+      // 璇︽儏鏍囬
+      detailName: "鑰冩牳缁撴灉",
+      activeNames: ['1'],
+      manualScoreOpen: false,
+      manualScoreForm: {},
+      manualScoreTitle: '',
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鑰冩牳缁撴灉琛ㄦ牸鏁版嵁
+      checkResultList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 閫昏緫鍒犻櫎鏃堕棿鑼冨洿
+      daterangeCheckTime: [],
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        checkUnitId: null,
+        checkTime: null,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    handleChange(val) {
+      console.log(val);
+    },
+    frequencyFormatter(row) {
+      if (row.frequency === "1") {
+        return "鏈堝害鑰冩牳"
+      }
+      if (row.frequency === "2") {
+        return "瀛e害鑰冩牳"
+      }
+    },
+    examineRangeFormatter(row) {
+      if (row.examineRange === "1") {
+        return "鍒嗗眬鑰冩牳"
+      }
+      if (row.examineRange === "2") {
+        return "甯傚眬鑰冩牳"
+      }
+    },
+    /** 鏌ヨ鑰冩牳缁撴灉鍒楄〃 */
+    getList() {
+      this.loading = true;
+      if (null != this.daterangeCheckTime && '' != this.daterangeCheckTime) {
+        this.queryParams["start"] = this.daterangeCheckTime[0];
+        this.queryParams["end"] = this.daterangeCheckTime[1];
+      }
+      listCheckResult(this.queryParams).then(response => {
+        this.checkResultList = response.data;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        checkUnitId: null,
+        checkPublishId: null,
+        checkScore: null,
+        systemScore: null,
+        manualScore: null,
+        checkTime: null,
+        createTime: null,
+        updateTime: null,
+        deleted: null
+      };
+      this.resetForm("form");
+    },
+    cancelManualScore() {
+      this.manualScoreForm = {};
+      this.manualScoreTitle = "";
+      this.manualScoreOpen = false;
+    },
+    submitManualScore() {
+      if (! this.manualScoreForm.manualScore) {
+        this.$modal.msgWarning("璇峰~鍐欏垎鏁�");
+        return
+      }
+      manualScore(this.manualScoreForm).then(res => {
+        this.$modal.msgSuccess("鎿嶄綔鎴愬姛");
+        this.cancelManualScore();
+        this.getList();
+      })
+    },
+    handleSetManualScore(row) {
+      this.manualScoreForm.id = row.id;
+      this.manualScoreForm.manualScore = parseInt(row.manualScore);
+      this.manualScoreTitle = row.checkUnitName + '浜哄伐鎵撳垎'
+      this.manualScoreOpen = true;
+    },
+    handleDetail(row) {
+      this.detail = row;
+      this.detail.carOnlineRate =  '97%';
+      this.detailTitle = row.checkUnitName + '鑰冩牳缁撴灉';
+      this.detailOpen = true;
+
+    },
+    handlePublish(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍙戝竷鑰冩牳缁撴灉缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return publishCheckResult(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍙戝竷鎴愬姛");
+      }).catch(() => {});
+
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.daterangeCheckTime = [];
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鑰冩牳缁撴灉";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getCheckResult(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鑰冩牳缁撴灉";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateCheckResult(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addCheckResult(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鑰冩牳缁撴灉缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return delCheckResult(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/checkResult/export', {
+        ...this.queryParams
+      }, `checkResult_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style>
+  .text {
+    font-size: 14px;
+  }
+  .time {
+    font-size: 13px;
+    color: #999;
+    margin-left: 10px;
+  }
+  .item {
+    margin-bottom: 18px;
+  }
+  .clearfix:before,
+  .clearfix:after {
+    display: table;
+    content: "";
+  }
+  .clearfix:after {
+    clear: both
+  }
+  .box-card {
+    width: 480px;
+  }
+
+</style>
diff --git a/src/views/system/check-result/index.vue b/src/views/system/check-result/index.vue
index b8ed730..572f380 100644
--- a/src/views/system/check-result/index.vue
+++ b/src/views/system/check-result/index.vue
@@ -93,7 +93,11 @@
       <div class="text item">鑰冩牳鑼冨洿<span class="time">{{ item.examineRange }}</span></div>
       <div class="text item">鑰冩牳棰戠巼<span class="time">{{ item.frequency }}</span></div>
       <div class="text item">鑰冩牳鍒嗘暟<span class="time">{{ item.checkScore }}</span></div>
-      <div class="text item">鑰冩牳鏃堕棿<span class="time">{{ item.checkTime }}</span></div>
+      <div class="text item">鑰冩牳鏃堕棿
+        <span class="time">{{ item.checkTime }}</span>
+        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish != 1">纭鍙戝竷</el-button>
+        <el-button size="small" round style="float: right;" @click="handlePublish(item)" v-show="item.publish == 1">宸插彂甯�</el-button>
+      </div>
     </el-card>
 
     <!-- <el-table v-loading="loading" :data="checkResultList" @selection-change="handleSelectionChange">
@@ -194,6 +198,13 @@
         <el-descriptions-item>
           <template slot="label">
             <i class="el-icon-medal"></i>
+            杞﹁締鐐逛綅鍦ㄧ嚎鐜�
+          </template>
+          <el-tag type="danger" size="small">{{detail.carOnlineRate}}</el-tag>
+        </el-descriptions-item>
+        <el-descriptions-item>
+          <template slot="label">
+            <i class="el-icon-medal"></i>
             缁煎悎鍒嗘暟
           </template>
           <el-tag type="danger" size="small">{{detail.systemScore}}</el-tag>
@@ -214,7 +225,7 @@
 </template>
 
 <script>
-import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore } from "@/api/platform/check-result";
+import { listCheckResult, getCheckResult, delCheckResult, addCheckResult, updateCheckResult,manualScore, publishCheckResult } from "@/api/platform/check-result";
 
 export default {
   name: "CheckResult",
@@ -222,7 +233,9 @@
     return {
       detailTitle: '',
       detailOpen: false,
-      detail: {},
+      detail: {
+
+      },
       manualScoreOpen: false,
       manualScoreForm: {},
       manualScoreTitle: '',
@@ -338,8 +351,20 @@
     },
     handleDetail(row) {
       this.detail = row;
+      this.detail.carOnlineRate =  '97%';
       this.detailTitle = row.checkUnitName + '鑰冩牳缁撴灉';
       this.detailOpen = true;
+
+    },
+    handlePublish(row) {
+      let text = row.publish == 1 ? '鍙栨秷鍙戝竷' : '鍙戝竷';
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭' + text + '鑰冩牳缁撴灉缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return publishCheckResult(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess(text + "鎴愬姛");
+      }).catch(() => {});
 
     },
     /** 鎼滅储鎸夐挳鎿嶄綔 */
@@ -437,4 +462,4 @@
   .box-card {
     width: 480px;
   }
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/system/check-rule/index.vue b/src/views/system/check-rule/index.vue
index b36c119..b813712 100644
--- a/src/views/system/check-rule/index.vue
+++ b/src/views/system/check-rule/index.vue
@@ -81,9 +81,24 @@
         </template>
       </el-table-column>
       <el-table-column label="瑙勫垯鎻忚堪" align="center" prop="ruleDetail" />
-        <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" />
-        <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" />
+      <el-table-column label="瀹℃牳鐘舵��" align="center" prop="auditState">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.platform_audit_state" :value="scope.row.auditState"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="瀹℃牳浜�" align="center" prop="auditUser" />
+      <el-table-column label="瀹℃牳鏃堕棿" align="center" prop="auditTime" />
+      <el-table-column label="瀹℃牳鎰忚" align="center" prop="auditDescription" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
           <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-s-check"
+              @click="handleAudit(scope.row)"
+              v-hasPermi="['check:rule:audit']"
+            >瀹℃牳</el-button>
             <el-button
               size="mini"
               type="text"
@@ -107,7 +122,7 @@
             :limit.sync="queryParams.pageSize"
             @pagination="getList"
           />
-
+  <div>
     <!-- 娣诲姞鎴栦慨鏀硅�冩牳瑙勫垯瀵硅瘽妗� -->
     <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
@@ -125,7 +140,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="瑙勫垯鎻忚堪" prop="ruleDetail">
-          <el-input v-model="form.ruleDetail" type="textarea" show-word-limit maxlength="150" placeholder="璇疯緭鍏ヨ鍒欐弿杩�" />
+          <el-input v-model="form.ruleDetail" type="textarea" show-word-limit maxlength="150" placeholder="璇疯緭鍏ヨ鍒欐弿杩�"/>
         </el-form-item>
         <el-form-item label="鍙傛暟閰嶇疆" prop="ruleDetail">
           <div class="row-warp">
@@ -138,16 +153,15 @@
               <div class="row-right">
                 <div>涓嶅皯浜�</div>
                 <div>
-                  <el-input class="input-w" type="number" v-model="form.videoPointNum"/>
+                  <el-input class="input-w" type="number" v-model="form.videoPointNum"/>{{" %"}}
                 </div>
-
               </div>
             </div>
             <div class="row">
               <div class="row-left">杞﹁締鍗″彛鐐逛綅鏁�</div>
               <div class="row-right">
                 <div>涓嶅皯浜�</div>
-                <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum"/></div>
+                <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum"/></div>{{" %"}}
               </div>
             </div>
             <div class="row">
@@ -155,7 +169,7 @@
               <div class="row-right">
                 <div>涓嶅皯浜�</div>
                 <div>
-                  <el-input class="input-w" type="number" v-model="form.faceChceckpointNum"/></div>
+                  <el-input class="input-w" type="number" v-model="form.faceChceckpointNum" /></div>{{" %"}}
                 </div>
             </div>
           </div>
@@ -167,6 +181,75 @@
       </div>
     </el-dialog>
   </div>
+
+  <!-- 瀹℃牳鑰冩牳瑙勫垯瀵硅瘽妗� -->
+  <el-dialog :title="title" :visible.sync="auditOpen" width="600px" append-to-body>
+    <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+      <el-form-item label="瑙勫垯鍚嶇О" prop="ruleName">
+        <el-input v-model="form.ruleName" placeholder="璇疯緭鍏ヨ鍒欏悕绉�" disabled/>
+      </el-form-item>
+      <el-form-item label="瑙勫垯绫诲瀷" prop="category">
+        <el-select v-model="form.category" placeholder="瑙勫垯绫诲瀷" disabled>
+          <el-option
+            v-for="item in categoryList"
+            :key="item.id"
+            :label="item.value"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="瑙勫垯鎻忚堪" prop="ruleDetail">
+        <el-input v-model="form.ruleDetail" type="textarea" show-word-limit maxlength="150" placeholder="璇疯緭鍏ヨ鍒欐弿杩�" disabled/>
+      </el-form-item>
+      <el-form-item label="鍙傛暟閰嶇疆" prop="ruleDetail" disabled>
+        <div class="row-warp">
+          <div class="row">
+            <div class="row-left">鍙傛暟鍚�</div>
+            <div class="row-right">鏉′欢</div>
+          </div>
+          <div class="row">
+            <div class="row-left">澶╃綉瑙嗛鐐逛綅鏁�</div>
+            <div class="row-right">
+              <div>涓嶅皯浜�</div>
+              <div>
+                <el-input class="input-w" type="number" v-model="form.videoPointNum" disabled/>
+              </div>
+            </div>
+          </div>
+          <div class="row">
+            <div class="row-left">杞﹁締鍗″彛鐐逛綅鏁�</div>
+            <div class="row-right">
+              <div>涓嶅皯浜�</div>
+              <div><el-input class="input-w" type="number" v-model="form.vehicleCheckpointNum" disabled/></div>
+            </div>
+          </div>
+          <div class="row">
+            <div class="row-left">浜鸿劯鍗″彛鐐逛綅鏁�</div>
+            <div class="row-right">
+              <div>涓嶅皯浜�</div>
+              <div>
+                <el-input class="input-w" type="number" v-model="form.faceChceckpointNum" disabled/></div>
+            </div>
+          </div>
+        </div>
+      </el-form-item>
+      <el-form-item label="瀹℃牳缁撴灉" prop="auditState" >
+        <el-radio-group v-model="form.auditState">
+        <el-radio :label="1">閫氳繃</el-radio>
+        <el-radio :label="2">椹冲洖</el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="瀹℃牳璇存槑" prop="auditDescription" >
+        <el-input v-model="form.auditDescription" type="textarea" show-word-limit maxlength="100" />
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+      <el-button @click="cancel">鍙� 娑�</el-button>
+    </div>
+  </el-dialog>
+
+  </div>
 </template>
 
 <script>
@@ -174,6 +257,7 @@
 
 export default {
   name: "CheckRule",
+  dicts: ['platform_audit_state'],
   data() {
     return {
       // 閬僵灞�
@@ -201,6 +285,8 @@
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
       open: false,
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      auditOpen: false,
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -238,6 +324,7 @@
     // 鍙栨秷鎸夐挳
     cancel() {
       this.open = false;
+      this.auditOpen = false;
       this.reset();
     },
     // 琛ㄥ崟閲嶇疆
@@ -285,6 +372,17 @@
         this.form = response.data;
         this.open = true;
         this.title = "淇敼鑰冩牳瑙勫垯";
+
+      });
+    },
+    /** 瀹℃牳鎸夐挳鎿嶄綔 */
+    handleAudit(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getCheckRule(id).then(response => {
+        this.form = response.data;
+        this.auditOpen = true;
+        this.title = "瀹℃牳鑰冩牳瑙勫垯";
       });
     },
     /** 鎻愪氦鎸夐挳 */
@@ -295,12 +393,14 @@
             updateCheckRule(this.form).then(response => {
               this.$modal.msgSuccess("淇敼鎴愬姛");
               this.open = false;
+              this.auditOpen = false;
               this.getList();
             });
           } else {
             addCheckRule(this.form).then(response => {
               this.$modal.msgSuccess("鏂板鎴愬姛");
               this.open = false;
+              this.auditOpen = false;
               this.getList();
             });
           }
@@ -317,6 +417,7 @@
         this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       }).catch(() => {});
     },
+
     /** 瀵煎嚭鎸夐挳鎿嶄綔 */
     handleExport() {
       this.download('system/checkRule/export', {
@@ -330,7 +431,7 @@
 <style scoped>
 .input-w {
   margin-left: 5px;
-  width: 100px;
+  width: 70px;
 }
 .row-warp {
   display: flex;
diff --git a/src/views/system/contract/index.vue b/src/views/system/contract/index.vue
index 0e76e36..5353213 100644
--- a/src/views/system/contract/index.vue
+++ b/src/views/system/contract/index.vue
@@ -95,7 +95,7 @@
     </el-dialog>
     
     <!-- 鍚堝悓璇︽儏 -->
-    <el-dialog :title="detailName" :visible.sync="detail" width="500px" append-to-body>
+    <el-dialog :title="detailName" :visible.sync="detail" width="800px" append-to-body>
       <el-form label-position="left" inline class="table-expand">
         <el-collapse v-model="activeNames" @change="handleChange">
           <el-collapse-item title="瑙嗛骞冲潎鍦ㄧ嚎鐜�" name="1">
@@ -198,7 +198,7 @@
                 </span>
               </div>
           </el-upload>
-          <el-dialog :visible.sync="dialogVisible">
+          <el-dialog :visible.sync="dialogVisible" append-to-body="false">
             <img width="100%" :src="dialogImageUrl" alt="">
           </el-dialog>
           <div style="text-align: right; margin-top: 10px;">
diff --git a/src/views/system/data-manage/index.vue b/src/views/system/data-manage/index.vue
new file mode 100644
index 0000000..764f510
--- /dev/null
+++ b/src/views/system/data-manage/index.vue
@@ -0,0 +1,55 @@
+<template>
+    <div class="container">
+        <el-row type="flex" justify="center">
+            <el-col :span="24">
+                <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">浜鸿劯鏁版嵁寮傚父妫�娴�</h3>
+            </el-col>
+        </el-row>
+
+        <el-row type="flex" justify="center">
+            <el-col :span="6" v-for="(item, index) in faceData" :key="index">
+                <el-link @click="handleDetail(item)">
+                    <el-card style="width:150px;height: 150px;text-align: center;">
+                        <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
+                        <div>{{ item.name }}</div>
+                    </el-card>
+                </el-link>
+            </el-col>
+        </el-row>
+    </div>
+</template>
+
+<script>
+export default {
+    data() {
+        return {
+            faceData: [
+                { name: '浜鸿劯璇嗗埆鏃堕挓鍑嗙‘鎬�', icon: 'el-icon-alarm-clock', description: '鎻忚堪淇℃伅', routerUrl: 'vehicle-data-monitor' },
+                { name: '浜鸿劯鎶撴媿鏁版嵁鐩戞祴', icon: 'el-icon-user', description: '鎻忚堪淇℃伅', routerUrl: '/face/faceClock' },
+                { name: '浜鸿劯鏁版嵁瓒嬪娍鍒嗘瀽', icon: 'el-icon-data-line', description: '鎻忚堪淇℃伅', routerUrl: '/face/faceClock' },
+                { name: '浜鸿劯鎶撴媿璁惧娲昏穬鎬�', icon: 'el-icon-timer', description: '鎻忚堪淇℃伅', routerUrl: '/face/faceClock' },
+                { name: '浜鸿劯鎶撴媿涓婁紶鍙婃椂鎬�', icon: 'el-icon-money', description: '鎻忚堪淇℃伅', routerUrl: '/face/faceClock' },
+                { name: '浜鸿劯鎶撴媿澶у浘鍙敤鎬�', icon: 'el-icon-data-analysis', description: '鎻忚堪淇℃伅', routerUrl: '/face/faceClock' },
+            ]
+        }
+    },
+    methods: {
+        handleDetail(item) {
+            this.$router.push({
+                name: item.routerUrl,
+                params: {
+                    id: item.id
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+.container {
+    margin-left: 100px;
+    margin-right: 100px;
+    margin-top: 10px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/system/face/index.vue b/src/views/system/face/index.vue
index 2d4ac6c..0834270 100644
--- a/src/views/system/face/index.vue
+++ b/src/views/system/face/index.vue
@@ -22,7 +22,7 @@
               <p>寮傚父鏁�</p >
             </div>
             <div class="dashboard-item">
-              <h3 style="color: #7868d9">{{ totalViews }}</h3>
+              <h3>{{ totalViews }}</h3>
               <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
             </div>
             <div class="dashboard-item">
@@ -94,7 +94,7 @@
 
     <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" />
+      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" width="180px"/>
       <el-table-column label="璁惧鍚嶇О" align="center" prop="name" />
       <el-table-column label="涓婃姤閮ㄩ棬" align="center" prop="deptName" />
       <el-table-column label="璁惧鐘舵��" align="center" prop="onState">
@@ -109,7 +109,7 @@
       </template>
       </el-table-column>
       <el-table-column label="寮傚父鍘熷洜" align="center" prop="reason" />
-      <el-table-column label="瀹夎鏃堕棿" align="center" prop="installedTime" width="180">
+      <el-table-column label="鏁版嵁鏃堕棿" align="center" prop="installedTime" width="180">
       </el-table-column>
       <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" />
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
diff --git a/src/views/system/publish/index.vue b/src/views/system/publish/index.vue
index 7c10d18..b508a11 100644
--- a/src/views/system/publish/index.vue
+++ b/src/views/system/publish/index.vue
@@ -117,12 +117,25 @@
         <dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.state"/>
       </template>
       </el-table-column>
-      <el-table-column label="鍒涘缓浜�" align="center" prop="createUserName" />
-      <el-table-column label="鍒涘缓鏃堕棿" align="center" prop="createTime" />
       <el-table-column label="淇敼浜�" align="center" prop="updateUserName" />
-      <el-table-column label="淇敼鏃堕棿" align="center" prop="updateTime" />
+      <el-table-column label="淇敼鏃堕棿" align="center" prop="updateTime" width="170px" />
+      <el-table-column label="瀹℃牳鐘舵��" align="center" prop="auditState">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.platform_audit_state" :value="scope.row.auditState"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="瀹℃牳浜�" align="center" prop="auditUser" />
+      <el-table-column label="瀹℃牳鏃堕棿" align="center" prop="auditTime" width="170px"/>
+      <el-table-column label="瀹℃牳鎰忚" align="center" prop="auditDescription" />
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-s-check"
+            @click="handleAudit(scope.row)"
+            v-hasPermi="['examine:publish:audit']"
+          >瀹℃牳</el-button>
           <el-button
             size="mini"
             type="text"
@@ -146,7 +159,7 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
-
+  <div>
     <!-- 娣诲姞鎴栦慨鏀硅�冩牳鍙戝竷瀵硅瘽妗� -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
@@ -175,22 +188,22 @@
               v-for="dict in dict.type.platform_examine_range"
               :key="dict.value"
               :label="dict.label"
-              :value="dict.value"
+              :value="parseInt(dict.value)"
             />
           </el-select>
         </el-form-item>
-        <el-form-item label="鑰冩牳棰戠巼" prop="frequency">
-          <el-select
-            v-model="form.frequency"
-            placeholder="鑰冩牳棰戠巼"
-            clearable
-            style="width: 170px"
-          >
+        <el-form-item label="鑰冩牳棰戠巼">
+            <el-select
+              v-model="form.frequency"
+              placeholder="鑰冩牳棰戠巼"
+              clearable
+              style="width: 170px"
+            >
             <el-option
               v-for="dict in dict.type.platform_examine_frequency"
               :key="dict.value"
               :label="dict.label"
-              :value="dict.value"
+              :value="parseInt(dict.value)"
             />
           </el-select>
         </el-form-item>
@@ -208,7 +221,7 @@
               v-for="dict in dict.type.sys_normal_disable"
               :key="dict.value"
               :label="dict.label"
-              :value="dict.value"
+              :value="parseInt(dict.value)"
             />
           </el-select>
         </el-form-item>
@@ -221,6 +234,94 @@
         <el-button @click="cancel">鍙� 娑�</el-button>
       </div>
     </el-dialog>
+
+    <!-- 瀹℃牳鑰冩牳鍙戝竷瀵硅瘽妗� -->
+    <el-dialog :title="title" :visible.sync="auditOpen" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
+        <el-form-item label="鑰冩牳鍚�" prop="examineName">
+          <el-input v-model="form.examineName" placeholder="璇疯緭鍏ヨ�冩牳鍚�" disabled/>
+        </el-form-item>
+        <el-form-item label="鑰冩牳妯℃澘" prop="templateId">
+          <el-select v-model="form.templateId" placeholder="鑰冩牳妯℃澘" disabled>
+            <el-option
+              v-for="item in templateList"
+              :key="item.id"
+              :label="item.value"
+              :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鑰冩牳鑼冨洿" prop="examineRange" >
+          <el-select
+            v-model="form.examineRange"
+            placeholder="鑰冩牳鑼冨洿"
+            clearable
+            style="width: 170px"
+            disabled
+          >
+            <el-option
+              v-for="dict in dict.type.platform_examine_range"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="鑰冩牳棰戠巼" prop="frequency" >
+          <el-select
+            v-model="form.frequency"
+            placeholder="鑰冩牳棰戠巼"
+            clearable
+            style="width: 170px"
+            disabled
+          >
+            <el-option
+              v-for="dict in dict.type.platform_examine_frequency"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鎶ヨ鍒嗘暟闃堝��" prop="alarmScore">
+          <el-input v-model="form.alarmScore" placeholder="璇疯緭鍏ュ垎鏁�" style="width: 170px"  disabled/>
+        </el-form-item>
+        <el-form-item label="鑰冩牳鐘舵��" prop="state">
+          <el-select
+            v-model="form.state"
+            placeholder="鑰冩牳鐘舵��"
+            clearable
+            style="width: 170px"
+            disabled
+          >
+            <el-option
+              v-for="dict in dict.type.sys_normal_disable"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鎻忚堪" prop="description">
+          <el-input v-model="form.description" type="textarea" placeholder="璇疯緭鍏ュ唴瀹�" disabled/>
+        </el-form-item>
+        <el-form-item label="瀹℃牳缁撴灉" prop="auditState" >
+          <el-radio-group v-model="form.auditState">
+            <el-radio :label="1">閫氳繃</el-radio>
+            <el-radio :label="2">椹冲洖</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="瀹℃牳璇存槑" prop="auditDescription" >
+          <el-input v-model="form.auditDescription" type="textarea" show-word-limit maxlength="100" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
   </div>
 </template>
 
@@ -229,7 +330,7 @@
 import { templateSelect } from "@/api/platform/check-template";
 export default {
   name: "Publish",
-  dicts: ['sys_normal_disable','platform_examine_range','platform_examine_frequency'],
+  dicts: ['sys_normal_disable','platform_examine_range','platform_examine_frequency','platform_audit_state'],
   data() {
     return {
       // 閬僵灞�
@@ -250,6 +351,7 @@
       title: "",
       // 鏄惁鏄剧ず寮瑰嚭灞�
       open: false,
+      auditOpen: false,
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -291,6 +393,7 @@
     // 鍙栨秷鎸夐挳
     cancel() {
       this.open = false;
+      this.auditOpen = false;
       this.reset();
     },
     // 琛ㄥ崟閲嶇疆
@@ -341,6 +444,16 @@
         this.title = "淇敼鑰冩牳鍙戝竷";
       });
     },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleAudit(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPublish(id).then(response => {
+        this.form = response.data;
+        this.auditOpen = true;
+        this.title = "瀹℃牳鑰冩牳鍙戝竷";
+      });
+    },
     /** 鎻愪氦鎸夐挳 */
     submitForm() {
       this.$refs["form"].validate(valid => {
@@ -349,12 +462,14 @@
             updatePublish(this.form).then(response => {
               this.$modal.msgSuccess("淇敼鎴愬姛");
               this.open = false;
+              this.auditOpen = false;
               this.getList();
             });
           } else {
             addPublish(this.form).then(response => {
               this.$modal.msgSuccess("鏂板鎴愬姛");
               this.open = false;
+              this.auditOpen = false;
               this.getList();
             });
           }
diff --git a/src/views/system/recovery/index.vue b/src/views/system/recovery/index.vue
index ca754c0..ea7654a 100644
--- a/src/views/system/recovery/index.vue
+++ b/src/views/system/recovery/index.vue
@@ -22,7 +22,7 @@
               <p>寮傚父鏁�</p >
             </div>
             <div class="dashboard-item">
-              <h3 style="color: #7868d9">{{ totalViews }}</h3>
+              <h3>{{ totalViews }}</h3>
               <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
             </div>
             <div class="dashboard-item">
@@ -94,15 +94,16 @@
 
     <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" />
+      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" width="180px" />
       <el-table-column label="璁惧鍚嶇О" align="center" prop="name" />
-      <el-table-column label="涓婃姤閮ㄩ棬" align="center" prop="deptName" />
+      <el-table-column label="鏍囩" align="center" prop="tag" />
       <el-table-column label="璁惧鐘舵��" align="center" prop="onState">
       <template slot-scope="scope">
         <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/>
       </template>
       </el-table-column>
-      <el-table-column label="鍦板潃" align="center" prop="address" />
+      <el-table-column label="鍖哄煙" align="center" prop="region" />
+      <el-table-column label="璇︾粏鍦板潃" align="center" prop="address" />
       <el-table-column label="鏄惁鐢熸垚寮傚父宸ュ崟" align="center" prop="defaultOrder">
       <template slot-scope="scope">
         <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/>
@@ -139,7 +140,7 @@
           <el-col :span="12">
             <el-form-item label="璁惧缂栫爜锛�">{{ form.serialNumber }}</el-form-item>
             <el-form-item label="璁惧鍚嶇О锛�">{{ form.name }} </el-form-item>
-            <el-form-item label="涓婃姤閮ㄩ棬锛�">{{ form.deptName }} </el-form-item>
+            <el-form-item label="鏍囩锛�">{{ form.deptName }} </el-form-item>
             <el-form-item label="璁惧鐘舵�侊細">
               <div v-if="form.onState === 1">鍙敤</div>
               <div v-else-if="form.onState === 2">涓嶅彲鐢�</div>
diff --git a/src/views/system/vehicle-data-monitor/index.vue b/src/views/system/vehicle-data-monitor/index.vue
new file mode 100644
index 0000000..76ce1d1
--- /dev/null
+++ b/src/views/system/vehicle-data-monitor/index.vue
@@ -0,0 +1,316 @@
+<template>
+  <div class="app-container">
+    <div class="top">
+      <el-row type="flex" justify="space-between" style="width: 60%;">
+        <el-col :span="6">
+          <el-card class="card">
+            <i style="font-size: 40px;padding: 15px;" class="el-icon-wind-power"></i>
+          </el-card>
+        </el-col>
+
+        <el-col :span="6" class="mod">
+          <div class="number">{{ totalKiosks }}</div>
+          <div>鍗″彛鎬绘暟</div>
+        </el-col>
+
+        <el-col :span="6" class="mod">
+          <div class="numberTwo">{{ uniqueKiosks }}</div>
+          <div>涓嶅敮涓�鍗″彛鏁�</div>
+        </el-col>
+
+        <div style="width: 1px;height: 60px;border: 1px solid #D7EBFA;margin: 40px;"></div>
+
+
+        <el-col :span="6">
+          <el-card class="card">
+            <i style="font-size: 40px;padding: 15px;" class="el-icon-truck"></i>
+          </el-card>
+        </el-col>
+        <el-col :span="6" class="mod">
+          <div class="number">{{ totalCarData }}</div>
+          <div>杩囪溅鏁版嵁鎬婚噺</div>
+        </el-col>
+
+        <el-col :span="6" class="mod">
+          <div class="numberTwo">{{ uniqueCarData }}</div>
+          <div>涓嶅敮涓�鏁版嵁閲�</div>
+        </el-col>
+      </el-row>
+
+    </div>
+
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="鍗″彛缂栧彿" prop="bayonetNumber">
+        <el-input v-model="queryParams.bayonetNumber" placeholder="璇疯緭鍏ュ崱鍙g紪鍙�" clearable
+          @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item label="鍗″彛鍚嶇О" prop="bayonetName">
+        <el-input v-model="queryParams.bayonetName" placeholder="璇疯緭鍏ュ崱鍙e悕绉�" clearable @keyup.enter.native="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['platform:platform:add']">鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
+          v-hasPermi="['platform:platform:edit']">淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
+          v-hasPermi="['platform:platform:remove']">鍒犻櫎</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
+          v-hasPermi="['platform:platform:export']">瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="platformList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="鍗″彛鍚嶇О" align="center" prop="bayonetName" />
+      <el-table-column label="鍗″彛缂栧彿" align="center" prop="bayonetNumber" />
+      <el-table-column label="杩囪溅鏁版嵁閲�" align="center" prop="vehicleDataNumber" />
+      <el-table-column label="涓嶅敮涓�鏁版嵁 " align="center" prop="notUniqueData" />
+      <el-table-column label="涓嶅敮涓�鏁版嵁閲�" align="center" prop="notUniqueDataNumber" />
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['platform:platform:edit']">淇敼</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['platform:platform:remove']">鍒犻櫎</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
+
+    <!-- 娣诲姞鎴栦慨鏀瑰崱鍙h繃杞︽暟鎹竴鑷存�у璇濇 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="鍗″彛鍚嶇О" prop="bayonetName">
+          <el-input v-model="form.bayonetName" placeholder="璇疯緭鍏ュ崱鍙e悕绉�" />
+        </el-form-item>
+        <el-form-item label="鍗″彛缂栧彿" prop="bayonetNumber">
+          <el-input v-model="form.bayonetNumber" placeholder="璇疯緭鍏ュ崱鍙g紪鍙�" />
+        </el-form-item>
+        <el-form-item label="杩囪溅鏁版嵁閲�" prop="vehicleDataNumber">
+          <el-input v-model="form.vehicleDataNumber" placeholder="璇疯緭鍏ヨ繃杞︽暟鎹噺" />
+        </el-form-item>
+        <el-form-item label="涓嶅敮涓�鏁版嵁 " prop="notUniqueData">
+          <el-input v-model="form.notUniqueData" placeholder="璇疯緭鍏ヤ笉鍞竴鏁版嵁 " />
+        </el-form-item>
+        <el-form-item label="涓嶅敮涓�鏁版嵁閲�" prop="notUniqueDataNumber">
+          <el-input v-model="form.notUniqueDataNumber" placeholder="璇疯緭鍏ヤ笉鍞竴鏁版嵁閲�" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPlatform, getPlatform, delPlatform, addPlatform, updatePlatform } from "@/api/platform/vehicle-data-monitor";
+
+export default {
+  name: "Platform",
+  data() {
+    return {
+      totalKiosks: 1157,
+      uniqueKiosks: 580,
+      totalCarData: 77422,
+      uniqueCarData: 431163,
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鍗″彛杩囪溅鏁版嵁涓�鑷存�ц〃鏍兼暟鎹�
+      platformList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        regionCode: null,
+        bayonetName: null,
+        bayonetNumber: null,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        bayonetName: [
+          { required: true, message: "鍗″彛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        bayonetNumber: [
+          { required: true, message: "鍗″彛缂栧彿涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 鏌ヨ鍗″彛杩囪溅鏁版嵁涓�鑷存�у垪琛� */
+    getList() {
+      this.loading = true;
+      listPlatform(this.queryParams).then(response => {
+        this.platformList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        regionCode: null,
+        bayonetName: null,
+        bayonetNumber: null,
+        vehicleDataNumber: null,
+        notUniqueData: null,
+        notUniqueDataNumber: null,
+        createTime: null,
+        updateTime: null,
+        deleted: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length !== 1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞鍗″彛杩囪溅鏁版嵁涓�鑷存��";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPlatform(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼鍗″彛杩囪溅鏁版嵁涓�鑷存��";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePlatform(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPlatform(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎鍗″彛杩囪溅鏁版嵁涓�鑷存�х紪鍙蜂负"' + ids + '"鐨勬暟鎹」锛�').then(function () {
+        return delPlatform(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => { });
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('platform/platform/export', {
+        ...this.queryParams
+      }, `platform_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style scoped>
+.top {
+  height: 150px;
+  margin-bottom: 20px;
+  background-color: #F2F9FF;
+  border: 1px solid #77befd;
+}
+
+.container {
+  max-width: 1000px;
+  margin: auto;
+}
+
+.number {
+  font-size: 36px;
+  font-weight: bold;
+  color: #00A5FE;
+}
+
+.numberTwo {
+  font-size: 36px;
+  font-weight: bold;
+  color: #505051;
+}
+
+.card {
+  width: 100px;
+  height: 100px;
+  text-align: center;
+  background-color: #00A5FE;
+  color: aliceblue;
+  border-radius: 10%;
+  margin: 25px;
+}
+
+.mod {
+  margin-top: 40px;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/system/video/index.vue b/src/views/system/video/index.vue
index a68de4e..be733c2 100644
--- a/src/views/system/video/index.vue
+++ b/src/views/system/video/index.vue
@@ -24,8 +24,16 @@
               <p>寮傚父鏁�</p >
             </div>
             <div class="dashboard-item">
-              <h3 style="color: #7868d9">{{ totalViews }}</h3>
+              <h3>{{ totalViews }}</h3>
               <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ noStore }}</h3>
+              <p>鏃犲瓨鍌�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ partStore }}</h3>
+              <p>閮ㄥ垎瀛樺偍</p >
             </div>
             <div class="dashboard-item">
               <h3>{{ viewsPercentage }}%</h3>
@@ -95,25 +103,26 @@
     </el-row>
 
     <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" />
-      <el-table-column label="璁惧鍚嶇О" align="center" prop="name" />
-      <el-table-column label="涓婃姤閮ㄩ棬" align="center" prop="deptName" />
+      <el-table-column type="selection" align="center" />
+      <el-table-column label="璁惧鍚嶇О" align="center" prop="name" width="280" fixed/>
+      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" width="180"/>
+      <el-table-column label="鏍囩" align="center" prop="tag" width="180"/>
       <el-table-column label="璁惧鐘舵��" align="center" prop="onState">
       <template slot-scope="scope">
         <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/>
       </template>
       </el-table-column>
-      <el-table-column label="鍦板潃" align="center" prop="address" />
-      <el-table-column label="鏄惁鐢熸垚寮傚父宸ュ崟" align="center" prop="defaultOrder">
+      <el-table-column label="鏄惁鐢熸垚寮傚父宸ュ崟" align="center" prop="defaultOrder" width="180">
       <template slot-scope="scope">
         <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/>
       </template>
       </el-table-column>
-      <el-table-column label="寮傚父鍘熷洜" align="center" prop="reason" />
-      <el-table-column label="瀹夎鏃堕棿" align="center" prop="installedTime" width="180"/>
-      <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+      <el-table-column label="鏁版嵁鏃堕棿" align="center" prop="installedTime" width="180"/>
+      <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" width="180"/>
+      <el-table-column label="淇′护鏃跺欢(ms)" align="center" prop="sipDelay" width="180"/>
+      <el-table-column label="瑙嗛鏃跺欢(ms)" align="center" prop="videoDelay" width="180"/>
+      <el-table-column label="鍏抽敭甯ф椂寤�(ms)" align="center" prop="iframeDelay" width="180"/>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width"  fixed="right">
           <template slot-scope="scope">
             <el-button
               size="mini"
@@ -140,14 +149,13 @@
           <el-col :span="12">
             <el-form-item label="璁惧缂栫爜锛�">{{ form.serialNumber }}</el-form-item>
             <el-form-item label="璁惧鍚嶇О锛�">{{ form.name }} </el-form-item>
-            <el-form-item label="涓婃姤閮ㄩ棬锛�">{{ form.deptName }} </el-form-item>
+            <el-form-item label="鏍囩锛�">{{ form.tag }} </el-form-item>
             <el-form-item label="璁惧鐘舵�侊細">
               <div v-if="form.onState === 1">鍙敤</div>
               <div v-else-if="form.onState === 2">涓嶅彲鐢�</div>
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="鍦板潃锛�">{{ form.address }}</el-form-item>
             <el-form-item label="鏄惁鐢熸垚寮傚父宸ュ崟锛�">
               <div v-if="form.defaultOrder === 1">鏄�</div>
               <div v-else-if="form.defaultOrder === 2">鍚�</div>
@@ -172,18 +180,20 @@
 </template>
 
 <script>
-import { listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/monitor";
+import { listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/video-monitor";
 
 export default {
   name: "Monitor",
   dicts: ['sys_normal_disable', 'platform_yes_no','camera_state'],
   data() {
     return {
-      totalPosts: 1156,
-      totalMembers: 1000,
-      postsPercentage: 156,
-      totalViews: 75,
-      viewsPercentage: 91.36,
+      totalPosts: 6250,
+      totalMembers: 6008,
+      postsPercentage: 51,
+      totalViews: 17,
+      noStore: 47,
+      partStore: 56,
+      viewsPercentage: 96.12,
       totalErrors: 0,
       // 閬僵灞�
       loading: true,
@@ -214,7 +224,6 @@
         installedTime: null,
         managementUnit: null,
         defaultOrder: null,
-        cameraFunType: 1,
       },
       // 琛ㄥ崟鍙傛暟
       form: {},
@@ -263,7 +272,7 @@
         address: null,
         installedTime: null,
         managementUnit: null,
-        defaultOrder: "1",
+        defaultOrder: null,
       };
       this.resetForm("form");
     },
diff --git a/src/views/system/work-order/index.vue b/src/views/system/work-order/index.vue
index e1ef50b..f27f236 100644
--- a/src/views/system/work-order/index.vue
+++ b/src/views/system/work-order/index.vue
@@ -102,6 +102,7 @@
             size="mini"
             type="text"
             @click="handleAuditing(scope.row)"
+            v-hasPermi="['work:order:audit']"
           >瀹℃牳</el-button>
           <el-button
             size="mini"

--
Gitblit v1.8.0