Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
Tim Gröger 2020-05-11 23:03:31 +02:00
commit 28204f95e6
10 changed files with 256 additions and 76 deletions

View File

@ -107,7 +107,7 @@
</v-col> </v-col>
</v-row> </v-row>
<v-row> <v-row>
<v-col> <v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-combobox <v-combobox
outlined outlined
multiple multiple
@ -131,17 +131,17 @@
</template> </template>
</v-combobox> </v-combobox>
</v-col> </v-col>
<v-col> <v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-text-field outlined :value="computeStatus" readonly label="Mitgliedsstatus"/> <v-text-field outlined :value="computeStatus" readonly label="Mitgliedsstatus"/>
</v-col> </v-col>
<v-col> <v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-text-field outlined :value="user.voting ? 'ja' : 'nein'" readonly label="Stimmrecht" /> <v-text-field outlined :value="user.voting ? 'ja' : 'nein'" readonly label="Stimmrecht" />
</v-col> </v-col>
</v-row> </v-row>
</v-card-text> </v-card-text>
<v-card-actions> <v-card-actions>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-btn text color="primary" @click="save">Save</v-btn> <v-btn text color="primary" @click="save">Speicherns</v-btn>
</v-card-actions> </v-card-actions>
<v-expand-transition> <v-expand-transition>
<v-alert type="error" v-if="error">{{ error }}</v-alert> <v-alert type="error" v-if="error">{{ error }}</v-alert>
@ -172,6 +172,7 @@ export default {
lastname: null, lastname: null,
password: null, password: null,
controlPassword: null, controlPassword: null,
isFulllineText: false,
equal_password: value => equal_password: value =>
this.password === value || 'Passwörter sind nicht identisch.', this.password === value || 'Passwörter sind nicht identisch.',
email: value => { email: value => {
@ -183,11 +184,21 @@ export default {
} }
} }
}, },
mounted() {
this.$nextTick(function() {
window.addEventListener('resize', this.getWindowWidth);
this.getWindowWidth()
})
},
methods: { methods: {
...mapActions({ ...mapActions({
saveConfig: 'user/saveConfig', saveConfig: 'user/saveConfig',
getStatus: 'user/getStatus' getStatus: 'user/getStatus'
}), }),
getWindowWidth() {
this.isFulllineText = document.documentElement.clientWidth <= 600;
},
save() { save() {
let user = {} let user = {}
if (this.firstname) user.firstname = this.firstname if (this.firstname) user.firstname = this.firstname
@ -237,4 +248,7 @@ export default {
} }
</script> </script>
<style scoped></style> <style scoped>
.fulllineText{
flex-basis: unset;
}</style>

View File

@ -1,17 +1,15 @@
<template> <template>
<div> <div>
<v-toolbar> <v-toolbar>
<v-toolbar-title> <v-toolbar-title>Dienstübersicht</v-toolbar-title>
Dienstübersicht
</v-toolbar-title>
<v-spacer /> <v-spacer />
<v-toolbar-items> <v-toolbar-items>
<v-btn text icon @click="changeMonth(-1)"> <v-btn text icon @click="changeMonth(-1)">
<v-icon>{{ keyboard_arrow_left }}</v-icon> <v-icon>{{ keyboard_arrow_left }}</v-icon>
</v-btn> </v-btn>
<v-list-item> <v-list-item>
<v-list-item-title class="title" <v-list-item-title class="title">
>{{ monthArray[date.getMonth()] }} {{ monthArray[date.getMonth()] }}
{{ date.getFullYear() }} {{ date.getFullYear() }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
@ -85,6 +83,18 @@ export default {
} }
this.createMonth(this.date) this.createMonth(this.date)
this.getAllUsers() this.getAllUsers()
this.getUsers({
from_date: {
year: this.startDate.getFullYear(),
month: this.startDate.getMonth() + 1,
day: this.startDate.getDate()
},
to_date: {
year: this.endDate.getFullYear(),
month: this.endDate.getMonth() + 1,
day: this.endDate.getDate()
}
})
this.getTransactJobs({ this.getTransactJobs({
year: this.date.getFullYear(), year: this.date.getFullYear(),
month: this.date.getMonth() + 1, month: this.date.getMonth() + 1,
@ -95,7 +105,8 @@ export default {
...mapActions({ ...mapActions({
getTransactJobs: 'requestJobs/getTransactJobs', getTransactJobs: 'requestJobs/getTransactJobs',
createMonth: 'jobs/createMonth', createMonth: 'jobs/createMonth',
getAllUsers: 'jobs/getAllUsers' getAllUsers: 'jobs/getAllUsers',
getUsers: 'jobs/getUsers'
}), }),
changeMonth(value) { changeMonth(value) {
if (value === -1) { if (value === -1) {
@ -104,11 +115,25 @@ export default {
this.date = new Date(this.date.getFullYear(), this.date.getMonth() + 1) this.date = new Date(this.date.getFullYear(), this.date.getMonth() + 1)
} }
this.createMonth(this.date) this.createMonth(this.date)
this.getUsers({
from_date: {
year: this.startDate.getFullYear(),
month: this.startDate.getMonth() + 1,
day: this.startDate.getDate()
},
to_date: {
year: this.endDate.getFullYear(),
month: this.endDate.getMonth() + 1,
day: this.endDate.getDate()
}
})
} }
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
month: 'jobs/month' month: 'jobs/month',
startDate: 'jobs/getStartDate',
endDate: 'jobs/getEndDate'
}) })
} }
} }

View File

@ -17,7 +17,9 @@
<div v-for="worker in day.worker" :key="day.worker.indexOf(worker)"> <div v-for="worker in day.worker" :key="day.worker.indexOf(worker)">
<v-chip <v-chip
style="margin: 3px;" style="margin: 3px;"
:close="user(worker) && !day.locked || canDelete && user(worker)" :close="
(user(worker) && !day.locked) || (canDelete && user(worker))
"
@click:close=" @click:close="
deleteJob({ deleteJob({
year: day.date.getFullYear(), year: day.date.getFullYear(),
@ -25,8 +27,7 @@
day: day.date.getDate() day: day.date.getDate()
}) })
" "
>{{ worker.firstname }} {{ worker.lastname }} >{{ worker.firstname }} {{ worker.lastname }}</v-chip>
</v-chip>
</div> </div>
</div> </div>
</v-expand-transition> </v-expand-transition>
@ -49,9 +50,7 @@
</template> </template>
<template v-slot:item="data"> <template v-slot:item="data">
<v-list-item-content> <v-list-item-content>
<v-list-item-title> <v-list-item-title>{{ data.item.firstname }} {{ data.item.lastname }}</v-list-item-title>
{{ data.item.firstname }} {{ data.item.lastname }}
</v-list-item-title>
</v-list-item-content> </v-list-item-content>
</template> </template>
</v-autocomplete> </v-autocomplete>
@ -75,10 +74,12 @@
<v-spacer /> <v-spacer />
<v-btn <v-btn
text text
v-if="!day.locked && v-if="
!day.locked &&
!day.loading && !day.loading &&
day.worker.length < 2 && day.worker.length < 2 &&
!userInWorker" !userInWorker
"
@click=" @click="
addJob({ addJob({
year: day.date.getFullYear(), year: day.date.getFullYear(),
@ -86,8 +87,7 @@
day: day.date.getDate() day: day.date.getDate()
}) })
" "
>Eintragen >Eintragen</v-btn>
</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</div> </div>
@ -110,17 +110,9 @@ export default {
}, },
created() { created() {
this.setLoading(this.day.date) this.setLoading(this.day.date)
this.getUser({
date: this.day.date.getTime() / 1000,
startdatetime: this.day.date,
year: this.day.date.getFullYear(),
month: this.day.date.getMonth() + 1,
day: this.day.date.getDate()
})
}, },
methods: { methods: {
...mapActions({ ...mapActions({
getUser: 'jobs/getUser',
setLoading: 'jobs/setDayLoading', setLoading: 'jobs/setDayLoading',
setNotLoading: 'jobs/setDayNotLoading', setNotLoading: 'jobs/setDayNotLoading',
addJob: 'jobs/addJob', addJob: 'jobs/addJob',
@ -190,15 +182,6 @@ export default {
} }
}, },
watch: { watch: {
day() {
this.getUser({
date: this.day.date.getTime() / 1000,
startdatetime: this.day.date,
year: this.day.date.getFullYear(),
month: this.day.date.getMonth() + 1,
day: this.day.date.getDate()
})
},
worker() { worker() {
return this.day.worker return this.day.worker
} }

View File

@ -1,9 +1,7 @@
<template> <template>
<div> <div>
<v-toolbar> <v-toolbar>
<v-toolbar-title> <v-toolbar-title>Dienstverwaltung</v-toolbar-title>
Dienstverwaltung
</v-toolbar-title>
<v-spacer /> <v-spacer />
<v-toolbar-items> <v-toolbar-items>
<v-btn text icon @click="changeMonth(-1)"> <v-btn text icon @click="changeMonth(-1)">
@ -11,7 +9,8 @@
</v-btn> </v-btn>
<v-list-item> <v-list-item>
<v-list-item-title class="title"> <v-list-item-title class="title">
{{ monthArray[date.getMonth()] }} {{ date.getFullYear() }} {{ monthArray[date.getMonth()] }}
{{ date.getFullYear() }}
</v-list-item-title> </v-list-item-title>
</v-list-item> </v-list-item>
<v-btn text icon @click="changeMonth(1)"> <v-btn text icon @click="changeMonth(1)">
@ -90,11 +89,24 @@ export default {
this.createMonth(this.date) this.createMonth(this.date)
this.getAllUsers() this.getAllUsers()
this.getUsers({
from_date: {
year: this.startDate.getFullYear(),
month: this.startDate.getMonth() + 1,
day: this.startDate.getDate()
},
to_date: {
year: this.endDate.getFullYear(),
month: this.endDate.getMonth() + 1,
day: this.endDate.getDate()
}
})
}, },
methods: { methods: {
...mapActions({ ...mapActions({
createMonth: 'sm/createMonth', createMonth: 'sm/createMonth',
getAllUsers: 'sm/getAllUsers', getAllUsers: 'sm/getAllUsers',
getUsers: 'sm/getUsers',
lockDay: 'sm/lockDay' lockDay: 'sm/lockDay'
}), }),
changeMonth(value) { changeMonth(value) {
@ -104,6 +116,18 @@ export default {
this.date = new Date(this.date.getFullYear(), this.date.getMonth() + 1) this.date = new Date(this.date.getFullYear(), this.date.getMonth() + 1)
} }
this.createMonth(this.date) this.createMonth(this.date)
this.getUsers({
from_date: {
year: this.startDate.getFullYear(),
month: this.startDate.getMonth() + 1,
day: this.startDate.getDate()
},
to_date: {
year: this.endDate.getFullYear(),
month: this.endDate.getMonth() + 1,
day: this.endDate.getDate()
}
})
}, },
lockDays(value) { lockDays(value) {
for (var week in this.month) { for (var week in this.month) {
@ -121,7 +145,9 @@ export default {
}, },
computed: { computed: {
...mapGetters({ ...mapGetters({
month: 'sm/month' month: 'sm/month',
startDate: 'sm/getStartDate',
endDate: 'sm/getEndDate'
}) })
} }
} }

View File

@ -39,14 +39,13 @@
close close
@click="data.select" @click="data.select"
@click:close="remove(data.item)" @click:close="remove(data.item)"
> >{{ data.item.firstname }} {{ data.item.lastname }}</v-chip>
{{ data.item.firstname }} {{ data.item.lastname }}
</v-chip>
</template> </template>
<template v-slot:item="data"> <template v-slot:item="data">
<v-list-item-content> <v-list-item-content>
<v-list-item-title> <v-list-item-title>
{{ data.item.firstname }} {{ data.item.lastname }} {{ data.item.firstname }}
{{ data.item.lastname }}
</v-list-item-title> </v-list-item-title>
</v-list-item-content> </v-list-item-content>
</template> </template>
@ -57,7 +56,7 @@
<v-card-actions v-if="!day.loading"> <v-card-actions v-if="!day.loading">
<v-chip class="text-uppercase" :color="lockedColor">{{ lockedText }}</v-chip> <v-chip class="text-uppercase" :color="lockedColor">{{ lockedText }}</v-chip>
<v-spacer /> <v-spacer />
<v-btn text @click="lock">{{lockedTextBtn}}</v-btn> <v-btn text @click="lock">{{ lockedTextBtn }}</v-btn>
</v-card-actions> </v-card-actions>
</v-card> </v-card>
</div> </div>
@ -80,13 +79,13 @@ export default {
}, },
created() { created() {
this.setLoading(this.day.date) this.setLoading(this.day.date)
this.getUser({ //this.getUser({
date: this.day.date.getTime() / 1000, // date: this.day.date.getTime() / 1000,
startdatetime: this.day.date, // startdatetime: this.day.date,
year: this.day.date.getFullYear(), // year: this.day.date.getFullYear(),
month: this.day.date.getMonth() + 1, // month: this.day.date.getMonth() + 1,
day: this.day.date.getDate() // day: this.day.date.getDate()
}) //})
}, },
methods: { methods: {
...mapActions({ ...mapActions({
@ -129,7 +128,12 @@ export default {
} }
}, },
lock() { lock() {
this.lockDay({year: this.day.date.getFullYear(), month: this.day.date.getMonth() + 1, day: this.day.date.getDate(), locked: !this.day.locked}) this.lockDay({
year: this.day.date.getFullYear(),
month: this.day.date.getMonth() + 1,
day: this.day.date.getDate(),
locked: !this.day.locked
})
} }
}, },
computed: { computed: {
@ -181,16 +185,16 @@ export default {
} }
} }
} }
},
day() {
this.getUser({
date: this.day.date.getTime() / 1000,
startdatetime: this.day.date,
year: this.day.date.getFullYear(),
month: this.day.date.getMonth() + 1,
day: this.day.date.getDate()
})
} }
//day() {
// this.getUser({
// date: this.day.date.getTime() / 1000,
// startdatetime: this.day.date,
// year: this.day.date.getFullYear(),
// month: this.day.date.getMonth() + 1,
// day: this.day.date.getDate()
// })
//}
} }
} }
</script> </script>

