Setup firebase; poprawki generatora

This commit is contained in:
2022-07-17 14:01:36 +02:00
parent 6dc5cb5c17
commit 9e021fab6c
13 changed files with 650 additions and 2328 deletions
+5
View File
@@ -0,0 +1,5 @@
{
"projects": {
"default": "genera-tor"
}
}
@@ -0,0 +1,20 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools
name: Deploy to Firebase Hosting on merge
'on':
push:
branches:
- main
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm ci && npm run build
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_GENERA_TOR }}'
channelId: live
projectId: genera-tor
@@ -0,0 +1,17 @@
# This file was auto-generated by the Firebase CLI
# https://github.com/firebase/firebase-tools
name: Deploy to Firebase Hosting on PR
'on': pull_request
jobs:
build_and_preview:
if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm ci && npm run build
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: '${{ secrets.GITHUB_TOKEN }}'
firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_GENERA_TOR }}'
projectId: genera-tor
+1 -1
View File
@@ -1,7 +1,7 @@
.DS_Store .DS_Store
node_modules node_modules
/dist /dist
.log
# local env files # local env files
.env.local .env.local
+16
View File
@@ -0,0 +1,16 @@
{
"hosting": {
"public": "dist",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
]
}
}
+2 -2
View File
@@ -1,11 +1,11 @@
{ {
"name": "genera-tor", "name": "genera-tor",
"version": "0.1.0", "version": "0.1.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"version": "0.1.0", "version": "0.1.1",
"dependencies": { "dependencies": {
"core-js": "^3.6.5", "core-js": "^3.6.5",
"pinia": "^2.0.14", "pinia": "^2.0.14",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "genera-tor", "name": "genera-tor",
"version": "0.1.0", "version": "0.1.1",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
+9 -2
View File
@@ -1,6 +1,6 @@
<template> <template>
<div class="rozkaz"> <div class="rozkaz">
<OrderN v-if="orderType == 'N'" /> <OrderN @generate-message="generateMessage" v-if="orderType == 'N'" />
<OrderS v-if="orderType == 'S'" /> <OrderS v-if="orderType == 'S'" />
<section class="info"> <section class="info">
@@ -62,7 +62,7 @@ export default defineComponent({
data() { data() {
return { return {
orderType: 'S', orderType: 'N',
}; };
}, },
@@ -70,9 +70,16 @@ export default defineComponent({
const store = useStore(); const store = useStore();
return { return {
store,
info: store.orderInfo, info: store.orderInfo,
}; };
}, },
methods: {
generateMessage(orderBody: string) {
this.store.orderMessage = orderBody;
},
},
}); });
</script> </script>
+185 -19
View File
@@ -1,5 +1,5 @@
<template> <template>
<section class="header"> <section class="header" ref="header">
<h2 class="flex-center"> <h2 class="flex-center">
Rozkaz pisemny "N" nr Rozkaz pisemny "N" nr
<input type="text" v-model="order.header.orderNo" /> <input type="text" v-model="order.header.orderNo" />
@@ -15,7 +15,12 @@
<table class="options-table"> <table class="options-table">
<tbody> <tbody>
<tr> <tr>
<td>1</td> <td>
<label for="row-enabled-1">1</label>
<div>
<input type="checkbox" id="row-enabled-1" v-model="order.row1.enabled" />
</div>
</td>
<td> <td>
Od <input type="text" v-model="order.row1.from" /> do <input type="text" v-model="order.row1.to" /> tor nr Od <input type="text" v-model="order.row1.from" /> do <input type="text" v-model="order.row1.to" /> tor nr
<input type="text" v-model="order.row1.trackNo" /> jest zamknięty, ruch jednotorowy dwukierunkowy <input type="text" v-model="order.row1.trackNo" /> jest zamknięty, ruch jednotorowy dwukierunkowy
@@ -24,12 +29,17 @@
</tr> </tr>
<tr> <tr>
<td>2</td> <td>
<label for="row-enabled-2">2</label>
<div>
<input type="checkbox" id="row-enabled-2" v-model="order.row2.enabled" />
</div>
</td>
<td> <td>
<strong>ZEZWALAM</strong> po otrzymaniu <strong>ZEZWALAM</strong> po otrzymaniu
<select id="select-2a" v-model="order.row2.option1"> <select id="select-2a" v-model="order.row2.option1">
<option value="signal">sygnału "Nakaz Jazdy"</option> <option value='sygnału "Nakaz Jazdy"'>sygnału "Nakaz Jazdy"</option>
<option value="order">tylko tego rozkazu pisemnego</option> <option value="tylko tego rozkazu pisemnego">tylko tego rozkazu pisemnego</option>
</select> </select>
<div style="margin-top: 0.5rem"> <div style="margin-top: 0.5rem">
@@ -43,13 +53,49 @@
/> />
<label for="checkbox-2a"> <label for="checkbox-2a">
przejechać obok wskazującego sygnał "Stój" semafora wyjazdowego <input type="text" /> i wyjechać w przejechać obok wskazującego sygnał "Stój" semafora
kierunku <input type="text" /> na tor szlakowy
<div style="margin-left: 1rem">
<input
type="radio"
name="section-2a"
id="radio-2a-1"
value="wyjazdowego"
v-model="order.row2.signalType"
/>
<label for="radio-2a-1">wyjazdowego <input type="text" v-model="order.row2.signal1" /> </label>
<br />
<input
type="radio"
name="section-2a"
id="radio-2a-2"
value="drogowskazowego"
v-model="order.row2.signalType"
/>
<label for="radio-2a-2"
>drogowskazowego <input type="text" v-model="order.row2.signal2" /> (odnoszącego się do wyjazdu
pociągu)
</label>
<br />
<input
type="radio"
name="section-2a"
id="radio-2a-3"
value="wjazdowego"
v-model="order.row2.signalType"
/>
<label for="radio-2a-3"
>wjazdowego <input type="text" v-model="order.row2.signal3" /> na post. odg. bez sem.
wyjazdowego</label
>
</div>
i wyjechać w kierunku <input type="text" v-model="order.row2.direction" /> na tor szlakowy
<select v-model="order.row2.option2"> <select v-model="order.row2.option2">
<option value="lewy">lewy</option> <option value="lewy">lewy</option>
<option value="prawy">prawy</option> <option value="prawy">prawy</option>
</select> </select>
nr <input type="text" /> nr <input type="text" v-model="order.row2.trackNoTo1" />
</label> </label>
</div> </div>
@@ -64,24 +110,29 @@
/> />
<label for="checkbox-2b"> <label for="checkbox-2b">
z toru nr <input type="text" /> nie posiadającego semafora wyjazdowego wyjechać w kierunku z toru nr <input type="text" v-model="order.row2.trackNoFrom" /> nie posiadającego semafora wyjazdowego
<input type="text" /> na tor szlakowy wyjechać w kierunku <input type="text" /> na tor szlakowy
<select v-model="order.row2.option3"> <select v-model="order.row2.option3">
<option value="lewy">lewy</option> <option value="lewy">lewy</option>
<option value="prawy">prawy</option> <option value="prawy">prawy</option>
</select> </select>
nr <input type="text" /> nr <input type="text" v-model="order.row2.trackNoTo2" />
</label> </label>
</div> </div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td>3</td> <td>
<label for="row-enabled-3">3</label>
<div>
<input type="checkbox" id="row-enabled-3" v-model="order.row3.enabled" />
</div>
</td>
<td> <td>
<select v-model="order.row3.option1"> <select v-model="order.row3.option1">
<option value="jazda">Jazda</option> <option value="Jazda">Jazda</option>
<option value="popychanie">Popychanie</option> <option value="Popychanie">Popychanie</option>
</select> </select>
pociągu odbędzie się w kierunku: <input type="text" v-model="order.row3.direction" /> do km pociągu odbędzie się w kierunku: <input type="text" v-model="order.row3.direction" /> do km
<input type="text" v-model="order.row3.toKilometer" /> skąd <input type="text" v-model="order.row3.toKilometer" /> skąd
@@ -96,7 +147,12 @@
</tr> </tr>
<tr> <tr>
<td>4</td> <td>
<label for="row-enabled-4">4</label>
<div>
<input type="checkbox" id="row-enabled-4" v-model="order.row4.enabled" />
</div>
</td>
<td> <td>
<strong>WJAZD</strong> z toru szlakowego nr <input type="text" v-model="order.row4.trackNo" /> na <strong>WJAZD</strong> z toru szlakowego nr <input type="text" v-model="order.row4.trackNo" /> na
<select v-model="order.row4.optionStation"> <select v-model="order.row4.optionStation">
@@ -109,7 +165,7 @@
<input type="radio" name="section-4" id="checkbox-4a" value="checkbox-4a" v-model="order.row4.checkbox" /> <input type="radio" name="section-4" id="checkbox-4a" value="checkbox-4a" v-model="order.row4.checkbox" />
<label for="checkbox-4a"> <label for="checkbox-4a">
sygnału zastępczego "Sz" na osobnym urządzeniu ustawionym z sygnału zastępczego "Sz" na osobnym urządzeniu ustawionym z
<select> <select v-model="order.row4.side">
<option value="lewej">lewej</option> <option value="lewej">lewej</option>
<option value="prawej">prawej</option> <option value="prawej">prawej</option>
</select> </select>
@@ -127,14 +183,20 @@
</tr> </tr>
<tr> <tr>
<td>5</td> <td>
<label for="row-enabled-5">5</label>
<div>
<input type="checkbox" id="row-enabled-5" v-model="order.row5.enabled" />
</div>
</td>
<td> <td>
<strong>ZEZWALAM</strong> wjechać z toru szlakowego nr <input type="text" v-model="order.row5.trackNo" /> z <strong>ZEZWALAM</strong> wjechać z toru szlakowego nr <input type="text" v-model="order.row5.trackNo" /> z
kierunku <input type="text" v-model="order.row5.direction" /> na kierunku <input type="text" v-model="order.row5.direction" /> na
<select v-model="order.row5.stationOption"> <select v-model="order.row5.stationType">
<option value="stację">stację</option> <option value="stację">stację</option>
<option value="posterunek odgałęźny">posterunek odgałęźny</option> <option value="posterunek odgałęźny">posterunek odgałęźny</option>
</select> </select>
<input type="text" v-model="order.row5.stationName" />
i przejechać obok sygnału "Stój" na <input type="text" v-model="order.row5.on" /> i przejechać obok sygnału "Stój" na <input type="text" v-model="order.row5.on" />
</td> </td>
</tr> </tr>
@@ -145,15 +207,119 @@
<script lang="ts"> <script lang="ts">
import { useStore } from '@/store/store'; import { useStore } from '@/store/store';
import { defineComponent } from 'vue'; import { defineComponent, watch } from 'vue';
export default defineComponent({ export default defineComponent({
emits: ['generateMessage'],
setup() { setup() {
const store = useStore(); const store = useStore();
return { return {
order: store.orderN, order: store.orderN,
message: store.orderMessage,
}; };
}, },
watch: {
order: {
deep: true,
handler() {
this.generateMessage();
},
},
},
methods: {
generateMessage() {
let message = this.generateHeaderMessage();
if (this.order.row1.enabled) message += this.generate1stRowMessage();
if (this.order.row2.enabled) message += this.generate2ndRowMessage();
if (this.order.row3.enabled) message += this.generate3rdRowMessage();
if (this.order.row4.enabled) message += this.generate4thRowMessage();
if (this.order.row5.enabled) message += this.generate5thRowMessage();
this.$emit('generateMessage', message);
// const row1Message = `Od ${header.} do tor nr jest zamknięty, ruch jednotorowy dwukierunkowy wprowadzono po torze nr `
},
generateHeaderMessage() {
const { header } = this.order;
const message = `<i>Rozkaz pisemny "N" nr ${header.orderNo || '_'} dla pociągu nr ${header.trainNo || '_'} dnia ${
header.date
} ${new Date().getUTCFullYear()}r.</i>`;
return message;
},
generate1stRowMessage() {
const { row1 } = this.order;
const message = ` <b> [ 1 ] </b> Od ${row1.from || '_'} do ${row1.to || '_'} tor nr ${
row1.trackNo || '_'
} jest zamknięty, ruch jednotorowy dwukierunkowy wprowadzono po torze nr ${row1.trackNo2 || '_'}`;
return message;
},
generate2ndRowMessage() {
const { row2 } = this.order;
let message = ` <b> [ 2 ] </b> <b>ZEZWALAM</b> po otrzymaniu ${row2.option1 || '_'}`;
if (row2.checkbox == 'checkbox-2a') {
message += ` przejechać obok wskazującego sygnał "Stój" semafora ${row2.signalType || '_'} `;
if (row2.signalType == 'wyjazdowego') message += row2.signal1;
if (row2.signalType == 'drogowskazowego')
message += `${row2.signal2 || '_'} (odnoszącego się do wyjazdu pociągu)`;
if (row2.signalType == 'wjazdowego') message += `${row2.signal3 || '_'} na post. odg. bez sem. wyjazdowego`;
message += ` i wyjechać w kierunku ${row2.direction || '_'} na tor szlakowy ${row2.option2 || '_'} nr ${
row2.trackNoTo1 || '_'
}`;
}
if (row2.checkbox == 'checkbox-2b') {
message += ` z toru nr ${row2.trackNoFrom || '_'} nie posiadającego semafora wyjazdowego wyjechać w kierunku ${
row2.trackNoTo2 || '_'
} na tor szlakowy ${row2.option3 || '_'}`;
}
return message;
},
generate3rdRowMessage() {
const { row3 } = this.order;
let message = ` <b> [ 3 ] </b> ${row3.option1} pociągu odbędzie się w kierunku: ${row3.direction} do km ${row3.toKilometer} skąd ${row3.option2} ma wrócić po torze lewym nr ${row3.trackNo} najpóźniej o godz. ${row3.untilHour} min. ${row3.untilMin}`;
return message;
},
generate4thRowMessage() {
const { row4 } = this.order;
let message = ` <b> [ 4 ] </b> <b>WJAZD</b> z toru szlakowego nr ${row4.trackNo} na ${row4.optionStation} ${row4.stationName} odbędzie się po otrzymaniu: `;
if (row4.checkbox == 'checkbox-4a')
message += `sygnału zastępczego "Sz" na osobnym urządzeniu ustawionym z ${row4.side} strony toru`;
if (row4.checkbox == 'checkbox-4b')
message += 'rozkazu pisemnego "N" (doręczonego lub przekazanego przez urządzenia łączności)';
return message;
},
generate5thRowMessage() {
const { row5 } = this.order;
const message = ` <b> [ 5 ] </b> <b>ZEZWALAM</b> wjechać z toru szlakowego nr ${row5.trackNo} z kierunku ${row5.direction} na ${row5.stationType} ${row5.stationName} i przejechać obok sygnału "Stój" na ${row5.on} `;
return message;
},
},
}); });
</script> </script>
+7
View File
@@ -0,0 +1,7 @@
{
"orderN": {
"header": "Rozkaz pisemny \"N\" nr {0} dla pociągu nr {1} dnia {2} {3}r.",
"row1": "1. Od {0} do {1} tor nr {2} jest zamknięty, ruch jednotorowy dwukierunkowy wprowadzono po torze nr {3}",
"row2": "2. ZEZWALAM po otrzymaniu ${0}"
}
}
+20 -3
View File
@@ -12,6 +12,8 @@ export const useStore = defineStore('store', {
secondaryDispatcherName: '', secondaryDispatcherName: '',
}, },
orderMessage: '',
orderN: { orderN: {
header: { header: {
orderNo: '', orderNo: '',
@@ -20,6 +22,7 @@ export const useStore = defineStore('store', {
}, },
row1: { row1: {
enabled: false,
from: '', from: '',
to: '', to: '',
trackNo: '', trackNo: '',
@@ -27,14 +30,24 @@ export const useStore = defineStore('store', {
}, },
row2: { row2: {
option1: 'signal', enabled: false,
option1: 'sygnału "Nakaz Jazdy"',
option2: 'lewy', option2: 'lewy',
option3: 'lewy', option3: 'lewy',
signal1: '',
signal2: '',
signal3: '',
signalType: 'wyjazdowego',
checkbox: 'checkbox-2a', checkbox: 'checkbox-2a',
direction: '',
trackNoFrom: '',
trackNoTo1: '',
trackNoTo2: '',
}, },
row3: { row3: {
option1: 'jazda', enabled: false,
option1: 'Jazda',
option2: 'pociąg', option2: 'pociąg',
direction: '', direction: '',
@@ -45,16 +58,20 @@ export const useStore = defineStore('store', {
}, },
row4: { row4: {
enabled: false,
trackNo: '', trackNo: '',
optionStation: 'stację', optionStation: 'stację',
stationName: '', stationName: '',
checkbox: 'checkbox-4a', checkbox: 'checkbox-4a',
side: 'lewej',
}, },
row5: { row5: {
enabled: false,
trackNo: '', trackNo: '',
direction: '', direction: '',
stationOption: 'stację', stationType: 'stację',
stationName: '',
on: '', on: '',
}, },
}, },
+39 -4
View File
@@ -1,16 +1,34 @@
<template> <template>
<div class="home"> <div class="home">
<Order /> <Order />
<div class="generated-message">
Wygenerowana wiadomość:
<div v-html="store.orderMessage"></div>
</div>
<button @click="copyMessage">Kopiuj wiadomość rozkazu</button>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import Order from "@/components/Order.vue"; import Order from '@/components/Order.vue';
import { useStore } from '@/store/store';
export default defineComponent({ export default defineComponent({
components: { Order }, components: { Order },
setup() {
return {
store: useStore(),
};
},
methods: {
copyMessage() {
navigator.clipboard.writeText(this.store.orderMessage);
},
},
}); });
</script> </script>
@@ -20,9 +38,26 @@ export default defineComponent({
justify-content: center; justify-content: center;
align-items: center; align-items: center;
min-height: 100vh;
overflow-x: auto; overflow-x: auto;
} }
.container {
display: flex;
align-items: start;
}
.generated-message {
position: sticky;
top: 0;
padding: 1em 0.5em;
text-align: justify;
margin-left: 1em;
width: 450px;
height: auto;
border: 1px solid white;
// user-select: none;
}
</style> </style>
+328 -2296
View File
File diff suppressed because it is too large Load Diff