bick_back/src/views/statistics/index.vue

728 lines
21 KiB
Vue
Raw Normal View History

2024-07-18 14:27:16 +08:00
<template>
2024-07-19 18:03:18 +08:00
<div class="page">
<div class="area-options">
<span style="margin-right: .625rem;">切换运营区</span>
<el-select v-model="areaId" placeholder="请选择运营区" clearable @change="handleAreaChange" size="medium">
<el-option v-for="item in areaOptions" :key="item.areaId" :label="item.areaName"
:value="item.areaId"></el-option>
</el-select>
</div>
<div class="top_box">
<div class="tops_left">
<div class="left_top">
<div class="left_top_left">
<div class="txt">余额</div>
<div class="txt1" style="margin-top: 1.33rem;">{{StatisticsInfo.balance}}</div>
</div>
<div class="left_top_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/u97bA2ZACCPZRdxICy1g" alt="">
</div>
</div>
<div class="txt_li" style="margin-top: 0.33rem;">已提现{{StatisticsInfo.withdraw}}</div>
<div class="txt_li" style="margin-top: 1.17rem;">待结算金额{{StatisticsInfo.settlementAmount}}</div>
2024-07-19 20:16:28 +08:00
<div class="bot_btn" @click="topage()">提现</div>
2024-07-19 18:03:18 +08:00
</div>
<div class="tops_right">
<div class="tops_right_top">
<!-- 应收 -->
<div class="top_cont">
<div class="cont_left">
<div class="cont_left_top">今日营收</div>
<div class="cont_left_cent">{{StatisticsInfo.todayIncome}}</div>
<div class="cont_left_bot">总营收{{StatisticsInfo.totalIncome}}</div>
</div>
<div class="cont_right">
<img src=" https://lxnapi.ccttiot.com/bike/img/static/usXmq54bfhrZiw7uPNlq" alt="" style="width: 4.5rem;height: 4.5rem;">
</div>
</div>
<!-- 订单数 -->
<div class="top_cont">
<div class="cont_left">
<div class="cont_left_top">今日订单数</div>
<div class="cont_left_cent">{{StatisticsInfo.todayOrderCount}}</div>
<div class="cont_left_bot">总订单数{{StatisticsInfo.totalOrderCount}}</div>
</div>
<div class="cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/ut2C20sHoYYfYRPeAA98" alt="">
</div>
</div>
<!-- 今日订单金额 -->
<div class="top_cont">
<div class="cont_left">
<div class="cont_left_top">今日订单金额</div>
<div class="cont_left_cent">{{StatisticsInfo.todayOrderFee}}</div>
<div class="cont_left_bot">总订单金额{{StatisticsInfo.totalOrderFee}}</div>
</div>
<div class="cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uXBNkOdtF7dtD3w9XGEi" alt="" >
</div>
</div>
<!-- 代付款订单数 -->
<div class="top_cont">
<div class="cont_left">
2024-07-20 16:48:45 +08:00
<div class="cont_left_top">付款订单数</div>
2024-07-19 18:03:18 +08:00
<div class="cont_left_cent">{{StatisticsInfo.unpaidOrderCount}}</div>
<div class="cont_left_bot">待付款订单金额{{StatisticsInfo.unpaidOrderFee}}</div>
</div>
<div class="cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uoHknV3fcQXweSPhfoOA" alt="" style="width: 4.5rem;height:4.5rem;">
</div>
</div>
</div>
<div class="tops_right_bot">
<!-- 还车待审核 -->
<div class="tops_right_bot_cont">
<div class="tops_right_bot_cont_left">
<div class="tit">还车待审核订单</div>
<div class="txt">{{StatisticsInfo.returnOrderCount}}</div>
</div>
<div class="tops_right_bot_cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/u62zTL6AjOvYLENgVHGF" alt="">
</div>
</div>
<!-- 还车待审核 -->
<div class="tops_right_bot_cont">
<div class="tops_right_bot_cont_left">
<div class="tit">骑行中的订单</div>
<div class="txt">{{StatisticsInfo.ridingOrder}}</div>
</div>
<div class="tops_right_bot_cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uFyc6DIDXlp386JSqAOY" alt="">
</div>
</div>
<!-- 还车待审核 -->
<div class="tops_right_bot_cont">
<div class="tops_right_bot_cont_left">
<div class="tit">今日退款金额</div>
<div class="txt">{{StatisticsInfo.todayRefundFee}}</div>
</div>
<div class="tops_right_bot_cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uBygxYBgvflSl9847t12" alt="">
</div>
</div>
<!-- 还车待审核 -->
<div class="tops_right_bot_cont">
<div class="tops_right_bot_cont_left">
<div class="tit">待审核故障</div>
<div class="txt">{{StatisticsInfo.faultOrderCount}}</div>
</div>
<div class="tops_right_bot_cont_right">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uiaGJviCF6Bp7j3QVVsU" alt="">
</div>
</div>
</div>
</div>
</div>
<div class="cont_box">
<div class="echart_box">
<div class="tit"> 营收统计</div>
<div class="echarts_cont">
2024-07-20 16:48:45 +08:00
<div id="myChart" style="width: 100%;height: 19.17rem;"></div>
2024-07-19 18:03:18 +08:00
</div>
</div>
<div class="car_info_box">
2024-07-20 16:48:45 +08:00
<!-- <div class="tit">车辆统计</div> -->
<div class="tit" style="margin-top: 1rem;font-weight: 700;">仓库中的车辆: {{StatisticsInfo.vehicleVo.inStashNum}}</div>
<div class="tit" style="margin-top: 1.5rem;font-weight: 700;">投放中{{StatisticsInfo.vehicleVo.inOperation}} <span style="color: #ccc;">(含离线 {{StatisticsInfo.vehicleVo.offlineNum}})</span></div>
<!-- <div class="info_li">
2024-07-19 18:03:18 +08:00
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uwDG51FnJQGuEXLn2SYQ" alt="" style="height: 1rem;">车辆总数
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.allNum}}
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uUSztvtXXdRtxHzQVWgH" alt="">投放中
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.inOperation}}
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uxx6Ajx0ne7Ho6LH8Bfg" alt="">禁用中
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.disabledNum}}
</div>
</div>
2024-07-20 16:48:45 +08:00
</div> -->
2024-07-19 18:03:18 +08:00
<div class="info_li">
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uHMz8QKu5gM27BvYmwqS" alt="">待租
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.normalNum}}
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uXQ75ZwqEV0kErjs9Jvt" alt="">预约中
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.inAppointmentNum}}
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uUAe2gRT4blxwsIKs0id" alt="">骑行中
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.ridingNum}}
</div>
</div>
</div>
<div class="info_li">
<div class="info_cont">
<div class="info_cont_top">
<img src="https://lxnapi.ccttiot.com/bike/img/static/uvfMxL94fPWnZ1RTVTyx" alt="">临时锁车
</div>
<div class="info_cont_txt">
{{StatisticsInfo.vehicleVo.temporarilyLockNum}}
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
2024-07-20 16:48:45 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uxx6Ajx0ne7Ho6LH8Bfg" alt="">禁用中
2024-07-19 18:03:18 +08:00
</div>
<div class="info_cont_txt">
2024-07-20 16:48:45 +08:00
{{StatisticsInfo.vehicleVo.disabledNum}}
2024-07-19 18:03:18 +08:00
</div>
</div>
<div class="info_cont">
<div class="info_cont_top">
2024-07-20 16:48:45 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uwDG51FnJQGuEXLn2SYQ" alt="" style="height: 1rem;">车辆总数
2024-07-19 18:03:18 +08:00
</div>
<div class="info_cont_txt">
2024-07-20 16:48:45 +08:00
{{StatisticsInfo.vehicleVo.allNum}}
2024-07-19 18:03:18 +08:00
</div>
</div>
</div>
</div>
</div>
<div class="bot_box">
<div class="tit">运维状态</div>
<div class="cont_box">
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uDOL2U9faZ5ku81NTPnU" alt="">换电工单
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.replacementOrderCount}}
</div>
</div>
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uuCZPQA3uCAJsAqca8Bv" alt="">调度工单
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.dispatchCount}}
</div>
</div>
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uwGblBABW5uKSVzW4FjE" alt="">维修工单
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.repairCount}}
</div>
</div>
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uDOL2U9faZ5ku81NTPnU" alt="">已完成换电
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.completedReplacementOrderCount}}
</div>
</div>
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uuCZPQA3uCAJsAqca8Bv" alt="">已完成调度
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.completedDispatchCount}}
</div>
</div>
<div class="cont_li">
<div class="cont_li_top">
2024-07-19 20:16:28 +08:00
<img src="https://lxnapi.ccttiot.com/bike/img/static/uwGblBABW5uKSVzW4FjE" alt="">已完成维修
2024-07-19 18:03:18 +08:00
</div>
<div class="cont_li_bot">
{{StatisticsInfo.operationVo.completedRepairCount}}
</div>
</div>
</div>
</div>
2024-07-18 14:27:16 +08:00
</div>
</template>
<script>
2024-07-19 20:16:28 +08:00
import { getArealist, getStatistics, optionselect as getAreaOptionselect } from '@/api/system/area'
2024-07-19 18:03:18 +08:00
// import { getStatistics } from '@/api/system/area'
import * as echarts from 'echarts';
2024-07-18 14:27:16 +08:00
export default {
name: "Index",
data() {
return {
2024-07-19 18:03:18 +08:00
areaOptions: [],
2024-07-19 20:16:28 +08:00
areaId: null,
2024-07-19 18:03:18 +08:00
StatisticsInfo: {}
2024-07-18 14:27:16 +08:00
};
},
created() {
2024-07-19 20:16:28 +08:00
2024-07-19 18:03:18 +08:00
},
mounted() {
2024-07-19 20:16:28 +08:00
this.getAreaOptions();
2024-07-18 14:27:16 +08:00
},
methods: {
2024-07-19 18:03:18 +08:00
handleAreaChange(newAreaId) {
console.log('newAreaId:', newAreaId);
this.areaId = newAreaId;
// this.getAreaList(this.areaId);
this.getAreastatistics()
},
2024-07-19 20:16:28 +08:00
topage(){
this.$router.push('/finance/withdraw');
},
2024-07-19 18:03:18 +08:00
getAreaOptions() {
2024-07-19 20:16:28 +08:00
getArealist().then(response => {
2024-07-19 18:03:18 +08:00
this.areaOptions = response.data;
2024-07-19 20:16:28 +08:00
this.areaId= this.areaOptions[0].areaId
this.getAreastatistics()
2024-07-19 18:03:18 +08:00
console.log("areaOptions", this.areaOptions);
});
},
getAreastatistics() {
getStatistics(this.areaId).then(response => {
this.StatisticsInfo = response.data;
this.StatisticsInfo.incomeVoList.reverse();
setTimeout(() => {
this.drawLine()
2024-07-20 16:48:45 +08:00
}, 1000);
2024-07-19 18:03:18 +08:00
console.log("areaOptions", this.areaOptions);
});
},
drawLine() {
let myChart = echarts.init(document.getElementById("myChart"));
// 设置图表的配置项和数据
myChart.setOption({
grid: {
2024-07-20 16:48:45 +08:00
left: 60,
2024-07-19 18:03:18 +08:00
right: 50,
top: 10,
bottom: 20,
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['营收', '订单']
},
xAxis: {
type: 'category',
boundaryGap: false,
data: this.StatisticsInfo.incomeVoList.map(item => item.day)
},
yAxis: [
{
type: 'value',
name: '营收',
position: 'left',
axisLine: {
lineStyle: {
color: '#5470C6'
}
},
axisLabel: {
2024-07-20 16:48:45 +08:00
formatter: '{value} 元'
2024-07-19 18:03:18 +08:00
}
},
{
type: 'value',
name: '订单',
position: 'right',
axisLine: {
lineStyle: {
color: '#91CC75'
}
},
axisLabel: {
formatter: '{value}'
}
}
],
series: [
{
name: '营收',
type: 'line',
data:this.StatisticsInfo.incomeVoList.map(item => item.income),
yAxisIndex: 0,
itemStyle: {
color: '#5470C6'
},
smooth: true
},
{
name: '订单',
type: 'line',
data: this.StatisticsInfo.incomeVoList.map(item => item.orderNum),
yAxisIndex: 1,
itemStyle: {
color: '#91CC75'
},
smooth: true
}
]
});
2024-07-18 14:27:16 +08:00
}
2024-07-19 18:03:18 +08:00
2024-07-18 14:27:16 +08:00
}
};
</script>
<style scoped lang="scss">
2024-07-19 18:03:18 +08:00
.page {
padding: 1.92rem;
background: #F7F8FA;
width: 100%;
// height: 100vh;
display: flex;
flex-direction: column;
.area-options {
width: 100%;
font-weight: 700;
font-size: 1.5rem;
color: #3D3D3D;
display: flex;
flex-direction: row;
margin-bottom: 1rem;
2024-07-18 14:27:16 +08:00
}
2024-07-19 18:03:18 +08:00
::v-deep .el-select .el-input__inner {
font-size: 1.2rem; // 调整此处以修改文字大小
2024-07-18 14:27:16 +08:00
}
2024-07-19 18:03:18 +08:00
::v-deep .el-option {
font-size: 1.2rem; // 调整此处以修改下拉选项的文字大小
2024-07-18 14:27:16 +08:00
}
2024-07-19 18:03:18 +08:00
.bot_box {
margin-bottom: 2rem;
padding: 1.08rem;
margin-top: 1.33rem;
width: 100%;
height: 12.42rem;
background: #FFFFFF;
border-radius: 0rem 0rem 0rem 0rem;
2024-07-18 14:27:16 +08:00
2024-07-19 18:03:18 +08:00
.tit {
width: 100%;
font-weight: 500;
font-size: 1.33rem;
color: #1D252F;
}
2024-07-18 14:27:16 +08:00
2024-07-19 18:03:18 +08:00
.cont_box {
width: 100%;
height: 5.67rem;
.cont_li {
width: 16.6%;
height: 5.67rem;
border-right: 1px solid #D8D8D8;
.cont_li_top {
width: 100%;
display: flex;
flex-wrap: nowrap;
justify-content: center;
align-items: center;
img {
margin-right: 0.83rem;
width: 1.29rem;
height: 1.13rem;
}
font-weight: 700;
font-size: 1.33rem;
color: #3D3D3D;
2024-07-18 14:27:16 +08:00
2024-07-19 18:03:18 +08:00
}
.cont_li_bot {
margin-top: 1.17rem;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 1.67rem;
color: #3D3D3D;
}
}
}
2024-07-18 14:27:16 +08:00
}
2024-07-19 18:03:18 +08:00
.cont_box {
width: 100%;
margin-top: 1.33rem;
display: flex;
flex-wrap: nowrap;
.echart_box {
padding: 1.08rem;
margin-right: 1.17rem;
width: 60%;
height: 23.17rem;
background: #FFFFFF;
border-radius: 0rem 0rem 0rem 0rem;
2024-07-20 16:48:45 +08:00
.echarts_cont{
width: 100%;
}
2024-07-19 18:03:18 +08:00
.tit {
font-weight: 500;
font-size: 1.33rem;
color: #1D252F;
}
}
.car_info_box {
padding: 0.75rem 1.67rem;
width: 39%;
height: 23.17rem;
background: #FFFFFF;
border-radius: 0rem 0rem 0rem 0rem;
.tit {
font-weight: 500;
font-size: 1.33rem;
color: #1D252F;
}
.info_li {
2024-07-20 16:48:45 +08:00
2024-07-19 18:03:18 +08:00
margin-top: 1.25rem;
display: flex;
flex-wrap: nowrap;
width: 100%;
2024-07-20 16:48:45 +08:00
// height: 30%;
2024-07-19 18:03:18 +08:00
.info_cont {
width: 33%;
2024-07-20 16:48:45 +08:00
margin-top: 1rem;
2024-07-19 18:03:18 +08:00
.info_cont_top {
img {
width: 1.33rem;
height: 1.33rem;
margin-right: 0.58rem;
}
display: flex;
flex-wrap: nowrap;
2024-07-20 16:48:45 +08:00
// justify-content: center;
2024-07-19 18:03:18 +08:00
align-items: center;
width: 100%;
font-weight: 500;
font-size: 1.33rem;
color: #757575;
}
2024-07-18 14:27:16 +08:00
2024-07-19 18:03:18 +08:00
.info_cont_txt {
2024-07-20 16:48:45 +08:00
margin-top: 0.53rem;
2024-07-19 18:03:18 +08:00
width: 100%;
2024-07-20 16:48:45 +08:00
// text-align: center;
2024-07-19 18:03:18 +08:00
font-weight: 500;
font-size: 2rem;
color: #3D3D3D;
}
}
}
2024-07-18 14:27:16 +08:00
}
}
2024-07-19 18:03:18 +08:00
.top_box {
display: flex;
flex-direction: row;
justify-content: space-between;
.tops_left {
padding: 1.33rem 2.08rem 1.08rem 1.83rem;
background: #FFFFFF;
margin-right: 1rem;
flex: 1;
display: flex;
max-width: 30rem;
flex-direction: column;
.left_top {
display: flex;
justify-content: space-between;
margin-bottom: 1rem;
.left_top_left {
.txt {
font-weight: 500;
font-size: 1.5rem;
color: #1D252F;
}
.txt1 {
font-weight: 500;
font-size: 2rem;
color: #1D2129;
}
}
.left_top_right {
width: 5.83rem;
height: 6.5rem;
img {
width: 5.83rem;
height: 6.5rem;
}
}
}
.txt_li {
font-weight: 400;
font-size: 1.17rem;
color: #1D2129;
margin-top: 0.5rem;
}
.bot_btn {
margin-top: auto;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 3.33rem;
background: #A6A6E7;
border-radius: 0.42rem;
font-weight: 700;
font-size: 1.33rem;
color: #FFFFFF;
}
}
.tops_right {
display: flex;
flex-direction: column;
flex: 2;
.tops_right_top {
display: flex;
margin-bottom: 1rem;
.top_cont {
display: flex;
justify-content: space-between;
padding: 1.33rem;
background: #FFFFFF;
border-radius: 0.25rem;
flex: 1;
margin-right: 1rem;
&:last-child {
margin-right: 0;
}
.cont_right {
width: 5rem;
height: 5rem;
img {
width: 3.93rem;
height: 4.37rem;
}
}
.cont_left {
display: flex;
flex-direction: column;
justify-content: center;
.cont_left_top {
font-weight: 700;
font-size: 1.33rem;
color: #1D252F;
}
.cont_left_cent {
margin-top: 1.33rem;
font-weight: 700;
font-size: 2rem;
color: #1D2129;
}
.cont_left_bot {
margin-top: 0.5rem;
font-weight: 400;
font-size: 1.17rem;
color: #1D2129;
}
}
}
}
.tops_right_bot {
display: flex;
.tops_right_bot_cont {
display: flex;
justify-content: space-between;
padding: 1.33rem;
background: #FFFFFF;
border-radius: 0.25rem;
flex: 1;
margin-right: 1rem;
&:last-child {
margin-right: 0;
}
.tops_right_bot_cont_left {
.tit {
2024-07-20 16:48:45 +08:00
font-weight: 700;
2024-07-19 18:03:18 +08:00
font-size: 1.33rem;
color: #1D252F;
}
.txt {
2024-07-20 16:48:45 +08:00
margin-top: 0.5rem;
font-weight:500;
2024-07-19 18:03:18 +08:00
font-size: 2rem;
color: #1D2129;
}
}
.tops_right_bot_cont_right {
width: 4.5rem;
height: 4.5rem;
img {
width: 4.5rem;
height: 4.5rem;
}
}
}
}
2024-07-18 14:27:16 +08:00
}
}
}
</style>