diff --git a/package.json b/package.json index 816f2ccd0..e73bc9857 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "@vuelidate/validators": "^2.0.0-alpha.12", "axios": "^0.19.0", "babel-eslint": "^10.1.0", - "chart.js": "2.7.3", + "chart.js": "3.3.2", "codesandbox": "2.1.14", "core-js": "^3.6.5", "eslint": "^6.7.2", diff --git a/src/components/chart/Chart.vue b/src/components/chart/Chart.vue index fef11e4bc..cf37af230 100755 --- a/src/components/chart/Chart.vue +++ b/src/components/chart/Chart.vue @@ -44,7 +44,7 @@ export default { }, methods: { initChart() { - import('chart.js').then((module) => { + import('chart.js/auto').then((module) => { if (module && module.default) { this.chart = new module.default(this.$refs.canvas, { type: this.type, @@ -73,8 +73,8 @@ export default { }, onCanvasClick(event) { if (this.chart) { - const element = this.chart.getElementAtEvent(event); - const dataset = this.chart.getDatasetAtEvent(event); + const element = this.chart.getElementsAtEventForMode(event, 'nearest', { intersect: true }, false); + const dataset = this.chart.getElementsAtEventForMode(event, 'dataset', { intersect: true }, false); if (element && element[0] && dataset) { this.$emit('select', {originalEvent: event, element: element[0], dataset: dataset}); diff --git a/src/views/chart/BarChartDemo.vue b/src/views/chart/BarChartDemo.vue index ab3728009..48c3db84c 100755 --- a/src/views/chart/BarChartDemo.vue +++ b/src/views/chart/BarChartDemo.vue @@ -16,7 +16,7 @@
Horizontal
- +
@@ -52,6 +52,9 @@ export default { if (this.isDarkTheme()) { this.applyDarkTheme(); } + else { + this.applyLightTheme(); + } }, beforeUnmount() { EventBus.off('change-theme', this.themeChangeListener); @@ -86,47 +89,15 @@ export default { '#FFCA28', '#26A69A' ], - yAxisID: 'y-axis-1', + yAxisID: 'y', data: [65, 59, 80, 81, 56, 55, 10] }, { label: 'Dataset 2', backgroundColor: '#78909C', - yAxisID: 'y-axis-2', + yAxisID: 'y1', data: [28, 48, 40, 19, 86, 27, 90] }] }, - multiAxisOptions: { - responsive: true, - tooltips: { - mode: 'index', - intersect: true - }, - scales: { - yAxes: [{ - type: 'linear', - display: true, - position: 'left', - id: 'y-axis-1', - ticks: { - min: 0, - max: 100 - } - }, - { - type: 'linear', - display: true, - position: 'right', - id: 'y-axis-2', - gridLines: { - drawOnChartArea: false - }, - ticks: { - min: 0, - max: 100 - } - }] - } - }, stackedData: { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [{ @@ -170,22 +141,10 @@ export default { ] }] }, - stackedOptions: { - tooltips: { - mode: 'index', - intersect: false - }, - responsive: true, - scales: { - xAxes: [{ - stacked: true, - }], - yAxes: [{ - stacked: true - }] - } - }, - basicOptions: null + basicOptions: null, + horizontalOptions: null, + multiAxisOptions: null, + stackedOptions: null } }, methods: { @@ -194,145 +153,289 @@ export default { }, applyLightTheme() { this.basicOptions = { - legend: { - labels: { - fontColor: '#495057' + plugins: { + legend: { + labels: { + color: '#495057' + } } }, scales: { - xAxes: [{ + x: { ticks: { - fontColor: '#495057' + color: '#495057' + }, + grid: { + color: '#ebedef' } - }], - yAxes: [{ - ticks: { - fontColor: '#495057' - } - }] - } - }; - - this.stackedOptions.scales.xAxes[0].ticks = { - fontColor: '#495057' - }; - this.stackedOptions.scales.xAxes[0].gridLines = { - color: '#ebedef' - }; - this.stackedOptions.scales.yAxes[0].ticks = { - fontColor: '#495057' - }; - this.stackedOptions.scales.yAxes[0].gridLines = { - color: '#ebedef' - }; - this.stackedOptions.legend = { - labels: { - fontColor: '#495057' - } - }; - this.stackedOptions = {...this.stackedOptions}; - - this.multiAxisOptions.scales.xAxes = [{ - ticks: { - fontColor: '#495057' }, - gridLines: { - color: '#ebedef' + y: { + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } } } - ]; - this.multiAxisOptions.scales.yAxes[0].ticks = { - fontColor: '#495057' }; - this.multiAxisOptions.scales.yAxes[0].gridLines = { - color: '#ebedef' - }; - this.multiAxisOptions.scales.yAxes[1].ticks = { - fontColor: '#495057' - }; - this.multiAxisOptions.scales.yAxes[1].gridLines = { - color: '#ebedef' - }; - this.multiAxisOptions.legend = { - labels: { - fontColor: '#495057' + + this.horizontalOptions = { + indexAxis: 'y', + plugins: { + legend: { + labels: { + color: '#495057' + } + } + }, + scales: { + x: { + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } + }, + y: { + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } + } + } + }; + + this.multiAxisOptions = { + plugins: { + legend: { + labels: { + color: '#495057' + } + }, + tooltips: { + mode: 'index', + intersect: true + } + }, + scales: { + x: { + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } + }, + y: { + type: 'linear', + display: true, + position: 'left', + ticks: { + min: 0, + max: 100, + color: '#495057' + }, + grid: { + color: '#ebedef' + } + }, + y1: { + type: 'linear', + display: true, + position: 'right', + grid: { + drawOnChartArea: false, + color: '#ebedef' + }, + ticks: { + min: 0, + max: 100, + color: '#495057' + } + } + } + }; + + this.stackedOptions = { + plugins: { + tooltips: { + mode: 'index', + intersect: false + }, + legend: { + labels: { + color: '#495057' + } + } + }, + scales: { + x: { + stacked: true, + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } + }, + y: { + stacked: true, + ticks: { + color: '#495057' + }, + grid: { + color: '#ebedef' + } + } } }; - this.multiAxisOptions = {...this.multiAxisOptions}; }, applyDarkTheme() { this.basicOptions = { - legend: { - labels: { - fontColor: '#ebedef' + plugins: { + legend: { + labels: { + color: '#ebedef' + } } }, scales: { - xAxes: [{ + x: { ticks: { - fontColor: '#ebedef' + color: '#ebedef' }, - gridLines: { + grid: { color: 'rgba(255,255,255,0.2)' } - }], - yAxes: [{ - ticks: { - fontColor: '#ebedef' - }, - gridLines: { - color: 'rgba(255,255,255,0.2)' - } - }] - } - }; - - this.stackedOptions.scales.xAxes[0].ticks = { - fontColor: '#ebedef' - }; - this.stackedOptions.scales.xAxes[0].gridLines = { - color: 'rgba(255,255,255,0.2)' - }; - this.stackedOptions.scales.yAxes[0].ticks = { - fontColor: '#ebedef' - }; - this.stackedOptions.scales.yAxes[0].gridLines = { - color: 'rgba(255,255,255,0.2)' - }; - this.stackedOptions.legend = { - labels: { - fontColor: '#ebedef' - } - }; - this.stackedOptions = {...this.stackedOptions}; - - this.multiAxisOptions.scales.xAxes = [{ - ticks: { - fontColor: '#ebedef' }, - gridLines: { - color: 'rgba(255,255,255,0.2)' + y: { + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } } } - ]; - this.multiAxisOptions.scales.yAxes[0].ticks = { - fontColor: '#ebedef' }; - this.multiAxisOptions.scales.yAxes[0].gridLines = { - color: 'rgba(255,255,255,0.2)' - }; - this.multiAxisOptions.scales.yAxes[1].ticks = { - fontColor: '#ebedef' - }; - this.multiAxisOptions.scales.yAxes[1].gridLines = { - color: 'rgba(255,255,255,0.2)' - }; - this.multiAxisOptions.legend = { - labels: { - fontColor: '#ebedef' + + this.horizontalOptions = { + indexAxis: 'y', + plugins: { + legend: { + labels: { + color: '#ebedef' + } + } + }, + scales: { + x: { + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + }, + y: { + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + } } }; - this.multiAxisOptions = {...this.multiAxisOptions}; + + this.multiAxisOptions = { + plugins: { + legend: { + labels: { + color: '#ebedef' + } + }, + tooltips: { + mode: 'index', + intersect: true + } + }, + scales: { + x: { + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + }, + y: { + type: 'linear', + display: true, + position: 'left', + ticks: { + min: 0, + max: 100, + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + }, + y1: { + type: 'linear', + display: true, + position: 'right', + grid: { + drawOnChartArea: false, + color: 'rgba(255,255,255,0.2)' + }, + ticks: { + min: 0, + max: 100, + color: '#ebedef' + } + } + } + }; + + this.stackedOptions = { + plugins: { + legend: { + labels: { + color: '#ebedef' + } + }, + tooltips: { + mode: 'index', + intersect: false + } + }, + scales: { + x: { + stacked: true, + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + }, + y: { + stacked: true, + ticks: { + color: '#ebedef' + }, + grid: { + color: 'rgba(255,255,255,0.2)' + } + } + } + }; } }, components: { diff --git a/src/views/chart/BarChartDoc.vue b/src/views/chart/BarChartDoc.vue index 217eae0fc..ea6a1f715 100755 --- a/src/views/chart/BarChartDoc.vue +++ b/src/views/chart/BarChartDoc.vue @@ -1,5 +1,5 @@