shop-applet/pages/payment/payment_detail.vue

280 lines
7.1 KiB
Vue
Raw Normal View History

2024-05-14 17:25:13 +08:00
<!-- 收付明细 -->
<template>
<view class="payment-detail">
<view class="payment-detail-head">
<view style="height: var(--status-bar-height);"></view>
<view class="payment-detail-head-wrap">
<view style="display: flex;">
<view class="payment-detail-head-l" style="margin-right: 20rpx;" @click="pickStartShow = true">
<text>{{startTimeTxt}}</text>
<u-icon name="arrow-down" :bold="true"></u-icon>
</view>
<view class="payment-detail-head-l" @click="pickEndShow = true">
<text>{{endTimeTxt}}</text>
<u-icon name="arrow-down" :bold="true"></u-icon>
</view>
</view>
<view class="payment-detail-head-r" @click="handleReset">重置</view>
</view>
<view class="payment-detail-total">
<text class="outcome">支出{{outcome}}</text> <text class="income">收入{{income}}</text>
</view>
</view>
<!-- 首付款列表 -->
<view class="payment-detail-con" :style="{'min-height':'calc(100vh - ' +conHeight+ ')','margin-top':conHeight}">
<view class="payment-detail-con-wrap" v-if="paymentData.length > 0">
<block v-for="(item,indx) in paymentData" :key="indx">
<view class="payment-detail-con-item">
<view class="item-desc">
<text class="item-desc-name line1" style="width:280rpx;">{{item.come_msg}}</text>
<text style="width:180rpx;">{{item.pay_type_name}}</text>
<text class="item-desc-price"
:style="{'color':item.msg=='收入'?'#EEC102':''}"><text>{{item.msg == '支出'?'-':'+'}}</text>{{item.pay_price}}</text>
</view>
<view class="item-time">{{new Date(item.create_time).format('MM月dd日 hh:mm')}}</view>
</view>
</block>
<!-- 加载更多内容 -->
<view class='loadingicon acea-row row-center-wrapper'>
<text class='loading iconfont icon-jiazai' :hidden='loading==false'></text>{{loadTitle}}
</view>
</view>
<!-- 内容为空 -->
<u-empty v-if=" (!paymentData || paymentData.length == 0)" mode="list"
icon="http://cdn.uviewui.com/uview/empty/list.png" />
</view>
<!-- 时间选择器 年月日 -->
<u-datetime-picker :show="(pickEndShow || pickStartShow)" v-model="pickerInitVal" mode="date"
@confirm="pickerConfirm" @cancel="handleClose"></u-datetime-picker>
</view>
</template>
<script>
import {
paymentDetail
} from "@/api/payment.js";
export default {
data() {
return {
conHeight: 0,
paymentData: [],
searchParams: {
page: 1,
limit: 15,
section_startTime: new Date().format("yyyy-MM-dd"),
section_endTime: new Date().format("yyyy-MM-dd"),
mer_id: ''
},
loadend: false,
loading: false,
loadTitle: '加载更多',
pickEndShow: false,
pickStartShow: false,
pickerInitVal: Number(new Date()),
income: 0, //收入
outcome: 0, //支出
}
},
computed: {
startTimeTxt() {
if (this.searchParams.section_startTime) {
return new Date(this.searchParams.section_startTime).format("yyyy年MM月dd日");
} else {
return new Date().format("yyyy年MM月dd日");
}
},
endTimeTxt() {
if (this.searchParams.section_endTime) {
return new Date(this.searchParams.section_endTime).format("yyyy年MM月dd日");
} else {
return new Date().format("yyyy年MM月dd日");
}
}
},
onLoad(opt) {
this.searchParams.mer_id = opt.mer_id;
// 页面高度
this.initHeight();
// 初始化列表
this.getData();
},
onReachBottom() {
if (this.paymentData.length > 0) {
setTimeout(() => {
this.getData();
}, 10)
}
},
methods: {
// 重置
handleReset() {
this.loadend = false;
this.searchParams.page = 1;
this.searchParams.section_startTime = new Date().format("yyyy-MM-dd");
this.searchParams.section_endTime = new Date().format("yyyy-MM-dd");
this.paymentData = [];
this.getData();
},
// 关闭
handleClose() {
this.pickEndShow = false;
this.pickStartShow = false;
},
pickerConfirm(e) {
const date = new Date(e.value).format('yyyy-MM-dd');
if (this.pickStartShow) {
this.searchParams.section_startTime = date;
this.searchParams.page = 1;
this.paymentData = [];
this.loadend = false;
this.getData();
}
if (this.pickEndShow) {
if (!this.searchParams.section_startTime)
this.searchParams.section_startTime = date;
else {
this.searchParams.page = 1;
this.searchParams.section_endTime = date;
this.paymentData = [];
this.loadend = false;
this.getData();
}
}
this.handleClose();
},
async getData(isPage) {
let that = this;
if (that.loadend) return;
if (that.loading) return;
that.loading = true;
that.loadTitle = '';
await paymentDetail(that.searchParams).then(res => {
let list = res.data.list;
this.income = res.data.income;
this.outcome = res.data.outcome;
let paymentData = that.$util.SplitArray(list, that.paymentData);
let loadend = list.length < that.searchParams.limit; //true false
that.loadend = loadend;
that.loading = false;
that.loadTitle = loadend ? '已全部加载' : '加载更多';
setTimeout(() => {
that.$set(that, 'paymentData', paymentData);
}, 500);
if (!loadend)
that.$set(that.searchParams, 'page', that.searchParams.page + 1);
}).catch(err => {
that.loading = false;
that.loadTitle = '加载更多';
});
},
// 列表高度
initHeight() {
this.$nextTick(async () => {
let conDom = await this.getDomInfo(".payment-detail-head");
this.conHeight = conDom.height + "px";
})
},
// 获取dom布局信息
getDomInfo(selector) {
return new Promise((resolve, reject) => {
uni.createSelectorQuery().in(this).select(selector).boundingClientRect((data) => {
resolve(data);
}).exec();
})
}
}
}
</script>
<style lang="scss" scoped>
.payment-detail {
.payment-detail-head {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #EFEFEF;
padding: 30rpx;
.payment-detail-head-wrap {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
.payment-detail-head-l {
display: flex;
align-items: center;
padding: 20rpx 22rpx;
border-radius: 40rpx;
background-color: #E3E3E3;
text {
margin-right: 12rpx;
font-size: 26rpx;
color: #333;
font-weight: bold;
}
}
.payment-detail-head-r {
font-size: 28rpx;
color: #B3B3B3;
}
}
.payment-detail-total {
font-size: 26rpx;
color: #B3B3B3;
.outcome {
margin-right: 10rpx;
}
}
}
.payment-detail-con {
background-color: #fff;
.payment-detail-con-item {
padding: 30rpx;
border-bottom: 2rpx solid #F8F8F8;
.item-desc {
display: flex;
justify-content: space-between;
margin-bottom: 12rpx;
.item-desc-name,
.item-desc-price {
font-size: 30rpx;
color: #333;
font-weight: bold;
}
.item-desc-plus {
color: #FFB93E;
}
}
.item-time {
font-size: 26rpx;
color: #C8C8C8;
}
}
}
}
</style>