From 569c6b3e6b28b2808d22af4656c8f65a973c345e Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期三, 07 五月 2025 09:07:11 +0800
Subject: [PATCH] 提交

---
 admin/src/components/business/OperaPlatformWindow.vue |    7 
 pda/api/index.js                                      |    8 
 admin/src/views/business/admissionStatistics.vue      |  537 ++++++++++++++++++++
 admin/src/views/business/visits.vue                   |   33 +
 admin/src/api/platform/index.js                       |    4 
 admin/src/views/business/carStatistics.vue            |  537 ++++++++++++++++++++
 screen/index.html                                     |    2 
 admin/src/views/index.vue                             |   23 
 admin/src/views/business/dangerStatic.vue             |  319 ++++++++++-
 admin/src/views/platform/index.vue                    |   16 
 pda/pages/index/center.vue                            |   19 
 admin/.env.development                                |    4 
 admin/src/api/business/index.js                       |   17 
 13 files changed, 1,467 insertions(+), 59 deletions(-)

diff --git a/admin/.env.development b/admin/.env.development
index ec01dc7..94f985b 100644
--- a/admin/.env.development
+++ b/admin/.env.development
@@ -2,7 +2,7 @@
 NODE_ENV = 'development'
 
 # VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
-#  VUE_APP_API_URL  = 'http://localhost:10010'
-VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
+VUE_APP_API_URL  = 'http://192.168.0.103:10010'
+# VUE_APP_API_URL  = 'https://atwl.ahzyssl.com/zhyq_interface'
 # VUE_APP_API_URL  = 'http://10.50.250.253:8088/gateway_interface'
 
diff --git a/admin/src/api/business/index.js b/admin/src/api/business/index.js
index e77b0cd..9c09cf5 100644
--- a/admin/src/api/business/index.js
+++ b/admin/src/api/business/index.js
@@ -14,4 +14,21 @@
 export function approveTemplById (id) {
   return request.get(`/visitsAdmin/cloudService/business/approveTempl/findById/${id}`)
 }
+// 鍩虹鏁版嵁
+export function getInParkUserData (data) {
+  return request.post('/visitsAdmin/cloudService/business/inoutRecord/getInParkUserData', data)
+}
+// 鍗犳瘮鏁版嵁
+export function getRataList (data) {
+  return request.post('/visitsAdmin/cloudService/business/inoutRecord/getRataList', data)
+}
+// 鎶ヨ〃鏁版嵁
+export function getReportList (data) {
+  return request.post('/visitsAdmin/cloudService/business/inoutRecord/getReportList', data)
+}
+// 鍏ュ洯鏁版嵁鍒嗘瀽-瀵煎嚭Excel
+export function reportExportExcel (data) {
+  return request.post('/visitsAdmin/cloudService/business/inoutRecord/reportExportExcel', data)
+}
+
 export const uploadUrl = 'visitsAdmin/cloudService/public/upload'
diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js
index 3f5ff28..5a5811f 100644
--- a/admin/src/api/platform/index.js
+++ b/admin/src/api/platform/index.js
@@ -132,3 +132,7 @@
 export function dealJobFinish (data) {
   return request.post('/visitsAdmin/cloudService/business/platformJob/dealJobFinish', data)
 }
+// 鎭㈠浣滀笟
+export function restoreWork (data) {
+  return request.post('/visitsAdmin/cloudService/business/platformJob/restoreWork', data)
+}
diff --git a/admin/src/components/business/OperaPlatformWindow.vue b/admin/src/components/business/OperaPlatformWindow.vue
index a8bcd00..ea0d065 100644
--- a/admin/src/components/business/OperaPlatformWindow.vue
+++ b/admin/src/components/business/OperaPlatformWindow.vue
@@ -41,6 +41,9 @@
       <el-form-item label="鍋滅暀瓒呮椂鎶ヨ鏃堕棿(鍒嗛挓锛夛細" prop="stayTimeoutAlarmTime">
         <el-input type="number" v-model="form.stayTimeoutAlarmTime" placeholder="璇疯緭鍏ュ仠鐣欒秴鏃舵姤璀︽椂闂�(鍒嗛挓)" v-trim />
       </el-form-item>
+      <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+        <el-input type="number" v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim />
+      </el-form-item>
     </el-form>
   </GlobalWindow>
 </template>
@@ -75,10 +78,12 @@
         workRate: '',
         stayTimeoutAlarmTime: '',
         workTimeoutAlarmTime: '',
+        sortnum: ''
       },
       // 楠岃瘉瑙勫垯
       rules: {
-        workingNum: [{ required: true, validator: numRuleGtZero, message: '璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�,蹇呴』澶т簬0! ', trigger: 'blur' }]
+        workingNum: [{ required: true, validator: numRuleGtZero, message: '璇疯緭鍏ュ悓鏃朵綔涓氭暟閲�,蹇呴』澶т簬0! ', trigger: 'blur' }],
+        sortnum: [{ required: true, message: '鎺掑簭鐮佷笉鑳戒负绌猴紒', trigger: 'blur' }]
       }
     }
   },
