卡比记账项目——echart图表页面

296 阅读2分钟

记账页面

记账app很重要的一个功能就是收支的可视化页面,让用户通过echar图表直观了解自己的收支状况是一个记账类app应该做到的。

首先在views下创建统计页面StatisticsPage组件,设计基本同之前的ItemList组件

截屏2022-10-28 12.51.50.png 支持四个tab,每个tab下面会展示对应时间的收支图表。

这时我们会发现与ItemList组件有相当大部分的重复操作,因此决定进行对TimeTabsLayout组件的封装。

截屏2022-10-28 13.06.05.png

需要注意的是每个Tab里面的内容需要从props里面传来对应的component即可。

截屏2022-10-28 13.14.13.png

比如之前的ItemList组件 引入了TimeTabsLayout之后 则变成了:

截屏2022-10-28 13.08.45.png

预览效果:

截屏2022-10-28 13.23.25.png

Charts组件

现在要想实现点击本月则显示本月的内容,点击下个月显示下个月的内容,这时回到Charts组件。内容可以使用之前封装好的FormItem组件

截屏2022-10-28 13.32.37.png 回到Form组件增加select的type 以及options的props options是个数组,接受两个属性,value和text都是字符串。 在计算属性中加入select的case,返回一个select下拉选择标签,里面会有一个option的内容。我们直接对props.options进行遍历,对于每一个options,都返回option标签,并且value等于option的value,内容就是option的text。添加一个onChange事件监听,当元素的值变化的时候emit出去实现更新。

截屏2022-10-28 13.34.15.png 截屏2022-10-28 13.33.10.png

使用echarts

命令行执行npm install echarts --save

引入模版代码。我们先创建一个divref,代替模版中的main,将初始化echarts实例放在onMounted里面。

截屏2022-10-28 14.34.37.png 将ref与div建立关联 截屏2022-10-28 14.34.55.png

改一些样式即可,记得要在echart的容器里加上高度 否则不会显示

使用div制作条形图

先初始化这个条形图所需要的数据 我们叫作data3

截屏2022-10-28 14.51.05.png 它里面有tag和amount 对应了什么事情花了多少钱,tag是有id的 这里需要考虑的是后端传来的数据能不能是这样的结构 问题在于:data3缺少百分比的数据不能直接使用 所以我们通过computed属性来构造一个 betterData3 返回 对于data3每一项进行map遍历,先抄写原本的item然后添加percent关键字,它等于amount除以total*100+%

截屏2022-10-28 14.59.54.png

const total = data3.reduce((sum,item)=>sum+item.amount,0)

存放这个div图表的div则要对这个计算属性进行遍历然后返回一些标签

截屏2022-10-28 15.05.20.png

截屏2022-10-28 15.15.02.png

截屏2022-10-28 15.22.36.png