Speicher und Lademöglichkeit
This commit is contained in:
parent
f04d75e7c0
commit
324251c94d
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "itsbingotime",
|
"name": "esamuchrechner",
|
||||||
"version": "0.0.1",
|
"version": "0.0.2",
|
||||||
"description": "DER ABSOLUTE MUCH RECHNER FÜR DIE VOLKSFRONT VOR SEINEM HERRN",
|
"description": "DER ABSOLUTE MUCH RECHNER FÜR DIE VOLKSFRONT VOR SEINEM HERRN",
|
||||||
"productName": "ESA Much Rechner",
|
"productName": "ESA Much Rechner",
|
||||||
"author": "Lordmau5 <mail@lordmau5.com>",
|
"author": "Lordmau5 <mail@lordmau5.com>",
|
||||||
@ -13,6 +13,8 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@quasar/extras": "^1.16.4",
|
"@quasar/extras": "^1.16.4",
|
||||||
|
"@vueuse/core": "^10.2.1",
|
||||||
|
"file-saver": "^2.0.5",
|
||||||
"pinia": "^2.1.3",
|
"pinia": "^2.1.3",
|
||||||
"quasar": "^2.12.0",
|
"quasar": "^2.12.0",
|
||||||
"vue": "^3.3.4",
|
"vue": "^3.3.4",
|
||||||
|
39
pnpm-lock.yaml
generated
39
pnpm-lock.yaml
generated
@ -4,6 +4,12 @@ dependencies:
|
|||||||
'@quasar/extras':
|
'@quasar/extras':
|
||||||
specifier: ^1.16.4
|
specifier: ^1.16.4
|
||||||
version: 1.16.4
|
version: 1.16.4
|
||||||
|
'@vueuse/core':
|
||||||
|
specifier: ^10.2.1
|
||||||
|
version: 10.2.1(vue@3.3.4)
|
||||||
|
file-saver:
|
||||||
|
specifier: ^2.0.5
|
||||||
|
version: 2.0.5
|
||||||
pinia:
|
pinia:
|
||||||
specifier: ^2.1.3
|
specifier: ^2.1.3
|
||||||
version: 2.1.3(vue@3.3.4)
|
version: 2.1.3(vue@3.3.4)
|
||||||
@ -354,6 +360,10 @@ packages:
|
|||||||
'@types/node': 20.2.5
|
'@types/node': 20.2.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@types/web-bluetooth@0.0.17:
|
||||||
|
resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@vitejs/plugin-vue@2.3.4(vite@2.9.16)(vue@3.3.4):
|
/@vitejs/plugin-vue@2.3.4(vite@2.9.16)(vue@3.3.4):
|
||||||
resolution: {integrity: sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==}
|
resolution: {integrity: sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
@ -441,6 +451,31 @@ packages:
|
|||||||
/@vue/shared@3.3.4:
|
/@vue/shared@3.3.4:
|
||||||
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
|
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
|
||||||
|
|
||||||
|
/@vueuse/core@10.2.1(vue@3.3.4):
|
||||||
|
resolution: {integrity: sha512-c441bfMbkAwTNwVRHQ0zdYZNETK//P84rC01aP2Uy/aRFCiie9NE/k9KdIXbno0eDYP5NPUuWv0aA/I4Unr/7w==}
|
||||||
|
dependencies:
|
||||||
|
'@types/web-bluetooth': 0.0.17
|
||||||
|
'@vueuse/metadata': 10.2.1
|
||||||
|
'@vueuse/shared': 10.2.1(vue@3.3.4)
|
||||||
|
vue-demi: 0.14.5(vue@3.3.4)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@vue/composition-api'
|
||||||
|
- vue
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@vueuse/metadata@10.2.1:
|
||||||
|
resolution: {integrity: sha512-3Gt68mY/i6bQvFqx7cuGBzrCCQu17OBaGWS5JdwISpMsHnMKKjC2FeB5OAfMcCQ0oINfADP3i9A4PPRo0peHdQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@vueuse/shared@10.2.1(vue@3.3.4):
|
||||||
|
resolution: {integrity: sha512-QWHq2bSuGptkcxx4f4M/fBYC3Y8d3M2UYyLsyzoPgEoVzJURQ0oJeWXu79OiLlBb8gTKkqe4mO85T/sf39mmiw==}
|
||||||
|
dependencies:
|
||||||
|
vue-demi: 0.14.5(vue@3.3.4)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@vue/composition-api'
|
||||||
|
- vue
|
||||||
|
dev: false
|
||||||
|
|
||||||
/accepts@1.3.8:
|
/accepts@1.3.8:
|
||||||
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
|
||||||
engines: {node: '>= 0.6'}
|
engines: {node: '>= 0.6'}
|
||||||
@ -1629,6 +1664,10 @@ packages:
|
|||||||
flat-cache: 3.0.4
|
flat-cache: 3.0.4
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/file-saver@2.0.5:
|
||||||
|
resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/fill-range@7.0.1:
|
/fill-range@7.0.1:
|
||||||
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
|
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -6,7 +6,26 @@
|
|||||||
Der ESA Much Rechner
|
Der ESA Much Rechner
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
|
|
||||||
<div>Die Volksfront von Rechnäa</div>
|
<div>
|
||||||
|
<q-btn-group>
|
||||||
|
<q-btn
|
||||||
|
icon="upload"
|
||||||
|
@click="openFileDialog({ multiple: false, accept: '.json' })"
|
||||||
|
>
|
||||||
|
Import
|
||||||
|
</q-btn>
|
||||||
|
<q-btn
|
||||||
|
icon="download"
|
||||||
|
@click="nachDateiExportieren"
|
||||||
|
>
|
||||||
|
Export
|
||||||
|
</q-btn>
|
||||||
|
</q-btn-group>
|
||||||
|
|
||||||
|
<span class="q-pl-sm">
|
||||||
|
Die Volksfront von Rechnäa
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
</q-header>
|
</q-header>
|
||||||
|
|
||||||
@ -15,3 +34,34 @@
|
|||||||
</q-page-container>
|
</q-page-container>
|
||||||
</q-layout>
|
</q-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useFileDialog } from '@vueuse/core';
|
||||||
|
import { saveAs } from 'file-saver';
|
||||||
|
import { usePersonenStore } from 'stores/personen-store.js';
|
||||||
|
|
||||||
|
const personenStore = usePersonenStore();
|
||||||
|
const { personen } = personenStore;
|
||||||
|
|
||||||
|
const nachDateiExportieren = () => {
|
||||||
|
saveAs(new Blob([JSON.stringify(personen.value)]), 'personen.json', {
|
||||||
|
type: 'application/json',
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const { open: openFileDialog, reset, onChange } = useFileDialog();
|
||||||
|
|
||||||
|
onChange(async files => {
|
||||||
|
const file = files[0];
|
||||||
|
|
||||||
|
try {
|
||||||
|
personen.value = JSON.parse(await file.text());
|
||||||
|
personenStore.save();
|
||||||
|
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
catch (_) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
@ -257,11 +257,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
// TODO: Multiselect wenn Geld blechen um nur bestimmte Personen mit einzubeziehen
|
import { usePersonenStore } from 'stores/personen-store.js';
|
||||||
|
import { computed, ref, watch } from 'vue';
|
||||||
|
|
||||||
import { computed, onMounted, ref, watch } from 'vue';
|
const personenStore = usePersonenStore();
|
||||||
|
personenStore.load();
|
||||||
|
|
||||||
const personen = ref({});
|
const { personen } = personenStore;
|
||||||
|
|
||||||
const personenNamensEingabeFeld = ref('');
|
const personenNamensEingabeFeld = ref('');
|
||||||
const personenAuswähler = ref(null);
|
const personenAuswähler = ref(null);
|
||||||
@ -316,16 +318,6 @@ const blechGesprächZeilen = computed(() => {
|
|||||||
return person.geblecht;
|
return person.geblecht;
|
||||||
});
|
});
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
try {
|
|
||||||
if (localStorage.personen)
|
|
||||||
personen.value = JSON.parse(localStorage.getItem('personen'));
|
|
||||||
}
|
|
||||||
catch(_) {
|
|
||||||
// Nothing
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
const wirdDieShiftTasteGehalten = ref(false);
|
const wirdDieShiftTasteGehalten = ref(false);
|
||||||
document.onkeydown = event => {
|
document.onkeydown = event => {
|
||||||
wirdDieShiftTasteGehalten.value = event.shiftKey;
|
wirdDieShiftTasteGehalten.value = event.shiftKey;
|
||||||
@ -335,7 +327,7 @@ document.onkeyup = event => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function speicherLeute () {
|
function speicherLeute () {
|
||||||
localStorage.setItem('personen', JSON.stringify(personen.value));
|
personenStore.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
function personHinzufügen () {
|
function personHinzufügen () {
|
||||||
@ -375,8 +367,6 @@ function geldBlechen () {
|
|||||||
function blechSumme (blechListe, nameDerPerson = false) {
|
function blechSumme (blechListe, nameDerPerson = false) {
|
||||||
let gesamtBlechGeld = 0;
|
let gesamtBlechGeld = 0;
|
||||||
|
|
||||||
// / Object.keys(personen.value).length;
|
|
||||||
|
|
||||||
for (const blech of blechListe) {
|
for (const blech of blechListe) {
|
||||||
if (!nameDerPerson) {
|
if (!nameDerPerson) {
|
||||||
gesamtBlechGeld += blech.geld;
|
gesamtBlechGeld += blech.geld;
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
import { defineStore } from 'pinia';
|
|
||||||
|
|
||||||
export const useCounterStore = defineStore('counter', {
|
|
||||||
state: () => ({
|
|
||||||
counter: 0,
|
|
||||||
}),
|
|
||||||
getters: {
|
|
||||||
doubleCount: (state) => state.counter * 2,
|
|
||||||
},
|
|
||||||
actions: {
|
|
||||||
increment () {
|
|
||||||
this.counter++;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
25
src/stores/personen-store.js
Normal file
25
src/stores/personen-store.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { defineStore } from 'pinia';
|
||||||
|
|
||||||
|
export const usePersonenStore = defineStore('personen', {
|
||||||
|
state: () => ({
|
||||||
|
personen: {},
|
||||||
|
}),
|
||||||
|
actions: {
|
||||||
|
load () {
|
||||||
|
this.personen.value = {};
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (localStorage.personen)
|
||||||
|
this.personen.value = JSON.parse(localStorage.getItem('personen'));
|
||||||
|
|
||||||
|
console.log(this.personen.value);
|
||||||
|
}
|
||||||
|
catch(_) {
|
||||||
|
// Nothing
|
||||||
|
}
|
||||||
|
},
|
||||||
|
save () {
|
||||||
|
localStorage.setItem('personen', JSON.stringify(this.personen.value));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user