statystyki dr (c.d.) + tłumaczenia

This commit is contained in:
2023-12-19 22:11:17 +01:00
parent 00a4a840b0
commit adce339392
7 changed files with 127 additions and 111 deletions
@@ -3,7 +3,7 @@
<span :data-active="statsStatus"> <span :data-active="statsStatus">
<span class="stats-list"> <span class="stats-list">
<h3> <h3>
{{ $t('journal.daily-stats-title') }} {{ $t('journal.daily-stats.title') }}
<b class="text--primary">{{ new Date().toLocaleDateString($i18n.locale) }}</b> <b class="text--primary">{{ new Date().toLocaleDateString($i18n.locale) }}</b>
</h3> </h3>
@@ -18,17 +18,17 @@
</b> </b>
<b v-else-if="topDispatchers.length == 0"> <b v-else-if="topDispatchers.length == 0">
{{ $t('journal.daily-stats-info') }} {{ $t('journal.daily-stats.info') }}
</b> </b>
<div v-else> <div v-else>
<div v-if="stats.totalTimetables"> <div v-if="stats.totalTimetables">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-total"> <i18n-t keypath="journal.daily-stats.total">
<template #count> <template #count>
<b class="text--primary"> <b class="text--primary">
{{ stats.totalTimetables }} {{ stats.totalTimetables }}
{{ $t('journal.timetable-count', stats.totalTimetables) }} {{ $t('journal.daily-stats.count', stats.totalTimetables) }}
</b> </b>
</template> </template>
@@ -40,7 +40,7 @@
<div v-if="stats.maxTimetable"> <div v-if="stats.maxTimetable">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-longest"> <i18n-t keypath="journal.daily-stats.longest">
<template #id> <template #id>
<router-link :to="`/journal/timetables?timetableId=${stats.maxTimetable.id}`"> <router-link :to="`/journal/timetables?timetableId=${stats.maxTimetable.id}`">
<b>{{ stats.maxTimetable.id }}</b> <b>{{ stats.maxTimetable.id }}</b>
@@ -64,7 +64,7 @@
<div v-if="topDispatchers.length == 1"> <div v-if="topDispatchers.length == 1">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-most-active-dr"> <i18n-t keypath="journal.daily-stats.most-active-dr">
<template #dispatcher> <template #dispatcher>
<router-link :to="`/journal/dispatchers?dispatcherName=${topDispatchers[0].name}`"> <router-link :to="`/journal/dispatchers?dispatcherName=${topDispatchers[0].name}`">
<b>{{ topDispatchers[0].name }}</b> <b>{{ topDispatchers[0].name }}</b>
@@ -73,7 +73,7 @@
<template #count> <template #count>
<b class="text--primary"> <b class="text--primary">
{{ topDispatchers[0].count }} {{ topDispatchers[0].count }}
{{ $t('journal.timetable-count', topDispatchers[0].count) }} {{ $t('journal.daily-stats.count', topDispatchers[0].count) }}
</b> </b>
</template> </template>
</i18n-t> </i18n-t>
@@ -81,7 +81,7 @@
<div v-if="topDispatchers.length > 1"> <div v-if="topDispatchers.length > 1">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-most-active-dr-many"> <i18n-t keypath="journal.daily-stats.most-active-dr-many">
<template #dispatchers> <template #dispatchers>
<span v-for="(disp, i) in topDispatchers" :key="i"> <span v-for="(disp, i) in topDispatchers" :key="i">
<span v-if="i == topDispatchers.length - 1"> {{ $t('general.and') }} </span> <span v-if="i == topDispatchers.length - 1"> {{ $t('general.and') }} </span>
@@ -97,7 +97,7 @@
<template #count> <template #count>
<b class="text--primary"> <b class="text--primary">
{{ topDispatchers[0].count }} {{ topDispatchers[0].count }}
{{ $t('journal.timetable-count', topDispatchers[0].count) }} {{ $t('journal.daily-stats.count', topDispatchers[0].count) }}
</b> </b>
</template> </template>
</i18n-t> </i18n-t>
@@ -105,7 +105,7 @@
<div v-if="stats.longestDuties.length > 0"> <div v-if="stats.longestDuties.length > 0">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-longest-duties"> <i18n-t keypath="journal.daily-stats.longest-duties">
<template #dispatcher> <template #dispatcher>
<router-link <router-link
:to="`/journal/dispatchers?dispatcherName=${stats.longestDuties[0].name}`" :to="`/journal/dispatchers?dispatcherName=${stats.longestDuties[0].name}`"
@@ -124,7 +124,7 @@
<div v-if="stats.mostActiveDrivers.length > 0"> <div v-if="stats.mostActiveDrivers.length > 0">
&bull; &bull;
<i18n-t keypath="journal.timetable-stats-most-active-driver"> <i18n-t keypath="journal.daily-stats.most-active-driver">
<template #driver> <template #driver>
<b class="text--primary">{{ stats.mostActiveDrivers[0].name }}</b> <b class="text--primary">{{ stats.mostActiveDrivers[0].name }}</b>
</template> </template>
@@ -1,20 +1,14 @@
<template> <template>
<div <div class="journal-stats dispatcher" v-if="dispatcherName && stats">
class="journal-stats dispatcher" <span class="loading" v-if="!stats.issuedTimetables && !stats.services">
v-if="store.dispatcherStatsName && store.dispatcherStatsData" {{ $t('journal.dispatcher-stats.empty') }}
>
<span
class="loading"
v-if="!store.dispatcherStatsData.issuedTimetables || !store.dispatcherStatsData.services"
>
Ten dyżurny nie ma jeszcze szczegółowych statystyk!
</span> </span>
<span v-else> <span v-else>
<h3> <h3>
<i18n-t keypath="journal.dispatcher-stats-title"> <i18n-t keypath="journal.dispatcher-stats.title">
<template #name> <template #name>
<span class="text--primary">{{ store.dispatcherStatsName.toUpperCase() }}</span> <span class="text--primary">{{ dispatcherName.toUpperCase() }}</span>
</template> </template>
</i18n-t> </i18n-t>
</h3> </h3>
@@ -22,33 +16,43 @@
<hr class="header-separator" /> <hr class="header-separator" />
<div class="info-stats"> <div class="info-stats">
<span class="stat-badge"> <span class="stat-badge" v-if="stats.services">
<span>DYŻURY</span> <span>{{ $t('journal.dispatcher-stats.services-count') }}</span>
<span>{{ store.dispatcherStatsData.services.count }}</span> <span>{{ stats.services.count }}</span>
</span> </span>
<span class="stat-badge">
<span>WYSTAWIONE RJ</span> <span class="stat-badge" v-if="stats.services">
<span>{{ store.dispatcherStatsData.issuedTimetables.count }}</span> <span>{{ $t('journal.dispatcher-stats.service-max') }}</span>
<span>{{ calculateDuration(stats.services.durationMax) }}</span>
</span> </span>
<span class="stat-badge">
<span>MAKS. CZAS DYŻURU</span> <span class="stat-badge" v-if="stats.services">
<span>{{ calculateDuration(store.dispatcherStatsData.services.durationMax) }}</span> <span>{{ $t('journal.dispatcher-stats.service-avg') }}</span>
<span>{{ calculateDuration(stats.services.durationAvg) }}</span>
</span> </span>
<span class="stat-badge"> </div>
<span>ŚREDNI CZAS DYŻURU</span>
<span>{{ calculateDuration(store.dispatcherStatsData.services.durationAvg) }}</span> <hr style="margin: 1em 0" />
<div class="info-stats">
<span class="stat-badge" v-if="stats.issuedTimetables">
<span>{{ $t('journal.dispatcher-stats.timetables-count') }}</span>
<span>{{ stats.issuedTimetables.count }}</span>
</span> </span>
<span class="stat-badge">
<span>SUMA WYSTAWIONYCH RJ</span> <span class="stat-badge" v-if="stats.issuedTimetables">
<span>{{ store.dispatcherStatsData.issuedTimetables.distanceSum.toFixed(2) }}km</span> <span>{{ $t('journal.dispatcher-stats.timetables-sum') }}</span>
<span>{{ stats.issuedTimetables.distanceSum.toFixed(2) }}km</span>
</span> </span>
<span class="stat-badge">
<span>NAJDŁUŻSZY WYSTAWIONY RJ</span> <span class="stat-badge" v-if="stats.issuedTimetables">
<span>{{ store.dispatcherStatsData.issuedTimetables.distanceMax.toFixed(2) }}km</span> <span>{{ $t('journal.dispatcher-stats.timetables-max') }}</span>
<span>{{ stats.issuedTimetables.distanceMax.toFixed(2) }}km</span>
</span> </span>
<span class="stat-badge">
<span>ŚREDNIA WYSTAWIONYCH RJ</span> <span class="stat-badge" v-if="stats.issuedTimetables">
<span>{{ store.dispatcherStatsData.issuedTimetables.distanceAvg.toFixed(2) }}km</span> <span>{{ $t('journal.dispatcher-stats.timetables-avg') }}</span>
<span>{{ stats.issuedTimetables.distanceAvg.toFixed(2) }}km</span>
</span> </span>
</div> </div>
</span> </span>
@@ -69,7 +73,8 @@ export default defineComponent({
const store = useMainStore(); const store = useMainStore();
return { return {
store stats: store.dispatcherStatsData,
dispatcherName: store.dispatcherStatsName
}; };
} }
}); });
@@ -2,7 +2,7 @@
<div class="journal-stats driver" v-if="store.driverStatsData"> <div class="journal-stats driver" v-if="store.driverStatsData">
<span> <span>
<h3> <h3>
<i18n-t keypath="journal.driver-stats-title"> <i18n-t keypath="journal.driver-stats.title">
<template #name> <template #name>
<span class="text--primary">{{ store.driverStatsName.toUpperCase() }}</span> <span class="text--primary">{{ store.driverStatsName.toUpperCase() }}</span>
</template> </template>
@@ -13,7 +13,7 @@
<div class="info-stats"> <div class="info-stats">
<span class="stat-badge"> <span class="stat-badge">
<span>{{ $t('journal.stats-timetables') }}</span> <span>{{ $t('journal.driver-stats.timetables') }}</span>
<span <span
>{{ store.driverStatsData._count.fulfilled }} / >{{ store.driverStatsData._count.fulfilled }} /
{{ store.driverStatsData._count._all }}</span {{ store.driverStatsData._count._all }}</span
@@ -21,17 +21,17 @@
</span> </span>
<span class="stat-badge"> <span class="stat-badge">
<span>{{ $t('journal.stats-longest-timetable') }}</span> <span>{{ $t('journal.driver-stats.longest-timetable') }}</span>
<span> {{ store.driverStatsData._max.routeDistance.toFixed(2) }}km </span> <span> {{ store.driverStatsData._max.routeDistance.toFixed(2) }}km </span>
</span> </span>
<span class="stat-badge"> <span class="stat-badge">
<span>{{ $t('journal.stats-avg-timetable') }}</span> <span>{{ $t('journal.driver-stats.avg-timetable') }}</span>
<span> {{ store.driverStatsData._avg.routeDistance.toFixed(2) }}km </span> <span> {{ store.driverStatsData._avg.routeDistance.toFixed(2) }}km </span>
</span> </span>
<span class="stat-badge"> <span class="stat-badge">
<span>{{ $t('journal.stats-distance') }}</span> <span>{{ $t('journal.driver-stats.distance') }}</span>
<span> <span>
{{ store.driverStatsData._sum.currentDistance.toFixed(2) }} / {{ store.driverStatsData._sum.currentDistance.toFixed(2) }} /
{{ store.driverStatsData._sum.routeDistance.toFixed(2) }}km {{ store.driverStatsData._sum.routeDistance.toFixed(2) }}km
@@ -39,7 +39,7 @@
</span> </span>
<span class="stat-badge"> <span class="stat-badge">
<span>{{ $t('journal.stats-stations') }}</span> <span>{{ $t('journal.driver-stats.stations') }}</span>
<span> <span>
{{ store.driverStatsData._sum.confirmedStopsCount }} / {{ store.driverStatsData._sum.confirmedStopsCount }} /
{{ store.driverStatsData._sum.allStopsCount }} {{ store.driverStatsData._sum.allStopsCount }}
@@ -47,14 +47,6 @@
</span> </span>
</div> </div>
</span> </span>
<!-- <b v-else-if="store.driverStatsStatus == Status.Data.Loading">{{
$t('journal.stats-loading')
}}</b>
<b v-else-if="store.driverStatsStatus == Status.Data.Error">
{{ $t('journal.stats-error ') }}
</b>
<b v-else>{{ $t('journal.driver-stats-info') }}</b> -->
</div> </div>
</template> </template>
+35 -25
View File
@@ -348,33 +348,43 @@
"last-seen-at": "Last seen at", "last-seen-at": "Last seen at",
"currently-at": "Currently at", "currently-at": "Currently at",
"stats-timetables": "TIMETABLES", "driver-stats": {
"stats-longest-timetable": "LONGEST TIMETABLE", "button": "DRIVER STATS",
"stats-avg-timetable": "AVERAGE TIMETABLE LENGTH", "title": "{name}'s DRIVER STATS",
"stats-distance": "DISTANCE", "info": "Enter a proper nickname into filters [F] to see user's driving statistics!",
"stats-stations": "STATIONS", "timetables": "TIMETABLES",
"longest-timetable": "LONGEST TIMETABLE",
"avg-timetable": "AVERAGE TIMETABLE LENGTH",
"distance": "DISTANCE",
"stations": "STATIONS"
},
"timetable-stats-title": "Daily stats on {date}", "daily-stats": {
"timetable-stats-total": "Issued timetables: {count} (total distance: {distance})", "button": "DAILY STATS",
"timetable-stats-longest": "The longest timetable: #{id} (made by {author} for {driver}, distance: {distance})", "title": "STATS OF THE DAY",
"timetable-stats-most-active-dr": "The most active dispatcher: {dispatcher} (created {count})", "info": "Today's statistics are unavailable yet!",
"timetable-stats-most-active-dr-many": "The most active dispatchers: {dispatchers} (created {count} each)", "total": "Issued timetables: {count} (total distance: {distance})",
"timetable-stats-most-active-driver": "The most active driver: {driver} (total driven distance: {distance})", "longest": "The longest timetable: #{id} (made by {author} for {driver}, distance: {distance})",
"timetable-stats-longest-duties": "The longest service: {dispatcher} at {station} (duration: {duration})", "most-active-dr": "The most active dispatcher: {dispatcher} (created {count})",
"most-active-dr-many": "The most active dispatchers: {dispatchers} (created {count} each)",
"most-active-driver": "The most active driver: {driver} (total driven distance: {distance})",
"longest-duties": "The longest service: {dispatcher} at {station} (duration: {duration})",
"count": "timetable | timetables"
},
"timetable-count": "timetable | timetables", "dispatcher-stats": {
"button": "DISPATCHER STATS",
"daily-stats-button": "DAILY STATS", "title": "{name}'s DISPATCHER STATS",
"daily-stats-title": "STATS OF THE DAY", "empty": "This user has no statistics saved yet!",
"daily-stats-info": "Today's statistics are unavailable yet!", "info": "Enter a proper nickname into filters [F] to see user's dispatcher statistics!",
"services-count": "SERVICES",
"driver-stats-button": "DRIVER STATS", "service-max": "MAX SERVICE DURATION",
"driver-stats-title": "{name}'s DRIVER STATS", "service-avg": "AVG SERVICE DURATION",
"driver-stats-info": "Enter a proper nickname into filters [F] to see user's driving statistics!", "timetables-count": "ISSUED TIMETABLES",
"timetables-sum": "TIMETABLES DISTANCE SUM",
"dispatcher-stats-button": "DISPATCHER STATS", "timetables-max": "LONGEST TIMETABLE",
"dispatcher-stats-title": "{name}'s DISPATCHER STATS", "timetables-avg": "AVG TIMETABLE DISTANCE"
"dispatcher-stats-info": "Enter a proper nickname into filters [F] to see user's dispatcher statistics!", },
"stats-loading": "Fetching statistics...", "stats-loading": "Fetching statistics...",
"stats-error": "Oops! An unexpected error occurred while trying to fetch statistics! :/", "stats-error": "Oops! An unexpected error occurred while trying to fetch statistics! :/",
+34 -25
View File
@@ -330,33 +330,42 @@
"last-seen-at": "Ostatnio widziany na: ", "last-seen-at": "Ostatnio widziany na: ",
"currently-at": "Obecnie na scenerii: ", "currently-at": "Obecnie na scenerii: ",
"stats-timetables": "ROZKŁADY JAZDY", "driver-stats": {
"stats-longest-timetable": "NAJDŁUŻSZY RJ", "button": "STAT. MASZYNISTY",
"stats-avg-timetable": "ŚREDNIA DŁUGOŚĆ RJ", "title": "STATYSTYKI MASZYNISTY {name}",
"stats-distance": "DYSTANS", "info": "Wpisz nazwę użytkownika w filtrach [F], aby zobaczyć jego statystyki maszynisty!",
"stats-stations": "STACJE", "timetables": "ROZKŁADY JAZDY",
"longest-timetable": "NAJDŁUŻSZY RJ",
"avg-timetable": "ŚREDNIA DŁUGOŚĆ RJ",
"distance": "DYSTANS",
"stations": "STACJE"
},
"timetable-stats-total": "Stworzone rozkłady jazdy: {count} (łączny dystans: {distance})", "daily-stats": {
"timetable-stats-longest": "Najdłuższy rozkład jazdy: #{id} (stworzony przez dyżurnego {author} dla maszynisty {driver} o dystansie {distance})", "button": "STATYSTYKI DNIA",
"timetable-stats-most-active-dr": "Najaktywniejszy dyżurny: {dispatcher} (stworzył {count})", "title": "STATYSTYKI DNIA",
"timetable-stats-most-active-dr-many": "Najaktywniejsi dyżurni: {dispatchers} (stworzyli po {count})", "info": "Dzisiejsze statystyki nie są jeszcze dostępne!",
"timetable-stats-most-active-driver": "Najaktywniejszy maszynista: {driver} (łączny przejechany dystans: {distance})", "total": "Stworzone rozkłady jazdy: {count} (łączny dystans: {distance})",
"timetable-stats-longest-duties": "Najdłuższa służba: {dispatcher} na scenerii {station} (czas trwania: {duration})", "longest": "Najdłuższy rozkład jazdy: #{id} (stworzony przez dyżurnego {author} dla maszynisty {driver} o dystansie {distance})",
"most-active-dr": "Najaktywniejszy dyżurny: {dispatcher} (stworzył {count})",
"most-active-dr-many": "Najaktywniejsi dyżurni: {dispatchers} (stworzyli po {count})",
"most-active-driver": "Najaktywniejszy maszynista: {driver} (łączny przejechany dystans: {distance})",
"longest-duties": "Najdłuższa służba: {dispatcher} na scenerii {station} (czas trwania: {duration})",
"count": "rozkład jazdy | rozkładów jazdy"
},
"timetable-count": "rozkład jazdy | rozkładów jazdy", "dispatcher-stats": {
"button": "STATYSTYKI DYŻURNEGO",
"daily-stats-button": "STATYSTYKI DNIA", "title": "STATYSTYKI DYŻURNEGO {name}",
"daily-stats-title": "STATYSTYKI DNIA", "info": "Wpisz nazwę użytkownika w filtrach [F], aby zobaczyć jego statystyki dyżurnego!",
"services-count": "DYŻURY",
"daily-stats-info": "Dzisiejsze statystyki nie są jeszcze dostępne!", "service-max": "MAKS. CZAS DYŻURU",
"service-avg": "ŚREDNI CZAS DYŻURU",
"driver-stats-button": "STAT. MASZYNISTY", "timetables-count": "WYSTAWIONE RJ",
"driver-stats-title": "STATYSTYKI MASZYNISTY {name}", "timetables-sum": "SUMA WYSTAWIONYCH RJ",
"driver-stats-info": "Wpisz nazwę użytkownika w filtrach [F], aby zobaczyć jego statystyki maszynisty!", "timetables-max": "NAJDŁUŻSZY WYSTAWIONY RJ",
"timetables-avg": "ŚREDNIA WYSTAWIONYCH RJ"
"dispatcher-stats-button": "STATYSTYKI DYŻURNEGO", },
"dispatcher-stats-title": "STATYSTYKI DYŻURNEGO {name}",
"dispatcher-stats-info": "Wpisz nazwę użytkownika w filtrach [F], aby zobaczyć jego statystyki dyżurnego!",
"stats-loading": "Pobieranie statystyk...", "stats-loading": "Pobieranie statystyk...",
"stats-error": "Ups! Wystąpił błąd podczas próby pobrania statystyk!", "stats-error": "Ups! Wystąpił błąd podczas próby pobrania statystyk!",
+1 -1
View File
@@ -52,7 +52,7 @@ import JournalStats from '../components/JournalView/JournalStats.vue';
const statsButtons: Journal.StatsButton[] = [ const statsButtons: Journal.StatsButton[] = [
{ {
tab: Journal.StatsTab.DISPATCHER_STATS, tab: Journal.StatsTab.DISPATCHER_STATS,
localeKey: 'journal.dispatcher-stats-button', localeKey: 'journal.dispatcher-stats.button',
iconName: 'user', iconName: 'user',
disabled: true disabled: true
} }
+2 -2
View File
@@ -159,13 +159,13 @@ export default defineComponent({
statsButtons: [ statsButtons: [
{ {
tab: Journal.StatsTab.DAILY_STATS, tab: Journal.StatsTab.DAILY_STATS,
localeKey: 'journal.daily-stats-button', localeKey: 'journal.daily-stats.button',
iconName: 'stats', iconName: 'stats',
disabled: false disabled: false
}, },
{ {
tab: Journal.StatsTab.DRIVER_STATS, tab: Journal.StatsTab.DRIVER_STATS,
localeKey: 'journal.driver-stats-button', localeKey: 'journal.driver-stats.button',
iconName: 'user', iconName: 'user',
disabled: true disabled: true
} }