从零开发一个宝宝账单(八):查看历史账单

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

昨天我们实现了首页展示账单列表和账单总数的功能,今天我们继续完善我们的程序,实现历史记录的查看。

需求分析

  • 内置几个常用按钮近一周,近一月,近三月,近半年。可快速查询这些时间段内的账单情况。
  • 可选择具体日期查询(暂时不做)
  • 可切换年份(暂时不做)
  • 用图表展示(暂时不做,咱们后面会专门讲图表的时候再做)

ok,咱们先怼几个按钮到页面上:

<template>
    <view class="container">
        <view class="btn-group">
            <button type="primary" size="mini">近一周</button>
            <button type="default" size="mini">近一月</button>
            <button type="default" size="mini">近三月</button>
            <button type="default" size="mini">近半年</button>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {

            }
        },
        methods: {

        }
    }
</script>

<style lang="scss" scoped>
    .container {
        padding: 30upx;
        .btn-group {
            display: flex;
            justify-content: space-around;
        }
    }
</style>
复制代码

image.png

查看历史记录接口其实和首页的账单列表是相同的,只是查询的条件不同。

无意间看到这个组件,还挺符合我们这个列表展示的。cv了 image.png

image.png

之前我们的云函数是直接返回10条数据,没有任何查询条件,我们稍加修改,增加日期查询:

'use strict';
const db = uniCloud.database()
const _ = db.command
exports.main = async (event, context) => {
	const collection = db.collection('bill')
	const res = await collection.where({'createTime': _.gt(event.beginTime)}).get()
	return res
};
复制代码

也就是查询比我们设定的开始时间之后的数据。注意每次修改了云函数需要重新上传部署才可以使用。

我们现在来修改我们几个按钮的查询逻辑:

<view class="btn-group">
    <button type="primary" size="mini" @click="getListByDate('week')">近一周</button>
    <button type="default" size="mini" @click="getListByDate('month')">近一月</button>
    <button type="default" size="mini" @click="getListByDate('season')">近三月</button>
    <button type="default" size="mini" @click="getListByDate('halfyear')">近半年</button>
</view>
复制代码
getListByDate(type) {
    uni.showLoading({
        title: '处理中...'
    })
    let beginTime = null;
    let now = new Date().getTime();
    let day = 24 * 60 * 60 * 1000;
    switch (type) {
        case 'week':
            beginTime = now - 7 * day;
            break;
        case 'month':
            beginTime = now - 30 * day;
            break;
        case 'season':
            beginTime = now - 90 * day;
            break;
        case 'halfyear':
            beginTime = now - 180 * day;
            break;
    }
    uniCloud.callFunction({
        name: 'get',
        data: {
            beginTime
        }
    }).then((res) => {
        uni.hideLoading()
        this.list = res.result.data;
    })
}
复制代码

点击查询:

image.png 由于我们的数据跨度很小,都是这两天加的,所以看不出效果,我们去数据库把时间改改:

image.png

image.png

双击即可修改,完了点击确定就可以了。我们再去页面上刷新看看:

image.png

image.png

image.png

image.png

完整代码:

<template>
    <view class="container">
            <view class="btn-group">
                    <button :type="current === 'week' ? 'primary' : 'default'" size="mini" @click="getListByDate('week')">近一周</button>
                    <button :type="current === 'month' ? 'primary' : 'default'" size="mini" @click="getListByDate('month')">近一月</button>
                    <button :type="current === 'season' ? 'primary' : 'default'" size="mini" @click="getListByDate('season')">近三月</button>
                    <button :type="current === 'halfyear' ? 'primary' : 'default'" size="mini" @click="getListByDate('halfyear')">近半年</button>
            </view>
            <uni-list>
                    <uni-list-chat :avatar="billImg" v-for="item in list" :key="item._id" :title="item.price" :note="item.name"
                            :time="moment(item.createTime).format('YYYY-MM-DD HH:mm:ss')"></uni-list-chat>
            </uni-list>
    </view>
</template>

<script>
    import billImg from '@/static/bill.jpg';
    import moment from 'moment';
    export default {
        data() {
            return {
                list: [],
                billImg,
                current: 'week'
            }
        },
        mounted() {
            this.getListByDate('week');
        },
        methods: {
            moment,
            getListByDate(type) {
                this.current = type;
                uni.showLoading({
                    title: '处理中...'
                })
                let beginTime = null;
                let now = new Date().getTime();
                let day = 24 * 60 * 60 * 1000;
                switch (type) {
                    case 'week':
                        beginTime = now - 7 * day;
                        break;
                    case 'month':
                        beginTime = now - 30 * day;
                        break;
                    case 'season':
                        beginTime = now - 90 * day;
                        break;
                    case 'halfyear':
                        beginTime = now - 180 * day;
                        break;
                }
                uniCloud.callFunction({
                    name: 'get',
                    data: {
                        beginTime
                    }
                }).then((res) => {
                    uni.hideLoading()
                    this.list = res.result.data;
                })
            }
        }
    }
</script>

<style lang="scss" scoped>
    .container {
        padding: 30upx;

        .btn-group {
            display: flex;
            justify-content: space-around;
        }
    }
</style>

复制代码

至此,查看历史账单的功能就完成啦,是不是很简单啊,今天就分享到这,明天咱们继续往下做。

猜你喜欢

转载自juejin.im/post/7127676499829719077