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 @@ + + 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 @@ + + + + + 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 @@ - - - - - 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 @@
- - +
-