fix: Issues #256 fix Compare Line Chart Y unit to 'Count' done.

This commit is contained in:
chiayin
2024-03-12 16:16:02 +08:00
parent 64ae986384
commit e581bdcfe4
2 changed files with 72 additions and 45 deletions

View File

@@ -200,14 +200,16 @@ export default {
* 建立折線圖 * 建立折線圖
* @param { object } chartData chart data * @param { object } chartData chart data
* @param { object } content titels * @param { object } content titels
* @param { string } yUnit y 軸單位 date | count
*/ */
getLineChart(chartData, content) { getLineChart(chartData, content, yUnit) {
let datasetsPrimary = setLineChartData(chartData.data[0].data, chartData.x_axis.max, chartData.x_axis.min, false, chartData.y_axis.max, chartData.y_axis.min); console.log('chartData:', chartData);
let datasetsSecondary = setLineChartData(chartData.data[1].data, chartData.x_axis.max, chartData.x_axis.min, false, chartData.y_axis.max, chartData.y_axis.min); let datasetsPrimary;
let datasetsSecondary;
let minX = chartData.x_axis.min; let minX = chartData.x_axis.min;
let maxX = chartData.x_axis.max; let maxX = chartData.x_axis.max;
let maxY = chartData.y_axis.max; let maxY = chartData.y_axis.max;
let xData = this.xLabelsData(chartData.x_axis) let xData;
let labelPrimary = chartData.data[0].label; let labelPrimary = chartData.data[0].label;
let labelSecondary = chartData.data[1].label; let labelSecondary = chartData.data[1].label;
let setData = {}; let setData = {};
@@ -218,6 +220,18 @@ export default {
const getSimpleTimeLabel = simpleTimeLabel; const getSimpleTimeLabel = simpleTimeLabel;
const getFollowTimeLabel = followTimeLabel; const getFollowTimeLabel = followTimeLabel;
switch (yUnit) {
case 'date':
datasetsPrimary = setLineChartData(chartData.data[0].data, chartData.x_axis.max, chartData.x_axis.min, false, chartData.y_axis.max, chartData.y_axis.min);
datasetsSecondary = setLineChartData(chartData.data[1].data, chartData.x_axis.max, chartData.x_axis.min, false, chartData.y_axis.max, chartData.y_axis.min);
xData = this.xLabelsData(chartData.x_axis);
break;
case 'count': // 次數 10 個點
datasetsPrimary = chartData.data[0].data;
datasetsSecondary = chartData.data[1].data;
xData = chartData.data[0].data.map(item => new Date(item.x).getTime());
break;
}
setData = { setData = {
labels: xData, labels: xData,
datasets: [ datasets: [
@@ -259,16 +273,6 @@ export default {
title: function(context) { title: function(context) {
return `${content.x}: ${getMoment(context[0].parsed.x)}`; return `${content.x}: ${getMoment(context[0].parsed.x)}`;
}, },
label: function(context) {
let value = getSimpleTimeLabel(context.parsed.y, 2);
switch (context.datasetIndex) {
case 0: // Primary
return `${labelPrimary}: ${value}`;
case 1: // Secondary
return `${labelSecondary}: ${value}`;
}
}
}, },
}, },
title: { title: {
@@ -278,8 +282,6 @@ export default {
scales: { scales: {
x: { x: {
type: 'time', type: 'time',
min: minX,
max: maxX,
title: { title: {
display: true, display: true,
text: content.x, text: content.x,
@@ -321,9 +323,6 @@ export default {
ticks:{ ticks:{
color: '#64748b', color: '#64748b',
padding: 8, padding: 8,
callback: function (value, index, ticks) {
return getFollowTimeLabel(value, maxY, 1)
}
}, },
grid: { grid: {
color: '#64748b', color: '#64748b',
@@ -334,6 +333,37 @@ export default {
}, },
}, },
}; };
switch (yUnit) {
case 'date':
setOption.plugins.tooltip.callbacks.label = function(context) {
let value = getSimpleTimeLabel(context.parsed.y, 2);
switch (context.datasetIndex) {
case 0: // Primary
return `${labelPrimary}: ${value}`;
case 1: // Secondary
return `${labelSecondary}: ${value}`;
}
};
setOption.scales.x.min = minX;
setOption.scales.x.max = maxX;
setOption.scales.y.ticks.callback = function (value, index, ticks) {
return getFollowTimeLabel(value, maxY, 1)
}
break;
case 'count':
setOption.plugins.tooltip.callbacks.label = function(context) {
let value = context.parsed.y;
switch (context.datasetIndex) {
case 0: // Primary
return `${labelPrimary}: ${value}`;
case 1: // Secondary
return `${labelSecondary}: ${value}`;
}
};
break;
}
return [setData, setOption] return [setData, setOption]
}, },
@@ -553,6 +583,7 @@ export default {
// displayColors: false, // displayColors: false,
mode: 'index', // 可顯示全部的 data label mode: 'index', // 可顯示全部的 data label
titleFont: {weight: 'normal'}, titleFont: {weight: 'normal'},
callbacks: {}
}, },
title: { title: {
display: false, display: false,
@@ -610,36 +641,32 @@ export default {
}; };
switch (xUnit) { switch (xUnit) {
case 'date': case 'date':
setOption.plugins.tooltip.callbacks = { setOption.plugins.tooltip.callbacks.label = function(context) {
label: function(context) { let value = context.parsed.y;
let value = context.parsed.y;
value = context.parsed.x === null ? "n/a" : getSimpleTimeLabel(context.parsed.x, 2); value = context.parsed.x === null ? "n/a" : getSimpleTimeLabel(context.parsed.x, 2);
switch (context.datasetIndex) { switch (context.datasetIndex) {
case 0: // Primary case 0: // Primary
return `${labelPrimary}: ${value}`; return `${labelPrimary}: ${value}`;
case 1: // Secondary case 1: // Secondary
return `${labelSecondary}: ${value}`; return `${labelSecondary}: ${value}`;
} }
}
}; };
setOption.scales.x.ticks.callback = function (value, index, ticks) { setOption.scales.x.ticks.callback = function (value, index, ticks) {
return getFollowTimeLabel(value, maxY, 1) return getFollowTimeLabel(value, maxY, 1)
}; };
break; break;
case 'count': case 'count':
setOption.plugins.tooltip.callbacks = { setOption.plugins.tooltip.callbacks.label = function(context) {
label: function(context) { let value = context.parsed.y;
let value = context.parsed.y;
value = context.parsed.x === null ? "n/a" : context.parsed.x; value = context.parsed.x === null ? "n/a" : context.parsed.x;
switch (context.datasetIndex) { switch (context.datasetIndex) {
case 0: // Primary case 0: // Primary
return `${labelPrimary}: ${value}`; return `${labelPrimary}: ${value}`;
case 1: // Secondary case 1: // Secondary
return `${labelSecondary}: ${value}`; return `${labelSecondary}: ${value}`;
} }
}
}; };
break; break;
} }
@@ -697,15 +724,15 @@ export default {
this.casesByTaskHeight = await this.getHorizontalBarHeight(this.compareDashboardData.freq.cases_by_task); this.casesByTaskHeight = await this.getHorizontalBarHeight(this.compareDashboardData.freq.cases_by_task);
// create chart // create chart
[this.avgCycleEfficiencyData, this.avgCycleEfficiencyOptions] = this.getBarChart(this.compareDashboardData.time.avg_cycle_efficiency, this.contentData.avgCycleEfficiency); [this.avgCycleEfficiencyData, this.avgCycleEfficiencyOptions] = this.getBarChart(this.compareDashboardData.time.avg_cycle_efficiency, this.contentData.avgCycleEfficiency);
[this.avgProcessTimeData, this.avgProcessTimeOptions] = this.getLineChart(this.compareDashboardData.time.avg_process_time, this.contentData.avgProcessTime); [this.avgProcessTimeData, this.avgProcessTimeOptions] = this.getLineChart(this.compareDashboardData.time.avg_process_time, this.contentData.avgProcessTime, 'date');
[this.avgProcessTimeByTaskData, this.avgProcessTimeByTaskOptions] = this.getHorizontalBarChart(this.compareDashboardData.time.avg_process_time_by_task, this.contentData.avgProcessTimeByTask, true, 'date'); [this.avgProcessTimeByTaskData, this.avgProcessTimeByTaskOptions] = this.getHorizontalBarChart(this.compareDashboardData.time.avg_process_time_by_task, this.contentData.avgProcessTimeByTask, true, 'date');
[this.avgWaitingTimeData, this.avgWaitingTimeOptions] = this.getLineChart(this.compareDashboardData.time.avg_waiting_time, this.contentData.avgWaitingTime); [this.avgWaitingTimeData, this.avgWaitingTimeOptions] = this.getLineChart(this.compareDashboardData.time.avg_waiting_time, this.contentData.avgWaitingTime, 'date');
if(this.compareDashboardData.time.avg_waiting_time_by_edge !== null) { if(this.compareDashboardData.time.avg_waiting_time_by_edge !== null) {
[this.avgWaitingTimeByEdgeData, this.avgWaitingTimeByEdgeOptions] = this.getHorizontalBarChart(this.compareDashboardData.time.avg_waiting_time_by_edge, this.contentData.avgWaitingTimeByEdge, false, 'date'); [this.avgWaitingTimeByEdgeData, this.avgWaitingTimeByEdgeOptions] = this.getHorizontalBarChart(this.compareDashboardData.time.avg_waiting_time_by_edge, this.contentData.avgWaitingTimeByEdge, false, 'date');
} else { } else {
[this.avgWaitingTimeByEdgeData, this.avgWaitingTimeByEdgeOptions] = [null, null] [this.avgWaitingTimeByEdgeData, this.avgWaitingTimeByEdgeOptions] = [null, null]
} }
[this.freqData, this.freqOptions] = this.getLineChart(this.compareDashboardData.freq.cases, this.contentData.freq); [this.freqData, this.freqOptions] = this.getLineChart(this.compareDashboardData.freq.cases, this.contentData.freq, 'count');
[this.casesByTaskData, this.casesByTaskOptions] = this.getHorizontalBarChart(this.compareDashboardData.freq.cases_by_task, this.contentData.casesByTask, true, 'count'); [this.casesByTaskData, this.casesByTaskOptions] = this.getHorizontalBarChart(this.compareDashboardData.freq.cases_by_task, this.contentData.casesByTask, true, 'count');
}, },
mounted() { mounted() {

View File

@@ -206,7 +206,7 @@ export default {
* @param { string } yUnit y 軸單位 date | count * @param { string } yUnit y 軸單位 date | count
*/ */
getLineChart(chartData, content, yUnit) { getLineChart(chartData, content, yUnit) {
let datasets = setLineChartData(chartData.data, chartData.x_axis.max, chartData.x_axis.min, false, chartData.y_axis.max, chartData.y_axis.min); let datasets;
let minX = chartData.x_axis.min; let minX = chartData.x_axis.min;
let maxX = chartData.x_axis.max; let maxX = chartData.x_axis.max;
let maxY = chartData.y_axis.max; let maxY = chartData.y_axis.max;