课程名称:Vue + EChart 4.0 从0到1打造商业级数据报表项目
课程章节:4-12—4-18对渲染数据进行处理
课程讲师: Sam
课程内容:
累计销售额组件数据接入
// 正则实现千分位显示
function format(v) {
const reg = /\d{1,3}(?=(\d{3})+$)/g
return `${v}`.replace(reg, '$&,')
}
function wrapperObject(o, k) {
if (o && k.indexOf('.') >= 0) {
const keys = k.split('.')
keys.forEach(key => {
o = o[key]
})
return o
} else {
return o && o[k] ? o[k] : {}
}
}
function wrapperArray(o, k) {
return o && o[k] ? o[k] : []
}
function wrapperMoney(o, k) {
return o && o[k] ? `¥ ${format(o[k])}` : '¥ 0.00'
}
function wrapperOriginalNumber(o, k) {
return o && o[k] ? o[k] : 0
}
function wrapperNumber(o, k) {
return o && o[k] ? format(o[k]) : 0
}
function wrapperPercentage(o, k) {
return o && o[k] ? `${o[k]}%` : '0%'
}
export default {
computed: {
reportData() {
return this.getReportData()
},
salesToday() {
return wrapperMoney(this.reportData, 'salesToday')
},
salesGrowthLastDay() {
return wrapperPercentage(this.reportData, 'salesGrowthLastDay')
},
salesGrowthLastMonth() {
return wrapperPercentage(this.reportData, 'salesGrowthLastMonth')
},
salesLastDay() {
return wrapperMoney(this.reportData, 'salesLastDay')
},
orderToday() {
return wrapperNumber(this.reportData, 'orderToday')
},
orderLastDay() {
return wrapperNumber(this.reportData, 'orderLastDay')
},
orderTrend() {
return wrapperArray(this.reportData, 'orderTrend')
},
orderUser() {
return wrapperNumber(this.reportData, 'orderUser')
},
returnRate() {
return wrapperPercentage(this.reportData, 'returnRate')
},
orderUserTrend() {
return wrapperArray(this.reportData, 'orderUserTrend')
},
orderUserTrendAxis() {
return wrapperArray(this.reportData, 'orderUserTrendAxis')
},
userToday() {
return wrapperNumber(this.reportData, 'userToday')
},
userTodayNumber() {
return wrapperOriginalNumber(this.reportData, 'userToday')
},
userLastMonth() {
return wrapperOriginalNumber(this.reportData, 'userLastMonth')
},
userGrowthLastDay() {
return wrapperNumber(this.reportData, 'userGrowthLastDay')
},
userGrowthLastMonth() {
return wrapperNumber(this.reportData, 'userGrowthLastMonth')
},
orderFullYear() {
return wrapperArray(this.reportData, 'orderFullYear')
},
orderFullYearAxis() {
return wrapperArray(this.reportData, 'orderFullYearAxis')
},
orderRank() {
return wrapperArray(this.reportData, 'orderRank')
},
userFullYear() {
return wrapperArray(this.reportData, 'userFullYear')
},
userFullYearAxis() {
return wrapperArray(this.reportData, 'userFullYearAxis')
},
userRank() {
return wrapperArray(this.reportData, 'userRank')
},
wordCloud() {
return this.getWordCloud()
},
category1() {
return wrapperObject(this.reportData, 'category.data1')
},
category2() {
return wrapperObject(this.reportData, 'category.data2')
},
mapData() {
return this.getMapData()
}
},
filters: {
format(v) {
return format(v)
}
},
inject: ['getReportData', 'getWordCloud', 'getMapData']
}
销售api替换
computed: {
rankData() {
return this.activeIndex === '1' ? this.orderRank : this.userRank
}
},
watch: {
orderFullYear() {
this.render(this.orderFullYear, this.orderFullYearAxis, '年度销售额')
}
},
课程收获:
学习到了利用正则对数据进行处理,对千分位的实现,还有对订单量中初始数据为0的时候显示正方形的情况,首先赋值一个null,解决了这个显示跳一下的问题,series:[{name:‘交易量’}],tooltip:{},两个结合使用就会在数据提示的时候添加了标题,使用watch监视数据变化,实现大屏中的累加数据变化等,根据接口先定义空数组,再根据forEach对数据进行整合,实现分页的效果,公共请求的封装,根据每一个请求接口需要的数据做做调整,比如封装公共的百分比,封装数据,封装千分符等,做到一次制作多次使用,可以高效的提升效率img