feature: historia zmian w zestawieniu pociągów

This commit is contained in:
2023-03-20 22:39:23 +01:00
parent ff78eba927
commit 032a84cbcf
6 changed files with 81 additions and 19 deletions
@@ -1,7 +1,7 @@
<template> <template>
<transition-group class="journal-list" tag="ul" name="list-anim"> <transition-group class="journal-list" tag="ul" name="list-anim">
<li <li
v-for="{ timetable, sceneryList, ...item } in computedTimetableHistory" v-for="{ timetable, sceneryList, revesedHistory, ...item } in computedTimetableHistory"
class="journal_item" class="journal_item"
:key="timetable.id" :key="timetable.id"
@click="item.showExtra.value = !item.showExtra.value" @click="item.showExtra.value = !item.showExtra.value"
@@ -129,24 +129,49 @@
<img :src="getIcon(`arrow-${item.showExtra.value ? 'asc' : 'desc'}`)" alt="Arrow" /> <img :src="getIcon(`arrow-${item.showExtra.value ? 'asc' : 'desc'}`)" alt="Arrow" />
</button> </button>
<!-- Dodatkowe informacje -->
<div class="info-extended" v-if="timetable.stockString && item.showExtra.value"> <div class="info-extended" v-if="timetable.stockString && item.showExtra.value">
<hr /> <hr />
<div>
<span class="badge info-badge"> <div class="stock-specs">
<span class="badge specs-badge">
<span>{{ $t('journal.stock-max-speed') }}</span> <span>{{ $t('journal.stock-max-speed') }}</span>
<span>{{ timetable.maxSpeed }}km/h</span> <span>{{ timetable.maxSpeed }}km/h</span>
</span> </span>
<span class="badge info-badge"> <span class="badge specs-badge">
<span>{{ $t('journal.stock-length') }}</span> <span>{{ $t('journal.stock-length') }}</span>
<span>{{ timetable.stockLength }}m</span> <span>{{ timetable.stockLength }}m</span>
</span> </span>
<span class="badge info-badge"> <span class="badge specs-badge">
<span>{{ $t('journal.stock-mass') }}</span> <span>{{ $t('journal.stock-mass') }}</span>
<span>{{ Math.floor(timetable.stockMass! / 1000) }}t</span> <span>{{ Math.floor(timetable.stockMass! / 1000) }}t</span>
</span> </span>
</div> </div>
<div class="stock-history" v-if="revesedHistory.length > 1">
<button
class="btn--action"
v-for="(sh, i) in revesedHistory"
:data-checked="i == item.currentHistoryIndex.value"
@click.stop="item.currentHistoryIndex.value = i"
>
{{
new Date(Number(sh.split('@')[0])).toLocaleTimeString($i18n.locale, {
hour: '2-digit',
minute: '2-digit',
})
}}
</button>
</div>
<ul class="stock-list"> <ul class="stock-list">
<li v-for="(car, i) in timetable.stockString.split(';')" :key="i"> <li
v-for="(car, i) in (revesedHistory.length <= 1
? timetable.stockString
: revesedHistory[item.currentHistoryIndex.value].split('@')[1]
).split(';')"
:key="i"
>
<img <img
@error="onImageError" @error="onImageError"
:src="`https://rj.td2.info.pl/dist/img/thumbnails/${car.split(':')[0]}.png`" :src="`https://rj.td2.info.pl/dist/img/thumbnails/${car.split(':')[0]}.png`"
@@ -168,7 +193,6 @@ import imageMixin from '../../mixins/imageMixin';
import modalTrainMixin from '../../mixins/modalTrainMixin'; import modalTrainMixin from '../../mixins/modalTrainMixin';
import styleMixin from '../../mixins/styleMixin'; import styleMixin from '../../mixins/styleMixin';
import { TimetableHistory } from '../../scripts/interfaces/api/TimetablesAPIData'; import { TimetableHistory } from '../../scripts/interfaces/api/TimetablesAPIData';
import { TimetableStop } from '../../scripts/interfaces/api/TrainAPIData';
export default defineComponent({ export default defineComponent({
props: { props: {
@@ -185,7 +209,9 @@ export default defineComponent({
return this.timetableHistory.map((timetable) => ({ return this.timetableHistory.map((timetable) => ({
timetable, timetable,
sceneryList: this.getSceneryList(timetable), sceneryList: this.getSceneryList(timetable),
revesedHistory: timetable.stockHistory.slice().reverse(),
showExtra: ref(false), showExtra: ref(false),
currentHistoryIndex: ref(0),
})); }));
}, },
}, },
@@ -308,6 +334,38 @@ ul.stock-list {
color: #aaa; color: #aaa;
font-size: 0.9em; font-size: 0.9em;
} }
li > img {
vertical-align: text-bottom;
max-height: 60px;
}
}
.stock-specs {
display: flex;
flex-wrap: wrap;
gap: 0.5em;
margin-top: 0.5em;
.specs-badge {
margin: 0;
span:last-child {
color: black;
background-color: $accentCol;
}
}
}
.stock-history {
display: flex;
flex-wrap: wrap;
gap: 0.5em;
margin-top: 1em;
button[data-checked=true] {
color: $accentCol;
}
} }
.scenery-list { .scenery-list {
@@ -328,13 +386,6 @@ ul.stock-list {
} }
} }
.info-badge {
span:last-child {
color: black;
background-color: $accentCol;
}
}
@include smallScreen { @include smallScreen {
.info-general { .info-general {
flex-direction: column; flex-direction: column;
@@ -351,5 +402,13 @@ ul.stock-list {
.btn--show { .btn--show {
margin: 1em auto 0 auto; margin: 1em auto 0 auto;
} }
.stock-specs {
justify-content: center;
}
.stock-history {
justify-content: center;
}
} }
</style> </style>
@@ -202,7 +202,6 @@ ul.stock-list {
img { img {
max-height: 60px; max-height: 60px;
max-width: 320px;
} }
} }
+1 -1
View File
@@ -284,7 +284,7 @@
"stock-info": "EXTRA INFO", "stock-info": "EXTRA INFO",
"stock-length": "Length", "stock-length": "Length",
"stock-mass": "Mass", "stock-mass": "Mass",
"stock-max-speed": "Maximum registered speed", "stock-max-speed": "Max. speed",
"load-data": "Load further data...", "load-data": "Load further data...",
+1 -1
View File
@@ -290,7 +290,7 @@
"stock-info": "DODATKOWE INFORMACJE", "stock-info": "DODATKOWE INFORMACJE",
"stock-length": "Długość", "stock-length": "Długość",
"stock-mass": "Masa", "stock-mass": "Masa",
"stock-max-speed": "Maks. zarejestrowana prędkość", "stock-max-speed": "Prędkość maks.",
"load-data": "Pobierz dalszą historię...", "load-data": "Pobierz dalszą historię...",
@@ -38,6 +38,8 @@ export interface TimetableHistory {
stopsString?: string; stopsString?: string;
stockString?: string; stockString?: string;
stockHistory: string[];
stockMass?: number; stockMass?: number;
stockLength?: number; stockLength?: number;
maxSpeed?: number; maxSpeed?: number;
+4 -2
View File
@@ -4,10 +4,12 @@
display: inline-block; display: inline-block;
padding: 0; padding: 0;
background: #585858;
margin: 0.25em; margin: 0.25em;
span:first-child {
background: #585858;
}
span { span {
display: inline-block; display: inline-block;
padding: 0.2em 0.4em; padding: 0.2em 0.4em;