Files
Smart-Farm/uniapp/uni-app/mine/pages/balance/record.vue
2025-12-22 17:13:05 +08:00

296 lines
8.2 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 class="mine-stored-record">
<fixed>
<view class="fill-base b-1px-b">
<view class="pl-lg pr-lg">
<view class="space-lg"></view>
<uni-segmented-control :current="typeInd" :values="typeList"
@clickItem="handerTabChange($event,'typeInd')" style-type="button" :active-color="primaryColor">
</uni-segmented-control>
</view>
<tab @change="handerTabChange($event,'activeIndex')" :list="tabList"
:lockTap="activeIndex==2&&tabList[2].start_time&&tabList[2].end_time ? false : true"
:activeIndex="activeIndex" :activeColor="primaryColor" :width="100/tabList.length + '%'"
height="100rpx"></tab>
</view>
</fixed>
<view class="fill-base pd-lg b-1px-b" v-for="(item,index) in list.data" :key="index">
<view class="flex-between">
<view class="max-446 ellipsis">{{typeType[item.type]}}</view>
<view class="text-bold" :style="{color:primaryColor}">{{item.add?'+':'-'}} {{item.price}}</view>
</view>
<view class="flex-between f-caption c-desc mt-sm">
<view class="c-caption">{{item.create_time}}</view>
<view>余额{{item.after_balance}}</view>
</view>
</view>
<load-more :noMore="list.current_page>=list.last_page&&list.data.length>0" :loading="loading" v-if="loading">
</load-more>
<abnor v-if="!loading&&list.data.length<=0&&list.current_page==1"></abnor>
<view class="space-footer"></view>
<uni-popup ref="show_choose_time" type="top" :custom="true" :maskClick="false">
<view style="height: 184rpx;"></view>
<view class="popup-choose-time fill-base f-paragraph c-desc pt-lg pb-lg radius-bottom-34">
<view class="time-item flex-center pt-lg">
<view @tap.stop="toShowTime('start_time')" class="item-child flex-center flex-column">
<view>开始时间</view>
<view class="mt-sm" :style="{color:tabList[2].start_time ? primaryColor : '#999'}">
{{tabList[2].start_time || '选择时间'}}
</view>
</view>
<view @tap.stop="toShowTime('end_time')" class="item-child flex-center flex-column b-1px-l">
<view>结束时间</view>
<view class="mt-sm" :style="{color:tabList[2].end_time ? primaryColor : '#999'}">
{{tabList[2].end_time || '选择时间'}}
</view>
</view>
</view>
<view class="button-item flex-center">
<view @tap.stop="toConfirm(1)" class="item-child disabled flex-center"> 取消 </view>
<view @tap.stop="toConfirm(2)" class="item-child flex-center"
:style="{background: primaryColor,color:'#fff'}"> 确定
</view>
</view>
</view>
</uni-popup>
<w-picker mode="date" :startYear="startYear" :endYear="endYear" :value="tabList[0].end_time" :current="false"
fields="day" @confirm="onConfirm($event)" :disabled-after="false" ref="day" :themeColor="primaryColor"
:visible.sync="showDate">
</w-picker>
</view>
</template>
<script>
import {
mapState,
} from "vuex"
import uniSegmentedControl from "@/components/uni-segmented-control.vue"
import wPicker from "@/components/w-picker/w-picker.vue";
export default {
components: {
uniSegmentedControl,
wPicker
},
data() {
return {
startYear: '',
endYear: '',
showKey: '',
showDate: false,
typeType: {
1: '购买储值卡',
2: '认养订单',
3: '认养配送订单',
4: '配送订单退款',
5: '养殖订单',
6: '土地订单',
7: '商城交易支付',
8: '提现',
9: '土地配送订单',
10: '商城订单退款',
11: '商城交易收入',
12: '拒绝提现',
13: '认养订单退款',
14: '',
15: ''
},
typeList: [{
id: 1,
title: '收入记录'
}, {
id: 0,
title: '支出记录'
}],
typeInd: 0,
activeIndex: 0,
tabList: [{
id: 1,
title: '本周',
start_time: '',
end_time: ''
}, {
id: 2,
title: '本月',
start_time: '',
end_time: ''
}, {
id: 3,
title: '自定义',
start_time: '',
end_time: ''
}],
preTime: {
start_time: '',
end_time: ''
},
param: {
page: 1,
start_time: '',
end_time: ''
},
list: {
data: []
},
loading: true,
lockTap: false
}
},
computed: mapState({
primaryColor: state => state.config.configInfo.primaryColor,
subColor: state => state.config.configInfo.subColor,
}),
onLoad() {
this.$util.showLoading()
this.initIndex()
},
onPullDownRefresh() {
// #ifndef APP-PLUS
uni.showNavigationBarLoading()
// #endif
this.initRefresh()
uni.stopPullDownRefresh()
},
onReachBottom() {
if (this.list.current_page >= this.list.last_page || this.loading) return
this.param.page = this.param.page + 1
this.loading = true
this.getList()
},
methods: {
initIndex() {
let cur_time = new Date(Math.ceil(new Date().getTime()))
const currentDate = new Date()
//返回date是一周中的某一天
const week = currentDate.getDay()
//一天的毫秒数
const millisecond = 1000 * 60 * 60 * 24
//减去的天数
const minusDay = week != 0 ? week - 1 : 6
//本周 周一
const monday = new Date(currentDate.getTime() - minusDay * millisecond)
//本周 周日
const sunday = new Date(monday.getTime() + 6 * millisecond)
this.tabList[0].start_time = this.$util.formatTime(monday, 'YY-M-D')
this.tabList[0].end_time = this.$util.formatTime(sunday, 'YY-M-D')
this.tabList[1].start_time = this.$util.formatTime(cur_time, 'YY-M') + '-01'
this.tabList[1].end_time = this.$util.formatTime(cur_time, 'YY-M-D')
let year = this.$util.formatTime(cur_time, 'YY') * 1
this.startYear = year - 5
this.endYear = year
this.getList()
},
initRefresh() {
this.param.page = 1
this.initIndex()
},
async getList() {
let {
list: oldList,
activeIndex,
tabList,
typeInd,
typeList,
} = this
let {
start_time,
end_time
} = tabList[activeIndex]
let param = this.$util.deepCopy(this.param)
param.add = typeList[typeInd].id
param.start_time = this.$util.DateToUnix(start_time)
param.end_time = this.$util.DateToUnix(end_time) + 24 * 3600 - 1
let newList = await this.$api.mine.userConsumeWater(param);
if (this.param.page == 1) {
this.list = newList
} else {
newList.data = oldList.data.concat(newList.data)
this.list = newList
}
this.loading = false
this.$util.hideAll()
},
handerTabChange(index, key, ind = 2) {
this[key] = index;
if (key == 'activeIndex') {
let methodModel = index == ind ? 'open' : 'close'
this.$refs.show_choose_time[methodModel]()
if (index == ind) return
} else {
this.$refs.show_choose_time.close()
}
this.$util.showLoading()
this.param.page = 1
this.list.data = []
this.getList()
},
toShowTime(key, ind = 2) {
if (key == 'end_time' && !this.tabList[ind].start_time) {
this.$util.showToast({
title: `请选择开始时间`
})
return
}
this.showKey = key
this.showDate = true
},
async onConfirm(val, ind = 2) {
let {
start_time,
end_time
} = this.tabList[ind]
let {
showKey
} = this
if ((end_time && showKey == 'start_time' && this.$util.DateToUnix(end_time) < this.$util.DateToUnix(val
.result)) || (
showKey == 'end_time' && this.$util.DateToUnix(start_time) > this.$util.DateToUnix(val.result)
)) {
this.$util.showToast({
title: `结束时间不能小于开始时间`
})
return
}
this.tabList[ind][showKey] = val.result;
if (showKey == 'end_time') {
this.showDate = false
}
},
toConfirm(type, ind = 2) {
let {
start_time = '',
end_time = ''
} = type == 1 ? this.preTime : this.tabList[ind]
if (type == 1) {
this.tabList[ind].start_time = start_time
this.tabList[ind].end_time = end_time
} else {
if (!start_time || !end_time) {
this.$util.showToast({
title: !start_time ? `请选择开始时间` : `请选择结束时间`
})
return
}
this.preTime.start_time = start_time
this.preTime.end_time = end_time
}
this.activeIndex = start_time && end_time ? ind : 0
this.$refs.show_choose_time.close()
this.param.page = 1
this.getList()
}
}
}
</script>
<style lang="scss">
</style>