2025-08-20 19:14:59 +08:00

459 lines
11 KiB
Vue

<template>
<view class="main" v-if="!isLoading">
<!-- 时间筛选卡片 -->
<view class="filterCard">
<view class="filterHeader">
<view class="filterTitle">时间筛选</view>
</view>
<view class="dateSelector">
<view class="dateRange">
<picker mode="date" @change="bindDateChange($event, 0)" :value="pageData.searchTime[0]"
:end="pageData.endDate" start="2018-12-01" class="datePicker">
<view class="dateInput">
<text>{{ pageData.searchTime[0] }}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</view>
</picker>
<view class="dateSeparator">至</view>
<picker mode="date" @change="bindDateChange($event, 1)" :value="pageData.searchTime[1]"
:end="pageData.endDate" start="2018-12-01" class="datePicker">
<view class="dateInput">
<text>{{ pageData.searchTime[1] }}</text>
<text class="uni-icon uni-icon-arrowdown"></text>
</view>
</picker>
</view>
</view>
</view>
<!-- 服务区信息卡片 -->
<view class="serviceCard" v-show="pageMsg.Serverpart_Name">
<view class="serviceHeader">
<view class="serviceName">{{ pageMsg.Serverpart_Name }}</view>
<view class="serviceRevenue">¥{{ $util.fmoney(pageMsg.Serverpart_Revenue, 2) }}</view>
</view>
<view class="serviceDetails" v-if="pageMsg.Serverpart_S || pageMsg.Serverpart_N">
<view class="detailItem" v-if="pageMsg.Serverpart_S">
<view class="detailLabel">{{ pageMsg.Serverpart_S }}</view>
<view class="detailValue">¥{{ $util.fmoney(pageMsg.Serverpart_RevenueS, 2) }}</view>
</view>
<view class="detailItem" v-if="pageMsg.Serverpart_N">
<view class="detailLabel">{{ pageMsg.Serverpart_N }}</view>
<view class="detailValue">¥{{ $util.fmoney(pageMsg.Serverpart_RevenueN, 2) }}</view>
</view>
</view>
</view>
<!-- 商铺列表 -->
<view class="shopList" v-if="pageMsg.ShopList && pageMsg.ShopList.length > 0">
<view class="shopItem" v-for="(item, i) in pageMsg.ShopList" :key="i">
<view class="shopHeader">
<view class="shopIcon">
<image :src="item.BusinessType_Logo || '/static/images/revenue/operating-shop.png'"
mode="aspectFill" />
</view>
<view class="shopInfo">
<view class="shopTop">
<view class="shopName">{{ item.BusinessType_Name }}</view>
<view class="shopRevenue">+ ¥{{ $util.fmoney(item.BusinessType_Revenue, 2) }}</view>
</view>
<view class="shopBottom">
<view class="uploadType" :class="{
'scan': item.Upload_Type == 1,
'port': item.Upload_Type == 2,
'auto': item.Upload_Type != 1 && item.Upload_Type != 2
}">
<view class="typeIcon"></view>
<text class="typeText">
<template v-if="item.Upload_Type == 1">扫码上传</template>
<template v-else-if="item.Upload_Type == 2">接口传输</template>
<template v-else>自动上传</template>
</text>
</view>
<view class="revenueDetails">
<view class="revenueItem"
v-if="item.Serverpart_RevenueS || item.Serverpart_RevenueS === 0">
<text class="revenueLabel">{{ item.Serverpart_S }}:</text>
<text class="revenueValue">¥{{ $util.fmoney(item.Serverpart_RevenueS, 2) }}</text>
</view>
<view class="revenueItem"
v-if="item.Serverpart_RevenueN || item.Serverpart_RevenueN === 0">
<text class="revenueLabel">{{ item.Serverpart_N }}:</text>
<text class="revenueValue">¥{{ $util.fmoney(item.Serverpart_RevenueN, 2) }}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 无数据状态 -->
<view v-if="isLoading && !pageOption.Serverpart_Name" class="noDataContainer">
<noFound nodata="true" :text="noDataText" />
</view>
</view>
</template>
<script>
import request from '@/util/index.js'
export default {
data() {
let now = new Date()
let nowTime = this.$util.cutDate(now, 'YYYY-MM-DD', -1)
let sTime = this.$util.cutDate(now, 'YYYY-MM-DD', -1)
return {
isLoading: true,
pageData: {
endDate: nowTime,
searchTime: [sTime, nowTime],
msg: {},
isLoading: true,
exsideShow: true,
insideShow: true,
},
pageMsg: {},
pageOption: {},
noDataText: '抱歉,没有数据,请稍后重试'
}
},
methods: {
bindDateChange(e, index) {
let nowDate = this.pageData.searchTime[index]
if (e.detail.value != nowDate) {
this.pageData.searchTime[index] = e.detail.value
this.$forceUpdate()
this.getDetail({ st: this.pageData.searchTime[0], et: this.pageData.searchTime[1], id: this.pageOption.id, pcode: this.pageOption.pcode })
}
},
toTrend() {
this.$util.toNextRoute('navigateTo', '/pages/operatingStatements/operatingTrend?name=' + this.pageMsg.Serverpart_Name + '&time=' + this.pageOption.et + '&id=' + this.pageOption.id + '&ProvinceCode=' + this.pageOption.pcode)
},
getDetail(obj) {
let _this = this
uni.showLoading({
title: '正在加载...',
mask: true
})
// _this.$request.$webGet('WeChat/GetRevenueReportDetils',{
request.$webGet('CommercialApi/Revenue/GetRevenueReportDetil', {
startTime: obj.st,
endTime: obj.et,
serverpartId: obj.id,
provinceCode: obj.pcode,
BusinessTrade: obj.BusinessTrade || '',
SearchKeyName: _this.pageOption.searchKey,
SearchKeyValue: _this.pageOption.searchValue,
BusinessType: _this.pageOption.BusinessTypeValue > 0 ? _this.pageOption.BusinessTypeValue : '',
SettlementMode: _this.pageOption.SettlementModeValue > 0 ? _this.pageOption.SettlementModeValue : '',
}).then(res => {
if (res.Result_Code == 100) {
_this.pageMsg = res.Result_Data
} else if (res.Result_Code == 200 || res.Result_Code == 999) {
_this.noDataText = '暂无数据'
} else {
_this.noDataText = res.Result_Desc
}
uni.hideLoading()
_this.isLoading = false
})
},
},
// 拿到传入的数据
onLoad(op) {
console.log('op', op)
this.pageOption = op
if (this.pageOption.st) {
this.pageData.searchTime[0] = this.pageOption.st
}
if (this.pageOption.et) {
this.pageData.searchTime[1] = this.pageOption.et
}
this.getDetail(op)
}
}
</script>
<style lang="scss" scoped>
// 使用项目全局颜色变量
$bg: #f8f9fa;
$muted: #666;
$card: #fff;
$shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
$primary: #27B25F;
$primary2: #4CCC7F;
$success: #2ed573;
$warning: #ff9f43;
$danger: #ff4757;
$info: #3742fa;
page {
background-color: $bg;
}
.main {
width: 100vw;
min-height: 100vh;
background-color: $bg;
padding: 32rpx;
padding-bottom: env(safe-area-inset-bottom);
box-sizing: border-box;
}
// 筛选卡片
.filterCard {
background: $card;
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 32rpx;
box-shadow: $shadow;
.filterHeader {
margin-bottom: 24rpx;
.filterTitle {
font-size: 28rpx;
font-weight: 600;
color: #160002;
}
}
.dateSelector {
.dateRange {
display: flex;
align-items: center;
justify-content: space-between;
.datePicker {
flex: 1;
.dateInput {
display: flex;
align-items: center;
justify-content: center;
padding: 16rpx 24rpx;
background: #f8f8f8;
border-radius: 12rpx;
text:first-child {
font-size: 24rpx;
font-weight: 400;
color: #160002;
}
.uni-icon-arrowdown {
font-size: 20rpx;
color: $muted;
margin-left: 8rpx;
}
}
}
.dateSeparator {
margin: 0 24rpx;
font-size: 24rpx;
font-weight: 400;
color: $muted;
}
}
}
}
// 服务区信息卡片
.serviceCard {
background: linear-gradient(to left, #93a4ec 0%, #4b76e9 100%);
border-radius: 16rpx;
padding: 24rpx;
margin-bottom: 32rpx;
box-shadow: $shadow;
.serviceHeader {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 24rpx;
.serviceName {
font-size: 28rpx;
font-weight: 600;
color: #fff;
flex: 1;
}
.serviceRevenue {
font-size: 32rpx;
font-weight: 600;
color: #fff;
font-family: 'DIN Alternate', 'Arial', sans-serif;
}
}
.serviceDetails {
display: flex;
gap: 32rpx;
.detailItem {
flex: 1;
.detailLabel {
font-size: 24rpx;
font-weight: 400;
color: rgba(255, 255, 255, 0.8);
margin-bottom: 8rpx;
}
.detailValue {
font-size: 24rpx;
font-weight: 600;
color: #fff;
font-family: 'DIN Alternate', 'Arial', sans-serif;
}
}
}
}
// 商铺列表
.shopList {
.shopItem {
background: $card;
border-radius: 16rpx;
margin-bottom: 24rpx;
padding: 32rpx;
box-shadow: $shadow;
.shopHeader {
display: flex;
align-items: flex-start;
.shopIcon {
width: 80rpx;
height: 80rpx;
margin-right: 24rpx;
flex-shrink: 0;
image {
width: 100%;
height: 100%;
border-radius: 12rpx;
}
}
.shopInfo {
flex: 1;
.shopTop {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16rpx;
.shopName {
font-size: 26rpx;
font-weight: 600;
color: #160002;
flex: 1;
}
.shopRevenue {
font-size: 28rpx;
font-weight: 600;
color: $primary;
font-family: 'DIN Alternate', 'Arial', sans-serif;
}
}
.shopBottom {
display: flex;
align-items: center;
justify-content: space-between;
.uploadType {
display: flex;
align-items: center;
.typeIcon {
width: 24rpx;
height: 24rpx;
margin-right: 8rpx;
flex-shrink: 0;
}
.typeText {
font-size: 22rpx;
font-weight: 400;
}
&.scan {
.typeIcon {
background: url(/static/images/revenue/scan-up.png) no-repeat center;
background-size: contain;
}
.typeText {
color: #DFBE9F;
}
}
&.port {
.typeIcon {
background: url(/static/images/revenue/port.png) no-repeat center;
background-size: contain;
}
.typeText {
color: #95BAF2;
}
}
&.auto {
.typeText {
color: $muted;
}
}
}
.revenueDetails {
display: flex;
gap: 24rpx;
.revenueItem {
display: flex;
align-items: center;
.revenueLabel {
font-size: 22rpx;
font-weight: 400;
color: $muted;
margin-right: 8rpx;
}
.revenueValue {
font-size: 22rpx;
font-weight: 600;
color: #160002;
font-family: 'DIN Alternate', 'Arial', sans-serif;
}
}
}
}
}
}
}
}
// 无数据状态
.noDataContainer {
display: flex;
justify-content: center;
align-items: center;
min-height: 400rpx;
}
</style>