bike/page_vip/financialStatement.vue
2024-09-02 17:13:16 +08:00

660 lines
14 KiB
Vue
Raw Permalink 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 class="page" v-if="loading">
<u-navbar title="财务报表" :border-bottom="false" :background="bgc" title-color='#000' title-size='36'
height='45'></u-navbar>
<view class="top_box">
<view class="left_text">
时间范围
</view>
<view class="timebox">
<view class="left_time" @click="time1=true">
{{firsTime}}
</view>
-
<view class="right_time" @click="time2=true">
{{lasTime}}
</view>
</view>
</view>
<view class="data_box">
<view class="data_cont " :class="cutidx==0?'act1':''" @click="changeTime(0)">
今日
</view>
<view class="data_cont" :class="cutidx==1?'act1':''" @click="changeTime(1)">
昨日
</view>
<view class="data_cont" :class="cutidx==2?'act1':''" @click="changeTime(2)">
本月
</view>
<view class="data_cont" :class="cutidx==3?'act1':''" @click="changeTime(3)">
上个月
</view>
</view>
<view class="cont_box">
<view class="info_top">
<view class="txt1">
库存现金余额
<!-- <image src="https://lxnapi.ccttiot.com/bike/img/static/uJFB9IlTZQG31V17R5Pn" mode=""></image> -->
</view>
<view class="lines" style="margin-top: 14rpx;"></view>
<view class="txt2">
{{info.income.accountSurplus}}
</view>
<!-- <view class="txt_box">
<view class="txt_box_li">
<view class="txttop">
净利润
</view>
<view class="txtbot">
{{info.accountSurplus}}
</view>
</view>
<view class="txt_box_li">
<view class="txttop">
应退押金余额
</view>
<view class="txtbot">
1235.00
</view>
</view>
</view> -->
</view>
<view class="tit">
订单明细
</view>
<view class="box2">
<view class="box2_li">
<view class="box2_txt1">
主营业务收入
<!-- <image src="https://lxnapi.ccttiot.com/bike/img/static/uJFB9IlTZQG31V17R5Pn" mode=""></image> -->
</view>
<view class="box2_txt2" >
{{info.income.orderPaid }}
</view>
<view class="box2_txt3">
订单收入{{info.income.orderPaid }}
</view>
</view>
<view class="line1"></view>
<view class="box2_li " style="margin-left: 20rpx;">
<view class="box2_txt1">
主营业务成本
<!-- <image src="https://lxnapi.ccttiot.com/bike/img/static/uJFB9IlTZQG31V17R5Pn" mode=""></image> -->
</view>
<view class="box2_txt2">
{{info.income.businessCost}}
</view>
<view class="box2_txt3">
订单退款{{info.income.orderRefund}}
</view>
<view class="box2_txt3">
订单支付手续费{{info.income.handlingFee}}
</view>
</view>
</view>
<view class="tit2">
净利润
<!-- <image src="https://lxnapi.ccttiot.com/bike/img/static/uJFB9IlTZQG31V17R5Pn" mode=""></image> -->
</view>
<view class="money">
{{info.income.operatingIncome }}
</view>
<view class="tit">
押金明细
</view>
<view class="box3">
<view class="box3_txt1">
押金收入{{info.income.depositPaid }}
</view>
<view class="box3_txt1">
押金抵扣转订单收入{{info.income.deductionAmount }}
</view>
<view class="box3_txt1">
押金支出{{info.income.depositRefund }}
</view>
<view class="box3_txt1">
押金收入手续费{{info.income.depositHandlingCharge }}
</view>
</view>
<view class="tit2">
应退押金余额
<!-- <image src="https://lxnapi.ccttiot.com/bike/img/static/uJFB9IlTZQG31V17R5Pn" mode=""></image> -->
</view>
<view class="money">
{{info.income.depositBalance}}
</view>
</view>
<u-picker mode="time" v-model="time1" :params="params" @confirm="confirm1" :default-time='firsTime'></u-picker>
<u-picker mode="time" v-model="time2" :params="params" @confirm="confirm2" :default-time='lasTime'></u-picker>
<u-mask :show="showtips" :z-index='100' />
<view class="tip_box1" v-if="showtips">
<image class="close" src="https://lxnapi.ccttiot.com/bike/img/static/uyRmNa7d2WThHjr1Jzqk" mode="" @click="showtips=false"></image>
<view class="top1">
<view class="tip">
{{tiptit}}
</view>
<view class="txt" v-html="tiptxt">
<!-- {{tiptxt}} -->
</view>
</view>
<!-- <view class="bot1">
<view class="bot_right" @click="showtips=false">
确定
</view>
</view> -->
</view>
</view>
</template>
<script>
export default {
data() {
return {
bgc: {
backgroundColor: "#fff",
},
time1: false,
time2: false,
lasTime: '',
firsTime: '',
params: {
year: true,
month: true,
day: true,
hour: false,
minute: false,
second: false
},
cutidx: 0,
info: {},
areaId: 0,
loading:false,
showtips:false,
tiptxt:'',
tiptit:''
}
},
onLoad() {
let today = new Date();
// 获取七天前的日期
// 格式化日期为 yyyy-MM-dd
this.firsTime = this.formatDate(today);
this.lasTime = this.formatDate(today);
if (uni.getStorageSync('adminAreaid')) {
this.areaId = uni.getStorageSync('adminAreaid')
this.operatingData()
}
},
methods: {
showtipss(num){
if(num==1){
this.tiptxt='该时间段骑车实际利润'
this.tiptit='营业收入'
}else if(num==2){
this.tiptxt='该时间段押金余额'
this.tiptit='押金余额'
}else if(num==3){
this.tiptxt='该时间段账户盈余<br/>总流水减去总支出'
this.tiptit='账户盈余'
}
this.showtips=true
},
displayAmount(amount) {
return amount ? amount : '--';
},
changeTime(num) {
if (num == 0) {
this.cutidx = num;
let today = new Date();
this.firsTime = this.formatDate(today);
this.lasTime = this.formatDate(today);
this.operatingData()
} else if (num == 1) {
this.cutidx = num;
let yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
this.firsTime = this.formatDate(yesterday);
this.lasTime =this.formatDate(yesterday);
this.operatingData()
} else if (num == 2) {
this.cutidx = num;
let today = new Date();
let firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
this.firsTime = this.formatDate(firstDayOfMonth);
this.lasTime = this.formatDate(new Date());
this.operatingData()
} else if (num == 3) {
this.cutidx = num;
let today = new Date();
let firstDayOfLastMonth = new Date(today.getFullYear(), today.getMonth() - 1, 1);
let lastDayOfLastMonth = new Date(today.getFullYear(), today.getMonth(), 0);
this.firsTime = this.formatDate(firstDayOfLastMonth);
this.lasTime = this.formatDate(lastDayOfLastMonth);
this.operatingData()
}
},
formatDate(date) {
let year = date.getFullYear();
let month = String(date.getMonth() + 1).padStart(2, '0');
let day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
},
operatingData() {
let data = {
timeStart: this.firsTime,
timeEnd: this.lasTime,
areaId: this.areaId
}
this.$u.get('/appVerify/operatingData2', data).then((res) => {
if (res.code === 200) {
// 处理接口返回的数据,将边界数据转换为地图组件需要的折线结构
this.info = res.data
this.loading=true
}
}).catch(error => {
console.error("Error fetching area data:", error);
});
},
confirm1(e) {
this.firsTime = e.year + '-' + e.month + '-' + e.day
this.cutidx = -1
this.operatingData()
},
confirm2(e) {
this.lasTime = e.year + '-' + e.month + '-' + e.day
this.cutidx = -1
this.operatingData()
},
}
}
</script>
<style lang="scss">
page {
background-color: #fff;
}
.page {
width: 750rpx;
.cont_box{
margin-top: 38rpx;
padding: 34rpx;
border-radius: 40rpx 40rpx 0 0;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0,0,0,0.2);
.box3{
margin-top: 28rpx;
padding: 32rpx 20rpx;
background: #F0F0F0;
border-radius: 20rpx 20rpx 20rpx 20rpx;
.box3_txt1{
width: 100%;
margin-bottom: 14rpx;
font-weight: 400;
font-size: 30rpx;
color: #3D3D3D;
}
.box3_txt2{
width: 100%;
font-weight: 500;
font-size: 30rpx;
color: #4C97E7;
}
}
.money{
margin-left: 20rpx;
margin-top: 12rpx;
font-weight: 500;
font-size: 40rpx;
color: #4C97E7;
}
.tit2{
margin-left: 20rpx;
margin-top: 26rpx;
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
image{
margin-left: 24rpx;
width: 32rpx;
height: 32rpx;
}
}
.box2{
margin-top: 28rpx;
width: 100%;
padding: 30rpx 20rpx;
background: #F0F0F0;
border-radius: 20rpx 20rpx 20rpx 20rpx;
display: flex;
flex-wrap: nowrap;
// align-items: center;
.box2_li{
// display: flex;
// flex-wrap: wrap;
// align-items: flex-start;
width: 49%;
.box2_txt1{
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
image{
margin-left: 24rpx;
width: 32rpx;
height: 32rpx;
}
}
.box2_txt2{
margin-top: 12rpx;
font-weight: 500;
font-size: 40rpx;
color: #4C97E7;
}
.box2_txt3{
margin-top: 10rpx;
font-weight: 400;
font-size: 24rpx;
color: #3D3D3D;
}
}
.line1{
width: 1rpx;
height: 200rpx;
background: #bbb;
}
}
.tit{
margin-top: 50rpx;
margin-left: 20rpx;
font-weight: 500;
font-size: 40rpx;
color: #3D3D3D;
}
.info_top{
width: 100%;
padding: 22rpx;
background: linear-gradient( 90deg, #4C97E7 0%, #92C6FD 100%);
border-radius: 20rpx 20rpx 20rpx 20rpx;
.txt1{
width: 100%;
display: flex;
flex-wrap: nowrap;
align-items: center;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
image{
margin-left: 24rpx;
width: 32rpx;
height: 32rpx;
}
}
.txt2{
margin-top: 6rpx;
font-weight: 600;
font-size: 48rpx;
color: #FFFFFF;
}
.txt_box{
margin-top: 20rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.txt_box_li{
width: 50%;
.txttop{
width: 100%;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
}
.txtbot{
margin-top: 8rpx;
font-weight: 500;
font-size: 42rpx;
color: #FFFFFF;
}
}
}
.lines{
width: 632rpx;
height: 1rpx;
background-color: #FFFFFF;
}
}
}
.tip_box1 {
position: fixed;
left: 72rpx;
top: 628rpx;
width: 610rpx;
// height: 282rpx;
background: #FFFFFF;
border-radius: 30rpx 30rpx 30rpx 30rpx;
z-index: 110;
padding-bottom: 10rpx;
.close{
position: absolute;
width: 60rpx;
height: 60rpx;
bottom: -98rpx;
left: 274rpx;
}
.top1 {
padding: 52rpx 38rpx 42rpx 36rpx;
.ipt_box {
margin-top: 22rpx;
display: flex;
flex-wrap: nowrap;
align-items: center;
.text {
width: 350rpx;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.ipt {
padding: 10rpx 18rpx;
display: flex;
align-items: center;
justify-content: space-between;
margin-left: 26rpx;
width: 420rpx;
height: 64rpx;
border-radius: 0rpx 0rpx 0rpx 0rpx;
border: 2rpx solid #979797;
.input {
width: 80%;
}
}
}
.tip {
width: 100%;
text-align: center;
font-weight: 700;
font-size: 32rpx;
color: #3D3D3D;
}
.txt {
margin-top: 32rpx;
width: 100%;
text-align: center;
font-weight: 500;
font-size: 24 rpx;
color: #3D3D3D;
}
}
.bot1 {
position: absolute;
width: 610rpx;
// border-top: 2rpx solid #D8D8D8;
display: flex;
flex-wrap: nowrap;
// height: 100%;
// bottom: -20rpx;
justify-content: center;
.bot_left {
border-radius: 0rpx 0rpx 0rpx 30rpx;
width: 50%;
height: 86rpx;
display: flex;
align-items: center;
justify-content: center;
font-weight: 500;
font-size: 32rpx;
color: #3D3D3D;
background: #EEEEEE;
}
.bot_right {
border-radius: 30rpx 30rpx 30rpx 30rpx;
width: 60%;
height: 86rpx;
background: #4C97E7;
display: flex;
align-items: center;
justify-content: center;
color: #FFFFFF;
// border-left: 2rpx solid #D8D8D8;
font-weight: 500;
font-size: 32rpx;
// color: #4C97E7;
}
}
}
.lines {
width: 748rpx;
height: 22rpx;
background: #F6F6F6;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.data_box {
width: 672rpx;
margin: 36rpx auto;
display: flex;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
.data_cont {
display: flex;
align-items: center;
justify-content: center;
width: 150rpx;
height: 60rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 10rpx 10rpx 10rpx 10rpx;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
border: 2rpx solid #fff;
}
.act1 {
background: #E2F2FF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
color: #4C97E7;
border: 2rpx solid #4C97E7;
}
}
.top_box {
display: flex;
flex-wrap: nowrap;
align-items: center;
padding: 28rpx 30rpx;
margin: 20rpx auto;
width: 672rpx;
height: 100rpx;
background: #FFFFFF;
box-shadow: 0rpx 4rpx 22rpx 0rpx rgba(0, 0, 0, 0.07);
border-radius: 10rpx 10rpx 10rpx 10rpx;
.left_text {
width: 25%;
font-weight: 400;
font-size: 32rpx;
color: #3D3D3D;
}
.timebox {
width: 75%;
display: flex;
flex-wrap: nowrap;
align-items: center;
margin-left: 34rpx;
.left_time {
text-align: center;
margin-right: 6rpx;
height: 50rpx;
width: 45%;
border: 2rpx solid #ccc;
border-radius: 12rpx;
font-weight: 400;
font-size: 32rpx;
color: #979797;
}
.right_time {
text-align: center;
margin-left: 6rpx;
height: 50rpx;
width: 45%;
border: 2rpx solid #ccc;
border-radius: 12rpx;
font-weight: 400;
font-size: 32rpx;
color: #979797;
}
}
}
}
</style>