enhance(client): improve chart rendering

This commit is contained in:
syuilo 2022-02-04 16:39:09 +09:00
parent bd7662e5e4
commit 0b462feff6
3 changed files with 29 additions and 6 deletions

View file

@ -95,6 +95,11 @@ export default defineComponent({
required: false, required: false,
default: false default: false
}, },
bar: {
type: Boolean,
required: false,
default: false
},
aspectRatio: { aspectRatio: {
type: Number, type: Number,
required: false, required: false,
@ -187,7 +192,7 @@ export default defineComponent({
Chart.defaults.color = getComputedStyle(document.documentElement).getPropertyValue('--fg'); Chart.defaults.color = getComputedStyle(document.documentElement).getPropertyValue('--fg');
chartInstance = new Chart(chartEl.value, { chartInstance = new Chart(chartEl.value, {
type: 'line', type: props.bar ? 'bar' : 'line',
data: { data: {
labels: new Array(props.limit).fill(0).map((_, i) => getDate(i).toLocaleString()).slice().reverse(), labels: new Array(props.limit).fill(0).map((_, i) => getDate(i).toLocaleString()).slice().reverse(),
datasets: data.series.map((x, i) => ({ datasets: data.series.map((x, i) => ({
@ -195,12 +200,13 @@ export default defineComponent({
label: x.name, label: x.name,
data: x.data.slice().reverse(), data: x.data.slice().reverse(),
pointRadius: 0, pointRadius: 0,
tension: 0,
borderWidth: 2, borderWidth: 2,
borderColor: x.color ? x.color : getColor(i), borderColor: x.color ? x.color : getColor(i),
borderDash: x.borderDash || [], borderDash: x.borderDash || [],
borderJoinStyle: 'round', borderJoinStyle: 'round',
backgroundColor: alpha(x.color ? x.color : getColor(i), 0.1), backgroundColor: alpha(x.color ? x.color : getColor(i), 0.1),
barPercentage: 0.9,
categoryPercentage: 0.9,
fill: x.type === 'area', fill: x.type === 'area',
hidden: !!x.hidden, hidden: !!x.hidden,
})), })),
@ -218,6 +224,7 @@ export default defineComponent({
scales: { scales: {
x: { x: {
type: 'time', type: 'time',
stacked: props.stacked,
time: { time: {
stepSize: 1, stepSize: 1,
unit: props.span === 'day' ? 'month' : 'day', unit: props.span === 'day' ? 'month' : 'day',
@ -688,6 +695,21 @@ export default defineComponent({
}; };
}; };
const fetchPerUserDriveChart = async (): Promise<typeof data> => {
const raw = await os.api('charts/user/drive', { userId: props.args.user.id, limit: props.limit, span: props.span });
return {
series: [{
name: 'Inc',
type: 'area',
data: format(raw.incSize),
}, {
name: 'Dec',
type: 'area',
data: format(raw.decSize),
}],
};
};
const fetchAndRender = async () => { const fetchAndRender = async () => {
const fetchData = () => { const fetchData = () => {
switch (props.src) { switch (props.src) {
@ -718,6 +740,7 @@ export default defineComponent({
case 'instance-drive-files-total': return fetchInstanceDriveFilesChart(true); case 'instance-drive-files-total': return fetchInstanceDriveFilesChart(true);
case 'per-user-notes': return fetchPerUserNotesChart(); case 'per-user-notes': return fetchPerUserNotesChart();
case 'per-user-drive': return fetchPerUserDriveChart();
} }
}; };
fetching.value = true; fetching.value = true;

View file

@ -19,7 +19,7 @@
<FormSection> <FormSection>
<template #label>{{ $ts.statistics }}</template> <template #label>{{ $ts.statistics }}</template>
<div ref="chart"></div> <MkChart src="per-user-drive" :args="{ user: $i }" span="day" :limit="7 * 5" :bar="true" :stacked="true" :detailed="false" :aspect-ratio="6"/>
</FormSection> </FormSection>
<FormSection> <FormSection>
@ -45,8 +45,7 @@ import * as os from '@/os';
import bytes from '@/filters/bytes'; import bytes from '@/filters/bytes';
import * as symbols from '@/symbols'; import * as symbols from '@/symbols';
import { defaultStore } from '@/store'; import { defaultStore } from '@/store';
import MkChart from '@/components/chart.vue';
// TODO: render chart
export default defineComponent({ export default defineComponent({
components: { components: {
@ -55,6 +54,7 @@ export default defineComponent({
FormSection, FormSection,
MkKeyValue, MkKeyValue,
FormSplit, FormSplit,
MkChart,
}, },
emits: ['info'], emits: ['info'],

View file

@ -3,7 +3,7 @@
<template #header><i class="fas fa-chart-bar" style="margin-right: 0.5em;"></i>{{ $ts.activity }}</template> <template #header><i class="fas fa-chart-bar" style="margin-right: 0.5em;"></i>{{ $ts.activity }}</template>
<div style="padding: 8px;"> <div style="padding: 8px;">
<MkChart src="per-user-notes" :args="{ user, withoutAll: true }" span="day" :limit="limit" :stacked="true" :detailed="false" :aspect-ratio="6"/> <MkChart src="per-user-notes" :args="{ user, withoutAll: true }" span="day" :limit="limit" :bar="true" :stacked="true" :detailed="false" :aspect-ratio="5"/>
</div> </div>
</MkContainer> </MkContainer>
</template> </template>