暫無描述

model.vue 4.0KB

    <template> <div class="model"> <div class="bar-chart"></div> <div> <el-button type="primary" @click="onExportExcel">导出</el-button> <el-table :data="data.slice((currPage - 1) * 10, currPage * 10)" @sort-change="tableSorted" > <el-table-column prop="name" label="型号"></el-table-column> <el-table-column sortable="custom" prop="num" label="数量" ></el-table-column> <el-table-column sortable="custom" prop="has_scan_num" label="消费者扫码数" ></el-table-column> <el-table-column sortable="custom" prop="has_scan_percentage_txt" label="扫码率" ></el-table-column> <el-table-column prop="percentage" label="比例"> </el-table-column> </el-table> <el-pagination layout="prev, pager, next" @current-change="handlePaginationChanged" :total="data.length" > </el-pagination> </div> </div> </template> <script> import echarts from 'echarts' export default { data() { return { barChart: {}, data: [], currPage: 1 } }, props: ['models'], watch: { models: function(val) { this.initialize() this.currPage = 1 this.setBarChart(val) window.addEventListener( 'resize', function() { this.barChart.resize() }.bind(this) ) } }, methods: { initialize() { this.barChart = echarts.init( document.querySelector('.model .bar-chart'), 'shine' ) }, setBarChart(val) { this.setbarChartOption(val) window.addEventListener( 'resize', function() { this.barChart.resize() }.bind(this) ) }, setbarChartOption(val) { var seriesData = [] var xAxisData = [] let sum = 0 let values = val.slice(0) values = values.sort((v1, v2) => v2.num - v1.num) // let values = let data = [] for (let v of values) { xAxisData.push(v.model_uni_name) seriesData.push(v.num) sum += v.num data.push({ name: v.model_uni_name, num: v.num, has_scan_num: v.has_code1_scan_num + v.has_code2_scan_num, has_scan_percentage_txt: ( ((v.has_code1_scan_num + v.has_code2_scan_num) / v.num) * 100 ).toFixed(1) + '%', has_scan_percentage: (v.has_code1_scan_num + v.has_code2_scan_num) / v.num }) } xAxisData = xAxisData.slice(0, 10) seriesData = seriesData.slice(0, 10) for (let d of data) { d.percentage = ((d.num / sum) * 100).toFixed(1) + '%' } this.data = data let option = { title: { text: '型号排名' }, xAxis: { data: xAxisData, splitLine: { show: false } }, yAxis: {}, series: [ { name: '型号', type: 'bar', data: seriesData, animationEasing: 'elasticOut', animationDelayUpdate: function(idx) { return idx * 5 } } ] } this.barChart.setOption(option, true) }, handlePaginationChanged(page) { this.currPage = page }, tableSorted(params) { const prop = params.prop === 'has_scan_percentage_txt' ? 'has_scan_percentage' : params.prop this.data = this.data.sort((d1, d2) => { return params.order === 'ascending' ? d1[prop] - d2[prop] : d2[prop] - d1[prop] }) }, // 导出表格 onExportExcel() { this.$utils.exportExcel(this.data) } } } </script> <style lang="less" scoped> .bar-chart { width: 500px; height: 700px; } .model { display: flex; justify-content: center; width: 900px; height: 700px; } </style>