perf: legend高亮逻辑变更
This commit is contained in:
@@ -606,8 +606,48 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickScreenLegend(legendName,index){
|
clickScreenLegend(legendName,index){
|
||||||
|
/*点击legend
|
||||||
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
|
* 2.如果点击的是唯一高亮的legend,则变为全高亮状态
|
||||||
|
* 3.否则只改变被点击的legend状态
|
||||||
|
* */
|
||||||
|
let highlightNum = 0; //高亮数量
|
||||||
|
this.isGreyScreen.forEach(g => {
|
||||||
|
if (!g) {
|
||||||
|
highlightNum++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let hasGrey = highlightNum < this.isGreyScreen.length; //是否有置灰的
|
||||||
|
let curIsGrey = this.isGreyScreen[index]; //当前legend的状态
|
||||||
|
let currentIsTheOnlyOneHighlight = !curIsGrey && highlightNum === 1; //当前legend是否是目前唯一高亮的
|
||||||
|
|
||||||
|
let echart = this.echartModalStore;
|
||||||
|
if (echart) {
|
||||||
|
if (!hasGrey) { //1.除当前legend外全置灰
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendInverseSelect'
|
||||||
|
});
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendSelect',
|
||||||
|
name: legendName
|
||||||
|
});
|
||||||
|
this.isGreyScreen = this.isGreyScreen.map((g, i) => i !== index);
|
||||||
|
} else if (currentIsTheOnlyOneHighlight) { //2.全高亮
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendAllSelect'
|
||||||
|
});
|
||||||
|
this.isGreyScreen = this.isGreyScreen.map(() => false);
|
||||||
|
} else {
|
||||||
|
let type = curIsGrey ? "legendSelect" : "legendUnSelect";
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: type,
|
||||||
|
name: legendName
|
||||||
|
});
|
||||||
|
this.$set(this.isGreyScreen, index, !this.isGreyScreen[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
//点击图表某一个legend,图表只显示当前点击的曲线或柱状图,其它隐藏,再次点击已选中的legend ,显示全部
|
//点击图表某一个legend,图表只显示当前点击的曲线或柱状图,其它隐藏,再次点击已选中的legend ,显示全部
|
||||||
let curIsGrey=this.isGreyScreen[index];
|
/*let curIsGrey=this.isGreyScreen[index];
|
||||||
if(this.echartModalStore){
|
if(this.echartModalStore){
|
||||||
this.screenLegendList.forEach((item,i)=>{
|
this.screenLegendList.forEach((item,i)=>{
|
||||||
let isGrey = this.isGreyScreen[i];
|
let isGrey = this.isGreyScreen[i];
|
||||||
@@ -650,7 +690,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}*/
|
||||||
},
|
},
|
||||||
formatLegend(chartWidth,name){
|
formatLegend(chartWidth,name){
|
||||||
if(!name){
|
if(!name){
|
||||||
|
|||||||
@@ -178,6 +178,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import echarts from 'echarts';
|
import echarts from 'echarts';
|
||||||
@@ -345,22 +346,46 @@
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickLegend(legendName,index){
|
clickLegend(legendName, index){
|
||||||
let curIsGrey=this.isGrey[index];
|
/*点击legend
|
||||||
let echart=getChart(this.chartIndex)
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
if(echart) {
|
* 2.如果点击的是唯一高亮的legend,则变为全高亮状态
|
||||||
if(curIsGrey){
|
* 3.否则只改变被点击的legend状态
|
||||||
|
* */
|
||||||
|
let highlightNum = 0; //高亮数量
|
||||||
|
this.isGrey.forEach(g => {
|
||||||
|
if (!g) {
|
||||||
|
highlightNum++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let hasGrey = highlightNum < this.isGrey.length; //是否有置灰的
|
||||||
|
let curIsGrey = this.isGrey[index]; //当前legend的状态
|
||||||
|
let currentIsTheOnlyOneHighlight = !curIsGrey && highlightNum === 1; //当前legend是否是目前唯一高亮的
|
||||||
|
|
||||||
|
let echart = getChart(this.chartIndex)
|
||||||
|
if (echart) {
|
||||||
|
if (!hasGrey) { //1.除当前legend外全置灰
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendInverseSelect'
|
||||||
|
});
|
||||||
echart.dispatchAction({
|
echart.dispatchAction({
|
||||||
type: 'legendSelect',
|
type: 'legendSelect',
|
||||||
name: legendName
|
name: legendName
|
||||||
})
|
});
|
||||||
}else{
|
this.isGrey = this.isGrey.map((g, i) => i !== index);
|
||||||
|
} else if (currentIsTheOnlyOneHighlight) { //2.全高亮
|
||||||
echart.dispatchAction({
|
echart.dispatchAction({
|
||||||
type: 'legendUnSelect',
|
type: 'legendAllSelect'
|
||||||
|
});
|
||||||
|
this.isGrey = this.isGrey.map(() => false);
|
||||||
|
} else {
|
||||||
|
let type = curIsGrey ? "legendSelect" : "legendUnSelect";
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: type,
|
||||||
name: legendName
|
name: legendName
|
||||||
})
|
});
|
||||||
|
this.$set(this.isGrey, index, !this.isGrey[index]);
|
||||||
}
|
}
|
||||||
this.$set(this.isGrey,index,!curIsGrey)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickLegend2(legendName,index){
|
clickLegend2(legendName,index){
|
||||||
@@ -411,20 +436,45 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickScreenLegend(legendName,index){
|
clickScreenLegend(legendName,index){
|
||||||
let curIsGrey=this.isGreyScreen[index];
|
/*点击legend
|
||||||
if(this.echartModalStore) {
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
if(curIsGrey){
|
* 2.如果点击的是唯一高亮的legend,则变为全高亮状态
|
||||||
this.echartModalStore.dispatchAction({
|
* 3.否则只改变被点击的legend状态
|
||||||
|
* */
|
||||||
|
let highlightNum = 0; //高亮数量
|
||||||
|
this.isGreyScreen.forEach(g => {
|
||||||
|
if (!g) {
|
||||||
|
highlightNum++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let hasGrey = highlightNum < this.isGreyScreen.length; //是否有置灰的
|
||||||
|
let curIsGrey = this.isGreyScreen[index]; //当前legend的状态
|
||||||
|
let currentIsTheOnlyOneHighlight = !curIsGrey && highlightNum === 1; //当前legend是否是目前唯一高亮的
|
||||||
|
|
||||||
|
let echart = this.echartModalStore;
|
||||||
|
if (echart) {
|
||||||
|
if (!hasGrey) { //1.除当前legend外全置灰
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendInverseSelect'
|
||||||
|
});
|
||||||
|
echart.dispatchAction({
|
||||||
type: 'legendSelect',
|
type: 'legendSelect',
|
||||||
name: legendName
|
name: legendName
|
||||||
})
|
});
|
||||||
}else{
|
this.isGreyScreen = this.isGreyScreen.map((g, i) => i !== index);
|
||||||
this.echartModalStore.dispatchAction({
|
} else if (currentIsTheOnlyOneHighlight) { //2.全高亮
|
||||||
type: 'legendUnSelect',
|
echart.dispatchAction({
|
||||||
|
type: 'legendAllSelect'
|
||||||
|
});
|
||||||
|
this.isGreyScreen = this.isGreyScreen.map(() => false);
|
||||||
|
} else {
|
||||||
|
let type = curIsGrey ? "legendSelect" : "legendUnSelect";
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: type,
|
||||||
name: legendName
|
name: legendName
|
||||||
})
|
});
|
||||||
|
this.$set(this.isGreyScreen, index, !this.isGreyScreen[index]);
|
||||||
}
|
}
|
||||||
this.$set(this.isGreyScreen,index,!curIsGrey)
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
clickScreenLegend2(legendName,index){
|
clickScreenLegend2(legendName,index){
|
||||||
@@ -877,75 +927,74 @@
|
|||||||
|
|
||||||
window.addEventListener('resize', this.chartResize);
|
window.addEventListener('resize', this.chartResize);
|
||||||
getChart(this.chartIndex).on('magictypechanged', function (params) {
|
getChart(this.chartIndex).on('magictypechanged', function (params) {
|
||||||
self.isStackArea = !self.isStackArea;
|
self.isStackArea = !self.isStackArea;
|
||||||
if(self.isStackArea){
|
if(self.isStackArea){
|
||||||
console.log(123123);
|
getChart(self.chartIndex).setOption({
|
||||||
getChart(self.chartIndex).setOption({
|
toolbox:{
|
||||||
toolbox:{
|
feature:{
|
||||||
feature:{
|
dataZoom:{
|
||||||
dataZoom:{
|
yAxisIndex:false,
|
||||||
yAxisIndex:false,
|
title:{
|
||||||
title:{
|
zoom:self.$t('overall.toolBox.zoom'),
|
||||||
zoom:self.$t('overall.toolBox.zoom'),
|
back:self.$t('overall.toolBox.back'),
|
||||||
back:self.$t('overall.toolBox.back'),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
magicType:{
|
|
||||||
type:['stack'],
|
|
||||||
title:{
|
|
||||||
stack:self.$t('overall.toolBox.stack')
|
|
||||||
},
|
|
||||||
iconStyle:{
|
|
||||||
borderColor:'#7e7e7e',
|
|
||||||
},
|
|
||||||
emphasis:{
|
|
||||||
borderColor:stackIconChooseBorderColor,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
tooltip: {
|
|
||||||
formatter:function(params){
|
|
||||||
let str = `<div>`;
|
|
||||||
let sum = 0;
|
|
||||||
params.forEach((item, i) => {let tip=legend[item.seriesIndex];
|
|
||||||
let color = self.bgColorList[item.seriesIndex];
|
|
||||||
if(i===0){
|
|
||||||
let value=item.data[0];
|
|
||||||
let t_date = new Date(value);
|
|
||||||
str += bus.timeFormate(t_date)
|
|
||||||
str +=`<br/>`;
|
|
||||||
}
|
|
||||||
let val = parseFloat(Number(item.data[1]).toFixed(2));
|
|
||||||
if(val===0){
|
|
||||||
val = Number(item.data[1]).toExponential(2);
|
|
||||||
}
|
|
||||||
sum +=val;
|
|
||||||
str += `<div style="white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;display: flex; justify-content: space-between; min-width: 150px; max-width: 600px; line-height: 18px; font-size: 12px;">`;
|
|
||||||
str += `<div style="max-width: 500px;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;"><span style='display:inline-block;margin-right:5px;border-radius:10px;width:15px;height:5px;background-color: ${color};}'></span>${tip?(tip.alias?tip.alias:tip.name):item.seriesName} </div>`;
|
|
||||||
str += `<div style="padding-left: 10px;">`;
|
|
||||||
str += chartDataFormat.getUnit(chartInfo.unit?chartInfo.unit:2).compute(val,null,2);
|
|
||||||
str += `</div>`;
|
|
||||||
str += `</div>`;
|
|
||||||
});
|
|
||||||
if(self.data.type==='stackArea' || self.isStackArea){
|
|
||||||
sum = parseFloat(Number(sum).toFixed(2));
|
|
||||||
str +=`<div style="white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;display: flex; justify-content: space-between; min-width: 150px; max-width: 600px; line-height: 18px; font-size: 12px;">`;
|
|
||||||
str +=`<div style="line-height: 18px; font-size: 12px;padding-left:20px;">`
|
|
||||||
str +=self.$t("dashboard.panel.chartTotal");
|
|
||||||
str +=`</div>`;
|
|
||||||
str +=`<div style="padding-left: 10px;">`;
|
|
||||||
str +=chartDataFormat.getUnit(chartInfo.unit?chartInfo.unit:2).compute(sum,null,2);
|
|
||||||
str +=`</div>`;
|
|
||||||
str += `</div>`;
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
str +=`</div>`;
|
magicType:{
|
||||||
return str;
|
type:['stack'],
|
||||||
|
title:{
|
||||||
|
stack:self.$t('overall.toolBox.stack')
|
||||||
},
|
},
|
||||||
|
iconStyle:{
|
||||||
|
borderColor:'#7e7e7e',
|
||||||
|
},
|
||||||
|
emphasis:{
|
||||||
|
borderColor:stackIconChooseBorderColor,
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
},
|
||||||
}else{
|
tooltip: {
|
||||||
|
formatter:function(params){
|
||||||
|
let str = `<div>`;
|
||||||
|
let sum = 0;
|
||||||
|
params.forEach((item, i) => {let tip=legend[item.seriesIndex];
|
||||||
|
let color = self.bgColorList[item.seriesIndex];
|
||||||
|
if(i===0){
|
||||||
|
let value=item.data[0];
|
||||||
|
let t_date = new Date(value);
|
||||||
|
str += bus.timeFormate(t_date)
|
||||||
|
str +=`<br/>`;
|
||||||
|
}
|
||||||
|
let val = parseFloat(Number(item.data[1]).toFixed(2));
|
||||||
|
if(val===0){
|
||||||
|
val = Number(item.data[1]).toExponential(2);
|
||||||
|
}
|
||||||
|
sum +=val;
|
||||||
|
str += `<div style="white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;display: flex; justify-content: space-between; min-width: 150px; max-width: 600px; line-height: 18px; font-size: 12px;">`;
|
||||||
|
str += `<div style="max-width: 500px;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;"><span style='display:inline-block;margin-right:5px;border-radius:10px;width:15px;height:5px;background-color: ${color};}'></span>${tip?(tip.alias?tip.alias:tip.name):item.seriesName} </div>`;
|
||||||
|
str += `<div style="padding-left: 10px;">`;
|
||||||
|
str += chartDataFormat.getUnit(chartInfo.unit?chartInfo.unit:2).compute(val,null,2);
|
||||||
|
str += `</div>`;
|
||||||
|
str += `</div>`;
|
||||||
|
});
|
||||||
|
if(self.data.type==='stackArea' || self.isStackArea){
|
||||||
|
sum = parseFloat(Number(sum).toFixed(2));
|
||||||
|
str +=`<div style="white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis;display: flex; justify-content: space-between; min-width: 150px; max-width: 600px; line-height: 18px; font-size: 12px;">`;
|
||||||
|
str +=`<div style="line-height: 18px; font-size: 12px;padding-left:20px;">`
|
||||||
|
str +=self.$t("dashboard.panel.chartTotal");
|
||||||
|
str +=`</div>`;
|
||||||
|
str +=`<div style="padding-left: 10px;">`;
|
||||||
|
str +=chartDataFormat.getUnit(chartInfo.unit?chartInfo.unit:2).compute(sum,null,2);
|
||||||
|
str +=`</div>`;
|
||||||
|
str += `</div>`;
|
||||||
|
}
|
||||||
|
|
||||||
|
str +=`</div>`;
|
||||||
|
return str;
|
||||||
|
},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
getChart(self.chartIndex).setOption({
|
getChart(self.chartIndex).setOption({
|
||||||
toolbox:{
|
toolbox:{
|
||||||
feature:{
|
feature:{
|
||||||
@@ -1786,10 +1835,10 @@
|
|||||||
minValue=0;
|
minValue=0;
|
||||||
for(let j = 0; j < dataArg.length ; j++){
|
for(let j = 0; j < dataArg.length ; j++){
|
||||||
for (let i = 0; i < dataArg[j].data.length - 1; i++) {
|
for (let i = 0; i < dataArg[j].data.length - 1; i++) {
|
||||||
if(dataArg[j].data[i+1][1]!=='NaN'){
|
if(dataArg[j].data[i+1][1]!=='NaN'){
|
||||||
maxValue = (maxValue < Number(dataArg[j].data[i+1][1]) ? Number(dataArg[j].data[i+1][1]) : maxValue);
|
maxValue = (maxValue < Number(dataArg[j].data[i+1][1]) ? Number(dataArg[j].data[i+1][1]) : maxValue);
|
||||||
minValue = (minValue > Number(dataArg[j].data[i+1][1]) ? Number(dataArg[j].data[i+1][1]) : minValue);
|
minValue = (minValue > Number(dataArg[j].data[i+1][1]) ? Number(dataArg[j].data[i+1][1]) : minValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1848,17 +1897,17 @@
|
|||||||
this.screenLegendOptions = [];
|
this.screenLegendOptions = [];
|
||||||
|
|
||||||
this.highchartStore = null, // 保存图表数据
|
this.highchartStore = null, // 保存图表数据
|
||||||
this.echartStore = null,// 保存图表数据
|
this.echartStore = null,// 保存图表数据
|
||||||
this.echartModalStore = null, // 全屏查看时数据
|
this.echartModalStore = null, // 全屏查看时数据
|
||||||
|
|
||||||
this.bgColorList = ['#7bbfea', '#b3424a', '#f05b72', '#596032', '#bd6758',
|
this.bgColorList = ['#7bbfea', '#b3424a', '#f05b72', '#596032', '#bd6758',
|
||||||
'#cd9a5b', '#918597', '#70a19f', '#005344', '#FF00FF',
|
'#cd9a5b', '#918597', '#70a19f', '#005344', '#FF00FF',
|
||||||
'#f7acbc', '#5f5d46', '#66ffff', '#ccFF66', '#f47920',
|
'#f7acbc', '#5f5d46', '#66ffff', '#ccFF66', '#f47920',
|
||||||
'#769149', '#1d953f', '#abc88b', '#7f7522', '#9b95c9',
|
'#769149', '#1d953f', '#abc88b', '#7f7522', '#9b95c9',
|
||||||
'#f3715c', '#ea66a6', '#d1c7b7', '#9d9087', '#77787b',
|
'#f3715c', '#ea66a6', '#d1c7b7', '#9d9087', '#77787b',
|
||||||
'#f58220', '#c37e00', '#00ae9d', '#f26522', '#76becc',
|
'#f58220', '#c37e00', '#00ae9d', '#f26522', '#76becc',
|
||||||
'#76624c', '#d71345', '#2468a2', '#ca8687', '#1b315e',
|
'#76624c', '#d71345', '#2468a2', '#ca8687', '#1b315e',
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.firstLoad = false;
|
this.firstLoad = false;
|
||||||
|
|||||||
@@ -249,8 +249,58 @@
|
|||||||
return color;
|
return color;
|
||||||
},
|
},
|
||||||
clickLegend(legendName,index){
|
clickLegend(legendName,index){
|
||||||
|
/*点击legend
|
||||||
|
* 1.当前如果是全高亮状态,则全部置灰,只留被点击的legend高亮
|
||||||
|
* 2.如果点击的是唯一高亮的legend,则变为全高亮状态
|
||||||
|
* 3.否则只改变被点击的legend状态
|
||||||
|
* */
|
||||||
|
let highlightNum = 0; //高亮数量
|
||||||
|
this.legend.forEach(g => {
|
||||||
|
if (!g.isGray) {
|
||||||
|
highlightNum++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let hasGray = highlightNum < this.legend.length; //是否有置灰的
|
||||||
|
let curIsGray = this.legend[index].isGray; //当前legend的状态
|
||||||
|
let currentIsTheOnlyOneHighlight = !curIsGray && highlightNum === 1; //当前legend是否是目前唯一高亮的
|
||||||
|
|
||||||
let curIsGrey=this.legend[index].isGray;
|
let echart = this.chart;
|
||||||
|
if (echart) {
|
||||||
|
if (!hasGray) { //1.除当前legend外全置灰
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendInverseSelect'
|
||||||
|
});
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendSelect',
|
||||||
|
name: legendName
|
||||||
|
});
|
||||||
|
this.legend = this.legend.map((g, i) => {
|
||||||
|
if (i === index) {
|
||||||
|
g.isGray = false;
|
||||||
|
} else {
|
||||||
|
g.isGray = true;
|
||||||
|
}
|
||||||
|
return g;
|
||||||
|
});
|
||||||
|
} else if (currentIsTheOnlyOneHighlight) { //2.全高亮
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: 'legendAllSelect'
|
||||||
|
});
|
||||||
|
this.legend = this.legend.map(g => {
|
||||||
|
g.isGray = false;
|
||||||
|
return g;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
let type = curIsGray ? "legendSelect" : "legendUnSelect";
|
||||||
|
echart.dispatchAction({
|
||||||
|
type: type,
|
||||||
|
name: legendName
|
||||||
|
});
|
||||||
|
let vm = this;
|
||||||
|
this.$set(this.legend, index, function(){let legend = vm.legend[index]; legend.isGray = !legend.isGray; return legend;}());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*let curIsGrey=this.legend[index].isGray;
|
||||||
if(this.chart){
|
if(this.chart){
|
||||||
if(curIsGrey){
|
if(curIsGrey){
|
||||||
this.chart.dispatchAction({
|
this.chart.dispatchAction({
|
||||||
@@ -264,7 +314,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
this.$set(this.legend[index],'isGray',!curIsGrey)
|
this.$set(this.legend[index],'isGray',!curIsGrey)
|
||||||
}
|
}*/
|
||||||
},
|
},
|
||||||
clickLegend2(legendName,index){
|
clickLegend2(legendName,index){
|
||||||
let curIsGrey=this.legend[index].isGray;
|
let curIsGrey=this.legend[index].isGray;
|
||||||
|
|||||||
Reference in New Issue
Block a user