diff --git a/src/App.vue b/src/App.vue
index 8a83456..edc1a02 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,47 +1,38 @@
-
-
-
-
-
- {{ $t('update.update-available-text') }}
- {{ $t('update.update-available-underline') }}
-
+
-
- © Spythere
- {{ new Date().getUTCFullYear() }} |
- v{{ appVersion }}
-
+
+
+
+
+
+
+
+
+
diff --git a/src/components/App/AppNavbar.vue b/src/components/App/AppNavbar.vue
new file mode 100644
index 0000000..fb62d1f
--- /dev/null
+++ b/src/components/App/AppNavbar.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/components/UpdateCard.vue b/src/components/Global/UpdateCard.vue
similarity index 98%
rename from src/components/UpdateCard.vue
rename to src/components/Global/UpdateCard.vue
index 9d2abd1..25a9ccf 100644
--- a/src/components/UpdateCard.vue
+++ b/src/components/Global/UpdateCard.vue
@@ -23,7 +23,7 @@
+
+
diff --git a/src/components/Order.vue b/src/components/Order.vue
index d271d8e..b951107 100644
--- a/src/components/Order.vue
+++ b/src/components/Order.vue
@@ -38,7 +38,7 @@ export default defineComponent({
});
-
diff --git a/src/components/Order/OrderFooter.vue b/src/components/Order/OrderFooter.vue
new file mode 100644
index 0000000..fb62d1f
--- /dev/null
+++ b/src/components/Order/OrderFooter.vue
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/components/Order/OrderHeader.vue b/src/components/Order/OrderHeader.vue
new file mode 100644
index 0000000..4967f5e
--- /dev/null
+++ b/src/components/Order/OrderHeader.vue
@@ -0,0 +1,85 @@
+
+
+
+
+ Rozkaz pisemny
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Order/OrderMainContent.vue b/src/components/Order/OrderMainContent.vue
new file mode 100644
index 0000000..495c665
--- /dev/null
+++ b/src/components/Order/OrderMainContent.vue
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
diff --git a/src/components/OrderHelper.vue b/src/components/OrderHelper.vue
deleted file mode 100644
index 900d81c..0000000
--- a/src/components/OrderHelper.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
Rozkazy pisemne - najczęstsze przypadki zastosowań w TD2
-
-
-
-
-
- Przetaczanie (manewr) taboru poza wskaźnik W 5 (granicy przetaczania)
-
- Rozkazu nie stosujemy w przypadku wyjazdu taboru na szlak dwutorowy, na którym
- odbywa się ruch w kierunku zasadniczym, tj. "prawostronnym". Dla wszystkich szlaków
- jednotorowych lub dwutorowych w sytuacji innej niż wymieniona wykorzystujemy działkę 4.
- rozkazu pisemnego "S".
- Szczegółowe informacje: instrukcja Ir-1 (R-1) § 12 pkt 4 "Manewry na torach
- głównych"
-
- Wygeneruj treść rozkazu
-
-
-
-
-
-
-
-
-
diff --git a/src/data/orderHelperData.json b/src/data/orderHelperData.json
deleted file mode 100644
index d662247..0000000
--- a/src/data/orderHelperData.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "orderS": ["D"]
-}
diff --git a/src/locales/pl.json b/src/locales/pl.json
index d9e01e7..512ffe3 100644
--- a/src/locales/pl.json
+++ b/src/locales/pl.json
@@ -68,5 +68,176 @@
"title": "Aktywne RJ i gracze na scenerii",
"subtitle": "Kliknij na gracza, aby wypełnić obecny rozkaz jego danymi",
"no-trains": "Brak pociągów do wyświetlenia"
+ },
+ "order": {
+ "title": "Rozkaz pisemny",
+ "header": {
+ "A": "A Nr pociągu {'|'} składu manewrowego",
+ "B": "B Data",
+ "C": "C Lokalizacja pociągu {'|'} składu manewrowego",
+ "D": "D Lokalizacja nadawcy"
+ },
+ "22": {
+ "text": "Dotyczy jazdy torem lewym",
+ "message-html": "Dotyczy jazdy torem lewym "
+ },
+ "99": {
+ "text": "Odwołanie rozkazu pisemnego",
+ "x1": "x.1 Identyfikator rozkazu pisemnego",
+ "message-html": "Odwołanie rozkazu pisemnego {0}"
+ },
+ "2110": {
+ "text": "{bold1} z toru nr {track1} z {signalbox1} {br} na tor nr {track2} w kierunku {signalbox2} {br} Pominięcie sygnałów stój {signal1} i {signal2} i {signal3}",
+ "bold1": "Zezwalam na wyjazd",
+ "track1": "x.1 tor",
+ "signalbox1": "x.2 posterunek",
+ "track2": "x.3 tor",
+ "signalbox2": "x.4 posterunek",
+ "signal1": "x.5 sygnalizator",
+ "signal2": "x.6 sygnalizator",
+ "signal3": "x.7 sygnalizator",
+ "message-html": "Zezwalam na wyjazd z toru nr {0} z {1} na tor nr {2} w kierunku {3}. Pominięcie sygnałów stój {4} i {5} i {6}"
+ },
+ "2115": {
+ "text": "{bold1} z toru nr {track1} do {signalbox1} na tor nr {track2} {br} Pominięcie sygnałów {signal1} i {signal2} i {signal3}",
+ "bold1": "Zezwalam na wjazd",
+ "track1": "x.1 tor",
+ "signalbox1": "x.2 posterunek",
+ "track2": "x.3 tor",
+ "signal1": "x.4 sygnalizator",
+ "signal2": "x.5 sygnalizator",
+ "signal3": "x.6 sygnalizator",
+ "message-html": "Zezwalam na wjazd z toru nr {0} do {1} na tor nr {2} Pominięcie sygnałów {3} i {4} i {5}"
+ },
+ "2120": {
+ "text": "Od {signalbox1} do {signalbox2} po torze {track1} {br} {highlight1} {br} {underline1}{highlight2}.",
+ "highlight1": "wskazania semaforów SBL są nieważne.",
+ "underline1": "Zachować ostrożność od semafora ze wskaźnikiem",
+ "highlight2": " W18",
+ "signalbox1": "x.1 posterunek",
+ "signalbox2": "x.2 posterunek",
+ "track1": "x.3 nr toru",
+ "message-html": "Od {0} do {1} po torze {2} wskazania semaforów SBL są nieważne. Zachować ostrożność od semafora ze wskaźnikiemW18. "
+ },
+ "2125": {
+ "text": "Zezwalam przejechać za {select1} w kierunku {signalbox1} torem {track1} do km {km1} do godz. {hour1}.",
+ "select1-a": "wskaźnik W5",
+ "select1-b": "ostatni rozjazd",
+ "signalbox1": "x.1 posterunek",
+ "track1": "x.2 tor",
+ "km1": "x.3 km",
+ "hour1": "x.4 godzina",
+ "message-html": "Zezwalam przejechać za {0} w kierunku {1} torem {2} do km {3} do godz. {4}."
+ },
+ "2135": {
+ "text": "{bold1} po torze nr {track1} w kierunku {signalbox1}.",
+ "bold1": "Zezwalam na kontynuacje jazdy",
+ "track1": "x.1 tor",
+ "signalbox1": "x.2 posterunek",
+ "message-html": "Zezwalam na kontynuacje jazdy po torze {0} w kierunku {1}"
+ },
+ "2140": {
+ "text": "{bold1} na posterunku/szlaku {signalbox1}{'|'}{signalbox2} w km {km1} celem {other1}",
+ "bold1": "Zatrzymanie pociągu",
+ "signalbox1": "x.1 posterunek",
+ "signalbox2": "x.2 posterunek",
+ "km1": "x.3 km",
+ "other1": "x.96 inne",
+ "message-html": "Zatrzymanie pociągu na posterunku/szlaku {0} {'|'} {1} w km {2} celem {3}"
+ },
+ "2145": {
+ "text": "Na {signalbox1} na sygnalizatorze {signal1} {bold1}",
+ "bold1": "sygnał zezwalający jest nieważny, zatrzymać pociąg przed tym sygnalizatorem.",
+ "signalbox1": "x.1 posterunek",
+ "signal1": "x.2 sygnalizator",
+ "message-html": "Na {0} na sygnalizatorze {1} sygnał zezwalający jest nieważny, zatrzymać pociąg przed tym sygnalizatorem. "
+ },
+ "2150": {
+ "text": "{bold1} przejazdowych na posterunku/szlaku {br} {signalbox1} / {signalbox2} odnoszących się do przejazdu w km {km1}{br}{bold2}",
+ "bold1": "Wskazania tarcz ostrzegawczych",
+ "bold2": "są nieważne. Jazda z prędkością rozkładową.",
+ "signalbox1": "x.1 posterunek",
+ "signalbox2": "x.2 posterunek",
+ "km1": "x.3 km",
+ "message-html": "Wskazania tarcz ostrzegawczych przejazdowych na posterunku/szlaku {1} / {2} odnoszących się do przejazdu w km {3}, są nieważne. Jazda z prędkością rozkładową. "
+ },
+ "2155": {
+ "text": "Uszkodzone urządzenia SHP na {0} {1}|{2} odnoszące się do sygnalizatora {3}.",
+ "choice-1-a": "posterunku",
+ "choice-1-b": "szlaku",
+ "x1": "x.1 posterunek",
+ "x2": "x.2 posterunek",
+ "x3": "x.3 sygnalizator"
+ },
+ "2160": {
+ "text": "Zmiana trasy na odcinku od {0} do {1}, jazda przez {2} linią {3} z prędkością {4}.",
+ "x1": "x.1 posterunek",
+ "x2": "x.2 posterunek",
+ "x3": "x.3 posterunek",
+ "x4": "x.4 linia",
+ "x5": "x.5 km/h"
+ },
+ "2165": {
+ "text": "Jazda z opuszczonymi pantografami na odcinku od {0} do {1}.",
+ "x1": "x.1 km",
+ "x2": "x.2 km"
+ },
+ "2170": {
+ "text": "Na odcinku od {0} do {1} linii nr {2} jazda pociągu z łącznością analogową. ",
+ "x1": "x.1 posterunek",
+ "x2": "x.2 posterunek",
+ "x3": "x.2 linia"
+ },
+ "2180": {
+ "text": "Polecam jazdę po torze zamkniętym nr {0} w kierunku {1} do km {2} zjazd do {3} do godz. {4}",
+ "x1": "x.1 tor",
+ "x2": "x.2 posterunek",
+ "x3": "x.3 km",
+ "x4": "x.4 posterunek",
+ "x5": "x.5 godzina"
+ },
+ "2181": {
+ "text": "Tor zamknięty wolny od taboru "
+ },
+ "2182": {
+ "text": "Na torze pracuje pociąg {0} w km {1}",
+ "x1": "x.1 numer pociągu",
+ "x2": "x.2 km"
+ },
+ "2183": {
+ "text": "Na tor zostanie wyprawiony pociąg {0} do km {1}",
+ "x1": "x.1 numer pociągu",
+ "x2": "x.2 km"
+ },
+ "2185": {
+ "text": "Zezwalam na wstawienie PSD na tor nr {0} w km {1} na szlaku | {2} | {3}",
+ "x1": "x.1 tor",
+ "x2": "x.2 km",
+ "x3": "x.3 posterunek",
+ "x4": "x.4 posterunek"
+ },
+ "23.10": {
+ "text": "Nie przekraczać prędkości i zachować ostrożność: ",
+ "message-line-2": "Na posterunku/szlaku {0}/{1} tor nr {2} v {3} od {4} do {5} {6}",
+ "x1": "x.{0} posterunek",
+ "x2": "x.{0} posterunek",
+ "x3": "x.{0} tor",
+ "x4": "x.{0} km/h",
+ "x5": "x.{0} km",
+ "x6": "x.{0} km",
+ "x7": "x.{0} przyczyna"
+ },
+ "23.11": {
+ "text": "Podawać sygnał „Baczność” "
+ },
+ "23.20": {
+ "x96": "x.96 inne"
+ },
+ "footer": {
+ "V": "V Identyfikator maszynisty",
+ "W": "W Identyfikator nadawcy",
+ "Y": "Y Godzina",
+ "Z": "Z Identyfikator rozkazu pisemnego"
+ }
}
}
\ No newline at end of file
diff --git a/src/store/store.ts b/src/store/store.ts
index b274d95..7f586ca 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -10,13 +10,13 @@ export const useStore = defineStore('store', {
state: () => {
return {
currentAppLocale: 'pl',
-
+
appUpdateData: {
version: '',
changelog: '',
releaseURL: ''
},
-
+
updateCardOpen: false,
helperModalOpen: false,
orderDarkMode: false,
@@ -24,6 +24,129 @@ export const useStore = defineStore('store', {
chosenOrderType: 'orderN' as TOrder,
chosenLocalOrderId: '',
+ orderData: {
+ header: {
+ A: '',
+ B: '',
+ C: '',
+ D: ''
+ },
+ instructions: [
+ {
+ key: '22',
+ name: '22',
+ active: false,
+ inputFields: {},
+ optionalFieldNames: []
+ },
+ {
+ key: '99',
+ name: '99',
+ active: false,
+ inputFields: {
+ x1: ''
+ },
+ optionalFieldNames: []
+ },
+ {
+ key: '2110',
+ name: '21.10',
+ active: false,
+ inputFields: {
+ track1: '',
+ signalbox1: '',
+ track2: '',
+ signalbox2: '',
+ signal1: '',
+ signal2: '',
+ signal3: ''
+ },
+ optionalFieldNames: ['signal1', 'signal2', 'signal3']
+ },
+ {
+ key: '2115',
+ name: '21.15',
+ active: false,
+ inputFields: {
+ track1: '',
+ signalbox1: '',
+ track2: '',
+ signal1: '',
+ signal2: '',
+ signal3: ''
+ },
+ optionalFieldNames: ['signal1', 'signal2', 'signal3']
+ },
+ {
+ key: '2120',
+ name: '21.20',
+ active: false,
+ inputFields: {
+ track1: '',
+ signalbox1: '',
+ signalbox2: ''
+ }
+ },
+ {
+ key: '2125',
+ name: '21.25',
+ active: false,
+ inputFields: {
+ select1: 'select1-a',
+ signalbox1: '',
+ track1: '',
+ km1: '',
+ hour1: ''
+ },
+ selectFields: {
+ select1: {
+ options: ['select1-a', 'select1-b']
+ }
+ }
+ },
+ {
+ key: '2135',
+ name: '21.35',
+ active: false,
+ inputFields: {
+ track1: '',
+ signalbox1: ''
+ }
+ },
+ {
+ key: '2140',
+ name: '21.40',
+ active: false,
+ inputFields: {
+ signalbox1: '',
+ signalbox2: '',
+ km1: '',
+ other1: ''
+ },
+ optionalFieldNames: ['signalbox2']
+ },
+ {
+ key: '2145',
+ name: '21.45',
+ active: false,
+ inputFields: {
+ signalbox1: '',
+ signal1: ''
+ }
+ },
+ {
+ key: '2150',
+ name: '21.50',
+ active: false,
+ inputFields: {
+ signalbox1: '',
+ signalbox2: '',
+ km1: ''
+ }
+ }
+ ]
+ },
+
orderMode: 'OrderMessage',
orderFooter: {
diff --git a/src/styles/_order.scss b/src/styles/_order.scss
new file mode 100644
index 0000000..f96d564
--- /dev/null
+++ b/src/styles/_order.scss
@@ -0,0 +1,192 @@
+@use 'colors';
+
+$darkModeTextCol: #eee;
+
+.order {
+ width: 100%;
+ background-color: white;
+ color: black;
+
+ &.dark {
+ background-color: colors.$bgColDarker;
+ color: $darkModeTextCol;
+ }
+
+ @media screen and (max-width: 550px) {
+ font-size: 3vw;
+ }
+}
+
+table.order-table {
+ width: 100%;
+ overflow: auto;
+
+ border: 2px solid black;
+ border-collapse: collapse;
+
+ td {
+ border: 2px solid black;
+ border-collapse: collapse;
+ line-height: 1.25em;
+
+ text-align: justify;
+ vertical-align: top;
+ }
+}
+
+input.order-input {
+ max-width: 100%;
+ background-color: transparent;
+ outline: none;
+ border: none;
+ font-size: 1em;
+
+ text-align: center;
+ border-bottom: 2px dotted black;
+
+ &:focus-visible {
+ border-bottom: 2px solid colors.$accentCol;
+ }
+
+ &.row-checkbox + input::placeholder {
+ color: red;
+ }
+
+ &[type='checkbox']:focus-visible,
+ &[type='radio']:focus-visible {
+ outline: 2px solid colors.$accentCol;
+ }
+
+ &[type='checkbox'],
+ &[type='radio'] {
+ margin-top: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.8em;
+ color: black;
+ }
+}
+
+label.order-input-label {
+ display: block;
+ margin-top: 0.5rem;
+ font-size: 0.8rem;
+}
+
+select.order-select {
+ margin-top: 0.5em;
+ margin-right: 0.5em;
+ font-size: 0.8em;
+ color: black;
+}
+
+textarea.order-textarea {
+ width: 100%;
+ min-height: 200px;
+ resize: vertical;
+
+ &:focus-visible {
+ outline: 2px solid colors.$accentCol;
+ }
+}
+
+// Dark mode
+.order.dark {
+ input.order-input {
+ border-color: $darkModeTextCol !important;
+ color: $darkModeTextCol !important;
+
+ &:focus-visible {
+ border-bottom: 2px solid colors.$accentCol !important;
+ }
+
+ &::placeholder {
+ color: #ccc !important;
+ }
+ }
+
+ select.order-select {
+ color: $darkModeTextCol !important;
+ border-color: $darkModeTextCol;
+
+ &:focus-visible {
+ border-color: colors.$accentCol;
+ }
+ }
+
+ select.order-select option,
+ textarea.order-textarea {
+ color: $darkModeTextCol !important;
+ border-color: $darkModeTextCol !important;
+ background-color: colors.$bgColDarker !important;
+ }
+
+ .horizontal-bar {
+ background-color: white;
+ }
+
+ .order_header,
+ .order_other,
+ table.order-table,
+ tr,
+ td {
+ border-color: $darkModeTextCol !important;
+ }
+}
+
+/* Instruction Checkbox */
+.order-instruction-checkbox {
+ display: block;
+ position: relative;
+ text-align: center;
+ cursor: pointer;
+ font-weight: bold;
+
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+
+ & > input {
+ position: absolute;
+ opacity: 0;
+ height: 0;
+ width: 0;
+ cursor: pointer;
+
+ &:checked ~ .checkmark:after {
+ content: 'X';
+ }
+
+ &:focus-visible ~ .text {
+ text-decoration: underline;
+ outline: 1px solid black;
+ }
+ }
+
+ .checkmark {
+ display: block;
+ position: relative;
+
+ margin: 0 auto;
+ margin-bottom: 0.35em;
+
+ height: 1.3em;
+ width: 1.3em;
+ background-color: #eee;
+ border: 2px solid black;
+
+ background-color: gold;
+
+ &:after {
+ position: absolute;
+ content: '';
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+
+ &:hover input ~ .checkmark {
+ background-color: #ffe44b;
+ }
+}
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 9a48ec9..72cbad0 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -4,16 +4,15 @@
-
-
+
-
+
import { defineComponent } from 'vue';
-import OrderVue from '../components/Order.vue';
+import Order from '../components/Order/Order.vue';
import SideBar from '../components/SideBar.vue';
import OrderMessage from '../components/OrderMessage.vue';
import OrderList from '../components/OrderList.vue';
import { useStore } from '../store/store';
-import OrderHelper from '../components/OrderHelper.vue';
import OrderTrainPicker from '../components/OrderTrainPicker.vue';
import { LanguagesIcon } from 'lucide-vue-next';
import StorageManager from '../managers/storageManager';
export default defineComponent({
- components: { OrderVue, SideBar, OrderHelper, LanguagesIcon },
+ components: { Order, SideBar, LanguagesIcon },
data() {
return {
@@ -137,8 +135,8 @@ export default defineComponent({
}
.order_container {
- width: 100%;
- max-width: 600px;
+ width: 800px;
+ overflow: auto;
display: flex;
align-items: start;