mirror of
https://git.schule.click/GymSedan/SISSy.git
synced 2024-11-23 17:55:06 +01:00
Pläne: Pausenaufsichten implementiert
This commit is contained in:
parent
a06e5b5296
commit
2a0e3134c7
5 changed files with 346 additions and 54 deletions
185
src/components/PlanPausen.vue
Normal file
185
src/components/PlanPausen.vue
Normal file
|
@ -0,0 +1,185 @@
|
||||||
|
<template>
|
||||||
|
<div id='pp'>
|
||||||
|
<v-toolbar
|
||||||
|
color="primary lighten-5"
|
||||||
|
dense
|
||||||
|
>
|
||||||
|
Lehrkraft hervorheben
|
||||||
|
<v-flex
|
||||||
|
shrink
|
||||||
|
class="align-self-start pa-2">
|
||||||
|
<v-select
|
||||||
|
:items="paLehrkraefte"
|
||||||
|
v-model="aktuelleLehrkraft"
|
||||||
|
class="align-self-center"
|
||||||
|
dense
|
||||||
|
width="10"
|
||||||
|
></v-select>
|
||||||
|
</v-flex>
|
||||||
|
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-row
|
||||||
|
no-gutters
|
||||||
|
>
|
||||||
|
<v-card
|
||||||
|
v-for="tag, tagID in paTage"
|
||||||
|
:key="tagID"
|
||||||
|
rounded="lg"
|
||||||
|
:color="(today(tagID)) ? 'primary lighten-2' : 'primary lighten-3'"
|
||||||
|
class="ma-auto"
|
||||||
|
>
|
||||||
|
<v-card-title>{{ tag }}</v-card-title>
|
||||||
|
|
||||||
|
<v-simple-table dense>
|
||||||
|
<template v-slot:default>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="text-left">
|
||||||
|
</th>
|
||||||
|
<th
|
||||||
|
class="text-left"
|
||||||
|
v-for="pause in paPausen"
|
||||||
|
:key="pause"
|
||||||
|
>
|
||||||
|
{{ pause }}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr
|
||||||
|
class="text-left"
|
||||||
|
v-for="ort in paOrte"
|
||||||
|
:key="ort"
|
||||||
|
>
|
||||||
|
<th class="text-left">
|
||||||
|
{{ ort }}
|
||||||
|
</th>
|
||||||
|
<td
|
||||||
|
class="text-left"
|
||||||
|
v-for="pause2, pause2ID in paPausen"
|
||||||
|
:key="pause2ID"
|
||||||
|
:class="(aktuelleLehrkraft === '') ? '' : ((gibAufsicht(tagID, pause2ID, ort) === aktuelleLehrkraft) ? 'red--text font-weight-bold' : 'grey--text')"
|
||||||
|
>
|
||||||
|
{{ gibAufsicht(tagID, pause2ID, ort) }}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</template>
|
||||||
|
</v-simple-table>
|
||||||
|
|
||||||
|
</v-card>
|
||||||
|
|
||||||
|
</v-row>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'PlanPausen',
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pa: [],
|
||||||
|
paAufsichten: {1: {1: {'Hof': 'TLK'}}},
|
||||||
|
// zeitraster: new Zeitraster(),
|
||||||
|
paTage: {
|
||||||
|
1: 'Montag',
|
||||||
|
2: 'Dienstag',
|
||||||
|
3: 'Mittwoch',
|
||||||
|
4: 'Donnerstag',
|
||||||
|
5: 'Freitag',
|
||||||
|
},
|
||||||
|
paPausen: {
|
||||||
|
1: 'Frühaufsicht',
|
||||||
|
3: 'Erste Pause',
|
||||||
|
5: 'Zweite Pause',
|
||||||
|
// 8: 'Mittagspause'
|
||||||
|
},
|
||||||
|
paOrte: ['Hof'],
|
||||||
|
paLehrkraefte: ['TLK'],
|
||||||
|
aktuelleLehrkraft: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
props: {
|
||||||
|
paUrl: String, // URL der GPU009
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async reload () {
|
||||||
|
|
||||||
|
// PAUSENAUFSICHTEN
|
||||||
|
const paHeader = 'ort,lehrkraft,tag,vor_stunde,dauer,extra\n'
|
||||||
|
// Vertretungsplan abrufen
|
||||||
|
const paRes = await fetch(this.paUrl)
|
||||||
|
// Text extrahieren und Feldnamen hinzufügen
|
||||||
|
const paText = paHeader + await paRes.text()
|
||||||
|
// Parsen und Array in Daten ablegen
|
||||||
|
this.pa = this.$papa.parse(paText, {'header': 'true', 'skipEmptyLines': 'greedy'}).data
|
||||||
|
|
||||||
|
// Orte ermitteln und Aufsichten in multidimensionales Array legen
|
||||||
|
var ergebnisOrte = []
|
||||||
|
var ergebnisLehrkraefte = ['']
|
||||||
|
var ergebnisAufsichten = {}
|
||||||
|
this.pa.forEach(function(item){
|
||||||
|
// Aufsicht in Array legen
|
||||||
|
if (item.tag in ergebnisAufsichten == false) {
|
||||||
|
ergebnisAufsichten[item.tag] = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.vor_stunde in ergebnisAufsichten[item.tag] == false) {
|
||||||
|
ergebnisAufsichten[item.tag][item.vor_stunde] = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
ergebnisAufsichten[item.tag][item.vor_stunde][item.ort] = item.lehrkraft
|
||||||
|
|
||||||
|
// Wenn Ort noch nicht erfasst, merke den Ort
|
||||||
|
var i = ergebnisOrte.findIndex(x => x == item.ort);
|
||||||
|
if (i <= -1) {
|
||||||
|
ergebnisOrte.push(item.ort);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wenn Lehrkraft noch nicht erfasst, merke Lehrkraft
|
||||||
|
i = ergebnisLehrkraefte.findIndex(x => x == item.lehrkraft);
|
||||||
|
if (i <= -1) {
|
||||||
|
ergebnisLehrkraefte.push(item.lehrkraft);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.paOrte = ergebnisOrte.sort()
|
||||||
|
this.paAufsichten = ergebnisAufsichten
|
||||||
|
this.paLehrkraefte = ergebnisLehrkraefte.sort()
|
||||||
|
},
|
||||||
|
|
||||||
|
today (wochentag) {
|
||||||
|
const d = new Date()
|
||||||
|
var wt = d.getDay()
|
||||||
|
// Wochenende überspringen
|
||||||
|
if (wt === 0 || wt === 6) wt = 1
|
||||||
|
return (wt == wochentag)
|
||||||
|
},
|
||||||
|
|
||||||
|
gibAufsicht(tagID, pauseID, ort) {
|
||||||
|
if (typeof this.paAufsichten[tagID] !== 'undefined') {
|
||||||
|
if (typeof this.paAufsichten[tagID][pauseID] !== 'undefined') {
|
||||||
|
if (typeof this.paAufsichten[tagID][pauseID][ort] !== 'undefined') {
|
||||||
|
return this.paAufsichten[tagID][pauseID][ort]
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
created () {
|
||||||
|
// Vertretungsplan neu laden
|
||||||
|
this.reload()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -11,6 +11,7 @@
|
||||||
sort-by="stunde"
|
sort-by="stunde"
|
||||||
group-by="lehrkraft_vertretung"
|
group-by="lehrkraft_vertretung"
|
||||||
flat
|
flat
|
||||||
|
rounded
|
||||||
hide-default-footer
|
hide-default-footer
|
||||||
:expanded.sync="expanded"
|
:expanded.sync="expanded"
|
||||||
:single-expand="true"
|
:single-expand="true"
|
||||||
|
@ -145,6 +146,7 @@ export default {
|
||||||
vp: [],
|
vp: [],
|
||||||
pa: [],
|
pa: [],
|
||||||
zeitraster: new Zeitraster(),
|
zeitraster: new Zeitraster(),
|
||||||
|
// Felddefinitionen für die Datatable
|
||||||
headers: [
|
headers: [
|
||||||
{
|
{
|
||||||
text: 'Datum',
|
text: 'Datum',
|
||||||
|
@ -327,9 +329,3 @@ export default {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style>
|
|
||||||
div.news-text {
|
|
||||||
height: calc(100% - 6px);
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
|
@ -1,6 +1,7 @@
|
||||||
import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loader
|
import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loader
|
||||||
import Vue from 'vue';
|
import Vue from 'vue';
|
||||||
import Vuetify from 'vuetify/lib/framework';
|
import Vuetify from 'vuetify/lib/framework';
|
||||||
|
import colors from 'vuetify/lib/util/colors';
|
||||||
|
|
||||||
Vue.use(Vuetify);
|
Vue.use(Vuetify);
|
||||||
|
|
||||||
|
@ -8,4 +9,15 @@ export default new Vuetify({
|
||||||
icons: {
|
icons: {
|
||||||
iconfont: 'mdi'
|
iconfont: 'mdi'
|
||||||
},
|
},
|
||||||
|
theme: {
|
||||||
|
dark: false,
|
||||||
|
themes: {
|
||||||
|
light: {
|
||||||
|
|
||||||
|
primary: colors.indigo,
|
||||||
|
|
||||||
|
'primary--text': colors.white
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="ids">
|
<div class="ids fill-height">
|
||||||
<AboutDialog ref="ad" />
|
<AboutDialog ref="ad" />
|
||||||
<v-app-bar
|
<v-app-bar
|
||||||
app
|
app
|
||||||
color="indigo"
|
color="primary"
|
||||||
dark
|
dark
|
||||||
>
|
>
|
||||||
<v-img
|
<v-img
|
||||||
|
@ -18,61 +18,76 @@
|
||||||
|
|
||||||
<v-spacer></v-spacer>
|
<v-spacer></v-spacer>
|
||||||
|
|
||||||
<v-tabs>
|
<v-tabs
|
||||||
|
v-model="aktuelleSeite"
|
||||||
|
>
|
||||||
<v-tab
|
<v-tab
|
||||||
v-for="link in links"
|
v-for="seite in seiten"
|
||||||
:key="link"
|
:key="seite"
|
||||||
>
|
>
|
||||||
{{ link }}
|
{{ seite }}
|
||||||
</v-tab>
|
</v-tab>
|
||||||
</v-tabs>
|
</v-tabs>
|
||||||
|
|
||||||
</v-app-bar>
|
</v-app-bar>
|
||||||
|
|
||||||
<v-main>
|
<v-main class="fill-height">
|
||||||
<v-container fluid>
|
<v-tabs-items v-model="aktuelleSeite" class="fill-height grey lighten-3">
|
||||||
<v-row dense>
|
<v-tab-item
|
||||||
|
key="0"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
<v-row dense>
|
||||||
|
|
||||||
<v-col
|
<v-col
|
||||||
cols="8"
|
cols="8"
|
||||||
>
|
|
||||||
<v-sheet
|
|
||||||
min-height="70vh"
|
|
||||||
rounded="lg"
|
|
||||||
elevation="2"
|
|
||||||
>
|
>
|
||||||
<Vertretungsplan
|
<v-sheet
|
||||||
ref="vp"
|
min-height="70vh"
|
||||||
vpUrl="/stundenplan/proxy.php?file=G014"
|
rounded="lg"
|
||||||
paUrl="/stundenplan/proxy.php?file=G009"
|
elevation="2"
|
||||||
/>
|
>
|
||||||
</v-sheet>
|
<Vertretungsplan
|
||||||
</v-col>
|
ref="vp"
|
||||||
|
vpUrl="/stundenplan/proxy.php?file=G014"
|
||||||
|
paUrl="/stundenplan/proxy.php?file=G009"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
</v-col>
|
||||||
|
|
||||||
<v-col
|
<v-col
|
||||||
cols="4"
|
cols="4"
|
||||||
>
|
|
||||||
<v-sheet
|
|
||||||
rounded="lg"
|
|
||||||
min-height="268"
|
|
||||||
elevation="2"
|
|
||||||
>
|
|
||||||
<Newsreader
|
|
||||||
ref="nr"
|
|
||||||
:feedUrls="['/stundenplan/proxy.php?file=rsslul', '/stundenplan/proxy.php?file=rsssul']"
|
|
||||||
/>
|
|
||||||
</v-sheet>
|
|
||||||
<!--
|
|
||||||
<v-sheet
|
|
||||||
rounded="lg"
|
|
||||||
min-height="268"
|
|
||||||
elevation="2"
|
|
||||||
>
|
>
|
||||||
|
<v-sheet
|
||||||
|
rounded="lg"
|
||||||
|
min-height="268"
|
||||||
|
elevation="2"
|
||||||
|
>
|
||||||
|
<Newsreader
|
||||||
|
ref="nr"
|
||||||
|
:feedUrls="['/stundenplan/proxy.php?file=rsslul', '/stundenplan/proxy.php?file=rsssul']"
|
||||||
|
/>
|
||||||
|
</v-sheet>
|
||||||
|
<!--
|
||||||
|
<v-sheet
|
||||||
|
rounded="lg"
|
||||||
|
min-height="268"
|
||||||
|
elevation="2"
|
||||||
|
>
|
||||||
|
|
||||||
</v-sheet> -->
|
</v-sheet> -->
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
</v-container>
|
</v-tab-item>
|
||||||
|
<v-tab-item
|
||||||
|
key="1"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
<Plaene ref="p" />
|
||||||
|
</v-tab-item>
|
||||||
|
</v-tabs-items>
|
||||||
|
|
||||||
|
|
||||||
</v-main>
|
</v-main>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -81,22 +96,25 @@
|
||||||
import Newsreader from '@/components/Newsreader'
|
import Newsreader from '@/components/Newsreader'
|
||||||
import Vertretungsplan from '@/components/Vertretungsplan'
|
import Vertretungsplan from '@/components/Vertretungsplan'
|
||||||
import AboutDialog from '@/components/AboutDialog'
|
import AboutDialog from '@/components/AboutDialog'
|
||||||
|
import Plaene from '@/views/Plaene'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'InfodisplayLehrer',
|
name: 'InfodisplayLehrer',
|
||||||
|
|
||||||
data: () => ({
|
data: () => ({
|
||||||
links: [
|
seiten: [
|
||||||
'Vertretungsplan',
|
'Vertretungsplan',
|
||||||
'Stundenpläne'
|
'Pläne',
|
||||||
],
|
],
|
||||||
|
aktuelleSeite: 0,
|
||||||
reloadTime: 600000
|
reloadTime: 600000
|
||||||
}),
|
}),
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
Newsreader,
|
Newsreader,
|
||||||
Vertretungsplan,
|
Vertretungsplan,
|
||||||
AboutDialog
|
AboutDialog,
|
||||||
|
Plaene
|
||||||
},
|
},
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
|
@ -108,6 +126,7 @@ export default {
|
||||||
// Reload-Event einrichten
|
// Reload-Event einrichten
|
||||||
this.$refs.nr.reload()
|
this.$refs.nr.reload()
|
||||||
this.$refs.vp.reload()
|
this.$refs.vp.reload()
|
||||||
|
this.$refs.p.reload()
|
||||||
setTimeout(this.onTimeout, this.reloadTime)
|
setTimeout(this.onTimeout, this.reloadTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
80
src/views/Plaene.vue
Normal file
80
src/views/Plaene.vue
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<template>
|
||||||
|
<div class="plaene fill-height">
|
||||||
|
<v-toolbar
|
||||||
|
color="primary lighten-4"
|
||||||
|
dense
|
||||||
|
>
|
||||||
|
<v-tabs
|
||||||
|
v-model="aktuellerPlan"
|
||||||
|
>
|
||||||
|
<v-tab
|
||||||
|
v-for="plan in plaene"
|
||||||
|
:key="plan"
|
||||||
|
>
|
||||||
|
{{ plan }}
|
||||||
|
</v-tab>
|
||||||
|
</v-tabs>
|
||||||
|
|
||||||
|
</v-toolbar>
|
||||||
|
|
||||||
|
<v-tabs-items v-model="aktuellerPlan" class="fill-height grey lighten-3">
|
||||||
|
<v-tab-item
|
||||||
|
key="0"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
y
|
||||||
|
</v-tab-item>
|
||||||
|
<v-tab-item
|
||||||
|
key="1"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
z
|
||||||
|
</v-tab-item>
|
||||||
|
<v-tab-item
|
||||||
|
key="2"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
z
|
||||||
|
</v-tab-item>
|
||||||
|
<v-tab-item
|
||||||
|
key="3"
|
||||||
|
fluid
|
||||||
|
>
|
||||||
|
<PlanPausen
|
||||||
|
ref="pp"
|
||||||
|
paUrl="/stundenplan/proxy.php?file=G009"
|
||||||
|
/>
|
||||||
|
</v-tab-item>
|
||||||
|
</v-tabs-items>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PlanPausen from '@/components/PlanPausen'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'Home',
|
||||||
|
|
||||||
|
data: () => ({
|
||||||
|
plaene: [
|
||||||
|
'Lehrkräfte',
|
||||||
|
'Klassen',
|
||||||
|
'Räume',
|
||||||
|
'Pausen',
|
||||||
|
],
|
||||||
|
aktuellerPlan: 0,
|
||||||
|
}),
|
||||||
|
|
||||||
|
components: {
|
||||||
|
PlanPausen,
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async reload () {
|
||||||
|
|
||||||
|
this.$refs.pp.reload()
|
||||||
|
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
Loading…
Reference in a new issue