| <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" @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-show="info.cumulativeDataList"></div> | 
|                 <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-show="!info.cumulativeDataList"> | 
|                     <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" @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" | 
|                         :clearable="false" | 
|                         @change="getRataLists()" | 
|                         :value-format="dateType === 'month' ? 'yyyy-MM' : 'yyyy'" | 
|                         style="margin-left: 10px; width: 120px;" | 
|                         placeholder="请选择"> | 
|                     </el-date-picker> | 
|                 </div> | 
|                 <div id="echart_2" v-show="listZB.length > 0"></div> | 
|                 <div style="width: 100%;height: 100%;display: flex;align-items: center;justify-content: center;" v-show="listZB.length === 0"> | 
|                     <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 style="display: flex; align-items: center;"> | 
|                         <span>入园车辆统计表</span> | 
|                         <el-radio-group style="margin-left: 20px;" v-model="radio" @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" | 
|                             :clearable="false" | 
|                             @change="getReportLists()" | 
|                             :value-format="radio === 'month' ? 'yyyy-MM' : 'yyyy'" | 
|                             style="margin-left: 10px; width: 120px;" | 
|                             placeholder="请选择"> | 
|                         </el-date-picker> | 
|                     </div> | 
|                     <el-button type="primary" style="margin-left: 20px;" icon="el-icon-upload2" @click="daochu">导出</el-button> | 
|                 </div> | 
|                 <template v-if="column.length > 0"> | 
|                     <el-table | 
|                         style="width: 100%; margin-top: 15px;" | 
|                         :data="list" | 
|                         header-row-style="background-color: #F7F7F7;" | 
|                         border | 
|                     > | 
|                         <el-table-column :prop="item" :label="item" align="center" :fixed="index === 0 ? true : index === column.length - 1 ? 'right' : false" v-for="(item, index) in column" :key="index"></el-table-column> | 
|                     </el-table> | 
|                 </template> | 
|                 <div class="list_wu" v-else>暂无数据</div> | 
|             </div> | 
|             <div class="main_table_list1"> | 
|                 <div class="title"> | 
|                     <span>本年车辆累计入园统计</span> | 
|                 </div> | 
|                 <el-table | 
|                     style="width: 100%; margin-top: 15px;" | 
|                     :data="info.yearSortList" | 
|                     header-row-style="background-color: #F7F7F7;" | 
|                     border | 
|                 > | 
|                     <el-table-column prop="name" label="车辆分类" align="center"></el-table-column> | 
|                     <el-table-column prop="total" label="入园次数" align="center"></el-table-column> | 
|                 </el-table> | 
|             </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 => { | 
|   | 
|               this.column = res[0] | 
|   | 
|               this.list = res.slice(1).map(row => { | 
|                 const obj = {}; | 
|                 this.column.forEach((header, index) => { | 
|                   obj[header] = row[index]; | 
|                 }); | 
|                 return obj; | 
|               }); | 
|               // const keys = res.map(row => row[0]); // 获取键名 | 
|               // const values = res.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; | 
|               //   }, {}); | 
|               // }); | 
|   | 
|               console.log(this.column) | 
|               console.log(this.list) | 
|   | 
|               // if (res.length === 0) { | 
|               //   this.column = [] | 
|               //   this.list = [] | 
|               //   return | 
|               // } | 
|               // | 
|               // this.column = res[0] | 
|               // this.list = res.slice(1, res.length); | 
|               // | 
|               // console.log(res) | 
|             }) | 
|       }, | 
|       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 => { | 
|               this.listZB = res | 
|               // this.$nextTick(() => { | 
|               //   this.initDept() | 
|               // }) | 
|               setTimeout(() => { | 
|                 this.initDept() | 
|               },1000) | 
|             }) | 
|       }, | 
|       // 基础数据 | 
|       getData() { | 
|         getInParkUserData({ isGroupBy: this.isGroupBy, type: 0 }).then(res => { | 
|           this.info = res | 
|           // this.$nextTick(() => { | 
|           //   this.initType() | 
|           // }) | 
|           setTimeout(() => { | 
|             this.initType() | 
|           }, 1000) | 
|         }) | 
|       }, | 
|       // 全年入园车辆趋势 | 
|       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 = { | 
|           tooltip: { | 
|             trigger: 'axis', | 
|             axisPointer: { | 
|               type: 'line' | 
|             } | 
|           }, | 
|           legend: { | 
|             show: false, | 
|             orient: 'vertical', | 
|             left: 'left' | 
|           }, | 
|           graphic: { | 
|             elements: [ | 
|               { | 
|                 type: 'text', | 
|                 left: 'left', | 
|                 top: 'top', | 
|                 style: { | 
|                   text: '车辆数', | 
|                   textAlign: 'center', | 
|                   fill: '#333' | 
|                 } | 
|               } | 
|             ] | 
|           }, | 
|           grid: { | 
|             left: '0%', | 
|             right: '5%', | 
|             bottom: '10%', | 
|             top: '20%', | 
|             containLabel: true | 
|           }, | 
|           xAxis: { | 
|             type: 'category', | 
|             data: names | 
|           }, | 
|           yAxis: { | 
|             type: 'value', | 
|             axisLine: { | 
|               show: true | 
|             }, | 
|             axisLabel: { | 
|               formatter: function (value) { | 
|                 // 四舍五入到最近的整数 | 
|                 return Math.round(value); | 
|               } | 
|             } | 
|           }, | 
|           series: [ | 
|             { | 
|               data: datas, | 
|               name: '入园车辆', | 
|               type: 'line', | 
|               areaStyle: { | 
|                 normal: { | 
|                   color: { | 
|                     x: 0, | 
|                     y: 0, | 
|                     x2: 0, | 
|                     y2: 1, | 
|                     colorStops: [{ | 
|                       offset: 0, | 
|                       color: '#207FF7' // 0% 处的颜色 | 
|                     }, { | 
|                       offset: 1, | 
|                       color: 'rgba(255,255,255,.2)' // 100% 处的颜色 | 
|                     }], | 
|                     globalCoord: false // 缺省为 false | 
|                   } | 
|                 } | 
|               }, | 
|               lineStyle: { // 线条样式 | 
|                 color: { | 
|                   type: 'linear', | 
|                   x: 0, | 
|                   y: 0, | 
|                   x2: 0, | 
|                   y2: 1, | 
|                   colorStops: [{ | 
|                     offset: 0, color: '#207FF7' // 0% 处的颜色 | 
|                   }, { | 
|                     offset: 1, color: '#207FF7' // 100% 处的颜色 | 
|                   }] | 
|                 }, | 
|                 width: 2 // 线条粗细 | 
|               }, | 
|               symbol: 'circle', | 
|               symbolSize: 10, | 
|               itemStyle: { | 
|                 borderWidth: 1, | 
|                 borderColor: '#fff', | 
|                 color: '#207FF7' | 
|               }, | 
|               smooth: false | 
|             } | 
|           ] | 
|         } | 
|         myChart.setOption(option) | 
|         window.addEventListener('resize', function () { // 执行 | 
|           myChart.resize() | 
|         }) | 
|       }, | 
|       // 车辆分类统计 | 
|       initDept() { | 
|         if (this.listZB.length === 0) return | 
|   | 
|         const dom = document.getElementById('echart_2') | 
|         console.log(dom) | 
|         const myChart = echarts.init(dom) | 
|   | 
|         let data = this.listZB.map(item => { | 
|           return { | 
|             value: item.total, | 
|             name: item.name | 
|           } | 
|         }) | 
|   | 
|         let option = { | 
|           tooltip: { | 
|             trigger: 'item' | 
|           }, | 
|           legend: { | 
|             show: false, | 
|             orient: 'vertical', | 
|             left: 'left' | 
|           }, | 
|           series : [ | 
|             { | 
|               name: '访问来源', | 
|               type: 'pie', | 
|               radius: ['34%', '50%'], | 
|               labelLine: { | 
|                 normal: { | 
|                   length: 30, | 
|                   length2: 70, | 
|                 } | 
|               }, | 
|               label: { | 
|                 formatter: "{a|{b}} {d}%", | 
|                 rich: { | 
|                   a: { | 
|                     color: '#333333', | 
|                     fontSize: 14, | 
|                     fontWeight: 500 | 
|                   } | 
|                 }, | 
|                 padding: [0,-50,20,-100] | 
|               }, | 
|               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: #F4F7FC; | 
|         .main_head { | 
|             width: 100%; | 
|             display: flex; | 
|             align-items: center; | 
|             flex-direction: column; | 
|             margin-bottom: 10px; | 
|             background-color: #ffffff; | 
|             padding: 20px; | 
|             box-sizing: border-box; | 
|             .main_head_title { | 
|                 width: 100%; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 margin-bottom: 20px; | 
|                 span { | 
|                     font-weight: 500; | 
|                     font-size: 18px; | 
|                     color: #222222; | 
|                     margin-right: 30px; | 
|                 } | 
|             } | 
|             .main_head_bottom { | 
|                 width: 100%; | 
|                 display: flex; | 
|                 align-items: center; | 
|                 justify-content: space-between; | 
|                 .blue { | 
|                     border-left: 8px solid #12BB8B; | 
|                 } | 
|                 .red { | 
|                     border-left: 8px solid #F6CF46; | 
|                 } | 
|                 .yellow { | 
|                     border-left: 8px solid #5DC9FB; | 
|                 } | 
|                 .orange { | 
|                     border-left: 8px solid #FF9E56; | 
|                 } | 
|                 .darkBlue { | 
|                     border-left: 8px solid #6B6EFF; | 
|                 } | 
|                 .main_head_item { | 
|                     width: 19%; | 
|                     height: 112px; | 
|                     display: flex; | 
|                     flex-direction: column; | 
|                     align-items: center; | 
|                     justify-content: center; | 
|                     box-sizing: border-box; | 
|                     border-radius: 5px; | 
|                     background-color: #F4F7FC; | 
|                     span { | 
|                         &:nth-child(1) { | 
|                             font-weight: 600; | 
|                             font-size: 30px; | 
|                             color: #222222; | 
|                         } | 
|                         &:nth-child(2) { | 
|                             font-weight: 400; | 
|                             font-size: 14px; | 
|                             color: #222222; | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|         .main_table { | 
|             display: flex; | 
|             align-items: start; | 
|             justify-content: space-between; | 
|             margin-top: 10px; | 
|             .main_table_list { | 
|                 background-color: #ffffff; | 
|                 padding: 20px; | 
|                 box-sizing: border-box; | 
|                 width: 69%; | 
|                 .title { | 
|                     display: flex; | 
|                     align-items: center; | 
|                     span { | 
|                         font-weight: 500; | 
|                         font-size: 18px; | 
|                         color: #222222; | 
|                     } | 
|                 } | 
|                 .list_wu { | 
|                     width: 100%; | 
|                     height: 100px; | 
|                     line-height: 100px; | 
|                     text-align: center; | 
|                     font-size: 16px; | 
|                     color: #222222; | 
|                 } | 
|                 .list_head { | 
|                     width: 100%; | 
|                     height: 50px; | 
|                     display: flex; | 
|                     align-items: center; | 
|                     background-color: #F7F7F7; | 
|                     border-left: 1px solid #DFE2E8; | 
|                     border-top: 1px solid #DFE2E8; | 
|                     margin-top: 15px; | 
|                     .list_head_item { | 
|                         flex: 1; | 
|                         height: 100%; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         justify-content: center; | 
|                         font-size: 13px; | 
|                         color: #222222; | 
|                         font-weight: 500; | 
|                         border-right: 1px solid #DFE2E8; | 
|                     } | 
|                 } | 
|                 .table_box { | 
|                     width: 100%; | 
|                     border-bottom: 1px solid #DFE2E8; | 
|                     .list_content { | 
|                         width: 100%; | 
|                         height: 50px; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         border-left: 1px solid #DFE2E8; | 
|                         border-top: 1px solid #DFE2E8; | 
|                         .list_head_item { | 
|                             flex: 1; | 
|                             height: 100%; | 
|                             display: flex; | 
|                             border-right: 1px solid #DFE2E8; | 
|                             align-items: center; | 
|                             justify-content: center; | 
|                             font-size: 13px; | 
|                             color: #222222; | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|             .main_table_list1 { | 
|                 width: 30%; | 
|                 padding: 20px; | 
|                 box-sizing: border-box; | 
|                 flex-shrink: 0; | 
|                 background-color: #ffffff; | 
|                 .title { | 
|                     font-weight: 500; | 
|                     font-size: 18px; | 
|                     color: #222222; | 
|                 } | 
|                 .list_wu { | 
|                     width: 100%; | 
|                     height: 100px; | 
|                     line-height: 100px; | 
|                     text-align: center; | 
|                     font-size: 16px; | 
|                     color: #222222; | 
|                 } | 
|                 .list_head { | 
|                     width: 100%; | 
|                     height: 50px; | 
|                     display: flex; | 
|                     align-items: center; | 
|                     background-color: #F7F7F7; | 
|                     border-left: 1px solid #DFE2E8; | 
|                     border-top: 1px solid #DFE2E8; | 
|                     margin-top: 15px; | 
|                     .list_head_item { | 
|                         flex: 1.8; | 
|                         height: 100%; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         justify-content: center; | 
|                         font-size: 13px; | 
|                         color: #222222; | 
|                         font-weight: 500; | 
|                         border-right: 1px solid #DFE2E8; | 
|                         &:last-child { | 
|                            flex: 1; | 
|                         } | 
|                     } | 
|                 } | 
|                 .table_box { | 
|                     width: 100%; | 
|                     border-bottom: 1px solid #DFE2E8; | 
|                     .list_content { | 
|                         width: 100%; | 
|                         height: 50px; | 
|                         display: flex; | 
|                         align-items: center; | 
|                         border-left: 1px solid #DFE2E8; | 
|                         border-top: 1px solid #DFE2E8; | 
|                         .list_head_item { | 
|                             flex: 1.8; | 
|                             height: 100%; | 
|                             display: flex; | 
|                             align-items: center; | 
|                             border-right: 1px solid #DFE2E8; | 
|                             justify-content: center; | 
|                             text-align: center; | 
|                             font-size: 13px; | 
|                             color: #222222; | 
|                             &:last-child { | 
|                                 flex: 1; | 
|                             } | 
|                         } | 
|                     } | 
|                 } | 
|             } | 
|         } | 
|   | 
|         .main_content { | 
|             display: flex; | 
|             align-items: center; | 
|             justify-content: space-between; | 
|             height: 350px; | 
|   | 
|             .title { | 
|                 font-weight: 500; | 
|                 font-size: 18px; | 
|                 color: #222222; | 
|             } | 
|   | 
|             .type_wrap { | 
|                 flex: 1; | 
|                 height: 100%; | 
|                 background-color: #ffffff; | 
|                 padding: 20px; | 
|                 box-sizing: border-box; | 
|                 /*border-right: 12px solid #f7f7f7;*/ | 
|   | 
|   | 
|                 #echart1 { | 
|                     width: 100%; | 
|                     height: 100%; | 
|                     margin-top: 18px; | 
|                 } | 
|             } | 
|   | 
|             .dept_wrap { | 
|                 width: 420px; | 
|                 flex-shrink: 0; | 
|                 height: 100%; | 
|                 background-color: #ffffff; | 
|                 padding: 20px; | 
|                 box-sizing: border-box; | 
|                 margin-left: 10px; | 
|                 #echart_2 { | 
|                     width: 100%; | 
|                     height: 100%; | 
|                 } | 
|             } | 
|         } | 
|     } | 
| </style> |