Files
wx_oms/dataStatistics/networkPoint/index.vue
xiaozhiyong 895d23dd5c 更新
2024-03-15 08:51:39 +08:00

425 lines
9.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view style="height: 100vh;display: flex;flex-direction: column;background: #F0F2FF;">
<view class="header">
<view :style="{height:styles.top+'px'}"></view>
<uni-nav-bar @clickLeft='back' :border="false" color='white' backgroundColor="rgba(0,0,0,0)"
left-icon="back" title="网点数据统计" />
</view>
<view class="options">
<view @click="changeUser">{{params.nickName || '负责人'}}
<uni-icons type="forward"></uni-icons>
</view>
<view>
<picker :range="areaList" range-key="areaName" @change="changeArea">
<view class="uni-input">
<text class="special">{{params.provinceName || '省份'}}</text>
<uni-icons style="vertical-align: top;" type="forward"></uni-icons>
</view>
</picker>
</view>
<view>
<uni-datetime-picker type="daterange" @change="changeDatetime">
{{dataTime.start || '开始时间'}} ~ {{dataTime.end || '结束时间'}}
<uni-icons type="forward"></uni-icons>
</uni-datetime-picker>
</view>
</view>
<view class="overview">
<view>{{info.revenueAmountCount || '- - '}}</view>
<view>GMV总金额</view>
<view>
<text>总毛利{{info.grossProfitCount || '- - '}}</text>
<text>毛利率{{info.grossMargin || '- - '}}%</text>
</view>
</view>
<view class="title">省份排名</view>
<view style="flex:1;overflow: hidden;margin-top: 35rpx;">
<view v-if="!tableList.length"
style="width: 100vw; height: 100%; display: flex;align-items: center;justify-content: center;">
<image src="@/static/qx.png" style="width: 500rpx; height: 355rpx;"></image>
</view>
<scroll-view style="height: 100%;" scroll-y="true">
<view class="container">
<view class="item" v-for="item,index in tableList" :key="index" @click="jumpDetail(item)">
<view class="sequence" :class="['first','second','third'][index] || ''">{{
index < 3 ? '' : index + 1
}}</view>
<view class="info">
<view>
<text>{{item.provinceName}}</text>
<text>动销油站<text style="color: #ff0000;">{{item.siteDXCount}}</text></text>
<text>{{item.revenueAmountCount || '- - '}}</text>
</view>
<view>
<view :style="{
width:(item.revenueAmountCount/denominator * 100 > 2
? item.revenueAmountCount/denominator * 100
: 2 )
+ '%'}">
</view>
</view>
<view>
<text>总毛利{{item.grossProfitCount|| '- - '}}</text>
<text>毛利率{{item.grossMargin|| '- - '}}%</text>
</view>
</view>
</view>
</view>
</scroll-view>
</view>
<view style="height: 50rpx;"></view>
<charge v-model="controlWindows.charge" @chargeChange='chargeChange' />
</view>
</template>
<script>
import serve from '@/api/dataStatistics/networkPoint.js'
import charge from './components/charge.vue'
export default {
components: {
charge
},
data() {
return {
controlWindows: {
charge: false
},
dataTime: {
start: '',
end: ''
},
styles: {},
areaList: [],
params: {
businessLeader: '',
nickName: '',
provinceName: '',
dateStartTime: '',
dateEndTime: ''
},
tableList: [],
denominator: '',
info: {},
}
},
onLoad() {
this.styles = uni.getMenuButtonBoundingClientRect()
this.getCheckInfo()
this.initDate()
this.seachFn()
},
methods: {
getNetworkCount() {
serve.getNetworkCount(this.params).then(res => {
if (res.code === 20000) {
let {
grossMargin,
grossProfitCount,
revenueAmountCount
} = res.data
this.info = {
grossMargin: this.toFixed2Handle(grossMargin),
grossProfitCount: this.toFixed2Handle(grossProfitCount),
revenueAmountCount: this.toFixed2Handle(revenueAmountCount)
}
this.denominator = revenueAmountCount
}
})
},
chargeChange(item) {
let {
id,
nickName
} = item
this.params.businessLeader = id
this.params.nickName = nickName
this.seachFn()
},
initDate() {
let yesterday = new Date().getTime() - 86400000
let {
year,
month,
day
} = this.dateHandle(yesterday)
this.dataTime.start = this.dataTime.end = `${year}-${month}-${day}`
},
dateHandle(datetime) {
let date = new Date(datetime)
let year = date.getFullYear()
let month = date.getMonth() + 1
let day = date.getDate()
return {
year,
month,
day
}
},
jumpDetail(item) {
uni.navigateTo({
url: `./province?info=${encodeURIComponent(JSON.stringify({
dataTime:this.dataTime,
item
}))}`
})
},
changeUser() {
this.controlWindows.charge = true
},
changeArea(event) {
let index = event.detail.value
this.params.provinceName = index == 0 ? '' : this.areaList[index].areaName
this.seachFn()
},
changeDatetime(value) {
let [start, end] = value
this.dataTime.start = start
this.dataTime.end = end
this.seachFn()
},
async seachFn() {
this.tableList = []
let {
start,
end
} = this.dataTime
this.params.dateStartTime = start + ' 00:00:00'
this.params.dateEndTime = end + ' 23:59:59'
await this.getNetworkCount()
this.getByPage()
},
getByPage() {
serve.getByProvince(this.params).then(res => {
if (res.code === 20000) {
this.tableList = res.data.filter(item => {
if(item.provinceName) return item
}).map((item, index) => {
item.grossMargin = this.toFixed2Handle(item.grossMargin)
item.grossProfitCount = this.toFixed2Handle(item.grossProfitCount)
item.revenueAmountCount = this.toFixed2Handle(item.revenueAmountCount)
return item
});
}
})
},
toFixed2Handle(value) {
if (!value && value != 0) {
return ''
}
return +value.toFixed(2) + ''
},
getCheckInfo() {
serve.getCheckInfo().then(res => {
if (res.code == 20000) {
this.areaList = res.data.areaCodeList
this.areaList.unshift({
areaName: '全部'
})
}
})
},
// // 触底加载
// scrolltolower() {
// this.paramter.currentPage += 1
// this.getByPage()
// },
back() {
uni.navigateBack()
},
jump(item) {
uni.navigateTo({
url: `./details?details=${item.details}`
})
},
}
}
</script>
<style lang="scss">
// .uni-easyinput__content {
// background-color: #fff;
// }
.header {
position: relative;
width: 100%;
background: #2866FF;
// min-height: 403rpx;
// background: url('https://xoi-support.oss-cn-hangzhou.aliyuncs.com/星油admin小程序/sjbj.png') center/100% no-repeat;
}
.options {
display: flex;
margin-top: 30rpx;
padding: 0 33rpx;
>view {
&:nth-of-type(1),
&:nth-of-type(2),
{
flex: 1;
}
&:nth-of-type(3),
{
flex: 2.5;
}
}
.special {
display: inline-block;
max-width: 115rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
.overview {
margin: 27rpx auto 0;
padding: 55rpx 41rpx 0;
width: 684rpx;
height: 285rpx;
color: #333;
background: url('https://publicxingyou.oss-cn-hangzhou.aliyuncs.com/mp-oil/networkPoint-background.png') 100%/100%;
border-radius: 30rpx;
>view {
&:nth-of-type(1) {
text-align: center;
font-size: 60rpx;
color: #fff;
}
&:nth-of-type(2) {
// margin-top: 5rpx;
text-align: center;
font-size: 20rpx;
color: #fff;
}
&:nth-of-type(3) {
margin-top: 45rpx;
display: flex;
justify-content: space-between;
color: #fff;
}
}
}
.title {
margin-top: 34rpx;
padding-left: 33rpx;
font-size: 28rpx;
}
.container {
// margin-top: ;
padding: 0 60rpx 0 32rpx;
.item {
display: flex;
margin-bottom: 35rpx;
&:nth-last-of-type(1) {
margin-bottom: 0;
}
.sequence {
position: relative;
top: 3rpx;
width: 60rpx;
height: 60rpx;
font-size: 24rpx;
color: #999999;
line-height: 60rpx;
text-align: center;
&.first {
background: url('./img/1.png') 100%/100%;
}
&.second {
background: url('./img/2.png') 100%/100%;
}
&.third {
background: url('./img/3.png') 100%/100%;
}
}
.info {
margin-left: 15rpx;
flex: 1;
>view {
&:nth-of-type(1) {
font-size: 28rpx;
color: #333;
>text {
&:nth-of-type(1) {
display: inline-block;
width: 135rpx;
font-weight: 550;
}
&:nth-of-type(2) {
margin-left: 25rpx;
}
&:nth-of-type(3) {
float: right;
color: #333333;
}
}
}
&:nth-of-type(2) {
position: relative;
margin-top: 15rpx;
width: 100%;
height: 15rpx;
border-radius: 37rpx;
background: #E5E5E5;
>view {
position: relative;
width: 20%;
height: 15rpx;
border-radius: 37rpx;
background: #2866FF;
}
}
&:nth-of-type(3) {
margin-top: 5rpx;
padding-left: 97rpx;
color: #666666;
font-size: 24rpx;
>text {
&:nth-of-type(2) {
float: right;
}
}
}
}
}
}
}
</style>