You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
6.1 KiB
163 lines
6.1 KiB
<!--
|
|
* @Author: your name
|
|
* @Date: 2021-10-08 19:12:07
|
|
* @LastEditTime: 2021-12-29 17:29:10
|
|
* @LastEditors: Please set LastEditors
|
|
* @Description: In User Settings Edi
|
|
* @FilePath: /data-show/src/components/v-echars/index.vue
|
|
-->
|
|
<template>
|
|
<div class="echars-cont" ref="myChart" v-resize="changeWin">
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import * as echarts from "echarts";
|
|
export default {
|
|
name: "v-echarts",
|
|
props: {
|
|
opt: {
|
|
type: Object,
|
|
default: () => {
|
|
return {};
|
|
},
|
|
},
|
|
},
|
|
watch: {
|
|
opt: {
|
|
handler(val) {
|
|
if (JSON.stringify(val) != "{}") {
|
|
this.$nextTick(() => {
|
|
if (!this.myChart) {
|
|
this.drawFun(val);
|
|
} else {
|
|
this.myChart.clear();
|
|
this.myChart.setOption(val);
|
|
}
|
|
this.myChart.off('click'); //解绑点击事件
|
|
// this.myChart.on('mouseover', (params) => {
|
|
// if(params.componentType === 'markPoint') {
|
|
// console.log('hover');
|
|
// }
|
|
// })
|
|
this.myChart.on('click', (params) => {
|
|
if(params.componentSubType === 'bar') {
|
|
let obj = {
|
|
axisValueLabel: params.name,
|
|
value: params.data
|
|
}
|
|
this.$emit("getData", obj);
|
|
}
|
|
if(params.componentSubType === 'sankey') {
|
|
let o = {
|
|
key: params.data.name || params.data.source,
|
|
value: params.value
|
|
}
|
|
this.$emit("getData", o);
|
|
}
|
|
if(params.componentType === 'markPoint') {
|
|
params.event.event.stopPropagation();
|
|
let o = {
|
|
key: params.data.name,
|
|
index: params.seriesIndex,
|
|
}
|
|
this.$emit("clickMark", o);
|
|
}
|
|
});
|
|
// this.myChart.off("click");
|
|
// 给图像加点击事件
|
|
|
|
this.myChart.getZr().on("dblclick", (params) => {
|
|
//param.name x轴值,param.data y轴值
|
|
let pointInPixel = [params.offsetX, params.offsetY];
|
|
if (
|
|
this.myChart.containPixel("grid", pointInPixel)
|
|
) {
|
|
// let pointInGrid = this.myChart.convertFromPixel(
|
|
// {
|
|
// seriesIndex: 0,
|
|
// },
|
|
// pointInPixel
|
|
// );
|
|
// let xIndex = pointInGrid[0]; //索引
|
|
// let handleIndex = Number(xIndex);
|
|
// let seriesObj = this.myChart.getOption(); //图表object对象
|
|
let obj =
|
|
this.myChart._componentsViews[1]
|
|
._cbParamsList;
|
|
let ex = obj[0]
|
|
if(ex && ex.componentSubType === 'line') {
|
|
this.$emit("getData", obj);
|
|
}
|
|
};
|
|
});
|
|
|
|
// 将鼠标变成小手
|
|
this.myChart.getZr().on("mousemove", () => {
|
|
this.myChart.getZr().setCursorStyle("pointer");
|
|
});
|
|
this.roundDefaultSelect(this.myChart);
|
|
this.$emit("echarsUpdate", this.myChart);
|
|
});
|
|
}
|
|
},
|
|
immediate: true,
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
myChart: null,
|
|
};
|
|
},
|
|
methods: {
|
|
// 画图
|
|
drawFun(opt) {
|
|
let eRef = this.$refs.myChart;
|
|
this.myChart = echarts.init(eRef);
|
|
this.myChart.setOption(opt);
|
|
},
|
|
// 针对圆特定图形加个默认被选择
|
|
roundDefaultSelect(myChart) {
|
|
if (!myChart.getOption().series[0] || myChart.getOption().series[0].type != "pie") {
|
|
return;
|
|
}
|
|
let index = 0;
|
|
myChart.dispatchAction({
|
|
type: "highlight",
|
|
seriesIndex: 0,
|
|
dataIndex: 0,
|
|
});
|
|
myChart.on("mouseover", function (e) {
|
|
if (e.dataIndex != index) {
|
|
myChart.dispatchAction({
|
|
type: "downplay",
|
|
seriesIndex: 0,
|
|
dataIndex: index,
|
|
});
|
|
}
|
|
});
|
|
myChart.on("mouseout", function (e) {
|
|
index = e.dataIndex;
|
|
myChart.dispatchAction({
|
|
type: "highlight",
|
|
seriesIndex: 0,
|
|
dataIndex: e.dataIndex,
|
|
});
|
|
});
|
|
},
|
|
// 窗口变化
|
|
changeWin() {
|
|
if(this.myChart) {
|
|
this.myChart.resize()
|
|
}
|
|
}
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style lang="less" scoped>
|
|
.echars-cont {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
</style> |