mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-05-09 12:09:00 +08:00
82 lines
2.0 KiB
Vue
82 lines
2.0 KiB
Vue
<template>
|
|
<div ref="chart"></div>
|
|
</template>
|
|
<script>
|
|
import { Chart } from '@antv/g2';
|
|
|
|
export default {
|
|
props: {
|
|
data: {
|
|
type: Array,
|
|
required: true
|
|
},
|
|
options: {
|
|
type: Object,
|
|
required: true
|
|
}
|
|
},
|
|
watch: {
|
|
data() {
|
|
if (this.chart) {
|
|
this.chart.changeData(this.data);
|
|
this.chart.render();
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
const chart = new Chart({
|
|
container: this.$refs.chart,
|
|
autoFit: true,
|
|
height: 300
|
|
});
|
|
this.chart = chart;
|
|
Object.keys(this.options).forEach((p) => {
|
|
const option = this.options[p];
|
|
switch (p) {
|
|
case 'scale':
|
|
chart.scale(option);
|
|
break;
|
|
case 'coordinate':
|
|
chart.coordinate(option);
|
|
break;
|
|
case 'tooltip':
|
|
chart.tooltip(option);
|
|
break;
|
|
case 'axis':
|
|
Object.keys(option).forEach((pp) => {
|
|
chart.axis(pp, option[pp]);
|
|
});
|
|
break;
|
|
default:
|
|
}
|
|
});
|
|
|
|
if (this.options.line) {
|
|
const lineGeometry = chart.line();
|
|
Object.keys(this.options.line).forEach((pp) => {
|
|
lineGeometry[pp](this.options.line[pp]);
|
|
});
|
|
}
|
|
|
|
if (this.options.point) {
|
|
const pointGeometry = chart.point();
|
|
Object.keys(this.options.point).forEach((pp) => {
|
|
pointGeometry[pp](this.options.point[pp]);
|
|
});
|
|
}
|
|
|
|
if (this.data.length === 0) {
|
|
return;
|
|
}
|
|
chart.data(this.data);
|
|
chart.render();
|
|
},
|
|
beforeDestroy() {
|
|
this.chart && this.chart.destroy();
|
|
}
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
|
|
</style>
|