mirror of
https://github.com/Spythere/stacjownik.git
synced 2026-05-03 13:28:11 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| deb7b68985 | |||
| 633f05f690 | |||
| 73828867da | |||
| 75685c1e0e | |||
| 496ff95236 | |||
| 7e25327832 | |||
| 272c9f50f8 |
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "stacjownik",
|
"name": "stacjownik",
|
||||||
"version": "1.11.0",
|
"version": "1.11.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ async function fetchDailyTimetableStats() {
|
|||||||
distanceAvg,
|
distanceAvg,
|
||||||
timetableAuthor: maxTimetable?.authorName || '',
|
timetableAuthor: maxTimetable?.authorName || '',
|
||||||
timetableDriver: maxTimetable?.driverName || '',
|
timetableDriver: maxTimetable?.driverName || '',
|
||||||
timetableId: maxTimetable?.timetableId || 0,
|
timetableId: maxTimetable?.id || 0,
|
||||||
timetableRouteDistance: maxTimetable?.routeDistance || 0,
|
timetableRouteDistance: maxTimetable?.routeDistance || 0,
|
||||||
|
|
||||||
mostActiveDispatchers,
|
mostActiveDispatchers,
|
||||||
|
|||||||
@@ -15,6 +15,14 @@
|
|||||||
tabindex="0"
|
tabindex="0"
|
||||||
>
|
>
|
||||||
<span>
|
<span>
|
||||||
|
<b
|
||||||
|
v-if="item.dispatcherLevel !== null"
|
||||||
|
class="dispatcher-level"
|
||||||
|
:style="calculateExpStyle(item.dispatcherLevel, item.dispatcherIsSupporter)"
|
||||||
|
>
|
||||||
|
{{ item.dispatcherLevel >= 2 ? item.dispatcherLevel : 'L' }}
|
||||||
|
</b>
|
||||||
|
|
||||||
<b class="text--primary">{{ item.dispatcherName }}</b> • <b>{{ item.stationName }}</b>
|
<b class="text--primary">{{ item.dispatcherName }}</b> • <b>{{ item.stationName }}</b>
|
||||||
<span class="text--grayed"> #{{ item.stationHash }} </span>
|
<span class="text--grayed"> #{{ item.stationHash }} </span>
|
||||||
<span class="region-badge" :class="item.region">PL1</span>
|
<span class="region-badge" :class="item.region">PL1</span>
|
||||||
@@ -44,6 +52,7 @@
|
|||||||
import { defineComponent, PropType } from 'vue';
|
import { defineComponent, PropType } from 'vue';
|
||||||
import dateMixin from '../../mixins/dateMixin';
|
import dateMixin from '../../mixins/dateMixin';
|
||||||
import { DispatcherHistory } from '../../scripts/interfaces/api/DispatchersAPIData';
|
import { DispatcherHistory } from '../../scripts/interfaces/api/DispatchersAPIData';
|
||||||
|
import styleMixin from '../../mixins/styleMixin';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
props: {
|
props: {
|
||||||
@@ -53,7 +62,7 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
mixins: [dateMixin],
|
mixins: [dateMixin, styleMixin],
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
computedDispatcherHistory() {
|
computedDispatcherHistory() {
|
||||||
@@ -143,6 +152,18 @@ li.sticky {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dispatcher-level {
|
||||||
|
display: inline-block;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 150%;
|
||||||
|
|
||||||
|
width: 25px;
|
||||||
|
height: 25px;
|
||||||
|
|
||||||
|
margin-right: 0.5em;
|
||||||
|
border-radius: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
@include smallScreen() {
|
@include smallScreen() {
|
||||||
.journal_item {
|
.journal_item {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<b class="text--primary">{{ timetable.trainCategoryCode }} </b>
|
<b class="text--primary">{{ timetable.trainCategoryCode }} </b>
|
||||||
<b>{{ timetable.trainNo }}</b>
|
<b>{{ timetable.trainNo }}</b>
|
||||||
| <span>{{ timetable.driverName }}</span> |
|
| <span>{{ timetable.driverName }}</span> |
|
||||||
<span class="text--grayed">#{{ timetable.timetableId }}</span>
|
<span class="text--grayed">#{{ timetable.id }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<span>
|
<span>
|
||||||
|
|||||||
@@ -11,8 +11,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<router-link :to="`/journal/timetables?timetableId=${historyItem.timetableId}`">
|
<router-link :to="`/journal/timetables?timetableId=${historyItem.id}`">
|
||||||
<span class="text--grayed"> #{{ historyItem.timetableId }} </span>
|
<span class="text--grayed"> #{{ historyItem.id }} </span>
|
||||||
<b class="text--primary"> {{ historyItem.trainCategoryCode }} {{ historyItem.trainNo }}</b>
|
<b class="text--primary"> {{ historyItem.trainCategoryCode }} {{ historyItem.trainNo }}</b>
|
||||||
<div>{{ historyItem.driverName }}</div>
|
<div>{{ historyItem.driverName }}</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ export interface DispatcherHistory {
|
|||||||
currentDuration: number;
|
currentDuration: number;
|
||||||
dispatcherId: number;
|
dispatcherId: number;
|
||||||
dispatcherName: string;
|
dispatcherName: string;
|
||||||
|
dispatcherLevel: number | null;
|
||||||
|
dispatcherIsSupporter: boolean;
|
||||||
isOnline: boolean;
|
isOnline: boolean;
|
||||||
lastOnlineTimestamp: number;
|
lastOnlineTimestamp: number;
|
||||||
region: string;
|
region: string;
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
export interface TimetableHistory {
|
export interface TimetableHistory {
|
||||||
|
id: number;
|
||||||
|
|
||||||
timetableId: number;
|
timetableId: number;
|
||||||
trainNo: number;
|
trainNo: number;
|
||||||
trainCategoryCode: string;
|
trainCategoryCode: string;
|
||||||
|
|||||||
@@ -13,6 +13,6 @@ export interface JournalTimetableFilter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface JournalTimetableSorter {
|
export interface JournalTimetableSorter {
|
||||||
id: 'timetableId' | 'beginDate' | 'distance' | 'total-stops';
|
id: 'beginDate' | 'distance' | 'total-stops';
|
||||||
dir: -1 | 1;
|
dir: -1 | 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<JournalOptions
|
<JournalOptions
|
||||||
@on-search-confirm="fetchHistoryData"
|
@on-search-confirm="fetchHistoryData"
|
||||||
@on-options-reset="resetOptions"
|
@on-options-reset="resetOptions"
|
||||||
:sorter-option-ids="['timetableId', 'beginDate', 'distance', 'total-stops']"
|
:sorter-option-ids="[ 'beginDate', 'distance', 'total-stops']"
|
||||||
:filters="journalTimetableFilters"
|
:filters="journalTimetableFilters"
|
||||||
:currentOptionsActive="currentOptionsActive"
|
:currentOptionsActive="currentOptionsActive"
|
||||||
:data-status="dataStatus"
|
:data-status="dataStatus"
|
||||||
@@ -111,7 +111,7 @@ export default defineComponent({
|
|||||||
}),
|
}),
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
const sorterActive: JournalTimetableSorter = reactive({ id: 'timetableId', dir: 1 });
|
const sorterActive: JournalTimetableSorter = reactive({ id: 'beginDate', dir: 1 });
|
||||||
const journalFilterActive = ref(journalTimetableFilters[0]);
|
const journalFilterActive = ref(journalTimetableFilters[0]);
|
||||||
|
|
||||||
const searchersValues = reactive({
|
const searchersValues = reactive({
|
||||||
@@ -147,7 +147,7 @@ export default defineComponent({
|
|||||||
watch: {
|
watch: {
|
||||||
currentQueryArray(q: string[]) {
|
currentQueryArray(q: string[]) {
|
||||||
this.currentOptionsActive =
|
this.currentOptionsActive =
|
||||||
q.length > 2 || q.some((qv) => qv.startsWith('sortBy=') && qv.split('=')[1] != 'timetableId');
|
q.length > 2 || q.some((qv) => qv.startsWith('sortBy=') && qv.split('=')[1] != 'beginDate');
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -188,7 +188,7 @@ export default defineComponent({
|
|||||||
this.setSearchers('', '', '', '');
|
this.setSearchers('', '', '', '');
|
||||||
|
|
||||||
this.journalFilterActive = this.journalTimetableFilters[0];
|
this.journalFilterActive = this.journalTimetableFilters[0];
|
||||||
this.sorterActive.id = 'timetableId';
|
this.sorterActive.id = 'beginDate';
|
||||||
|
|
||||||
this.fetchHistoryData();
|
this.fetchHistoryData();
|
||||||
},
|
},
|
||||||
@@ -234,7 +234,7 @@ export default defineComponent({
|
|||||||
if (this.sorterActive.id == 'distance') queries.push('sortBy=routeDistance');
|
if (this.sorterActive.id == 'distance') queries.push('sortBy=routeDistance');
|
||||||
else if (this.sorterActive.id == 'total-stops') queries.push('sortBy=allStopsCount');
|
else if (this.sorterActive.id == 'total-stops') queries.push('sortBy=allStopsCount');
|
||||||
else if (this.sorterActive.id == 'beginDate') queries.push('sortBy=beginDate');
|
else if (this.sorterActive.id == 'beginDate') queries.push('sortBy=beginDate');
|
||||||
else queries.push('sortBy=timetableId');
|
// else queries.push('sortBy=timetableId');
|
||||||
|
|
||||||
queries.push('countLimit=15');
|
queries.push('countLimit=15');
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -12,7 +12,7 @@ export default defineConfig({
|
|||||||
registerType: 'prompt',
|
registerType: 'prompt',
|
||||||
|
|
||||||
workbox: {
|
workbox: {
|
||||||
globPatterns: ['**/*.{js,css,html,png,svg,img}'],
|
globPatterns: ['**/*.{js,css,html,png,svg,jpg}'],
|
||||||
runtimeCaching: [
|
runtimeCaching: [
|
||||||
{
|
{
|
||||||
urlPattern: new RegExp('^https://spythere.pl/api/getSceneries', 'i'),
|
urlPattern: new RegExp('^https://spythere.pl/api/getSceneries', 'i'),
|
||||||
@@ -20,6 +20,7 @@ export default defineConfig({
|
|||||||
options: {
|
options: {
|
||||||
cacheName: 'sceneries-cache',
|
cacheName: 'sceneries-cache',
|
||||||
expiration: {
|
expiration: {
|
||||||
|
maxEntries: 1,
|
||||||
maxAgeSeconds: 60 * 60 * 24 * 7, // <== 7 days
|
maxAgeSeconds: 60 * 60 * 24 * 7, // <== 7 days
|
||||||
},
|
},
|
||||||
cacheableResponse: {
|
cacheableResponse: {
|
||||||
|
|||||||
Reference in New Issue
Block a user