diff --git a/src/assets/icon-save.svg b/src/assets/icon-save.svg
new file mode 100644
index 0000000..ad0d090
--- /dev/null
+++ b/src/assets/icon-save.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/components/Order.vue b/src/components/Order.vue
index d1ec4ec..33e2c0d 100644
--- a/src/components/Order.vue
+++ b/src/components/Order.vue
@@ -33,11 +33,11 @@ export default defineComponent({
computed: {
chosenOrderComponent() {
switch (this.store.chosenOrderType) {
- case 'OrderN':
+ case 'orderN':
return OrderNVue;
- case 'OrderS':
+ case 'orderS':
return OrderSVue;
- case 'OrderO':
+ case 'orderO':
return OrderOVue;
default:
return OrderNVue;
diff --git a/src/components/OrderList.vue b/src/components/OrderList.vue
new file mode 100644
index 0000000..9460b13
--- /dev/null
+++ b/src/components/OrderList.vue
@@ -0,0 +1,118 @@
+
+
+ Zapisane rozkazy pisemne ({{ localOrderCount }})
+
+
+ -
+
+ {{ getOrderName(order.orderType) }} nr {{ order.orderBody['header']['orderNo'] }} dla pociągu nr
+ {{ order.orderBody['header']['trainNo'] }}
+
+
+ Dodano: {{ new Date(order.createdAt).toLocaleString('pl-PL') }}
+
+
+
+
+
+
+
+
diff --git a/src/components/OrderMessage.vue b/src/components/OrderMessage.vue
new file mode 100644
index 0000000..b8856e3
--- /dev/null
+++ b/src/components/OrderMessage.vue
@@ -0,0 +1,174 @@
+
+
+ Wiadomość do wyświetlenia na czacie symulatora:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/OrderN.vue b/src/components/OrderN.vue
index e0ebb1b..ee9990a 100644
--- a/src/components/OrderN.vue
+++ b/src/components/OrderN.vue
@@ -312,7 +312,7 @@ export default defineComponent({
return {
store,
- order: store.orderN,
+ order,
rowMethods,
};
},
diff --git a/src/components/OrderO.vue b/src/components/OrderO.vue
index 3800420..76ae5f0 100644
--- a/src/components/OrderO.vue
+++ b/src/components/OrderO.vue
@@ -96,7 +96,7 @@ export default defineComponent({
return {
store,
- order: store.orderO,
+ order,
rowMethods,
};
},
diff --git a/src/components/OrderS.vue b/src/components/OrderS.vue
index cbda32c..f70d4f2 100644
--- a/src/components/OrderS.vue
+++ b/src/components/OrderS.vue
@@ -215,7 +215,7 @@ export default defineComponent({
return {
store,
- order: store.orderS,
+ order,
rowMethods,
};
},
diff --git a/src/components/SideBar.vue b/src/components/SideBar.vue
index 257cae7..33ef849 100644
--- a/src/components/SideBar.vue
+++ b/src/components/SideBar.vue
@@ -11,6 +11,11 @@
+
+
@@ -19,20 +24,24 @@
import { defineComponent } from 'vue';
import { useStore } from '../store/store';
+import saveIcon from '../assets/icon-save.svg';
+
export default defineComponent({
data() {
return {
+ saveIcon,
+
orderTypeList: [
{
- id: 'OrderN',
+ id: 'orderN',
name: 'N',
},
{
- id: 'OrderS',
+ id: 'orderS',
name: 'S',
},
{
- id: 'OrderO',
+ id: 'orderO',
name: 'O',
},
],
@@ -45,9 +54,13 @@ export default defineComponent({
},
methods: {
- selectOrderType(type: string) {
+ selectOrderType(type: any) {
this.store.chosenOrderType = type;
},
+
+ toggleOrderMode() {
+ this.store.orderMode = this.store.orderMode == 'OrderMessage' ? 'OrderList' : 'OrderMessage';
+ },
},
});
@@ -67,7 +80,7 @@ export default defineComponent({
.sidebar_content {
display: grid;
- grid-template-rows: repeat(3, 1fr);
+ grid-template-rows: repeat(4, 1fr);
gap: 0.25em;
font-size: 1.5em;
@@ -111,6 +124,19 @@ export default defineComponent({
}
}
+button.option-save {
+ background-color: $accentCol;
+
+ img {
+ width: 80%;
+ height: 80%;
+ }
+
+ &[data-selected='true'] .bar {
+ background-color: #111;
+ }
+}
+
@media screen and (max-width: 650px) {
.sidebar {
left: 50%;
@@ -121,10 +147,10 @@ export default defineComponent({
.sidebar_content {
grid-template-rows: 1fr;
- grid-template-columns: repeat(3, 1fr);
+ grid-template-columns: repeat(4, 1fr);
& > button {
- height: 50px;
+ height: 60px;
width: 60px;
.bar {
diff --git a/src/mixins/orderStorageMixin.ts b/src/mixins/orderStorageMixin.ts
new file mode 100644
index 0000000..2139995
--- /dev/null
+++ b/src/mixins/orderStorageMixin.ts
@@ -0,0 +1,59 @@
+import { defineComponent } from 'vue';
+import { useStore } from '../store/store';
+import { LocalStorageOrder } from '../types/orderTypes';
+
+export default defineComponent({
+ setup() {
+ return {
+ store: useStore(),
+ };
+ },
+
+ methods: {
+ saveOrderToStorage() {
+ let orderObj: LocalStorageOrder = {
+ orderType: this.store.chosenOrderType ,
+ orderBody: {},
+ orderFooter: this.store.orderFooter,
+ createdAt: Date.now(),
+ };
+
+ switch (this.store.chosenOrderType) {
+ case 'orderN':
+ orderObj['orderBody'] = this.store.orderN;
+ break;
+ case 'orderS':
+ orderObj['orderBody'] = this.store.orderS;
+ break;
+ case 'orderO':
+ orderObj['orderBody'] = this.store.orderO;
+ break;
+
+ default:
+ break;
+ }
+
+ const headerInfo = orderObj['orderBody']['header'];
+
+ if (!headerInfo['orderNo']) return -1;
+ if (!headerInfo['trainNo']) return -1;
+ if (!headerInfo['date']) return -1;
+
+ const localStorage = window.localStorage;
+ const localOrderCount = localStorage.getItem('orderCount') || '0';
+
+ if (localOrderCount == '0') localStorage.setItem('orderCount', '0');
+
+ const prevLocalOrder = localStorage.getItem(`order-${Number(localOrderCount)}`);
+ if (prevLocalOrder && prevLocalOrder == JSON.stringify(orderObj)) {
+ return 0;
+ }
+
+ const nextOrderCount = Number(localOrderCount) + 1;
+ localStorage.setItem('orderCount', `${nextOrderCount}`);
+ localStorage.setItem(`order-${nextOrderCount}`, JSON.stringify(orderObj));
+
+ return 1;
+ },
+ },
+});
diff --git a/src/store/store.ts b/src/store/store.ts
index 9670772..d576896 100644
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@ -3,7 +3,8 @@ import { defineStore } from 'pinia';
export const useStore = defineStore('store', {
state: () => {
return {
- chosenOrderType: 'OrderN',
+ chosenOrderType: 'orderN' as 'orderO' | 'orderS' | 'orderN',
+ orderMode: 'OrderMessage',
orderFooter: {
stationName: '',
@@ -180,3 +181,4 @@ export const useStore = defineStore('store', {
});
+
diff --git a/src/styles/global.scss b/src/styles/global.scss
index 4282fbc..1359f92 100644
--- a/src/styles/global.scss
+++ b/src/styles/global.scss
@@ -1,7 +1,8 @@
@import url('https://fonts.googleapis.com/css2?family=Libre+Franklin:wght@400;600&display=swap');
$bgCol: #313638;
-$accentCol: #0defff;
+$accentCol: #ff6060;
+$warnCol: #ffe02e;
body,
html {
@@ -36,16 +37,24 @@ button {
padding: 0.5em;
}
- &:hover {
- color: $accentCol;
- }
-
&:focus-visible {
outline: 2px solid $accentCol;
color: $accentCol;
}
}
+// Text styles
+.text {
+ &--accent {
+ color: $accentCol;
+ }
+
+ &--warn {
+ color: $warnCol;
+ }
+}
+
+// Select style
select {
border: 2px solid black;
background: none;
@@ -54,7 +63,20 @@ select {
text-align: center;
}
-// Global scrollbar
+// List style
+ul {
+ padding: 0;
+ margin: 0;
+
+ list-style: none;
+ text-align: center;
+
+ li {
+ padding: 0.5em;
+ }
+}
+
+// Global scrollbar style
::-webkit-scrollbar {
width: 10px;
}
diff --git a/src/types/orderTypes.ts b/src/types/orderTypes.ts
new file mode 100644
index 0000000..1b9595e
--- /dev/null
+++ b/src/types/orderTypes.ts
@@ -0,0 +1,6 @@
+export interface LocalStorageOrder {
+ orderType: 'orderO' | 'orderS' | 'orderN';
+ orderBody: any;
+ orderFooter: any;
+ createdAt: number;
+}
diff --git a/src/views/Home.vue b/src/views/Home.vue
index 02e75b7..0e72f68 100644
--- a/src/views/Home.vue
+++ b/src/views/Home.vue
@@ -8,14 +8,11 @@
-
Wiadomość do wyświetlenia na czacie symulatora:
-
-
-
-
-
-
-
+
+
+
+
+
@@ -24,8 +21,11 @@