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