fix #300 handle compare page by handling data[0], data[1]

This commit is contained in:
Cindy Chang
2024-06-14 10:57:31 +08:00
parent 0689e79013
commit 13bc3882ed
3 changed files with 61 additions and 21 deletions

View File

@@ -117,7 +117,10 @@
<ul> <ul>
<li class="bg-neutral-10 mb-4 p-1 border border-neutral-300 rounded"> <li class="bg-neutral-10 mb-4 p-1 border border-neutral-300 rounded">
<span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.freq.title }}</span> <span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.freq.title }}</span>
<Chart type="line" :data="freqData" :options="freqOptions" class="h-96" /> <!-- UNUSED <Chart type="line" :data="freqData" :options="freqOptions" class="h-96" /> -->
<FreqChart v-if="compareDashboardData" :chartData="compareDashboardData?.freq?.cases" :content="contentData?.freq" yUnit="count"
pageName='Compare'
/>
</li> </li>
<li class="bg-neutral-10 p-1 border border-neutral-300 rounded"> <li class="bg-neutral-10 p-1 border border-neutral-300 rounded">
<span class="block font-bold text-sm leading-loose text-center my-2"> <span class="block font-bold text-sm leading-loose text-center my-2">
@@ -168,6 +171,7 @@ import {
knownScaleHorizontalChartOptions, knownScaleHorizontalChartOptions,
knownScaleBarChartOptions, knownScaleBarChartOptions,
} from "@/constants/constants.js"; } from "@/constants/constants.js";
import FreqChart from '../../Discover/Performance/FreqChart.vue';
export default { export default {
@@ -181,6 +185,7 @@ export default {
}, },
components: { components: {
SidebarStates, SidebarStates,
FreqChart,
}, },
data() { data() {
return { return {

View File

@@ -3,8 +3,7 @@
</template> </template>
<script> <script>
import { computed, ref, watch, onMounted } from 'vue'; import { computed, ref, onMounted } from 'vue';
import usePerformanceStore from "@/stores/performance.js";
import { import {
setTimeStringFormatBaseOnTimeDifference, setTimeStringFormatBaseOnTimeDifference,
mapTimestampToAxisTicksByFormat, mapTimestampToAxisTicksByFormat,
@@ -14,8 +13,6 @@ import {
} from "@/constants/constants.js"; } from "@/constants/constants.js";
const cloneDeep = (obj) => JSON.parse(JSON.stringify(obj));
// 試著把 chart 獨立成一個 vue component // 試著把 chart 獨立成一個 vue component
// 企圖防止 PrimeVue 誤用其他圖表 option 值的 bug // 企圖防止 PrimeVue 誤用其他圖表 option 值的 bug
export default { export default {
@@ -29,13 +26,17 @@ export default {
yUnit: { yUnit: {
type: String, type: String,
}, },
pageName: {
type: String,
},
}, },
setup(props) { setup(props) {
const performanceStore = usePerformanceStore();
const customizedScaleOption = computed(() => {}); const customizedScaleOption = computed(() => {});
const primeVueSetDataState = ref(null); const primeVueSetDataState = ref(null);
const primeVueSetOptionsState = ref(null); const primeVueSetOptionsState = ref(null);
const colorPrimary = ref('#0099FF');
const colorSecondary = ref('#FFAA44');
/** /**
* Compare page and Performance have this same function. * Compare page and Performance have this same function.
@@ -112,8 +113,11 @@ export default {
}; };
}; };
const getLineChartPrimeVueSetting = (chartData, content) => { const getLineChartPrimeVueSetting = (chartData, content, pageName) => {
let datasetsArr;
let datasets; let datasets;
let datasetsPrimary; // For Compare page case
let datasetsSecondary; // For Compare page case
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;
@@ -124,8 +128,45 @@ export default {
return this.$moment(time).format('YYYY/M/D hh:mm:ss') return this.$moment(time).format('YYYY/M/D hh:mm:ss')
}; };
datasets = chartData.data; // 考慮 chartData.data 的dimension
xData = chartData.data.map(item => new Date(item.x).getTime()); // 當我們遇到了 Compare 頁面的案例
if(pageName === "Compare"){
datasetsPrimary = chartData.data[0].data;
datasetsSecondary = chartData.data[1].data;
datasetsArr = [
{
label: chartData.data[0].label,
data: datasetsPrimary,
fill: false,
tension: 0, // 貝茲曲線張力
borderColor: colorPrimary,
pointBackgroundColor: colorPrimary,
},
{
label: chartData.data[1].label,
data: datasetsSecondary,
fill: false,
tension: 0, // 貝茲曲線張力
borderColor: colorSecondary,
pointBackgroundColor: colorSecondary,
}
];
xData = chartData.data[0].data.map(item => new Date(item.x).getTime());
} else {
datasets = chartData.data;
datasetsArr = [
{
label: content.title,
data: datasets,
fill: false,
tension: 0, // 貝茲曲線張力
borderColor: '#0099FF',
}
];
xData = chartData.data.map(item => new Date(item.x).getTime());
}
// Customize X axis ticks due to different differences between min and max of data group // Customize X axis ticks due to different differences between min and max of data group
// Compare page and Performance page share the same logic // Compare page and Performance page share the same logic
@@ -140,15 +181,7 @@ export default {
primeVueSetData = { primeVueSetData = {
labels: xData, labels: xData,
datasets: [ datasets: datasetsArr,
{
label: content.title,
data: datasets,
fill: false,
tension: 0, // 貝茲曲線張力
borderColor: '#0099FF',
}
]
}; };
primeVueSetOption = { primeVueSetOption = {
responsive: true, responsive: true,
@@ -183,14 +216,14 @@ export default {
return `${content.y}: ${context.parsed.y}`; return `${content.y}: ${context.parsed.y}`;
}; };
primeVueSetOption.scales.y.ticks.callback = function (value, index, ticks) { primeVueSetOption.scales.y.ticks.callback = function (value, index, ticks) {
return value; return value; //這裡的Y軸刻度沒有後綴代表時間的英文字母
}; };
primeVueSetDataState.value = primeVueSetData; primeVueSetDataState.value = primeVueSetData;
primeVueSetOptionsState.value = primeVueSetOption; primeVueSetOptionsState.value = primeVueSetOption;
}; };
onMounted(() => { onMounted(() => {
getLineChartPrimeVueSetting(props.chartData, props.content); getLineChartPrimeVueSetting(props.chartData, props.content, props.pageName);
}); });
return { return {

View File

@@ -119,7 +119,9 @@
<li class="bg-neutral-10 mb-4 p-1 border border-neutral-300 rounded"> <li class="bg-neutral-10 mb-4 p-1 border border-neutral-300 rounded">
<span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.freq.title }}</span> <span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.freq.title }}</span>
<!-- <Chart type="line" :data="freqData" :options="freqOptions" class="h-96" /> --> <!-- <Chart type="line" :data="freqData" :options="freqOptions" class="h-96" /> -->
<FreqChart v-if="performanceData" :chartData="performanceData?.freq?.cases" :content="contentData?.freq" yUnit="count"/> <FreqChart v-if="performanceData" :chartData="performanceData?.freq?.cases" :content="contentData?.freq" yUnit="count"
pageName="Performance"
/>
</li> </li>
<li class="bg-neutral-10 p-1 border border-neutral-300 rounded"> <li class="bg-neutral-10 p-1 border border-neutral-300 rounded">
<span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.casesByTask.title }}</span> <span class="block font-bold text-sm leading-loose text-center my-2">{{ contentData.casesByTask.title }}</span>