From 7298d5354963a88643a543b51b90192dc9fc934c Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 11 九月 2025 18:43:14 +0800
Subject: [PATCH] 最新版本541200007

---
 admin/src/views/business/carStatistics.vue |  420 ++++++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 295 insertions(+), 125 deletions(-)

diff --git a/admin/src/views/business/carStatistics.vue b/admin/src/views/business/carStatistics.vue
index 6efb20e..6d31df8 100644
--- a/admin/src/views/business/carStatistics.vue
+++ b/admin/src/views/business/carStatistics.vue
@@ -3,7 +3,7 @@
         <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-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>
@@ -34,30 +34,30 @@
         <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>
+                <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" size="mini" @change="changeDateType">
-                        <el-radio-button label="month">鏈�</el-radio-button>
-                        <el-radio-button label="year">骞�</el-radio-button>
+                    <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"
-                        size="mini"
+                        :clearable="false"
                         @change="getRataLists()"
                         :value-format="dateType === 'month' ? 'yyyy-MM' : 'yyyy'"
-                        style="margin-left: 20px; width: 130px;"
+                        style="margin-left: 10px; width: 120px;"
                         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>
+                <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>
@@ -65,56 +65,49 @@
         <div class="main_table">
             <div class="main_table_list">
                 <div class="title" style="display: flex; align-items: center; justify-content: space-between;">
-                    <div>
+                    <div style="display: flex; align-items: center;">
                         <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 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"
-                                size="mini"
-                                @change="getReportLists()"
-                                :value-format="radio === 'month' ? 'yyyy-MM' : 'yyyy'"
-                                style="margin-left: 20px; width: 130px;"
-                                placeholder="璇烽�夋嫨">
+                            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" size="mini" style="margin-left: 20px;" @click="daochu">瀵煎嚭</el-button>
+                    <el-button type="primary" style="margin-left: 20px;" icon="el-icon-upload2" @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>
+                <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>
-                <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>
+                <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>
@@ -146,9 +139,9 @@
       this.value = `${year}-${month}`
       this.date1 = `${year}-${month}`
 
