From 667987bdb6273480e9cd53e16641a0d6a4350132 Mon Sep 17 00:00:00 2001 From: Spythere Date: Fri, 22 Jul 2022 00:17:39 +0200 Subject: [PATCH] =?UTF-8?q?Lokalne=20zapisywanie=20rozkaz=C3=B3w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/icon-save.svg | 4 + src/components/Order.vue | 6 +- src/components/OrderList.vue | 118 ++++++++++++++++++++++ src/components/OrderMessage.vue | 174 ++++++++++++++++++++++++++++++++ src/components/OrderN.vue | 2 +- src/components/OrderO.vue | 2 +- src/components/OrderS.vue | 2 +- src/components/SideBar.vue | 40 ++++++-- src/mixins/orderStorageMixin.ts | 59 +++++++++++ src/store/store.ts | 4 +- src/styles/global.scss | 34 +++++-- src/types/orderTypes.ts | 6 ++ src/views/Home.vue | 76 ++++---------- 13 files changed, 450 insertions(+), 77 deletions(-) create mode 100644 src/assets/icon-save.svg create mode 100644 src/components/OrderList.vue create mode 100644 src/components/OrderMessage.vue create mode 100644 src/mixins/orderStorageMixin.ts create mode 100644 src/types/orderTypes.ts 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 @@ + + + + + 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 @@ + + + + + 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 @@