/
LineChart.vue
105 lines (99 loc) · 2.02 KB
/
LineChart.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<script>
import { Line, mixins } from 'vue-chartjs';
import objectAssignDeep from 'object-assign-deep';
const chartOptions = {
animation: {
duration: 0,
},
responsive: true,
maintainAspectRatio: false,
tooltips: {
enabled: false,
},
legend: {
labels: {
boxWidth: 12,
fontColor: 'white',
},
},
scales: {
xAxes: [{
color: 'white',
type: 'time',
gridLines: {
zeroLineColor: 'transparent',
drawBorder: false,
color: 'rgba(255, 255, 255, 0.05)',
},
ticks: {
fontColor: 'white',
},
}],
yAxes: [{
id: 'primary',
position: 'left',
color: 'white',
gridLines: {
zeroLineColor: 'transparent',
drawBorder: false,
color: 'rgba(255, 255, 255, 0.05)',
},
ticks: {
fontColor: 'white',
callback: value => (Math.floor(value) === value ? value : null),
},
}],
},
elements: {
line: {
borderWidth: 2,
backgroundColor: 'transparent',
},
point: {
radius: 0,
hoverRadius: 0,
hitRadius: 0,
},
},
events: [],
};
export default {
extends: Line,
mixins: [mixins.reactiveProp],
props: {
chartData: {
type: Object,
default: () => ({ datasets: [] }),
},
secondaryAxis: {
type: Boolean,
default: false,
},
},
computed: {
options() {
const options = objectAssignDeep({}, chartOptions);
if (this.secondaryAxis) {
options.scales.yAxes[1] = {
id: 'secondary',
position: 'right',
color: 'white',
gridLines: {
zeroLineColor: 'transparent',
drawBorder: false,
color: 'rgba(255, 255, 255, 0.05)',
},
ticks: {
fontColor: 'white',
callback: value => (Math.floor(value) === value ? value : null),
},
};
}
return options;
},
},
mounted() {
this.renderChart(this.chartData, this.options);
},
};
</script>