mirror of
https://github.com/Spythere/stacjownik.git
synced 2026-05-04 22:08:12 +00:00
poprawki animacji statusów danych & tryb offline
This commit is contained in:
+1
-1
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
<main class="app_main">
|
<main class="app_main">
|
||||||
<router-view v-slot="{ Component }">
|
<router-view v-slot="{ Component }">
|
||||||
<keep-alive exclude="JournalView">
|
<keep-alive exclude="JournalView,SceneryView">
|
||||||
<component :is="Component" :key="$route.name" />
|
<component :is="Component" :key="$route.name" />
|
||||||
</keep-alive>
|
</keep-alive>
|
||||||
</router-view>
|
</router-view>
|
||||||
|
|||||||
@@ -1,23 +1,24 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<transition name="status-anim" mode="out-in" tag="div" class="train-table">
|
||||||
<transition-group name="list-anim" tag="ul" class="train-list">
|
<div :key="store.dataStatuses.trains">
|
||||||
<li class="table-info" key="offline" v-if="store.isOffline">
|
<div class="table-info" key="offline" v-if="store.isOffline">
|
||||||
{{ $t('app.offline') }}
|
{{ $t('app.offline') }}
|
||||||
</li>
|
</div>
|
||||||
|
|
||||||
<Loading v-else-if="trains.length == 0 && store.dataStatuses.trains == 0" key="loading" />
|
<Loading v-else-if="trains.length == 0 && store.dataStatuses.trains == 0" key="loading" />
|
||||||
|
|
||||||
<li
|
<div
|
||||||
class="table-info"
|
class="table-info"
|
||||||
key="no-trains"
|
key="no-trains"
|
||||||
v-else-if="trains.length == 0 && store.dataStatuses.trains != 0"
|
v-else-if="trains.length == 0 && store.dataStatuses.trains != 0"
|
||||||
>
|
>
|
||||||
{{ $t('trains.no-trains') }}
|
{{ $t('trains.no-trains') }}
|
||||||
</li>
|
</div>
|
||||||
|
|
||||||
|
<transition-group name="list-anim" tag="ul">
|
||||||
<li
|
<li
|
||||||
class="train-row"
|
class="train-row"
|
||||||
v-for="train in currentTrains"
|
v-for="train in trains"
|
||||||
:key="train.trainId"
|
:key="train.trainId"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
@click.stop="selectModalTrain(train.trainId, $event.currentTarget)"
|
@click.stop="selectModalTrain(train.trainId, $event.currentTarget)"
|
||||||
@@ -27,15 +28,17 @@
|
|||||||
</li>
|
</li>
|
||||||
</transition-group>
|
</transition-group>
|
||||||
</div>
|
</div>
|
||||||
|
</transition>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { computed, defineComponent, inject, PropType, Ref } from 'vue';
|
import { defineComponent, inject, PropType, Ref } from 'vue';
|
||||||
import modalTrainMixin from '../../mixins/modalTrainMixin';
|
import modalTrainMixin from '../../mixins/modalTrainMixin';
|
||||||
import Train from '../../scripts/interfaces/Train';
|
import Train from '../../scripts/interfaces/Train';
|
||||||
import { useStore } from '../../store/mainStore';
|
import { useStore } from '../../store/mainStore';
|
||||||
import Loading from '../Global/Loading.vue';
|
import Loading from '../Global/Loading.vue';
|
||||||
import TrainInfo from './TrainInfo.vue';
|
import TrainInfo from './TrainInfo.vue';
|
||||||
|
import { Status } from '../../typings/common';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
components: { Loading, TrainInfo },
|
components: { Loading, TrainInfo },
|
||||||
@@ -53,14 +56,10 @@ export default defineComponent({
|
|||||||
const store = useStore();
|
const store = useStore();
|
||||||
const searchedTrain = inject('searchedTrain') as Ref<string>;
|
const searchedTrain = inject('searchedTrain') as Ref<string>;
|
||||||
const searchedDriver = inject('searchedDriver') as Ref<string>;
|
const searchedDriver = inject('searchedDriver') as Ref<string>;
|
||||||
const currentTrains = computed(() => {
|
|
||||||
return props.trains;
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
searchedTrain,
|
searchedTrain,
|
||||||
searchedDriver,
|
searchedDriver,
|
||||||
currentTrains,
|
|
||||||
store,
|
store,
|
||||||
sorterActive: inject('sorterActive') as {
|
sorterActive: inject('sorterActive') as {
|
||||||
id: string | number;
|
id: string | number;
|
||||||
@@ -69,6 +68,17 @@ export default defineComponent({
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
dataStatus() {
|
||||||
|
if (this.store.isOffline) return Status.Data.Offline;
|
||||||
|
|
||||||
|
if (this.trains.length == 0 && this.store.dataStatuses.trains == Status.Data.Loading)
|
||||||
|
return Status.Data.Loading;
|
||||||
|
|
||||||
|
return Status.Data.Loaded;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
activated() {
|
activated() {
|
||||||
const query = this.$route.query;
|
const query = this.$route.query;
|
||||||
if (query.trainNo && query.driverName) {
|
if (query.trainNo && query.driverName) {
|
||||||
@@ -86,23 +96,13 @@ export default defineComponent({
|
|||||||
@import '../../styles/responsive.scss';
|
@import '../../styles/responsive.scss';
|
||||||
@import '../../styles/animations.scss';
|
@import '../../styles/animations.scss';
|
||||||
|
|
||||||
.anim {
|
|
||||||
&-enter-from,
|
|
||||||
&-leave-to {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-enter-active {
|
|
||||||
transition: all 100ms ease-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
&-leave-active {
|
|
||||||
transition: all 100ms ease-out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.train-table {
|
.train-table {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
|
height: 90vh;
|
||||||
|
min-height: 550px;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table-info {
|
.table-info {
|
||||||
@@ -115,98 +115,11 @@ export default defineComponent({
|
|||||||
background: #1a1a1a;
|
background: #1a1a1a;
|
||||||
}
|
}
|
||||||
|
|
||||||
img.train-image {
|
li.train-row {
|
||||||
width: 12em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.traffic-warning {
|
|
||||||
padding: 1em 0;
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
background: var(--clr-warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
.timeouts-warning {
|
|
||||||
background-color: #333;
|
|
||||||
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.05em;
|
|
||||||
|
|
||||||
margin-bottom: 0.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.warning-timeout {
|
|
||||||
background-color: #be3728;
|
|
||||||
color: white;
|
|
||||||
|
|
||||||
display: inline-block;
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
width: 1.25em;
|
|
||||||
height: 1.25em;
|
|
||||||
border-radius: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.train {
|
|
||||||
&-list {
|
|
||||||
position: relative;
|
|
||||||
overflow-y: hidden;
|
|
||||||
min-height: 100%;
|
|
||||||
|
|
||||||
@include smallScreen() {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&-row {
|
|
||||||
background-color: var(--clr-secondary);
|
background-color: var(--clr-secondary);
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
&_cars {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginator {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
|
|
||||||
&_item {
|
|
||||||
padding: 0.25em 0.5em;
|
|
||||||
margin: 0 0.5em;
|
|
||||||
outline: 2px solid salmon;
|
|
||||||
|
|
||||||
min-width: 30px;
|
|
||||||
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&.page-number {
|
|
||||||
font-weight: bold;
|
|
||||||
color: gold;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.disabled {
|
|
||||||
outline: 2px solid lightgray;
|
|
||||||
color: lightgray;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:focus {
|
|
||||||
outline: 2px solid white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@include smallScreen() {
|
|
||||||
.info-bottom {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ export namespace Status {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum Data {
|
export enum Data {
|
||||||
|
Offline = 2,
|
||||||
Initialized = -1,
|
Initialized = -1,
|
||||||
Loading = 0,
|
Loading = 0,
|
||||||
Error = 1,
|
Error = 1,
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ enum SceneryViewMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
|
name: 'SceneryView',
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
SceneryInfo,
|
SceneryInfo,
|
||||||
SceneryTimetable,
|
SceneryTimetable,
|
||||||
|
|||||||
Reference in New Issue
Block a user