-      this.getData()
-      this.getRataLists()
-      this.getReportLists()
+        this.getData()
+        this.getRataLists()
+        this.getReportLists()
     },
     methods: {
       // 瀵煎嚭
@@ -175,19 +168,39 @@
       getReportLists() {
         getReportList({ dateStr: this.date1, isGroupBy: this.isGroupBy, type: 0 })
             .then(res => {
-              console.log(res)
 
-              this.column = res.data.map(item => item[0])
+              this.column = res[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;
-                }, {});
+              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() {
@@ -207,20 +220,25 @@
       getRataLists() {
         getRataList({ dateStr: this.value, isGroupBy: this.isGroupBy, type: 0 })
             .then(res => {
-              console.log(res)
               this.listZB = res
-              this.$nextTick(() => {
+              // this.$nextTick(() => {
+              //   this.initDept()
+              // })
+              setTimeout(() => {
                 this.initDept()
-              })
+              },1000)
             })
       },
       // 鍩虹鏁版嵁
       getData() {
         getInParkUserData({ isGroupBy: this.isGroupBy, type: 0 }).then(res => {
           this.info = res
-          this.$nextTick(() => {
+          // this.$nextTick(() => {
+          //   this.initType()
+          // })
+          setTimeout(() => {
             this.initType()
-          })
+          }, 1000)
         })
       },
       // 鍏ㄥ勾鍏ュ洯杞﹁締瓒嬪娍
@@ -233,10 +251,35 @@
         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: '5%',
-            right: '10%',
-            bottom: '0%',
+            left: '0%',
+            right: '5%',
+            bottom: '10%',
             top: '20%',
             containLabel: true
           },
@@ -245,12 +288,63 @@
             data: names
           },
           yAxis: {
-            type: 'value'
+            type: 'value',
+            axisLine: {
+              show: true
+            },
+            axisLabel: {
+              formatter: function (value) {
+                // 鍥涜垗浜斿叆鍒版渶杩戠殑鏁存暟
+                return Math.round(value);
+              }
+            }
           },
           series: [
             {
               data: datas,
-              type: 'line'
+              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
             }
           ]
         }
@@ -261,9 +355,11 @@
       },
       // 杞﹁締鍒嗙被缁熻
       initDept() {
-        if (!this.listZB) return
+        if (this.listZB.length === 0) return
 
-        const myChart = echarts.init(document.querySelector('#echart2'))
+        const dom = document.getElementById('echart_2')
+        console.log(dom)
+        const myChart = echarts.init(dom)
 
         let data = this.listZB.map(item => {
           return {
@@ -273,11 +369,36 @@
         })
 
         let option = {
+          tooltip: {
+            trigger: 'item'
+          },
+          legend: {
+            show: false,
+            orient: 'vertical',
+            left: 'left'
+          },
           series : [
             {
               name: '璁块棶鏉ユ簮',
               type: 'pie',
-              radius: '55%',
+              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
             }
           ]
@@ -329,21 +450,24 @@
         overflow-x: hidden;
         padding: 15px;
         box-sizing: border-box;
-        background-color: #ffffff;
+        background-color: #F4F7FC;
         .main_head {
             width: 100%;
             display: flex;
             align-items: center;
             flex-direction: column;
-            margin-bottom: 20px;
+            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: 600;
-                    font-size: 16px;
+                    font-weight: 500;
+                    font-size: 18px;
                     color: #222222;
                     margin-right: 30px;
                 }
@@ -354,39 +478,40 @@
                 align-items: center;
                 justify-content: space-between;
                 .blue {
-                    border-left: 5px solid blue;
+                    border-left: 8px solid #12BB8B;
                 }
                 .red {
-                    border-left: 5px solid red;
+                    border-left: 8px solid #F6CF46;
                 }
                 .yellow {
-                    border-left: 5px solid yellow;
+                    border-left: 8px solid #5DC9FB;
                 }
                 .orange {
-                    border-left: 5px solid orange;
+                    border-left: 8px solid #FF9E56;
                 }
                 .darkBlue {
-                    border-left: 5px solid #0000a8;
+                    border-left: 8px solid #6B6EFF;
                 }
                 .main_head_item {
                     width: 19%;
-                    height: 70px;
+                    height: 112px;
                     display: flex;
                     flex-direction: column;
                     align-items: center;
                     justify-content: center;
                     box-sizing: border-box;
                     border-radius: 5px;
-                    background-color: #ffffff;
+                    background-color: #F4F7FC;
                     span {
                         &:nth-child(1) {
-                            font-size: 22px;
-                            color: black;
-                            font-weight: bold;
+                            font-weight: 600;
+                            font-size: 30px;
+                            color: #222222;
                         }
                         &:nth-child(2) {
-                            font-size: 16px;
-                            color: black;
+                            font-weight: 400;
+                            font-size: 14px;
+                            color: #222222;
                         }
                     }
                 }
@@ -395,27 +520,39 @@
 
         .main_table {
             display: flex;
-            align-items: center;
+            align-items: start;
             justify-content: space-between;
-            height: 300px;
+            margin-top: 10px;
             .main_table_list {
-                margin-left: 20px;
-                flex: 1;
+                background-color: #ffffff;
+                padding: 20px;
+                box-sizing: border-box;
+                width: 69%;
                 .title {
                     display: flex;
                     align-items: center;
                     span {
-                        font-weight: 600;
-                        font-size: 16px;
+                        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: 35px;
+                    height: 50px;
                     display: flex;
                     align-items: center;
-                    background-color: #ececec;
+                    background-color: #F7F7F7;
+                    border-left: 1px solid #DFE2E8;
+                    border-top: 1px solid #DFE2E8;
                     margin-top: 15px;
                     .list_head_item {
                         flex: 1;
@@ -425,20 +562,25 @@
                         justify-content: center;
                         font-size: 13px;
                         color: #222222;
+                        font-weight: 500;
+                        border-right: 1px solid #DFE2E8;
                     }
                 }
                 .table_box {
                     width: 100%;
-                    height: 234px;
+                    border-bottom: 1px solid #DFE2E8;
                     .list_content {
                         width: 100%;
-                        height: 40px;
+                        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;
@@ -448,48 +590,71 @@
                 }
             }
             .main_table_list1 {
-                margin-left: 20px;
-                width: 300px;
+                width: 30%;
+                padding: 20px;
+                box-sizing: border-box;
                 flex-shrink: 0;
+                background-color: #ffffff;
                 .title {
-                    font-weight: 600;
+                    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: 35px;
+                    height: 50px;
                     display: flex;
                     align-items: center;
-                    background-color: #ececec;
+                    background-color: #F7F7F7;
+                    border-left: 1px solid #DFE2E8;
+                    border-top: 1px solid #DFE2E8;
                     margin-top: 15px;
                     .list_head_item {
-                        flex: 1;
+                        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%;
-                    height: 234px;
+                    border-bottom: 1px solid #DFE2E8;
                     .list_content {
                         width: 100%;
-                        height: 40px;
+                        height: 50px;
                         display: flex;
                         align-items: center;
+                        border-left: 1px solid #DFE2E8;
+                        border-top: 1px solid #DFE2E8;
                         .list_head_item {
-                            flex: 1;
+                            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;
+                            }
                         }
                     }
                 }
@@ -498,38 +663,43 @@
 
         .main_content {
             display: flex;
-            height: 400px;
+            align-items: center;
+            justify-content: space-between;
+            height: 350px;
 
             .title {
-                font-weight: 600;
-                font-size: 16px;
+                font-weight: 500;
+                font-size: 18px;
                 color: #222222;
-                /*margin-bottom: 20px;*/
-                margin-top: 20px;
             }
 
             .type_wrap {
-                flex: 11;
-                flex-shrink: 0;
-                height: calc(100% - 20px);
+                flex: 1;
+                height: 100%;
+                background-color: #ffffff;
+                padding: 20px;
+                box-sizing: border-box;
                 /*border-right: 12px solid #f7f7f7;*/
 
 
                 #echart1 {
                     width: 100%;
-                    height: calc(100% - 60px);
+                    height: 100%;
+                    margin-top: 18px;
                 }
             }
 
             .dept_wrap {
-                flex: 8;
+                width: 420px;
                 flex-shrink: 0;
-                height: calc(100% - 20px);
-                padding-left: 20px;
-
-                #echart2 {
+                height: 100%;
+                background-color: #ffffff;
+                padding: 20px;
+                box-sizing: border-box;
+                margin-left: 10px;
+                #echart_2 {
                     width: 100%;
-                    height: calc(100% - 60px);
+                    height: 100%;
                 }
             }
         }

--
Gitblit v1.9.3