|
|
@@ -7,23 +7,23 @@
|
|
|
<!-- 数据 -->
|
|
|
<view class="data-box">
|
|
|
<view>
|
|
|
- <view class="ljsy">10086.75</view>
|
|
|
+ <view class="ljsy">{{statisticData.totalProfit?statisticData.totalProfit:0}}</view>
|
|
|
<view class="ljsy-label">累计收益(元)</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="jy ddflex">
|
|
|
<view>
|
|
|
- <view class="jy-data">152</view>
|
|
|
+ <view class="jy-data">{{statisticData.todayOrderCount?statisticData.todayOrderCount:0}}</view>
|
|
|
<view class="jy-label">今日订单数</view>
|
|
|
</view>
|
|
|
<view class="jy-line"></view>
|
|
|
<view>
|
|
|
- <view class="jy-data"><text style="font-size: 22rpx;font-weight: 400;">¥</text>2000.00</view>
|
|
|
+ <view class="jy-data"><text style="font-size: 22rpx;font-weight: 400;">¥</text>{{statisticData.todayTurnover?statisticData.todayTurnover:0}}</view>
|
|
|
<view class="jy-label">今日营业额</view>
|
|
|
</view>
|
|
|
<view class="jy-line"></view>
|
|
|
<view>
|
|
|
- <view class="jy-data"><text style="font-size: 22rpx;font-weight: 400;">¥</text>2000.00</view>
|
|
|
+ <view class="jy-data"><text style="font-size: 22rpx;font-weight: 400;">¥</text>{{statisticData.todayProfit?statisticData.todayProfit:0}}</view>
|
|
|
<view class="jy-label">今日收益额</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -31,29 +31,29 @@
|
|
|
|
|
|
<!-- 总数 -->
|
|
|
<view class="total-box ddflex">
|
|
|
- <view class="fflex" v-if="true">
|
|
|
+ <view class="fflex" v-if="!userInfo.storeId">
|
|
|
<view class="total-label">商家总数</view>
|
|
|
- <view class="total-data">385</view>
|
|
|
+ <view class="total-data">{{statisticData.merchantCount?statisticData.merchantCount:0}}</view>
|
|
|
</view>
|
|
|
- <view v-if="true" class="total-data-line"></view>
|
|
|
- <view class="fflex" v-if="true">
|
|
|
+ <view v-if="!userInfo.storeId" class="total-data-line"></view>
|
|
|
+ <view class="fflex" v-if="!userInfo.storeId">
|
|
|
<view class="total-label">门店总数</view>
|
|
|
- <view class="total-data">6</view>
|
|
|
+ <view class="total-data">{{statisticData.storeCount?statisticData.storeCount:0}}</view>
|
|
|
</view>
|
|
|
- <view v-if="true" class="total-data-line"></view>
|
|
|
+ <view v-if="!userInfo.storeId" class="total-data-line"></view>
|
|
|
<view class="fflex">
|
|
|
<view class="total-label">设备总数</view>
|
|
|
- <view class="total-data">226</view>
|
|
|
+ <view class="total-data">{{statisticData.batteryCount?statisticData.batteryCount:0}}</view>
|
|
|
</view>
|
|
|
<view class="total-data-line"></view>
|
|
|
<view class="fflex">
|
|
|
<view class="total-label">订单总数</view>
|
|
|
- <view class="total-data">113</view>
|
|
|
+ <view class="total-data">{{statisticData.totalOrderCount?statisticData.totalOrderCount:0}}</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<!-- nav -->
|
|
|
- <view v-if="true" class="nav-box ddflex">
|
|
|
+ <view v-if="!userInfo.storeId" class="nav-box ddflex">
|
|
|
<view class="nav-item">
|
|
|
<image class="nav-item-icon" src="../../static/pages/images/wdsj.png" @click="jumpUrl('/pages/myStore/myStore')"></image>
|
|
|
<view class="nav-item-title">我的商家</view>
|
|
|
@@ -62,7 +62,7 @@
|
|
|
<image class="nav-item-icon" src="../../static/pages/images/wdmd.png"></image>
|
|
|
<view class="nav-item-title">我的门店</view>
|
|
|
</view>
|
|
|
- <view class="nav-item" v-if="true" @click="jumpUrl('/mine/myUser/myUser')">
|
|
|
+ <view class="nav-item" v-if="!userInfo.storeId&&!userInfo.merchantId" @click="jumpUrl('/mine/myUser/myUser')">
|
|
|
<image class="nav-item-icon" src="../../static/pages/images/wdyh.png"></image>
|
|
|
<view class="nav-item-title">我的用户</view>
|
|
|
</view>
|
|
|
@@ -72,7 +72,7 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
- <view v-if="true" class="nav-box ddflex" style="padding: 10rpx 30rpx;justify-content: space-between;" @click="jumpUrl('/pages/operationData/operationData')">
|
|
|
+ <view v-if="userInfo.storeId" class="nav-box ddflex" style="padding: 10rpx 30rpx;justify-content: space-between;" @click="jumpUrl('/pages/operationData/operationData')">
|
|
|
<view class="nav-item ddflex">
|
|
|
<image class="nav-item-icon" src="../../static/pages/images/yysj.png"></image>
|
|
|
<view class="nav-item-title">运营数据</view>
|
|
|
@@ -93,7 +93,7 @@
|
|
|
@click="timeTypeChange(3)">近30日</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view>
|
|
|
+ <view style="height:500rpx">
|
|
|
<l-echart ref="chart" @finished="init"></l-echart>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -164,6 +164,11 @@
|
|
|
rpxTopxScale: 0,
|
|
|
|
|
|
timeType: 1, //统计时间 1.按日 2.按月 3.按季度
|
|
|
+
|
|
|
+ statisticData:{},//统计数据
|
|
|
+ echartData:{},//曲线图
|
|
|
+
|
|
|
+ userInfo:{},
|
|
|
|
|
|
// 交易趋势图表数据
|
|
|
option: {
|
|
|
@@ -175,16 +180,16 @@
|
|
|
confine: true
|
|
|
},
|
|
|
legend: {
|
|
|
- data: ['订单', '订单金额'],
|
|
|
- x: 'right', //可设定图例在左、右、居中
|
|
|
- y: 'bottom', //可设定图例在上、下、居中
|
|
|
- padding: [60, 0, 0, 0]
|
|
|
+ data: ['订单数', '订单金额','收益金额'],
|
|
|
+ x: 'center', //可设定图例在左、右、居中
|
|
|
+ y: 'top', //可设定图例在上、下、居中
|
|
|
+ padding: [15, 0, 0, 0]
|
|
|
},
|
|
|
grid: {
|
|
|
left: 0,
|
|
|
right: 8,
|
|
|
- bottom: 40,
|
|
|
- top: 40,
|
|
|
+ bottom: 5,
|
|
|
+ top: 45,
|
|
|
containLabel: true
|
|
|
},
|
|
|
xAxis: [{
|
|
|
@@ -216,7 +221,7 @@
|
|
|
}
|
|
|
}],
|
|
|
series: [{
|
|
|
- name: '订单',
|
|
|
+ name: '订单数',
|
|
|
type: 'line',
|
|
|
data: [300, 270, 340, 344, 300, 320, 310],
|
|
|
barWidth: 10,
|
|
|
@@ -239,6 +244,18 @@
|
|
|
barBorderRadius: [15, 15, 0, 0]
|
|
|
}
|
|
|
},
|
|
|
+ {
|
|
|
+ name: '收益金额',
|
|
|
+ type: 'line',
|
|
|
+ data: [120, 102, 141, 174, 190, 250, 120],
|
|
|
+ barWidth: 10,
|
|
|
+ itemStyle: {
|
|
|
+ // 颜色
|
|
|
+ color: '#FFDC0F',
|
|
|
+ // 给bar设置倒角
|
|
|
+ barBorderRadius: [15, 15, 0, 0]
|
|
|
+ }
|
|
|
+ },
|
|
|
]
|
|
|
},
|
|
|
|
|
|
@@ -340,7 +357,7 @@
|
|
|
containLabel: true
|
|
|
},
|
|
|
series: [{
|
|
|
- name: '订单',
|
|
|
+ name: '设备出租比例',
|
|
|
type: 'pie',
|
|
|
center: ['30%', '50%'],
|
|
|
radius: ['60%', '80%'],
|
|
|
@@ -526,11 +543,12 @@
|
|
|
},
|
|
|
|
|
|
async onShow() {
|
|
|
- let _ts = this;
|
|
|
- await this.getConfig().then(res => {
|
|
|
- // _ts.getMerchant();
|
|
|
- });
|
|
|
-
|
|
|
+ await this.getEchartData()
|
|
|
+ await this.getStatisticData()
|
|
|
+
|
|
|
+ this.init()
|
|
|
+
|
|
|
+ this.getUserInfo()
|
|
|
},
|
|
|
|
|
|
onUnload() {},
|
|
|
@@ -547,16 +565,23 @@
|
|
|
}
|
|
|
},
|
|
|
// 统计时间切换
|
|
|
- timeTypeChange(val) {
|
|
|
+ async timeTypeChange(val) {
|
|
|
if (this.timeType == val) return false
|
|
|
this.timeType = val
|
|
|
+ await this.getEchartData()
|
|
|
+ // await this.getStatisticData()
|
|
|
+
|
|
|
+ this.init()
|
|
|
},
|
|
|
init() {
|
|
|
this.$refs.chart.init(echarts, async chart => {
|
|
|
// let echartData = await this.getEchartData()
|
|
|
- this.option.xAxis[0].data = ['2023/04/12', '2023/04/12', '2023/04/12', '2023/04/12']
|
|
|
- this.option.series[0].data = [1, 2, 3, 4]
|
|
|
- this.option.series[1].data = [1, 2, 3, 4]
|
|
|
+ this.option.legend.itemHeight = 10 * this.rpxTopxScale
|
|
|
+ this.option.legend.itemWidth = 40 * this.rpxTopxScale
|
|
|
+ this.option.xAxis[0].data = this.echartData.orderList.map(item=>{return item.showTime})
|
|
|
+ this.option.series[0].data = this.echartData.orderList.map(item=>{return item.orderCount})
|
|
|
+ this.option.series[1].data = this.echartData.profitList.map(item=>{return item.profit})
|
|
|
+ this.option.series[2].data = this.echartData.turnoverList.map(item=>{return item.turnover})
|
|
|
chart.setOption(this.option);
|
|
|
});
|
|
|
if (this.$refs.chart2) {
|
|
|
@@ -569,39 +594,38 @@
|
|
|
}
|
|
|
if (this.$refs.chart3) {
|
|
|
this.$refs.chart3.init(echarts, async chart => {
|
|
|
- // // let echartData = await this.getEchartData()
|
|
|
- // this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
|
|
|
- // this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
|
|
|
this.option3.title.textStyle.fontSize = 28 * this.rpxTopxScale
|
|
|
this.option3.legend.itemHeight = 10 * this.rpxTopxScale
|
|
|
this.option3.legend.itemWidth = 40 * this.rpxTopxScale
|
|
|
+ this.option3.series[0].data[0].value = this.statisticData.noLeaseCount
|
|
|
+ this.option3.series[0].data[1].value = this.statisticData.leaseCount
|
|
|
chart.setOption(this.option3);
|
|
|
});
|
|
|
}
|
|
|
if (this.$refs.chart4) {
|
|
|
this.$refs.chart4.init(echarts, async chart => {
|
|
|
- // // let echartData = await this.getEchartData()
|
|
|
- // this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
|
|
|
- // this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
|
|
|
this.option4.title.textStyle.fontSize = 24 * this.rpxTopxScale
|
|
|
+ this.option4.series[0].data[0].value = this.statisticData.leaseCount
|
|
|
+ this.option4.series[0].data[1].value = this.statisticData.noLeaseCount
|
|
|
+ this.option4.series[0].label.normal.formatter = ()=>{return this.statisticData.leaseCount}
|
|
|
chart.setOption(this.option4);
|
|
|
});
|
|
|
}
|
|
|
if (this.$refs.chart5) {
|
|
|
this.$refs.chart5.init(echarts, async chart => {
|
|
|
- // // let echartData = await this.getEchartData()
|
|
|
- // this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
|
|
|
- // this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
|
|
|
this.option5.title.textStyle.fontSize = 24 * this.rpxTopxScale
|
|
|
+ this.option5.series[0].data[0].value = this.statisticData.noLeaseCount
|
|
|
+ this.option5.series[0].data[1].value = this.statisticData.leaseCount
|
|
|
+ this.option4.series[0].label.normal.formatter = ()=>{return this.statisticData.noLeaseCount}
|
|
|
chart.setOption(this.option5);
|
|
|
});
|
|
|
}
|
|
|
if (this.$refs.chart6) {
|
|
|
this.$refs.chart6.init(echarts, async chart => {
|
|
|
- // // let echartData = await this.getEchartData()
|
|
|
- // this.option2.yAxis[0].data = ['罗技', '刘涛', '陈楚生', '罗巧红', '李冰冰']
|
|
|
- // this.option2.series[0].data = [8125, 6802, 5622, 4588, 2458]
|
|
|
this.option6.title.textStyle.fontSize = 24 * this.rpxTopxScale
|
|
|
+ this.option6.series[0].data[0].value = this.statisticData.expireCount
|
|
|
+ this.option6.series[0].data[1].value =Number(this.statisticData.batteryCount) - Number(this.statisticData.leaseCount)
|
|
|
+ this.option6.series[0].label.normal.formatter = ()=>{return this.statisticData.expireCount}
|
|
|
chart.setOption(this.option6);
|
|
|
});
|
|
|
}
|
|
|
@@ -609,100 +633,29 @@
|
|
|
// 获取图表数据
|
|
|
getEchartData() {
|
|
|
return new Promise((r, j) => {
|
|
|
- req.getRequest('/api/v3/recovery/chart', {
|
|
|
- dayType: this.dayType
|
|
|
- }, res => {
|
|
|
- console.log('resres', res)
|
|
|
+ req.getRequest('/admin/v2/statistic/chart', {type: this.timeType}, res => {
|
|
|
+ this.echartData = res
|
|
|
+ console.log('statistic chart', res)
|
|
|
r(res)
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
- getMerchant() {
|
|
|
- let _ts = this;
|
|
|
- if (req.header.appId == 'ZQ1VK5oc17I387E') {
|
|
|
- // 默认门店
|
|
|
- let merchant = req.getStorage('defaultMerchant');
|
|
|
- var timestamp = Date.parse(new Date());
|
|
|
- merchant.time = timestamp + 1 * 60 * 1000;
|
|
|
- if (merchant) {
|
|
|
- req.setStorage('MERCHANT', merchant);
|
|
|
- _ts.setData({
|
|
|
- merchant: merchant
|
|
|
- });
|
|
|
- console.log('》》》》获取当前的门店>>>>>>>>', merchant);
|
|
|
- _ts.init(merchant);
|
|
|
- } else {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- req.getRequest(
|
|
|
- '/api/merchant/list', {
|
|
|
- page: 0,
|
|
|
- limit: 10000
|
|
|
- },
|
|
|
- res => {
|
|
|
- console.log('获取到门店列表>>>>>>>>', res);
|
|
|
- var data = res.filter(it => it.isDefault == 1);
|
|
|
- var timestamp = Date.parse(new Date());
|
|
|
- res[0].time = timestamp + 1 * 60 * 1000;
|
|
|
- _ts.setData({
|
|
|
- merchant: data[0]
|
|
|
- });
|
|
|
- // console.log(data)
|
|
|
- console.log('缓存当前的门店>>>>>>>>', data[0]);
|
|
|
- req.setStorage('defaultMerchant', data[0]);
|
|
|
- req.setStorage('MERCHANT', data[0]);
|
|
|
- _ts.init(data[0]);
|
|
|
- resolve();
|
|
|
- }
|
|
|
- );
|
|
|
- });
|
|
|
- }
|
|
|
- } else {
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
- api.getMerchant(_ts.query, req, data => {
|
|
|
- console.log('data==', data)
|
|
|
- if (data == 1) {
|
|
|
- uni.showModal({
|
|
|
- title: '温馨提示',
|
|
|
- content: '获取定位失败,请前往设置打开定位权限',
|
|
|
- showCancel: false,
|
|
|
- success(res) {
|
|
|
- if (res.confirm) {
|
|
|
- // console.log('用户点击确定');
|
|
|
- uni.openSetting({
|
|
|
- success(res) {
|
|
|
- console.log(res
|
|
|
- .authSetting
|
|
|
- ); // res.authSetting = {
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- } else {
|
|
|
- _ts.merchant = data;
|
|
|
- _ts.init(data);
|
|
|
- }
|
|
|
- resolve();
|
|
|
- });
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- getConfig() {
|
|
|
- var _this = this;
|
|
|
- return new Promise((res, rej) => {
|
|
|
- req.g(
|
|
|
- '/api/config',
|
|
|
- data => {
|
|
|
- req.setStorage('configRes', JSON.stringify(data));
|
|
|
- this.about = data;
|
|
|
-
|
|
|
- res(data);
|
|
|
- },
|
|
|
- true
|
|
|
- );
|
|
|
- });
|
|
|
+ // 获取图表数据
|
|
|
+ getStatisticData() {
|
|
|
+ return new Promise((r, j) => {
|
|
|
+ req.getRequest('/admin/v2/statistic/top', {}, res => {
|
|
|
+ console.log('statistic top', res)
|
|
|
+ this.statisticData = res
|
|
|
+ r(res)
|
|
|
+ })
|
|
|
+ })
|
|
|
},
|
|
|
+ // 获取当前用户
|
|
|
+ getUserInfo(){
|
|
|
+ req.getRequest('/admin/v2/userInfo',{},res=>{
|
|
|
+ this.userInfo = res
|
|
|
+ })
|
|
|
+ }
|
|
|
},
|
|
|
mounted() {
|
|
|
const systemInfo = uni.getSystemInfoSync();
|