View File

@ -85,7 +85,7 @@
<v-card-text> <v-card-text>
<v-container> <v-container>
<v-row> <v-row>
<v-col> <v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-text-field <v-text-field
outlined outlined
:value="users.length" :value="users.length"
@ -93,7 +93,15 @@
readonly readonly
/> />
</v-col> </v-col>
<v-col> <v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-text-field
outlined
:value="allActiveUsers"
label="Anzahl aller aktiven Mitglieder"
readonly
/>
</v-col>
<v-col v-bind:class="{ fulllineText: isFulllineText }">
<v-text-field <v-text-field
outlined outlined
:value="allVotings" :value="allVotings"
@ -117,6 +125,7 @@ export default {
return { return {
editIcon: mdiPencil, editIcon: mdiPencil,
searchIcon: mdiMagnify, searchIcon: mdiMagnify,
isFulllineText: false,
editUser: false, editUser: false,
disableVoting: null, disableVoting: null,
search: null, search: null,
@ -160,6 +169,15 @@ export default {
} }
} }
}, },
mounted() {
this.$nextTick(function() {
window.addEventListener('resize', this.getWindowWidth);
this.getWindowWidth()
})
},
methods: { methods: {
...mapActions({ ...mapActions({
getUsers: 'usermanager/getUsers', getUsers: 'usermanager/getUsers',
@ -167,6 +185,9 @@ export default {
updateStatusUser: 'usermanager/updateStatusUser', updateStatusUser: 'usermanager/updateStatusUser',
updateVoting: 'usermanager/updateVoting' updateVoting: 'usermanager/updateVoting'
}), }),
getWindowWidth() {
this.isFulllineText = document.documentElement.clientWidth <= 750;
},
close() { close() {
this.editUser = false this.editUser = false
setTimeout(() => { setTimeout(() => {
@ -231,6 +252,12 @@ export default {
return this.users.filter(a => { return this.users.filter(a => {
return a.voting return a.voting
}).length }).length
},
allActiveUsers(){
return this.users.filter(a => {
return a.statusgroup === 1
}).length
} }
}, },
created() { created() {
@ -240,4 +267,8 @@ export default {
} }
</script> </script>
<style scoped></style> <style scoped>
.fulllineText{
flex-basis: unset;
}
</style>

View File

@ -31,6 +31,7 @@ const url = {
addUser: main + 'sm/addUser', addUser: main + 'sm/addUser',
deleteUser: main + 'sm/deleteUser', deleteUser: main + 'sm/deleteUser',
getUser: main + 'sm/getUser', getUser: main + 'sm/getUser',
getUsers: main + 'sm/getUsers',
lockDay: main + 'sm/lockDay', lockDay: main + 'sm/lockDay',
searchUser: main + 'sm/searchWithExtern' searchUser: main + 'sm/searchWithExtern'
}, },
@ -45,6 +46,7 @@ const url = {
user: { user: {
config: main + 'user/saveConfig', config: main + 'user/saveConfig',
job: main + 'user/job', job: main + 'user/job',
jobs: main + 'user/jobs',
addJob: main + 'user/addJob', addJob: main + 'user/addJob',
deleteJob: main + 'user/deleteJob', deleteJob: main + 'user/deleteJob',
transactJob: main + 'user/transactJob', transactJob: main + 'user/transactJob',

View File

@ -155,6 +155,13 @@ const mutations = {
} }
} }
}, },
setAllDayLoading: state => {
for (let week = 0; week < state.month.length; week++) {
for (let day in state.month[week].days) {
state.month[week].days[day].loading = true
}
}
},
setDayLoading: (state, { date, getters }) => { setDayLoading: (state, { date, getters }) => {
let day = getters.getDay(date) let day = getters.getDay(date)
day.loading = true day.loading = true
@ -228,6 +235,38 @@ const actions = {
setDayNotLoading({ commit, getters }, date) { setDayNotLoading({ commit, getters }, date) {
commit('setDayNotLoading', { date, getters }) commit('setDayNotLoading', { date, getters })
}, },
async getUsers({ commit, rootState, dispatch, getters }, data) {
commit('setAllDayLoading')
try {
const response = await axios.post(
url.user.jobs,
{ ...data },
{ headers: { Token: rootState.login.user.accessToken } }
)
for (let day in response.data) {
for (let item = 0; item < response.data[day].worker.length; item++) {
commit('updateMonth', {
...response.data[day].worker[item],
com: 'add',
day: response.data[day].day
})
}
commit('updateMonth', {
start: response.data[day].day.date,
day: response.data[day].day
})
var date = new Date(
response.data[day].day.date.year,
response.data[day].day.date.month - 1,
response.data[day].day.date.day
)
commit('setDayNotLoading', { date: date, getters })
}
} catch (e) {
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
async getUser({ commit, rootState, dispatch, getters }, data) { async getUser({ commit, rootState, dispatch, getters }, data) {
commit('setDayLoading', { date: data.startdatetime, getters }) commit('setDayLoading', { date: data.startdatetime, getters })
try { try {
@ -322,6 +361,12 @@ const getters = {
}, },
allUsers: state => { allUsers: state => {
return state.allUsers return state.allUsers
},
getStartDate: state => {
return state.month[0].startDate
},
getEndDate: state => {
return state.month[state.month.length - 1].endDate
} }
} }

View File

@ -120,6 +120,7 @@ const mutations = {
} }
} }
state.month = month state.month = month
console.log(month)
}, },
setStartEndDate: week => { setStartEndDate: week => {
if (week.days.monday) { if (week.days.monday) {
@ -180,6 +181,13 @@ const mutations = {
} }
} }
}, },
setAllDayLoading: state => {
for (let week = 0; week < state.month.length; week++) {
for (let day in state.month[week].days) {
state.month[week].days[day].loading = true
}
}
},
setDayLoading: (state, { date, getters }) => { setDayLoading: (state, { date, getters }) => {
let day = getters.getDay(date) let day = getters.getDay(date)
day.loading = true day.loading = true
@ -227,6 +235,39 @@ const actions = {
if (e.response.status === 401) dispatch('logout', null, { root: true }) if (e.response.status === 401) dispatch('logout', null, { root: true })
} }
}, },
// eslint-disable-next-line no-unused-vars
async getUsers({ commit, rootState, dispatch, getters }, data) {
commit('setAllDayLoading')
try {
const response = await axios.post(
url.vorstand.sm.getUsers,
{ ...data },
{ headers: { Token: rootState.login.user.accessToken } }
)
for (let day in response.data) {
for (let item = 0; item < response.data[day].worker.length; item++) {
commit('updateMonth', {
...response.data[day].worker[item],
com: 'add',
day: response.data[day].day
})
}
commit('updateMonth', {
start: response.data[day].day.date,
day: response.data[day].day
})
var date = new Date(
response.data[day].day.date.year,
response.data[day].day.date.month - 1,
response.data[day].day.date.day
)
commit('setDayNotLoading', { date: date, getters })
}
} catch (e) {
if (e.response)
if (e.response.status === 401) dispatch('logout', null, { root: true })
}
},
async getUser({ commit, rootState, dispatch, getters }, data) { async getUser({ commit, rootState, dispatch, getters }, data) {
commit('setDayLoading', { date: data.startdatetime, getters }) commit('setDayLoading', { date: data.startdatetime, getters })
try { try {
@ -312,6 +353,12 @@ const getters = {
}, },
disabled: state => { disabled: state => {
return state.disabled return state.disabled
},
getStartDate: state => {
return state.month[0].startDate
},
getEndDate: state => {
return state.month[state.month.length - 1].endDate
} }
} }

View File

@ -8,5 +8,8 @@ module.exports = {
// key: fs.readFileSync('./cert/server.key'), // key: fs.readFileSync('./cert/server.key'),
// cert: fs.readFileSync('./cert/server.crt') // cert: fs.readFileSync('./cert/server.crt')
// } // }
},
configureWebpack: {
devtool: 'source-map'
} }
} }