From 76d0ff88f1edc0e7a4cc16491ff3eb334845d7e3 Mon Sep 17 00:00:00 2001 From: Spythere Date: Thu, 1 Sep 2022 01:56:16 +0200 Subject: [PATCH 1/6] =?UTF-8?q?Zmiany=20w=20designie=20dziennika=20rozk?= =?UTF-8?q?=C5=82ad=C3=B3w=20jazdy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JournalView/JournalTimetables.vue | 130 ++++++---- .../SceneryView/SceneryTimetablesHistory.vue | 236 +++++++++--------- .../interfaces/api/TimetablesAPIData.ts | 75 +++--- 3 files changed, 236 insertions(+), 205 deletions(-) diff --git a/src/components/JournalView/JournalTimetables.vue b/src/components/JournalView/JournalTimetables.vue index ec37ebb..a945a43 100644 --- a/src/components/JournalView/JournalTimetables.vue +++ b/src/components/JournalView/JournalTimetables.vue @@ -46,6 +46,25 @@ #{{ item.timetableId }} + • + + + {{ + !item.terminated + ? $t('journal.timetable-active') + : item.fulfilled || item.currentDistance >= item.routeDistance * 0.9 + ? $t('journal.timetable-fulfilled') + : $t('journal.timetable-abandoned') + }} + +
{{ item.route.replace('|', ' - ') }}
@@ -58,49 +77,30 @@ :key="scenery.name" :class="{ confirmed: scenery.confirmed }" > - {{ i > 0 ? ' > ' : '' }} {{ scenery.name }} - - + > + {{ scenery.name }} -
- - {{ item.route.split('|')[0] }}: - - {{ localeTime(item.beginDate, $i18n.locale) }} - - {{ localeTime(item.scheduledBeginDate, $i18n.locale) }} • + + - - - {{ item.route.split('|').slice(-1)[0] }}: - - {{ $t('journal.timetable-abandoned') }} + + + - - {{ localeTime(item.fulfilled ? item.endDate : item.scheduledEndDate, $i18n.locale) }} - - {{ localeTime(item.fulfilled ? item.scheduledEndDate : item.endDate, $i18n.locale) }} + +
- - - {{ - !item.terminated - ? $t('journal.timetable-active') - : item.fulfilled || item.currentDistance >= item.routeDistance * 0.9 - ? $t('journal.timetable-fulfilled') - : $t('journal.timetable-abandoned') - }} -
@@ -120,17 +120,21 @@
-
+ {{ $t('journal.route-length') }} {{ !item.fulfilled ? item.currentDistance + ' /' : '' }} {{ item.routeDistance }} km -
- -
+ + • + {{ $t('journal.station-count') }} {{ item.confirmedStopsCount }} / {{ item.allStopsCount }} -
+ +
+ +
+
@@ -266,10 +270,35 @@ export default defineComponent({ this.statsCardOpen = false; }, - getSceneryList(historyItem: TimetableHistory) { - return historyItem.sceneriesString - .split('%') - .map((name, i) => ({ name, confirmed: i < historyItem.confirmedStopsCount })); + getSceneryList(item: TimetableHistory) { + return item.sceneriesString.split('%').map((name, i) => { + const beginDateHTML = + ' (o. ' + + (item.beginDate != item.scheduledBeginDate + ? `${this.localeTime(item.beginDate, this.$i18n.locale)} ` + : '') + + `${this.localeTime(item.scheduledBeginDate, this.$i18n.locale)})`; + + const endDateHTML = + ' (p. ' + + (item.endDate != item.scheduledEndDate && item.fulfilled + ? `${this.localeTime( + item.fulfilled ? item.endDate : item.scheduledEndDate, + this.$i18n.locale + )} ` + : '') + + `${this.localeTime( + item.fulfilled || (item.terminated && !item.fulfilled) ? item.scheduledEndDate : item.endDate, + this.$i18n.locale + )})`; + + const abandonedDateHTML = ` (porz. ${this.localeTime( + item.fulfilled ? item.scheduledEndDate : item.endDate, + this.$i18n.locale + )})`; + + return { name, confirmed: i < item.confirmedStopsCount, beginDateHTML, endDateHTML, abandonedDateHTML }; + }); }, handleScroll() { @@ -408,12 +437,9 @@ export default defineComponent({ padding: 0.2em 0; .scenery-list { - span { - color: #adadad; - - &.confirmed { - color: #a3eba3; - } + color: #adadad; + span.confirmed { + color: #a3eba3; } } } diff --git a/src/components/SceneryView/SceneryTimetablesHistory.vue b/src/components/SceneryView/SceneryTimetablesHistory.vue index b37282b..07f828b 100644 --- a/src/components/SceneryView/SceneryTimetablesHistory.vue +++ b/src/components/SceneryView/SceneryTimetablesHistory.vue @@ -1,118 +1,118 @@ - - - - - - + + + + + + diff --git a/src/scripts/interfaces/api/TimetablesAPIData.ts b/src/scripts/interfaces/api/TimetablesAPIData.ts index 48710a4..122da2a 100644 --- a/src/scripts/interfaces/api/TimetablesAPIData.ts +++ b/src/scripts/interfaces/api/TimetablesAPIData.ts @@ -1,35 +1,40 @@ -export interface TimetableHistory { - timetableId: number; - trainNo: number; - trainCategoryCode: string; - driverId: number; - driverName: string; - route: string; - twr: number; - skr: number; - sceneriesString: string; - - routeDistance: number; - currentDistance: number; - - confirmedStopsCount: number; - allStopsCount: number; - - beginDate: string; - endDate: string; - - scheduledBeginDate: string; - scheduledEndDate: string; - - terminated: boolean; - fulfilled: boolean; - - authorName?: string; - authorId?: number; -} - -export interface SceneryTimetableHistory { - sceneryTimetables: TimetableHistory[]; - totalCount: number; - sceneryName: string; -} +export interface TimetableHistory { + timetableId: number; + trainNo: number; + trainCategoryCode: string; + driverId: number; + driverName: string; + route: string; + twr: number; + skr: number; + sceneriesString: string; + + routeDistance: number; + currentDistance: number; + + confirmedStopsCount: number; + allStopsCount: number; + + beginDate: string; + endDate: string; + + scheduledBeginDate: string; + scheduledEndDate: string; + + terminated: boolean; + fulfilled: boolean; + + authorName?: string; + authorId?: number; + + stockString?: string; + stockMass?: number; + stockLength?: number; + maxSpeed?: number; +} + +export interface SceneryTimetableHistory { + sceneryTimetables: TimetableHistory[]; + totalCount: number; + sceneryName: string; +} From b90ac6c09ed460657a5a3924fb5c05a96e35b195 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sat, 3 Sep 2022 00:11:42 +0200 Subject: [PATCH 2/6] =?UTF-8?q?Zmiany=20w=20wygl=C4=85dzie=20i=20funkcjona?= =?UTF-8?q?lno=C5=9Bciach=20dziennika=20RJ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 2 +- .../JournalView/JournalTimetables.vue | 275 +++++++++--------- .../interfaces/api/TimetablesAPIData.ts | 4 + src/types/JournalTimetablesTypes.ts | 3 + 4 files changed, 149 insertions(+), 135 deletions(-) create mode 100644 src/types/JournalTimetablesTypes.ts diff --git a/src/App.vue b/src/App.vue index 64e05b4..932fd33 100644 --- a/src/App.vue +++ b/src/App.vue @@ -66,7 +66,7 @@
- +
diff --git a/src/components/JournalView/JournalTimetables.vue b/src/components/JournalView/JournalTimetables.vue index a945a43..e49aa33 100644 --- a/src/components/JournalView/JournalTimetables.vue +++ b/src/components/JournalView/JournalTimetables.vue @@ -25,116 +25,104 @@ {{ $t('app.error') }} -
+
{{ $t('app.no-result') }}
    -
  • -
    - - - {{ item.trainCategoryCode }}  - {{ item.trainNo }} - | {{ item.driverName }} | - #{{ item.timetableId }} - - - • - +
  • +
    +
    + {{ localeDay(timetable.beginDate, $i18n.locale) }} {{ - !item.terminated + !timetable.terminated ? $t('journal.timetable-active') - : item.fulfilled || item.currentDistance >= item.routeDistance * 0.9 + : timetable.fulfilled || timetable.currentDistance >= timetable.routeDistance * 0.9 ? $t('journal.timetable-fulfilled') - : $t('journal.timetable-abandoned') + : `${$t('journal.timetable-abandoned')} ${localeTime(timetable.endDate, $i18n.locale)}` }} - -
    - {{ item.route.replace('|', ' - ') }} -
    - -
    - -
    - - > - {{ scenery.name }} - - - - - - - - - - - -
    - -
    - -
    -
    - {{ $t('journal.timetable-day') }} {{ localeDay(item.beginDate, $i18n.locale) }}
    - -
    - {{ $t('journal.dispatcher-name') }}  - {{ item.authorName }} + {{ timetable.trainCategoryCode }}  + {{ timetable.trainNo }} + | {{ timetable.driverName }} | + #{{ timetable.timetableId }} + + +
    + {{ timetable.route.replace('|', ' - ') }} +
    + +
    + +
    + + > + {{ scenery.name }} + + + + + + + +
    + +
    + +
    + {{ $t('journal.dispatcher-name') }}  + + {{ timetable.authorName }} + +
    +
    + +
    + + {{ $t('journal.route-length') }} + {{ !timetable.fulfilled ? timetable.currentDistance + ' /' : '' }} + {{ timetable.routeDistance }} km + + • + + {{ $t('journal.station-count') }} + {{ timetable.confirmedStopsCount }} / + {{ timetable.allStopsCount }} +
    -
    - - {{ $t('journal.route-length') }} - {{ !item.fulfilled ? item.currentDistance + ' /' : '' }} - {{ item.routeDistance }} km - - • - - {{ $t('journal.station-count') }} - {{ item.confirmedStopsCount }} / - {{ item.allStopsCount }} - -
    - -
    - +
    + {{ timetable.stockString}}
  • @@ -165,16 +153,14 @@ import { TimetableHistory } from '../../scripts/interfaces/api/TimetablesAPIData import { URLs } from '../../scripts/utils/apiURLs'; import { useStore } from '../../store/store'; import JournalOptions from './JournalOptions.vue'; +import { JournalTimetableSearcher } from '../../types/JournalTimetablesTypes'; +import modalTrainMixin from '../../mixins/modalTrainMixin'; const TIMETABLES_API_URL = `${URLs.stacjownikAPI}/api/getTimetables`; -type JournalTimetableSearcher = { - [key in 'search-driver' | 'search-train']: string; -}; - export default defineComponent({ components: { DriverStats, Loading, JournalOptions }, - mixins: [dateMixin, routerMixin], + mixins: [dateMixin, routerMixin, modalTrainMixin], name: 'JournalTimetables', @@ -192,6 +178,8 @@ export default defineComponent({ showReturnButton: false, statsCardOpen: false, + timetableHistory: [] as TimetableHistory[], + journalTimetableFilters, }), @@ -219,7 +207,6 @@ export default defineComponent({ const scrollElement: Ref = ref(null); return { - historyList: ref([]) as Ref, historyDataStatus, isDataLoading: computed(() => historyDataStatus.value.status === DataStatus.Loading), @@ -256,48 +243,60 @@ export default defineComponent({ window.removeEventListener('wheel', this.handleScroll); }, - methods: { - navigateToTimetable(historyItem: TimetableHistory) { - if (historyItem.terminated) return; + computed: { + computedTimetableHistory() { + return this.timetableHistory.map((timetable) => ({ + timetable, + sceneryList: this.getSceneryList(timetable), + })); + }, + }, - this.navigateTo('/trains', { - trainNo: historyItem.trainNo, - driverName: historyItem.driverName, - }); + methods: { + showTimetable(timetable: TimetableHistory) { + if (timetable.terminated) return; + + this.selectModalTrain(timetable.driverName + timetable.trainNo.toString()); + // this.navigateTo('/trains', { + // trainNo: timetable.trainNo, + // driverName: timetable.driverName, + // }); }, closeCard() { this.statsCardOpen = false; }, - getSceneryList(item: TimetableHistory) { - return item.sceneriesString.split('%').map((name, i) => { + getSceneryList(timetable: TimetableHistory) { + return timetable.sceneriesString.split('%').map((name, i) => { const beginDateHTML = ' (o. ' + - (item.beginDate != item.scheduledBeginDate - ? `${this.localeTime(item.beginDate, this.$i18n.locale)} ` + (timetable.beginDate != timetable.scheduledBeginDate + ? `${this.localeTime(timetable.beginDate, this.$i18n.locale)} ` : '') + - `${this.localeTime(item.scheduledBeginDate, this.$i18n.locale)})`; + `${this.localeTime(timetable.scheduledBeginDate, this.$i18n.locale)})`; const endDateHTML = ' (p. ' + - (item.endDate != item.scheduledEndDate && item.fulfilled + (timetable.endDate != timetable.scheduledEndDate && timetable.fulfilled ? `${this.localeTime( - item.fulfilled ? item.endDate : item.scheduledEndDate, + timetable.fulfilled ? timetable.endDate : timetable.scheduledEndDate, this.$i18n.locale )} ` : '') + `${this.localeTime( - item.fulfilled || (item.terminated && !item.fulfilled) ? item.scheduledEndDate : item.endDate, + timetable.fulfilled || (timetable.terminated && !timetable.fulfilled) + ? timetable.scheduledEndDate + : timetable.endDate, this.$i18n.locale )})`; const abandonedDateHTML = ` (porz. ${this.localeTime( - item.fulfilled ? item.scheduledEndDate : item.endDate, + timetable.fulfilled ? timetable.scheduledEndDate : timetable.endDate, this.$i18n.locale )})`; - return { name, confirmed: i < item.confirmedStopsCount, beginDateHTML, endDateHTML, abandonedDateHTML }; + return { name, confirmed: i < timetable.confirmedStopsCount, beginDateHTML, endDateHTML, abandonedDateHTML }; }); }, @@ -332,7 +331,7 @@ export default defineComponent({ async addHistoryData() { this.scrollDataLoaded = false; - const countFrom = this.historyList.length; + const countFrom = this.timetableHistory.length; const responseData: TimetableHistory[] = await ( await axios.get(`${TIMETABLES_API_URL}?${this.currentQuery}&countFrom=${countFrom}`) @@ -345,7 +344,7 @@ export default defineComponent({ return; } - this.historyList.push(...responseData); + this.timetableHistory.push(...responseData); this.scrollDataLoaded = true; }, @@ -406,12 +405,12 @@ export default defineComponent({ if (!responseData) return; // Response data exists - this.historyList = responseData; + this.timetableHistory = responseData; // Stats display this.store.driverStatsName = - this.historyList.length > 0 && this.searchersValues['search-driver'].trim() - ? this.historyList[0].driverName + this.timetableHistory.length > 0 && this.searchersValues['search-driver'].trim() + ? this.timetableHistory[0].driverName : ''; this.historyDataStatus.status = DataStatus.Loaded; @@ -428,38 +427,46 @@ export default defineComponent({ diff --git a/src/scripts/interfaces/api/TimetablesAPIData.ts b/src/scripts/interfaces/api/TimetablesAPIData.ts index 122da2a..7100024 100644 --- a/src/scripts/interfaces/api/TimetablesAPIData.ts +++ b/src/scripts/interfaces/api/TimetablesAPIData.ts @@ -31,6 +31,10 @@ export interface TimetableHistory { stockMass?: number; stockLength?: number; maxSpeed?: number; + + hashesString?: string; + currentSceneryName?: string; + currentSceneryHash?: string; } export interface SceneryTimetableHistory { diff --git a/src/types/JournalTimetablesTypes.ts b/src/types/JournalTimetablesTypes.ts new file mode 100644 index 0000000..0805257 --- /dev/null +++ b/src/types/JournalTimetablesTypes.ts @@ -0,0 +1,3 @@ +export type JournalTimetableSearcher = { + [key in 'search-driver' | 'search-train']: string; +}; From 82bbfcdf70077c21801a2791fb1e66e6ac794d7b Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Sep 2022 01:04:04 +0200 Subject: [PATCH 3/6] =?UTF-8?q?Doko=C5=84czenie=20widoku=20dziennika=20RJ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../JournalView/JournalTimetables.vue | 188 ++++++++++++------ src/styles/JournalSection.scss | 132 ++++++------ 2 files changed, 191 insertions(+), 129 deletions(-) diff --git a/src/components/JournalView/JournalTimetables.vue b/src/components/JournalView/JournalTimetables.vue index e49aa33..a6010b7 100644 --- a/src/components/JournalView/JournalTimetables.vue +++ b/src/components/JournalView/JournalTimetables.vue @@ -32,45 +32,47 @@
    • -
      - {{ localeDay(timetable.beginDate, $i18n.locale) }} - + - {{ - !timetable.terminated - ? $t('journal.timetable-active') - : timetable.fulfilled || timetable.currentDistance >= timetable.routeDistance * 0.9 - ? $t('journal.timetable-fulfilled') - : `${$t('journal.timetable-abandoned')} ${localeTime(timetable.endDate, $i18n.locale)}` - }} - + {{ timetable.trainCategoryCode }}  + {{ timetable.trainNo }} + | {{ timetable.driverName }} | + #{{ timetable.timetableId }} + + + + {{ localeDay(timetable.beginDate, $i18n.locale) }} + + {{ + !timetable.terminated + ? $t('journal.timetable-active') + : timetable.fulfilled || timetable.currentDistance >= timetable.routeDistance * 0.9 + ? $t('journal.timetable-fulfilled') + : `${$t('journal.timetable-abandoned')} ${localeTime(timetable.endDate, $i18n.locale)}` + }} + +
      - - {{ timetable.trainCategoryCode }}  - {{ timetable.trainNo }} - | {{ timetable.driverName }} | - #{{ timetable.timetableId }} - - -
      +
      {{ timetable.route.replace('|', ' - ') }}
      @@ -93,20 +95,8 @@
      -
      - -
      - {{ $t('journal.dispatcher-name') }}  - - {{ timetable.authorName }} - -
      -
      - -
      + +
      {{ $t('journal.route-length') }} {{ !timetable.fulfilled ? timetable.currentDistance + ' /' : '' }} @@ -119,10 +109,36 @@ {{ timetable.allStopsCount }}
      -
      -
      - {{ timetable.stockString}} + +
      + {{ $t('journal.dispatcher-name') }}  + + {{ timetable.authorName }} + +
      + + + +
      +
        +
      • + + +
        {{ car.replace(/_/g, ' ').split(':')[0] }}
        +
      • +
      +
    • @@ -155,12 +171,13 @@ import { useStore } from '../../store/store'; import JournalOptions from './JournalOptions.vue'; import { JournalTimetableSearcher } from '../../types/JournalTimetablesTypes'; import modalTrainMixin from '../../mixins/modalTrainMixin'; +import imageMixin from '../../mixins/imageMixin'; const TIMETABLES_API_URL = `${URLs.stacjownikAPI}/api/getTimetables`; export default defineComponent({ components: { DriverStats, Loading, JournalOptions }, - mixins: [dateMixin, routerMixin, modalTrainMixin], + mixins: [dateMixin, routerMixin, modalTrainMixin, imageMixin], name: 'JournalTimetables', @@ -248,6 +265,7 @@ export default defineComponent({ return this.timetableHistory.map((timetable) => ({ timetable, sceneryList: this.getSceneryList(timetable), + showStock: ref(false), })); }, }, @@ -300,6 +318,11 @@ export default defineComponent({ }); }, + onImageError(e: Event) { + const imageEl = e.target as HTMLImageElement; + imageEl.src = this.getImage('unknown.png'); + }, + handleScroll() { this.showReturnButton = window.scrollY > window.innerHeight; @@ -427,22 +450,10 @@ export default defineComponent({ diff --git a/src/styles/JournalSection.scss b/src/styles/JournalSection.scss index 6aa6e43..8dce167 100644 --- a/src/styles/JournalSection.scss +++ b/src/styles/JournalSection.scss @@ -1,65 +1,67 @@ -@import 'responsive.scss'; - -// Animations -.warning { - &-enter-from, - &-leave-to { - opacity: 0; - } - - &-enter-active { - transition: all 150ms ease-out; - } - - &-leave-active { - transition: all 150ms ease-out; - } -} - -//Styles - -.journal-wrapper { - width: 1350px; - padding: 1em 0; -} - -.journal_warning { - text-align: center; - font-size: 1.3em; - - &.error { - background-color: var(--clr-error); - } -} - -.schedule-dates > * { - margin-right: 0.25em; -} - -.journal_item, -.journal_warning { - background: #202020; - padding: 1em; - margin: 1em 0; -} - -.journal_top-bar { - display: flex; - justify-content: space-between; - align-items: center; -} - -button.btn { - padding: 0.5em 0.7em; -} - -@include smallScreen() { - .journal-wrapper { - font-size: 1.25em; - } - - .journal_top-bar { - justify-content: center; - flex-wrap: wrap; - } -} +@import 'responsive.scss'; + +// Animations +.warning { + &-enter-from, + &-leave-to { + opacity: 0; + } + + &-enter-active { + transition: all 150ms ease-out; + } + + &-leave-active { + transition: all 150ms ease-out; + } +} + +//Styles + +.journal-wrapper { + max-width: 1350px; + width: 100%; + + padding: 1em 0; +} + +.journal_warning { + text-align: center; + font-size: 1.3em; + + &.error { + background-color: var(--clr-error); + } +} + +.schedule-dates > * { + margin-right: 0.25em; +} + +.journal_item, +.journal_warning { + background: #202020; + padding: 1em; + margin: 1em 0; +} + +.journal_top-bar { + display: flex; + justify-content: space-between; + align-items: center; +} + +button.btn { + padding: 0.5em 0.7em; +} + +@include smallScreen() { + .journal-wrapper { + font-size: 1.25em; + } + + .journal_top-bar { + justify-content: center; + flex-wrap: wrap; + } +} From 7101d0972d480dbad57cda45beeb820d6747be20 Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Sep 2022 01:06:30 +0200 Subject: [PATCH 4/6] =?UTF-8?q?Przywr=C3=B3cono=20ikon=C4=99=20poci=C4=85g?= =?UTF-8?q?u=20mobilnego=20widoku=20aktywnych=20RJ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TrainsView/TrainInfo.vue | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/components/TrainsView/TrainInfo.vue b/src/components/TrainsView/TrainInfo.vue index 9b7a9b7..4c8ae49 100644 --- a/src/components/TrainsView/TrainInfo.vue +++ b/src/components/TrainsView/TrainInfo.vue @@ -253,10 +253,6 @@ export default defineComponent({ .train-stats { font-size: 1.1em; - - img { - display: none; - } } .train_general { From c2bd5a8a1b45775f6929f555dd58fd62c386322a Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Sep 2022 01:10:56 +0200 Subject: [PATCH 5/6] Poprawiono mobilny scroll bar --- src/styles/global.scss | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/styles/global.scss b/src/styles/global.scss index c46e3c9..68dd4a2 100644 --- a/src/styles/global.scss +++ b/src/styles/global.scss @@ -282,3 +282,18 @@ ul { transform: translateX(-50%); } } + +@include smallScreen { + ::-webkit-scrollbar { + width: 0.5em; + height: 0.5em; + + &-track { + background-color: #222; + } + + &-thumb { + background-color: #777; + } + } +} From 30ad3ad4f26686f3860331988eb6c9113e60858f Mon Sep 17 00:00:00 2001 From: Spythere Date: Sun, 4 Sep 2022 01:12:04 +0200 Subject: [PATCH 6/6] Bump wersji --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4f5f462..7f502d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stacjownik", - "version": "1.10.2", + "version": "1.10.3", "private": true, "scripts": { "dev": "vite",