Pobieranie danych z API; poprawki wizualne

This commit is contained in:
2022-11-14 22:25:49 +01:00
parent 9415705fc0
commit d070ea0dda
3 changed files with 193 additions and 63 deletions
+83 -19
View File
@@ -22,13 +22,29 @@
</div> </div>
<div class="content"> <div class="content">
Wybierz dyżurnego oraz scenerię, aby zobaczyć pociągi <b v-if="!selectedSceneryName" class="text--accent"> Wybierz dyżurnego oraz scenerię, aby zobaczyć pociągi </b>
<ul> <div v-else>
<b class="text--accent">Kliknij na gracza, aby wypełnić obecny rozkaz jego danymi</b>
<p>Gracze bez rozkładu jazdy</p>
<ul class="train-list">
<li v-for="train in sceneryTrains"> <li v-for="train in sceneryTrains">
{{ train.trainNo }} <b>{{ train.trainNo }} | {{ train.driverName }}</b>
</li> </li>
<li class="no-trains" v-if="sceneryTrains.length == 0 && selectedSceneryName">Brak graczy na scenerii</li>
</ul> </ul>
<p>Aktywne rozkłady jazdy</p>
<ul class="train-list">
<li v-for="train in sceneryScheduledTrains">
<b>{{ train.trainNo }} | {{ train.driverName }}</b>
</li>
<li class="no-trains" v-if="sceneryScheduledTrains.length == 0">Brak aktywnych rozkładów</li>
</ul>
</div>
</div> </div>
</div> </div>
</template> </template>
@@ -36,15 +52,15 @@
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import axios from 'axios'; import axios from 'axios';
import { ApiSWDR } from '../types/apiTypes'; import { ApiSWDR, ApiStacjownik } from '../types/apiTypes';
import { ISceneryData, ITrainData } from '../types/dataTypes'; import { ISceneryData } from '../types/dataTypes';
export default defineComponent({ export default defineComponent({
name: 'order-train-picker', name: 'order-train-picker',
data() { data() {
return { return {
sceneriesOnline: [] as ISceneryData[], sceneriesOnline: [] as ISceneryData[],
trainsOnline: [] as ITrainData[], trainsOnline: [] as ApiStacjownik.IActiveTrain[],
selectedSceneryName: null as string | null, selectedSceneryName: null as string | null,
selectedDispatcherName: null as string | null, selectedDispatcherName: null as string | null,
@@ -63,6 +79,10 @@ export default defineComponent({
}, },
computed: { computed: {
selectedSceneryHash() {
return this.sceneriesOnline.find((s) => this.selectedSceneryName == s.stationName)?.stationHash;
},
sceneriesOnlinePL1() { sceneriesOnlinePL1() {
return this.sceneriesOnline.filter((s) => s.region == 'eu' && s.isOnline); return this.sceneriesOnline.filter((s) => s.region == 'eu' && s.isOnline);
}, },
@@ -79,7 +99,18 @@ export default defineComponent({
}, },
sceneryTrains() { sceneryTrains() {
return this.trainsOnline.filter((t) => t.isOnline && t.station?.stationName == this.selectedSceneryName); return this.trainsOnline.filter(
(t) => t.online && t.currentStationName == this.selectedSceneryName && this.selectedSceneryName && !t.timetable
);
},
sceneryScheduledTrains() {
if (!this.selectedSceneryHash) return [];
const hash = this.selectedSceneryHash;
return this.trainsOnline
.filter((t) => t.timetable?.sceneries.includes(hash))
.sort((t1, t2) => t1.trainNo - t2.trainNo);
}, },
}, },
@@ -95,47 +126,80 @@ export default defineComponent({
}, },
async fetchTrainsOnline() { async fetchTrainsOnline() {
const data: ApiSWDR.ITrainsOnline = await ( const data: ApiStacjownik.IActiveTrain[] = await (
await axios.get(`${import.meta.env['VITE_APP_SWDR_URL']}/?method=getTrainsOnline`) await axios.get(`${import.meta.env['VITE_APP_API_URL']}/getActiveTrainList`)
).data; ).data;
if (!data.success) return; if (!data) return;
this.trainsOnline = data.message; this.trainsOnline = data;
}, },
}, },
}); });
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '../styles/global.scss';
.order-train-picker { .order-train-picker {
padding: 1em 0; padding: 1em;
height: 90vh;
overflow-y: auto;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-top: 1em;
} }
.options { .options {
display: flex; display: flex;
width: 100%; width: 100%;
gap: 1em;
padding: 0 2em;
}
.content {
margin-top: 1em;
}
select { select {
border: 2px solid white; border: 2px solid white;
color: white; color: white;
font-size: 1em; font-size: 1em;
width: 100%; width: 100%;
margin: 0;
padding: 0.15em;
} }
option { option {
color: black; color: black;
} }
}
.content {
margin-top: 1em;
width: 100%;
text-align: center;
p {
margin: 1em 0;
font-weight: bold;
font-size: 1.1em;
}
}
ul.train-list {
li {
background-color: #111;
padding: 0.5em;
margin-top: 0.5em;
cursor: pointer;
&.no-trains {
font-weight: bold;
background-color: #222;
cursor: default;
}
}
}
</style> </style>
+83 -17
View File
@@ -26,28 +26,94 @@ export declare module ApiSWDR {
dispatcherRate: number; dispatcherRate: number;
} }
export interface ITrainsOnline { // export interface ITrainsOnline {
success: boolean; // success: boolean;
respCode: number; // respCode: number;
message: ITrainsOnlineMessage[]; // message: ITrainsOnlineMessage[];
// }
// export interface ITrainsOnlineMessage {
// trainNo: number;
// driverId: number;
// driverName: string;
// driverIsSupporter: boolean;
// dataSignal: string;
// dataSceneryConnection: string;
// dataDistance: number;
// dataCon: string;
// dataSpeed: number;
// dataMass: number;
// dataLength: number;
// region: string;
// isOnline: number;
// lastSeen: number;
// station?: ISceneryData;
// }
} }
export interface ITrainsOnlineMessage { export declare module ApiStacjownik {
export interface IActiveTrain {
trainNo: number; trainNo: number;
driverId: number;
mass: number;
length: number;
speed: number;
signal: string;
distance: number;
connectedTrack: string;
stockString: string;
driverName: string; driverName: string;
driverId: number;
driverIsSupporter: boolean; driverIsSupporter: boolean;
dataSignal: string;
dataSceneryConnection: string; currentStationName: string;
dataDistance: number; currentStationHash?: string;
dataCon: string;
dataSpeed: number; online: boolean;
dataMass: number;
dataLength: number;
region: string;
isOnline: number;
lastSeen: number; lastSeen: number;
station?: ISceneryData;
} region: string;
timetable?: {
timetableId: number;
category: string;
route: string;
stopList: IActiveTrainStop[];
TWR: boolean;
SKR: boolean;
sceneries: string[];
};
isTimeout: boolean;
} }
export interface IActiveTrainStop {
stopName: string;
stopNameRAW: string;
stopType: string;
stopDistance: number;
pointId: number;
mainStop: boolean;
arrivalLine: string;
arrivalTimestamp: number;
arrivalRealTimestamp: number;
arrivalDelay: number;
departureLine: string;
departureTimestamp: number;
departureRealTimestamp: number;
departureDelay: number;
comments?: any;
beginsHere: boolean;
terminatesHere: boolean;
confirmed: boolean;
stopped: boolean;
stopTime: number;
}
}
+17 -17
View File
@@ -17,21 +17,21 @@ export interface ISceneryData {
dispatcherRate: number; dispatcherRate: number;
} }
export interface ITrainData { // export interface ITrainData {
trainNo: number; // trainNo: number;
driverId: number; // driverId: number;
driverName: string; // driverName: string;
driverIsSupporter: boolean; // driverIsSupporter: boolean;
dataSignal: string; // dataSignal: string;
dataSceneryConnection: string; // dataSceneryConnection: string;
dataDistance: number; // dataDistance: number;
dataCon: string; // dataCon: string;
dataSpeed: number; // dataSpeed: number;
dataMass: number; // dataMass: number;
dataLength: number; // dataLength: number;
region: string; // region: string;
isOnline: number; // isOnline: number;
lastSeen: number; // lastSeen: number;
station?: ISceneryData; // station?: ISceneryData;
} // }