<template> <CellWrapper title="大客户分析"> <template v-slot:header> <span class="el-icon-refresh" title="刷新"></span> <span class="el-icon-more" title="操作"></span> </template> <div class="chart-container"> <div class="chart-operate"> <i class="el-icon-arrow-up"></i> <i class="el-icon-arrow-down"></i> </div> <div class="chartWrapper"> <div class="chart"></div> </div> </div> </CellWrapper> </template> <script> import CellWrapper from "../common/CellWrapper.vue"; import * as echarts from "echarts"; import { busvolume, finamount, expincome } from "~/service/report"; export default { name: "CustomerAnalyse", components: { CellWrapper }, data() { return { echartInstance: null, //componentIndex mapping: { 0: "busvol", 1: "iaefts", 2: "expben", }, category: [], seriesData : [] , seriesData1 : [] , seriesData2 : [] , }; }, mounted() { // 仅在整个视图都被渲染之后才会运行的代码 this.$nextTick(async() => { await this.loadData(); this.loadCharts(); this.loadChartsBind = this.loadCharts.bind(this); window.addEventListener("resize", this.loadChartsBind); }); }, methods: { async loadData() { //统计 业务量 const volume = await busvolume(); let volumes = Array.from(volume); //统计 融资量 const amount = await finamount(); let amounts = Array.from(amount); //统计 费用收益 const income = await expincome(); let incomes = Array.from(income) let categoryArr = []; //定义 seriesData数组 金额 category数组 客户名 // let seriesData = []; // let seriesData1 = []; // let seriesData2 = []; // 优先遍历客户名,方便后续的数组匹配 // volume.forEach((v) => { // console.log(v.nam1) // category.push(v.nam1); // console.log(category.toString()); // console.log(category) // }); for (let i = 0; i < volume.length; i++) { let v = volume[i].nam1; // console.log(typeof v); // console.log(volume[i].nam1); categoryArr.push(v); // console.log(category.toString()); // console.log(category); // console.log(typeof category); } this.category = categoryArr; //存在bug后续要解决 // amount.forEach((v) => { // for (let i = 0; i < category.length; i++) { // if (category[i] == v.nam1) { // continue; // } else { // category.push(v.nam1); // } // } // }); //存在bug后续要解决 // income.forEach((v) => { // for (let i = 0; i < category.length; i++) { // if (category[i] == v.nam1) { // continue; // } else { // category.push(v.nam1); // } // } // }); const volumeArr = [] volumes.forEach((v) => { for (let i = 0; i < categoryArr.length; i++) { if (categoryArr[i] == v.nam1) { volumeArr.push(v.amount) break; } } }); this.seriesData = volumeArr; const amountArr = [] amounts.forEach((v) => { for (let i = 0; i < categoryArr.length; i++) { if (categoryArr[i] == v.nam1) { amountArr.push(v.amount); break; } } }); this.seriesData1 = amountArr; const incomeArr = [] incomes.forEach((v) => { for (let i = 0; i < categoryArr.length; i++) { if (categoryArr[i] == v.nam1) { incomeArr.push(v.amount); break; } } }); this.seriesData2 = incomeArr; }, //加载图标函数 loadCharts() { if (this.echartInstance) { this.echartInstance.dispose(); } this.echartInstance = echarts.init( this.$el.querySelector(".chart-container .chartWrapper .chart") ); const option = { tooltip: { trigger: "axis", axisPointer: { type: "shadow", }, }, legend: { bottom: "2%", }, grid: { left: "1%", right: "6%", top: "1%", containLabel: true, }, xAxis: { type: "value", boundaryGap: ["10%", "20%"], }, yAxis: { type: "category", data: this.category, }, series: [ { name: "业务量金额(美元)", type: "bar", data: this.seriesData, }, { name: "融资量金额(万美元)", type: "bar", data: this.seriesData1, }, { name: "费用收益金额(千美元)", type: "bar", data: this.seriesData2, }, ], }; this.echartInstance.setOption(option); //echart on事件来跳转页面 // this.echartInstance.on( // 'click', // function (params) =>{ // alert(params.name); // this.$router.push('/taskList') // } this.echartInstance.on("click", (params) => { console.log(params); console.log(params.name); var name = parseInt(params.name); let path = params.componentIndex; // 要使用=>函数使内外的this指向一致 if (path === 0) { this.$router.push({ path:"/business/Busvol", query:{name: params.name} }); } else if (path === 1) { //{path:"/xxxpath",query:"id:xxx"} router跳转页面传参业务 接受页面用created(){if(this.$route.query){todo}} this.$router.push({ path:"/business/Iaefts", query:{name: params.name} }); } else { //{path:"/xxxpath",query:"id:xxx"} router跳转页面传参业务 接受页面用created(){if(this.$route.query){todo}} this.$router.push({ path:"/business/Expben", query:{name:params.name} }); } }); }, destroyed() { window.removeEventListener("resize", this.loadChartsBind); }, }, }; </script> <style> .chart-container { height: 100%; display: flex; flex-direction: column; padding: 0 5px; } .chart-operate { margin-left: 20px; height: 20px; } .chart-operate i { cursor: pointer; } .chartWrapper { flex: 1; } .chartWrapper .chart { width: 100%; height: 100%; /* 将指针改变为可以跳转 */ cursor: pointer; } </style>