diff --git a/admin/src/views/business/admissionStatistics.vue b/admin/src/views/business/admissionStatistics.vue
new file mode 100644
index 0000000..624046c
--- /dev/null
+++ b/admin/src/views/business/admissionStatistics.vue
@@ -0,0 +1,537 @@
+<template>
+    <div class="main_app1" v-if="info">
+        <div class="main_head">
+            <div class="main_head_title">
+                <span>鍏ュ洯浜哄憳缁熻鎬昏</span>
+                <el-radio-group v-model="isGroupBy" size="mini" @change="getData(), getRataLists(), getReportLists()">
+                    <el-radio-button :label="0">鎸夎溅娆$粺璁�</el-radio-button>
+                    <el-radio-button :label="1">鎸夎溅杈嗙粺璁�</el-radio-button>
+                </el-radio-group>
+            </div>
+            <div class="main_head_bottom">
+                <div class="main_head_item blue">
+                    <span>{{info.todayTotal}}</span>
+                    <span>浠婃棩</span>
+                </div>
+                <div class="main_head_item red">
+                    <span>{{info.yesterdayTotal}}</span>
+                    <span>鏄ㄦ棩</span>
+                </div>
+                <div class="main_head_item yellow">
+                    <span>{{info.weekTotal}}</span>
+                    <span>鏈懆</span>
+                </div>
+                <div class="main_head_item orange">
+                    <span>{{info.monthTotal}}</span>
+                    <span>鏈湀</span>
+                </div>
+                <div class="main_head_item darkBlue">
+                    <span>{{info.yearTotal}}</span>
+                    <span>鏈勾</span>
+                </div>
+            </div>
+        </div>
+        <div class="main_content">
+            <div class="type_wrap">
+                <div class="title">鍏ㄥ勾鍏ュ洯浜哄憳瓒嬪娍</div>
+                <div class="echart1" ref="typeRef" v-if="info.cumulativeDataList"></div>
+                <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-else>
+                    <img style="width: 200px;" src="@/assets/images/default_homeimg.png" alt="">
+                </div>
+            </div>
+            <div class="dept_wrap">
+                <div class="title">
+                    <span>浜哄憳鍒嗙被缁熻</span>
+                    <el-radio-group style="margin-left: 20px;" v-model="dateType" size="mini" @change="changeDateType">
+                        <el-radio-button label="month">鏈�</el-radio-button>
+                        <el-radio-button label="year">骞�</el-radio-button>
+                    </el-radio-group>
+                    <el-date-picker
+                        v-model="value"
+                        :type="dateType"
+                        size="mini"
+                        @change="getRataLists()"
+                        :value-format="dateType === 'month' ? 'yyyy-MM' : 'yyyy'"
+                        style="margin-left: 20px; width: 130px;"
+                        placeholder="璇烽�夋嫨">
+                    </el-date-picker>
+                </div>
+                <div id="echart2" ref="deptRef" v-if="listZB.length > 0"></div>
+                <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-else>
+                    <img style="width: 200px;" src="@/assets/images/default_homeimg.png" alt="">
+                </div>
+            </div>
+        </div>
+        <div class="main_table">
+            <div class="main_table_list">
+                <div class="title" style="display: flex; align-items: center; justify-content: space-between;">
+                    <div>
+                        <span>鍏ュ洯浜哄憳缁熻琛�</span>
+                        <el-radio-group style="margin-left: 20px;" v-model="radio" size="mini" @change="changeBB">
+                            <el-radio-button label="month">鏈�</el-radio-button>
+                            <el-radio-button label="year">骞�</el-radio-button>
+                        </el-radio-group>
+                        <el-date-picker
+                            v-model="date1"
+                            :type="radio"
+                            size="mini"
+                            @change="getReportLists()"
+                            :value-format="radio === 'month' ? 'yyyy-MM' : 'yyyy'"
+                            style="margin-left: 20px; width: 130px;"
+                            placeholder="璇烽�夋嫨">
+                        </el-date-picker>
+                    </div>
+                    <el-button type="primary" size="mini" style="margin-left: 20px;" @click="daochu">瀵煎嚭</el-button>
+                </div>
+                <div class="list_head">
+                    <div class="list_head_item" v-for="(item, index) in column" :key="index">{{item}}</div>
+                </div>
+                <div class="table_box">
+                    <div class="list_content" v-for="(item, index) in list" :key="index">
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">232</div>
+                    </div>
+                </div>
+            </div>
+            <div class="main_table_list1">
+                <div class="title">
+                    <span>鏈勾浜哄憳绱鍏ュ洯缁熻</span>
+                </div>
+                <div class="list_head">
+                    <div class="list_head_item">杞﹁締鍒嗙被</div>
+                    <div class="list_head_item">鍏ュ眬娆℃暟</div>
+                </div>
+                <div class="table_box">
+                    <div class="list_content" v-for="(item, index) in info.yearSortList" :key="index">
+                        <div class="list_head_item">{{item.name}}</div>
+                        <div class="list_head_item">{{item.total}}</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+  import * as echarts from 'echarts'
+  import { getInParkUserData, getRataList, getReportList, reportExportExcel } from '@/api/business'
+  export default {
+    data() {
+      return {
+        info: null,
+        isGroupBy: 0,
+        radio: 'month',
+        value: '',
+        dateType: 'month',
+        date: '',
+        date1: '',
+
+        listZB: [],
+        column: [],
+        list: []
+      }
+    },
+    mounted() {
+      var now = new Date();
+      var year = now.getFullYear();
+      var month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+      this.value = `${year}-${month}`
+      this.date1 = `${year}-${month}`
+
+      this.getData()
+      this.getRataLists()
+      this.getReportLists()
+    },
+    methods: {
+      // 瀵煎嚭
+      daochu() {
+        reportExportExcel({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 }).then(res => {
+          this.download(res)
+          console.log(res.data)
+        })
+      },
+      changeBB() {
+        if (this.radio === 'month') {
+          let now = new Date();
+          let year = now.getFullYear();
+          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+          this.date1 = `${year}-${month}`
+        } else {
+          let now = new Date();
+          let year = now.getFullYear();
+          this.date1 = `${year}`
+        }
+        this.getReportLists()
+      },
+      // 鍏ュ洯杞﹁締缁熻琛�
+      getReportLists() {
+        getReportList({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 1 })
+          .then(res => {
+            console.log(res)
+
+            this.column = res.data.map(item => item[0])
+
+            const keys = res.data.map(row => row[0]); // 鑾峰彇閿悕
+            const values = res.data.map(row => row.slice(1, row.length)); // 鑾峰彇鍊�
+
+            this.list = values[0].map((_, index) => {
+              return keys.reduce((obj, key, i) => {
+                obj[key] = values[i][index];
+                return obj;
+              }, {});
+            });
+          })
+      },
+      changeDateType() {
+        if (this.dateType === 'month') {
+          let now = new Date();
+          let year = now.getFullYear();
+          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+          this.value = `${year}-${month}`
+        } else {
+          let now = new Date();
+          let year = now.getFullYear();
+          this.value = `${year}`
+        }
+        this.getRataLists()
+      },
+      // 杞﹁締鍒嗙被缁熻
+      getRataLists() {
+        getRataList({ dateStr: this.value, isGroupBy: this.isGroupBy, type: 1 })
+          .then(res => {
+            console.log(res)
+            this.listZB = res
+            this.$nextTick(() => {
+              this.initDept()
+            })
+          })
+      },
+      // 鍩虹鏁版嵁
+      getData() {
+        getInParkUserData({ isGroupBy: this.isGroupBy, type: 1 }).then(res => {
+          this.info = res
+          this.$nextTick(() => {
+            this.initType()
+          })
+        })
+      },
+      // 鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍
+      initType() {
+        if (!this.info.cumulativeDataList) return
+
+        const myChart = echarts.init(document.querySelector('.echart1'))
+
+        let names = this.info.cumulativeDataList.map(item => item.name)
+        let datas = this.info.cumulativeDataList.map(item => item.total)
+
+        let option = {
+          grid: {
+            left: '5%',
+            right: '10%',
+            bottom: '0%',
+            top: '20%',
+            containLabel: true
+          },
+          xAxis: {
+            type: 'category',
+            data: names
+          },
+          yAxis: {
+            type: 'value'
+          },
+          series: [
+            {
+              data: datas,
+              type: 'line'
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      },
+      // 杞﹁締鍒嗙被缁熻
+      initDept() {
+        if (!this.listZB) return
+
+        const myChart = echarts.init(document.querySelector('#echart2'))
+
+        let data = this.listZB.map(item => {
+          return {
+            value: item.total,
+            name: item.name
+          }
+        })
+
+        let option = {
+          series : [
+            {
+              name: '璁块棶鏉ユ簮',
+              type: 'pie',
+              radius: '55%',
+              data: data
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      },
+      initDept3() {
+        const myChart = echarts.init(document.querySelector('#echart3'))
+
+        let option = {
+          grid: {
+            left: '5%',
+            right: '10%',
+            bottom: '0%',
+            top: '20%',
+            containLabel: true
+          },
+          xAxis: {
+            type: 'category',
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+          },
+          yAxis: {
+            type: 'value'
+          },
+          series: [
+            {
+              data: [150, 230, 224, 218, 135, 147, 260],
+              type: 'line'
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .main_app1 {
+        width: 100%;
+        height: calc(100% - 44px);
+        overflow-y: auto;
+        overflow-x: hidden;
+        padding: 15px;
+        box-sizing: border-box;
+        background-color: #ffffff;
+        .main_head {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            margin-bottom: 20px;
+            .main_head_title {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                margin-bottom: 20px;
+                span {
+                    font-weight: 600;
+                    font-size: 16px;
+                    color: #222222;
+                    margin-right: 30px;
+                }
+            }
+            .main_head_bottom {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                .blue {
+                    border-left: 5px solid blue;
+                }
+                .red {
+                    border-left: 5px solid red;
+                }
+                .yellow {
+                    border-left: 5px solid yellow;
+                }
+                .orange {
+                    border-left: 5px solid orange;
+                }
+                .darkBlue {
+                    border-left: 5px solid #0000a8;
+                }
+                .main_head_item {
+                    width: 19%;
+                    height: 70px;
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    justify-content: center;
+                    box-sizing: border-box;
+                    border-radius: 5px;
+                    background-color: #ffffff;
+                    span {
+                        &:nth-child(1) {
+                            font-size: 22px;
+                            color: black;
+                            font-weight: bold;
+                        }
+                        &:nth-child(2) {
+                            font-size: 16px;
+                            color: black;
+                        }
+                    }
+                }
+            }
+        }
+
+        .main_table {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            height: 300px;
+            .main_table_list {
+                margin-left: 20px;
+                flex: 1;
+                .title {
+                    display: flex;
+                    align-items: center;
+                    span {
+                        font-weight: 600;
+                        font-size: 16px;
+                        color: #222222;
+                    }
+                }
+                .list_head {
+                    width: 100%;
+                    height: 35px;
+                    display: flex;
+                    align-items: center;
+                    background-color: #ececec;
+                    margin-top: 15px;
+                    .list_head_item {
+                        flex: 1;
+                        height: 100%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        font-size: 13px;
+                        color: #222222;
+                    }
+                }
+                .table_box {
+                    width: 100%;
+                    height: 234px;
+                    .list_content {
+                        width: 100%;
+                        height: 40px;
+                        display: flex;
+                        align-items: center;
+                        .list_head_item {
+                            flex: 1;
+                            height: 100%;
+                            display: flex;
+                            align-items: center;
+                            justify-content: center;
+                            font-size: 13px;
+                            color: #222222;
+                        }
+                    }
+                }
+            }
+            .main_table_list1 {
+                margin-left: 20px;
+                width: 300px;
+                flex-shrink: 0;
+                .title {
+                    font-weight: 600;
+                    font-size: 16px;
+                    color: #222222;
+                }
+                .list_head {
+                    width: 100%;
+                    height: 35px;
+                    display: flex;
+                    align-items: center;
+                    background-color: #ececec;
+                    margin-top: 15px;
+                    .list_head_item {
+                        flex: 1;
+                        height: 100%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        font-size: 13px;
+                        color: #222222;
+                    }
+                }
+                .table_box {
+                    width: 100%;
+                    height: 234px;
+                    .list_content {
+                        width: 100%;
+                        height: 40px;
+                        display: flex;
+                        align-items: center;
+                        .list_head_item {
+                            flex: 1;
+                            height: 100%;
+                            display: flex;
+                            align-items: center;
+                            justify-content: center;
+                            text-align: center;
+                            font-size: 13px;
+                            color: #222222;
+                        }
+                    }
+                }
+            }
+        }
+
+        .main_content {
+            display: flex;
+            height: 400px;
+
+            .title {
+                font-weight: 600;
+                font-size: 16px;
+                color: #222222;
+                /*margin-bottom: 20px;*/
+                margin-top: 20px;
+            }
+
+            .type_wrap {
+                flex: 11;
+                flex-shrink: 0;
+                height: calc(100% - 20px);
+                /*border-right: 12px solid #f7f7f7;*/
+
+
+                .echart1 {
+                    width: 100%;
+                    height: calc(100% - 60px);
+                }
+            }
+
+            .dept_wrap {
+                flex: 8;
+                flex-shrink: 0;
+                height: calc(100% - 20px);
+                padding-left: 20px;
+
+                #echart2 {
+                    width: 100%;
+                    height: calc(100% - 60px);
+                }
+            }
+        }
+    }
+</style>
diff --git a/admin/src/views/business/carStatistics.vue b/admin/src/views/business/carStatistics.vue
new file mode 100644
index 0000000..6efb20e
--- /dev/null
+++ b/admin/src/views/business/carStatistics.vue
@@ -0,0 +1,537 @@
+<template>
+    <div class="main_app1" v-if="info">
+        <div class="main_head">
+            <div class="main_head_title">
+                <span>鍏ュ洯杞﹁締缁熻鎬昏</span>
+                <el-radio-group v-model="isGroupBy" size="mini" @change="getData(), getRataLists(), getReportLists()">
+                    <el-radio-button :label="0">鎸夎溅娆$粺璁�</el-radio-button>
+                    <el-radio-button :label="1">鎸夎溅杈嗙粺璁�</el-radio-button>
+                </el-radio-group>
+            </div>
+            <div class="main_head_bottom">
+                <div class="main_head_item blue">
+                    <span>{{info.todayTotal}}</span>
+                    <span>浠婃棩</span>
+                </div>
+                <div class="main_head_item red">
+                    <span>{{info.yesterdayTotal}}</span>
+                    <span>鏄ㄦ棩</span>
+                </div>
+                <div class="main_head_item yellow">
+                    <span>{{info.weekTotal}}</span>
+                    <span>鏈懆</span>
+                </div>
+                <div class="main_head_item orange">
+                    <span>{{info.monthTotal}}</span>
+                    <span>鏈湀</span>
+                </div>
+                <div class="main_head_item darkBlue">
+                    <span>{{info.yearTotal}}</span>
+                    <span>鏈勾</span>
+                </div>
+            </div>
+        </div>
+        <div class="main_content">
+            <div class="type_wrap">
+                <div class="title">鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍</div>
+                <div id="echart1" ref="typeRef" v-if="info.cumulativeDataList"></div>
+                <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-else>
+                    <img style="width: 200px;" src="@/assets/images/default_homeimg.png" alt="">
+                </div>
+            </div>
+            <div class="dept_wrap">
+                <div class="title">
+                    <span>杞﹁締鍒嗙被缁熻</span>
+                    <el-radio-group style="margin-left: 20px;" v-model="dateType" size="mini" @change="changeDateType">
+                        <el-radio-button label="month">鏈�</el-radio-button>
+                        <el-radio-button label="year">骞�</el-radio-button>
+                    </el-radio-group>
+                    <el-date-picker
+                        v-model="value"
+                        :type="dateType"
+                        size="mini"
+                        @change="getRataLists()"
+                        :value-format="dateType === 'month' ? 'yyyy-MM' : 'yyyy'"
+                        style="margin-left: 20px; width: 130px;"
+                        placeholder="璇烽�夋嫨">
+                    </el-date-picker>
+                </div>
+                <div id="echart2" ref="deptRef" v-if="listZB.length > 0"></div>
+                <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-else>
+                    <img style="width: 200px;" src="@/assets/images/default_homeimg.png" alt="">
+                </div>
+            </div>
+        </div>
+        <div class="main_table">
+            <div class="main_table_list">
+                <div class="title" style="display: flex; align-items: center; justify-content: space-between;">
+                    <div>
+                        <span>鍏ュ洯杞﹁締缁熻琛�</span>
+                        <el-radio-group style="margin-left: 20px;" v-model="radio" size="mini" @change="changeBB">
+                            <el-radio-button label="month">鏈�</el-radio-button>
+                            <el-radio-button label="year">骞�</el-radio-button>
+                        </el-radio-group>
+                        <el-date-picker
+                                v-model="date1"
+                                :type="radio"
+                                size="mini"
+                                @change="getReportLists()"
+                                :value-format="radio === 'month' ? 'yyyy-MM' : 'yyyy'"
+                                style="margin-left: 20px; width: 130px;"
+                                placeholder="璇烽�夋嫨">
+                        </el-date-picker>
+                    </div>
+                    <el-button type="primary" size="mini" style="margin-left: 20px;" @click="daochu">瀵煎嚭</el-button>
+                </div>
+                <div class="list_head">
+                    <div class="list_head_item" v-for="(item, index) in column" :key="index">{{item}}</div>
+                </div>
+                <div class="table_box">
+                    <div class="list_content" v-for="(item, index) in list" :key="index">
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">鍌ㄨ繍绉�</div>
+                        <div class="list_head_item">鑱斿悎宸ユ埧</div>
+                        <div class="list_head_item">232</div>
+                        <div class="list_head_item">232</div>
+                    </div>
+                </div>
+            </div>
+            <div class="main_table_list1">
+                <div class="title">
+                    <span>鏈勾杞﹁締绱鍏ュ洯缁熻</span>
+                </div>
+                <div class="list_head">
+                    <div class="list_head_item">杞﹁締鍒嗙被</div>
+                    <div class="list_head_item">鍏ュ眬娆℃暟</div>
+                </div>
+                <div class="table_box">
+                    <div class="list_content" v-for="(item, index) in info.yearSortList" :key="index">
+                        <div class="list_head_item">{{item.name}}</div>
+                        <div class="list_head_item">{{item.total}}</div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+  import * as echarts from 'echarts'
+  import { getInParkUserData, getRataList, getReportList, reportExportExcel } from '@/api/business'
+  export default {
+    data() {
+      return {
+        info: null,
+        isGroupBy: 0,
+        radio: 'month',
+        value: '',
+        dateType: 'month',
+        date: '',
+        date1: '',
+
+        listZB: [],
+        column: [],
+        list: []
+      }
+    },
+    mounted() {
+      var now = new Date();
+      var year = now.getFullYear();
+      var month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+      this.value = `${year}-${month}`
+      this.date1 = `${year}-${month}`
+
+      this.getData()
+      this.getRataLists()
+      this.getReportLists()
+    },
+    methods: {
+      // 瀵煎嚭
+      daochu() {
+        reportExportExcel({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 0 }).then(res => {
+          this.download(res)
+          console.log(res.data)
+        })
+      },
+      changeBB() {
+        if (this.radio === 'month') {
+          let now = new Date();
+          let year = now.getFullYear();
+          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+          this.date1 = `${year}-${month}`
+        } else {
+          let now = new Date();
+          let year = now.getFullYear();
+          this.date1 = `${year}`
+        }
+        this.getReportLists()
+      },
+      // 鍏ュ洯杞﹁締缁熻琛�
+      getReportLists() {
+        getReportList({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 0 })
+            .then(res => {
+              console.log(res)
+
+              this.column = res.data.map(item => item[0])
+
+              const keys = res.data.map(row => row[0]); // 鑾峰彇閿悕
+              const values = res.data.map(row => row.slice(1, row.length)); // 鑾峰彇鍊�
+
+              this.list = values[0].map((_, index) => {
+                return keys.reduce((obj, key, i) => {
+                  obj[key] = values[i][index];
+                  return obj;
+                }, {});
+              });
+            })
+      },
+      changeDateType() {
+        if (this.dateType === 'month') {
+          let now = new Date();
+          let year = now.getFullYear();
+          let month = now.getMonth() + 1 > 9 ? now.getMonth() + 1 : `0${now.getMonth() + 1}`;
+          this.value = `${year}-${month}`
+        } else {
+          let now = new Date();
+          let year = now.getFullYear();
+          this.value = `${year}`
+        }
+        this.getRataLists()
+      },
+      // 杞﹁締鍒嗙被缁熻
+      getRataLists() {
+        getRataList({ dateStr: this.value, isGroupBy: this.isGroupBy, type: 0 })
+            .then(res => {
+              console.log(res)
+              this.listZB = res
+              this.$nextTick(() => {
+                this.initDept()
+              })
+            })
+      },
+      // 鍩虹鏁版嵁
+      getData() {
+        getInParkUserData({ isGroupBy: this.isGroupBy, type: 0 }).then(res => {
+          this.info = res
+          this.$nextTick(() => {
+            this.initType()
+          })
+        })
+      },
+      // 鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍
+      initType() {
+        if (!this.info.cumulativeDataList) return
+
+        const myChart = echarts.init(document.querySelector('#echart1'))
+
+        let names = this.info.cumulativeDataList.map(item => item.name)
+        let datas = this.info.cumulativeDataList.map(item => item.total)
+
+        let option = {
+          grid: {
+            left: '5%',
+            right: '10%',
+            bottom: '0%',
+            top: '20%',
+            containLabel: true
+          },
+          xAxis: {
+            type: 'category',
+            data: names
+          },
+          yAxis: {
+            type: 'value'
+          },
+          series: [
+            {
+              data: datas,
+              type: 'line'
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      },
+      // 杞﹁締鍒嗙被缁熻
+      initDept() {
+        if (!this.listZB) return
+
+        const myChart = echarts.init(document.querySelector('#echart2'))
+
+        let data = this.listZB.map(item => {
+          return {
+            value: item.total,
+            name: item.name
+          }
+        })
+
+        let option = {
+          series : [
+            {
+              name: '璁块棶鏉ユ簮',
+              type: 'pie',
+              radius: '55%',
+              data: data
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      },
+      initDept3() {
+        const myChart = echarts.init(document.querySelector('#echart3'))
+
+        let option = {
+          grid: {
+            left: '5%',
+            right: '10%',
+            bottom: '0%',
+            top: '20%',
+            containLabel: true
+          },
+          xAxis: {
+            type: 'category',
+            data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
+          },
+          yAxis: {
+            type: 'value'
+          },
+          series: [
+            {
+              data: [150, 230, 224, 218, 135, 147, 260],
+              type: 'line'
+            }
+          ]
+        }
+        myChart.setOption(option)
+        window.addEventListener('resize', function () { // 鎵ц
+          myChart.resize()
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .main_app1 {
+        width: 100%;
+        height: calc(100% - 44px);
+        overflow-y: auto;
+        overflow-x: hidden;
+        padding: 15px;
+        box-sizing: border-box;
+        background-color: #ffffff;
+        .main_head {
+            width: 100%;
+            display: flex;
+            align-items: center;
+            flex-direction: column;
+            margin-bottom: 20px;
+            .main_head_title {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                margin-bottom: 20px;
+                span {
+                    font-weight: 600;
+                    font-size: 16px;
+                    color: #222222;
+                    margin-right: 30px;
+                }
+            }
+            .main_head_bottom {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                .blue {
+                    border-left: 5px solid blue;
+                }
+                .red {
+                    border-left: 5px solid red;
+                }
+                .yellow {
+                    border-left: 5px solid yellow;
+                }
+                .orange {
+                    border-left: 5px solid orange;
+                }
+                .darkBlue {
+                    border-left: 5px solid #0000a8;
+                }
+                .main_head_item {
+                    width: 19%;
+                    height: 70px;
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    justify-content: center;
+                    box-sizing: border-box;
+                    border-radius: 5px;
+                    background-color: #ffffff;
+                    span {
+                        &:nth-child(1) {
+                            font-size: 22px;
+                            color: black;
+                            font-weight: bold;
+                        }
+                        &:nth-child(2) {
+                            font-size: 16px;
+                            color: black;
+                        }
+                    }
+                }
+            }
+        }
+
+        .main_table {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            height: 300px;
+            .main_table_list {
+                margin-left: 20px;
+                flex: 1;
+                .title {
+                    display: flex;
+                    align-items: center;
+                    span {
+                        font-weight: 600;
+                        font-size: 16px;
+                        color: #222222;
+                    }
+                }
+                .list_head {
+                    width: 100%;
+                    height: 35px;
+                    display: flex;
+                    align-items: center;
+                    background-color: #ececec;
+                    margin-top: 15px;
+                    .list_head_item {
+                        flex: 1;
+                        height: 100%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        font-size: 13px;
+                        color: #222222;
+                    }
+                }
+                .table_box {
+                    width: 100%;
+                    height: 234px;
+                    .list_content {
+                        width: 100%;
+                        height: 40px;
+                        display: flex;
+                        align-items: center;
+                        .list_head_item {
+                            flex: 1;
+                            height: 100%;
+                            display: flex;
+                            align-items: center;
+                            justify-content: center;
+                            font-size: 13px;
+                            color: #222222;
+                        }
+                    }
+                }
+            }
+            .main_table_list1 {
+                margin-left: 20px;
+                width: 300px;
+                flex-shrink: 0;
+                .title {
+                    font-weight: 600;
+                    font-size: 16px;
+                    color: #222222;
+                }
+                .list_head {
+                    width: 100%;
+                    height: 35px;
+                    display: flex;
+                    align-items: center;
+                    background-color: #ececec;
+                    margin-top: 15px;
+                    .list_head_item {
+                        flex: 1;
+                        height: 100%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        font-size: 13px;
+                        color: #222222;
+                    }
+                }
+                .table_box {
+                    width: 100%;
+                    height: 234px;
+                    .list_content {
+                        width: 100%;
+                        height: 40px;
+                        display: flex;
+                        align-items: center;
+                        .list_head_item {
+                            flex: 1;
+                            height: 100%;
+                            display: flex;
+                            align-items: center;
+                            justify-content: center;
+                            text-align: center;
+                            font-size: 13px;
+                            color: #222222;
+                        }
+                    }
+                }
+            }
+        }
+
+        .main_content {
+            display: flex;
+            height: 400px;
+
+            .title {
+                font-weight: 600;
+                font-size: 16px;
+                color: #222222;
+                /*margin-bottom: 20px;*/
+                margin-top: 20px;
+            }
+
+            .type_wrap {
+                flex: 11;
+                flex-shrink: 0;
+                height: calc(100% - 20px);
+                /*border-right: 12px solid #f7f7f7;*/
+
+
+                #echart1 {
+                    width: 100%;
+                    height: calc(100% - 60px);
+                }
+            }
+
+            .dept_wrap {
+                flex: 8;
+                flex-shrink: 0;
+                height: calc(100% - 20px);
+                padding-left: 20px;
+
+                #echart2 {
+                    width: 100%;
+                    height: calc(100% - 60px);
+                }
+            }
+        }
+    }
+</style>
diff --git a/admin/src/views/business/dangerStatic.vue b/admin/src/views/business/dangerStatic.vue
index 09678dd..d1ea42c 100644
--- a/admin/src/views/business/dangerStatic.vue
+++ b/admin/src/views/business/dangerStatic.vue
@@ -1,15 +1,37 @@
 <template>
-  <div class="main_app">
-    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear"
-      @changeForm='changeForm'>
-      <template #fastdate>
-        <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio">
-          <el-radio-button label="0">褰撳ぉ</el-radio-button>
-          <el-radio-button label="6">杩�7澶�</el-radio-button>
-          <el-radio-button label="29">杩�30澶�</el-radio-button>
-        </el-radio-group>
-      </template>
-    </QueryForm>
+  <div class="main_app1">
+    <div class="main_head">
+      <div class="main_head_item blue">
+        <span>{{totalList.total}}</span>
+        <span>鎬婚殣鎮f暟</span>
+      </div>
+      <div class="main_head_item red">
+        <span>{{totalList.waitDeal}}</span>
+        <span>寰呭鐞�</span>
+      </div>
+      <div class="main_head_item yellow">
+        <span>{{totalList.dealFinish}}</span>
+        <span>宸叉暣鏀�</span>
+      </div>
+      <div class="main_head_item orange">
+        <span>{{totalList.back}}</span>
+        <span>宸查��鍥�</span>
+      </div>
+      <div class="main_head_item darkBlue">
+        <span>{{totalList.todayNew}}</span>
+        <span>浠婃棩鏂板</span>
+      </div>
+    </div>
+<!--    <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getData(1)" @clear="clear"-->
+<!--      @changeForm='changeForm'>-->
+<!--      <template #fastdate>-->
+<!--        <el-radio-group v-model="filters.fastdate" size="small" @input="changeRadio">-->
+<!--          <el-radio-button label="0">褰撳ぉ</el-radio-button>-->
+<!--          <el-radio-button label="6">杩�7澶�</el-radio-button>-->
+<!--          <el-radio-button label="29">杩�30澶�</el-radio-button>-->
+<!--        </el-radio-group>-->
+<!--      </template>-->
+<!--    </QueryForm>-->
     <div class="main_content">
       <div class="type_wrap">
         <div class="title">闅愭偅绫诲瀷缁熻</div>
@@ -24,6 +46,30 @@
         <div v-show="deptList && deptList.length > 0" class="echart2" ref="deptRef"></div>
         <div v-show="deptList.length == 0" style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;">
           <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt="">
+        </div>
+      </div>
+    </div>
+    <div class="main_table">
+      <div class="main_table_echart">
+        <div class="title">鏈勾闅愭偅瓒嬪娍</div>
+        <div id="echart3" v-if="yearList.length > 0"></div>
+        <div v-else style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;">
+          <img style="width: 240px;" src="@/assets/images/default_homeimg.png" alt="">
+        </div>
+      </div>
+      <div class="main_table_list">
+        <div class="title">鏈湀棰戠箒鍙戠敓闅愭偅鍖哄煙Top10</div>
+        <div class="list_head">
+          <div class="list_head_item">璐d换閮ㄩ棬</div>
+          <div class="list_head_item">闅愭偅鍖哄煙</div>
+          <div class="list_head_item">闅愭偅鏁伴噺</div>
+        </div>
+        <div class="table_box">
+          <div class="list_content" v-for="(item, index) in departmentList" :key="index">
+            <div class="list_head_item">{{item.name}}</div>
+            <div class="list_head_item">{{item.categoryName}}</div>
+            <div class="list_head_item">{{item.total}}</div>
+          </div>
         </div>
       </div>
     </div>
@@ -74,10 +120,20 @@
       },
       typeList: [],
       deptList: [],
+      totalList: {
+        total: 0,
+        waitDeal: 0,
+        dealFinish: 0,
+        back: 0,
+        todayNew: 0
+      },
+      yearList: [],
+      departmentList: []
     }
   },
   mounted() {
     this.changeRadio('29')
+    this.initDept3()
     // this.getData()
   },
   methods: {
@@ -90,11 +146,22 @@
     getData(page) {
       hiddenDangerDataPost({ ...this.filters }).then(res => {
         if (res) {
+          this.totalList.total = res.total || 0
+          this.totalList.waitDeal = res.waitDeal || 0
+          this.totalList.dealFinish = res.dealFinish || 0
+          this.totalList.back = res.back || 0
+          this.totalList.todayNew = res.todayNew || 0
+
+          this.yearList = res.yearList
+
+          this.departmentList = res.departmentList.slice(0, 10)
+
           this.typeList = res.cateList || []
           this.deptList = res.departmentList || []
           this.$nextTick(() => {
             this.initType()
             this.initDept()
+            this.initDept3()
           })
 
         }
@@ -114,8 +181,8 @@
       let option = {
         grid: {
           left: '0%',
-          // right: '4%',
-          // bottom: '3%',
+          right: '0%',
+          bottom: '0%',
           top: '0%',
           containLabel: true
         },
@@ -126,7 +193,7 @@
             left: '45%',
             textStyle: {
               color: '#666666',
-              fontSize: 16,
+              fontSize: 13,
             },
           }, {
             text: total,
@@ -134,7 +201,7 @@
             left: '47.6%',
             textStyle: {
               color: '#080404',
-              fontSize: 24,
+              fontSize: 16,
               fontWeight: 'bold',
             },
           }],
@@ -157,7 +224,7 @@
         series: [
           {
             type: 'pie',
-            radius: ['24%', '40%'],
+            radius: ['34%', '50%'],
             label: {
               formatter: "{a|{b}}\n\n{c} | {d}%",
               rich: {
@@ -198,6 +265,13 @@
       const myChart = echarts.init(document.querySelector('.echart2'))
 
       let option = {
+        grid: {
+          left: '10%',
+          right: '10%',
+          bottom: '0%',
+          top: '20%',
+          containLabel: true
+        },
         xAxis: {
           type: 'category',
           data: this.deptList.map(i => i.name),
@@ -241,6 +315,41 @@
         myChart.resize()
       })
     },
+    initDept3() {
+      if (this.yearList.length === 0) return
+
+      const myChart = echarts.init(document.querySelector('#echart3'))
+
+      let names = this.yearList.map(item => item.name)
+      let datas = this.yearList.map(item => item.total)
+
+      let option = {
+        grid: {
+          left: '5%',
+          right: '10%',
+          bottom: '0%',
+          top: '20%',
+          containLabel: true
+        },
+        xAxis: {
+          type: 'category',
+          data: names
+        },
+        yAxis: {
+          type: 'value'
+        },
+        series: [
+          {
+            data: datas,
+            type: 'line'
+          }
+        ]
+      }
+      myChart.setOption(option)
+      window.addEventListener('resize', function () { // 鎵ц
+        myChart.resize()
+      })
+    },
     clear() {
       this.filters = {}
       this.getData()
@@ -253,42 +362,160 @@
 /*.main_app {
   height: 100%;
 }*/
-
-.main_content {
-  display: flex;
-  height: calc(100% - 100px);
-
-  .title {
-    font-weight: 600;
-    font-size: 16px;
-    color: #222222;
+.main_app1 {
+  width: 100%;
+  height: calc(100% - 44px);
+  overflow-y: auto;
+  overflow-x: hidden;
+  padding: 15px;
+  box-sizing: border-box;
+  background-color: #ffffff;
+  .main_head {
+    width: 100%;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
     margin-bottom: 20px;
-    margin-top: 20px;
-  }
-
-  .type_wrap {
-    flex: 11;
-    flex-shrink: 0;
-    height: calc(100% - 20px);
-    border-right: 12px solid #f7f7f7;
-
-
-    .echart1 {
-      width: 100%;
-      height: calc(100% - 60px);
+    .blue {
+      border-left: 5px solid blue;
+    }
+    .red {
+      border-left: 5px solid red;
+    }
+    .yellow {
+      border-left: 5px solid yellow;
+    }
+    .orange {
+      border-left: 5px solid orange;
+    }
+    .darkBlue {
+      border-left: 5px solid #0000a8;
+    }
+    .main_head_item {
+      width: 19%;
+      height: 70px;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      box-sizing: border-box;
+      border-radius: 5px;
+      background-color: #ffffff;
+      span {
+        &:nth-child(1) {
+          font-size: 22px;
+          color: black;
+          font-weight: bold;
+        }
+        &:nth-child(2) {
+          font-size: 16px;
+          color: black;
+        }
+      }
     }
   }
 
-  .dept_wrap {
-    flex: 10;
-    flex-shrink: 0;
-    height: calc(100% - 20px);
-    padding-left: 20px;
+  .main_table {
+    display: flex;
+    align-items: start;
+    justify-content: space-between;
+    .main_table_echart {
+      flex: 1;
+      height: 400px;
+      .title {
+        font-weight: 600;
+        font-size: 16px;
+        color: #222222;
+      }
+      #echart3 {
+        width: 100%;
+        height: calc(100% - 33px);
+      }
+    }
+    .main_table_list {
+      margin-left: 20px;
+      flex-shrink: 0;
+      width: 500px;
+      .title {
+        font-weight: 600;
+        font-size: 16px;
+        color: #222222;
+      }
+      .list_head {
+        width: 100%;
+        height: 35px;
+        display: flex;
+        align-items: center;
+        background-color: #ececec;
+        margin-top: 15px;
+        .list_head_item {
+          flex: 1;
+          height: 100%;
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          font-size: 13px;
+          color: #222222;
+        }
+      }
+      .table_box {
+        width: 100%;
+        .list_content {
+          width: 100%;
+          height: 35px;
+          display: flex;
+          align-items: center;
+          .list_head_item {
+            flex: 1;
+            height: 100%;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            font-size: 13px;
+            color: #222222;
+          }
+        }
+      }
+    }
+  }
 
-    .echart2 {
-      width: 100%;
-      height: calc(100% - 60px);
+  .main_content {
+    display: flex;
+    height: 500px;
+
+    .title {
+      font-weight: 600;
+      font-size: 16px;
+      color: #222222;
+      /*margin-bottom: 20px;*/
+      margin-top: 20px;
+    }
+
+    .type_wrap {
+      flex: 11;
+      flex-shrink: 0;
+      height: calc(100% - 20px);
+      /*border-right: 12px solid #f7f7f7;*/
+
+
+      .echart1 {
+        width: 100%;
+        height: calc(100% - 60px);
+      }
+    }
+
+    .dept_wrap {
+      flex: 10;
+      flex-shrink: 0;
+      height: calc(100% - 20px);
+      padding-left: 20px;
+
+      .echart2 {
+        width: 100%;
+        height: calc(100% - 60px);
+      }
     }
   }
 }
+
 </style>
diff --git a/admin/src/views/business/visits.vue b/admin/src/views/business/visits.vue
index 1b59993..00d7881 100644
--- a/admin/src/views/business/visits.vue
+++ b/admin/src/views/business/visits.vue
@@ -12,6 +12,17 @@
         <el-form-item label="璁垮鍗曚綅" prop="companyName">
           <el-input v-model="searchForm.companyName" placeholder="璇疯緭鍏ヨ瀹㈠崟浣�" @keypress.enter.native="search"></el-input>
         </el-form-item>
+        <el-form-item label="璧峰鏃堕棿" prop="date">
+          <el-date-picker
+            v-model="searchForm.date"
+            type="daterange"
+            @change="changeDate"
+            value-format="yyyy-MM-dd"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡">
+          </el-date-picker>
+        </el-form-item>
         <el-form-item label="瀹℃壒鐘舵��" prop="status">
           <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨">
             <el-option label="寰呮彁浜ゅ鎵�" value="0"></el-option>
@@ -128,7 +139,10 @@
         companyName: '',
         idcardNo: '',
         status: '',
-        type: 0
+        type: 0,
+        queryStarttime: '',
+        queryEndtime: '',
+        date: []
       }
     }
   },
@@ -150,6 +164,23 @@
     })
   },
   methods: {
+    // 鎼滅储妗嗛噸缃�
+    reset () {
+      this.$refs.searchForm.resetFields()
+      this.searchForm.queryStarttime = ''
+      this.searchForm.queryEndtime = ''
+      this.search()
+    },
+    changeDate(e) {
+      if (e) {
+        this.searchForm.queryStarttime = e[0]
+        this.searchForm.queryEndtime = e[1]
+      } else {
+        this.searchForm.queryStarttime = ''
+        this.searchForm.queryEndtime = ''
+      }
+      this.search()
+    },
     handleDetail(row) {
       this.isShowDetail = true
       console.log('row', row)
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 623c258..865605b 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -32,8 +32,8 @@
               <img src="@/assets/icons/home_icon2.png" alt="" />
             </div>
             <div class="content">
-              <div>璁垮浜烘(浜�)锛歿{ headerData.visitUserNum }}</div>
-              <div>绛剧浜烘(浜�)锛歿{ headerData.signLevelNum }}</div>
+              <div>鍏ュ洯浜烘(浜�)锛歿{ headerData.visitUserNum }}</div>
+              <div>鍑哄洯浜烘(浜�)锛歿{ headerData.signLevelNum }}</div>
             </div>
           </div>
           <div class="card">
@@ -100,7 +100,11 @@
             </div>
             <div class="wrap static2">
               <div class="header">
-                <div class="home_title">闀挎湡鐩稿叧鏂瑰垎甯�</div>
+<!--                <div class="home_title">闀挎湡鐩稿叧鏂瑰垎甯�</div>-->
+                <el-radio-group v-model="tabPosition" @change="changeType">
+                  <el-radio-button label="top">闀挎湡鐩稿叧鏂瑰垎甯�</el-radio-button>
+                  <el-radio-button label="right">鍐呴儴浜哄憳鍒嗗竷</el-radio-button>
+                </el-radio-group>
                 <!-- <div class="df_ac more">
                   鏇村<i class="el-icon-arrow-right"></i>
                 </div> -->
@@ -226,6 +230,7 @@
   },
   data () {
     return {
+      tabPosition: 'top',
       colors,
       nowDate: '',
       nowWeek: '',
@@ -264,6 +269,10 @@
     this.initData()
   },
   methods: {
+    changeType(e) {
+      console.log(e)
+      this.initEchart2()
+    },
     getNoticeList(){
       syncHkNotice().then(res => {
 
@@ -393,8 +402,9 @@
         this.headerData = res || {}
         const arr = []
         arr.push({ name: '璁垮', value: this.headerData.inParkVisitUserNum })
-        arr.push({ name: '鍐呴儴鍛樺伐', value: this.headerData.todayInParkUserNum - this.headerData.inParkLwUserNum - this.headerData.inParkVisitUserNum })
+        arr.push({ name: '鍐呴儴鍛樺伐', value: this.headerData.todayInParkUserNum - this.headerData.inParkLwUserNum - this.headerData.inParkVisitUserNum - this.headerData.inParkDriverUserNum })
         arr.push({ name: '闀挎湡鐩稿叧鏂�', value: this.headerData.inParkLwUserNum })
+        arr.push({ name: '璐ц繍鍙告満', value: this.headerData.inParkDriverUserNum })
         arr.sort((a, b) => b.value - a.value)
         this.manningRatio = arr
         this.initEchart1()
@@ -497,6 +507,7 @@
       })
     },
     initEchart2 () {
+      console.log('initEchart2')
       const myChart = echarts.init(document.getElementById('echart2'))
       const that = this
       myChart.setOption({
@@ -526,11 +537,11 @@
         },
         yAxis: {
           type: 'category',
-          data: that.staticData.lwList.map(i => i.name)
+          data: that.tabPosition === 'top' ? that.staticData.lwList.map(i => i.name) : that.staticData.internalList.map(i => i.name)
         },
         series: [
           {
-            data: that.staticData.lwList.map(i => i.num),
+            data: that.tabPosition === 'top' ? that.staticData.lwList.map(i => i.num) : that.staticData.internalList.map(i => i.num),
             type: 'bar',
             barWidth: 10,
             itemStyle: {
diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue
index 2e55a8a..ff9dd46 100644
--- a/admin/src/views/platform/index.vue
+++ b/admin/src/views/platform/index.vue
@@ -95,6 +95,7 @@
               </div>
               <div class="right">
                 <el-button v-if="task.status == 5" plain @click="handleErr(task)">寮傚父鎸傝捣</el-button>
+                <el-button v-if="task.status == 8" plain @click="restore(task)">鎭㈠浣滀笟</el-button>
                 <el-button v-if="task.status == 5 || task.status == 8" plain
                   @click="handleTransform(item, task)">杞Щ鏈堝彴</el-button>
                 <el-button v-if="task.status == 4" plain @click="handlePass(task)">杩囧彿</el-button>
@@ -163,7 +164,8 @@
   platformMove,
   updUserPlatformConfig,
 
-  listByGroupId
+  listByGroupId,
+  restoreWork
 } from '@/api'
 import PlatformQueuing from './components/PlatformQueuing.vue'
 import WaybillDetail from './components/WaybillDetail.vue'
@@ -280,6 +282,18 @@
         })
       })
     },
+    restore(item) {
+      this.$confirm('鎮ㄧ‘璁よ瀵硅浠诲姟杩涜鎭㈠浣滀笟鍚�', '娓╅Θ鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        restoreWork({ jobId: item.id }).then(ress => {
+          Message.success('鎭㈠浣滀笟鎴愬姛')
+          this.getPlatGroupList()
+        })
+      })
+    },
     platgroupClick(item) {
       this.activeGroup = { ...item }
       this.circulInitTaskList()
diff --git a/pda/api/index.js b/pda/api/index.js
index 48febec..3eb94df 100644
--- a/pda/api/index.js
+++ b/pda/api/index.js
@@ -166,4 +166,12 @@
     method: 'get',
     data
   })
+}
+//  鎭㈠浣滀笟
+export const restoreWork = (data) => {
+  return http({
+    url: 'visitsAdmin/cloudService/web/platformJob/restoreWork',
+    method: 'post',
+    data
+  })
 }
\ No newline at end of file
diff --git a/pda/pages/index/center.vue b/pda/pages/index/center.vue
index 3b64e25..ad0c9c2 100644
--- a/pda/pages/index/center.vue
+++ b/pda/pages/index/center.vue
@@ -63,6 +63,7 @@
 					<view v-if="item.status == 4" class="btn active" @click="handleWork(item)">寮�濮嬩綔涓�</view>
 
 					<view v-if="item.status == 5" class="btn" @click="handleErr(item)">寮傚父鎸傝捣</view>
+					<view v-if="item.status == 8" class="btn" @click="restore(item)">寮傚父鎸傝捣</view>
 					<view v-if="item.status == 5 || item.status == 8" class="btn" @click="handleTransform(item)">杞Щ鏈堝彴</view>
 					<view v-if="item.status == 5 || item.status == 8" class="btn active" @click="handleFinish(item)">浣滀笟瀹屾垚</view>
 				</view>
@@ -227,7 +228,8 @@
 		platformMove,
 		platformErr,
 		platformOverNumber,
-		wmsJobDetail
+		wmsJobDetail,
+		restoreWork
 	} from '@/api'
 	import {
 		statusMap
@@ -565,6 +567,21 @@
 						}
 					}
 				})
+			},
+			restore(item) {
+				uni.showModal({
+					content: '鎮ㄧ‘璁よ瀵硅浠诲姟杩涜鎭㈠浣滀笟鍚�',
+					success: (res) => {
+						if (res.confirm) {
+							restoreWork({
+								jobId: item.id
+							}).then(ress => {
+								this.showToast('鎭㈠浣滀笟鎴愬姛')
+								this.getPlatformTask()
+							})
+						}
+					}
+				})
 			}
 		}
 	}
diff --git a/screen/index.html b/screen/index.html
index 307a090..d510228 100644
--- a/screen/index.html
+++ b/screen/index.html
@@ -4,7 +4,7 @@
     <meta charset="UTF-8">
     <link rel="icon" href="/favicon.ico">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>瀹夋嘲鐗╂祦鏈堝彴鍙彿澶у睆</title>
+    <title>瀹夋嘲鏅烘収鐗╂祦鍥尯绯荤粺</title>
   </head>
   <body>
     <div id="app"></div>

--
Gitblit v1.9.3