Allow setting the birthday
This commit is contained in:
parent
c8708be39d
commit
9b19dc225b
|
@ -0,0 +1,85 @@
|
||||||
|
<template>
|
||||||
|
<q-input
|
||||||
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
|
filled
|
||||||
|
:readonly="readonly"
|
||||||
|
:label="label"
|
||||||
|
:value="getDate()"
|
||||||
|
placeholder="YYYY-MM-DD"
|
||||||
|
v-on:input="dateChanged"
|
||||||
|
:rules="[isDate]"
|
||||||
|
>
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon
|
||||||
|
name="event"
|
||||||
|
class="cursor-pointer"
|
||||||
|
>
|
||||||
|
<q-popup-proxy
|
||||||
|
ref="qDateProxy"
|
||||||
|
transition-show="scale"
|
||||||
|
transition-hide="scale"
|
||||||
|
>
|
||||||
|
<q-date
|
||||||
|
:value="getDate()"
|
||||||
|
mask="YYYY-MM-DD"
|
||||||
|
v-on:input="dateChanged"
|
||||||
|
>
|
||||||
|
<div class="row items-center justify-end">
|
||||||
|
<q-btn
|
||||||
|
v-close-popup
|
||||||
|
label="Schließen"
|
||||||
|
color="primary"
|
||||||
|
flat
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-date>
|
||||||
|
</q-popup-proxy>
|
||||||
|
</q-icon>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from '@vue/composition-api';
|
||||||
|
import { date } from 'quasar';
|
||||||
|
interface Props {
|
||||||
|
value?: Date;
|
||||||
|
label?: string;
|
||||||
|
readonly: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'IsoDateInput',
|
||||||
|
props: {
|
||||||
|
value: {
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
label: {},
|
||||||
|
readonly: {
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup(props: Props, { emit }) {
|
||||||
|
function getDate() {
|
||||||
|
if (props.value) {
|
||||||
|
return date.formatDate(props.value, 'YYYY-MM-DD');
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
function dateChanged(dateString: string) {
|
||||||
|
emit('input', new Date(dateString));
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDate(val: string) {
|
||||||
|
return !val || /^\d{4}-\d\d-\d\d$/.test(val) || 'Datum ist nicht gültig.';
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
getDate,
|
||||||
|
dateChanged,
|
||||||
|
isDate,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -13,6 +13,7 @@ declare namespace FG {
|
||||||
firstname: string;
|
firstname: string;
|
||||||
lastname: string;
|
lastname: string;
|
||||||
mail: string;
|
mail: string;
|
||||||
|
birthday?: Date;
|
||||||
roles: Array<string>;
|
roles: Array<string>;
|
||||||
}
|
}
|
||||||
type Permission = string;
|
type Permission = string;
|
||||||
|
@ -25,10 +26,9 @@ declare namespace FG {
|
||||||
id: number;
|
id: number;
|
||||||
time: Date;
|
time: Date;
|
||||||
amount: number;
|
amount: number;
|
||||||
reversal?: this;
|
sender_id: string;
|
||||||
sender_id?: string;
|
receiver_id: string;
|
||||||
receiver_id?: string;
|
author_id: string;
|
||||||
author_id?: string;
|
|
||||||
}
|
}
|
||||||
interface Event {
|
interface Event {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
<template>
|
<template>
|
||||||
<q-form @submit="save" @reset="reset">
|
<q-form
|
||||||
|
@submit="save"
|
||||||
|
@reset="reset"
|
||||||
|
>
|
||||||
<q-card-section class="fit row justify-start content-center items-center">
|
<q-card-section class="fit row justify-start content-center items-center">
|
||||||
<q-input
|
<q-input
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
|
@ -15,12 +18,12 @@
|
||||||
v-model="props.user.lastname"
|
v-model="props.user.lastname"
|
||||||
filled
|
filled
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<q-input
|
<q-input
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
label="Benutzername"
|
label="Angezeigter Name"
|
||||||
:readonly="!props.newUser"
|
:rules="[notEmpty]"
|
||||||
v-model="props.user.userid"
|
v-model="props.user.display_name"
|
||||||
:rules="[isUseridUsed, notEmpty]"
|
|
||||||
filled
|
filled
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
|
@ -32,9 +35,10 @@
|
||||||
/>
|
/>
|
||||||
<q-input
|
<q-input
|
||||||
class="col-xs-12 col-sm-6 q-pa-sm"
|
class="col-xs-12 col-sm-6 q-pa-sm"
|
||||||
label="Display Name"
|
label="Benutzername"
|
||||||
:rules="[notEmpty]"
|
:readonly="!props.newUser"
|
||||||
v-model="props.user.display_name"
|
v-model="props.user.userid"
|
||||||
|
:rules="[isUseridUsed, notEmpty]"
|
||||||
filled
|
filled
|
||||||
/>
|
/>
|
||||||
<q-select
|
<q-select
|
||||||
|
@ -49,6 +53,10 @@
|
||||||
option-label="name"
|
option-label="name"
|
||||||
option-value="name"
|
option-value="name"
|
||||||
/>
|
/>
|
||||||
|
<IsoDateInput
|
||||||
|
v-model="props.user.birthday"
|
||||||
|
label="Geburtstag"
|
||||||
|
/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-separator v-if="!props.newUser" />
|
<q-separator v-if="!props.newUser" />
|
||||||
<q-card-section
|
<q-card-section
|
||||||
|
@ -83,8 +91,15 @@
|
||||||
/>
|
/>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-card-actions align="right">
|
<q-card-actions align="right">
|
||||||
<q-btn label="Reset" type="reset" />
|
<q-btn
|
||||||
<q-btn color="primary" type="submit" label="Speichern" />
|
label="Reset"
|
||||||
|
type="reset"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
color="primary"
|
||||||
|
type="submit"
|
||||||
|
label="Speichern"
|
||||||
|
/>
|
||||||
</q-card-actions>
|
</q-card-actions>
|
||||||
</q-form>
|
</q-form>
|
||||||
</template>
|
</template>
|
||||||
|
@ -94,11 +109,12 @@ import {
|
||||||
computed,
|
computed,
|
||||||
defineComponent,
|
defineComponent,
|
||||||
ref,
|
ref,
|
||||||
onBeforeMount
|
onBeforeMount,
|
||||||
} from '@vue/composition-api';
|
} from '@vue/composition-api';
|
||||||
import { Store } from 'vuex';
|
import { Store } from 'vuex';
|
||||||
import { StateInterface } from 'src/store';
|
import { StateInterface } from 'src/store';
|
||||||
import { hasPermission } from 'src/components/permission';
|
import { hasPermission } from 'src/components/permission';
|
||||||
|
import IsoDateInput from 'src/components/utils/IsoDateInput.vue';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
user?: FG.User;
|
user?: FG.User;
|
||||||
|
@ -107,19 +123,20 @@ interface Props {
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'MainUserSettings',
|
name: 'MainUserSettings',
|
||||||
|
components: { IsoDateInput: IsoDateInput },
|
||||||
props: {
|
props: {
|
||||||
user: {
|
user: {
|
||||||
required: true
|
required: true,
|
||||||
},
|
},
|
||||||
newUser: {
|
newUser: {
|
||||||
default: false
|
default: false,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
setup(props: Props, { root, emit }) {
|
setup(props: Props, { root, emit }) {
|
||||||
const store = <Store<StateInterface>>root.$store;
|
const store = <Store<StateInterface>>root.$store;
|
||||||
|
|
||||||
onBeforeMount(() => {
|
onBeforeMount(() => {
|
||||||
store.dispatch('user/getRoles', false).catch(error => {
|
store.dispatch('user/getRoles', false).catch((error) => {
|
||||||
console.warn(error);
|
console.warn(error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -133,13 +150,13 @@ export default defineComponent({
|
||||||
const oldUser = computed(() => {
|
const oldUser = computed(() => {
|
||||||
if (isCurrentUser.value) return <FG.User>store.state.user.currentUser;
|
if (isCurrentUser.value) return <FG.User>store.state.user.currentUser;
|
||||||
else
|
else
|
||||||
return store.state.user.users.filter(user => {
|
return store.state.user.users.filter((user) => {
|
||||||
user.userid === props.user?.userid;
|
user.userid === props.user?.userid;
|
||||||
})[0];
|
})[0];
|
||||||
});
|
});
|
||||||
|
|
||||||
const allRoles = computed(() =>
|
const allRoles = computed(() =>
|
||||||
store.state.user.roles.map(role => role.name)
|
store.state.user.roles.map((role) => role.name)
|
||||||
);
|
);
|
||||||
const password = ref('');
|
const password = ref('');
|
||||||
const new_password = ref('');
|
const new_password = ref('');
|
||||||
|
@ -148,14 +165,13 @@ export default defineComponent({
|
||||||
function save() {
|
function save() {
|
||||||
let changed = <FG.User>props.user;
|
let changed = <FG.User>props.user;
|
||||||
changed = Object.assign(changed, {
|
changed = Object.assign(changed, {
|
||||||
password: password.value
|
password: password.value,
|
||||||
});
|
});
|
||||||
if (new_password.value != '') {
|
if (new_password.value != '') {
|
||||||
changed = Object.assign(changed, {
|
changed = Object.assign(changed, {
|
||||||
new_password: new_password.value
|
new_password: new_password.value,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
console.log(changed);
|
|
||||||
|
|
||||||
emit('update:user', changed);
|
emit('update:user', changed);
|
||||||
}
|
}
|
||||||
|
@ -206,8 +222,8 @@ export default defineComponent({
|
||||||
notEmpty,
|
notEmpty,
|
||||||
isUseridUsed,
|
isUseridUsed,
|
||||||
save,
|
save,
|
||||||
reset
|
reset,
|
||||||
};
|
};
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -68,6 +68,8 @@ const actions: ActionTree<UserStateInterface, StateInterface> = {
|
||||||
axios
|
axios
|
||||||
.get(`/users/${rootState.session.currentSession.userid}`)
|
.get(`/users/${rootState.session.currentSession.userid}`)
|
||||||
.then((response: AxiosResponse<CurrentUserResponse>) => {
|
.then((response: AxiosResponse<CurrentUserResponse>) => {
|
||||||
|
if (response.data.birthday)
|
||||||
|
response.data.birthday = new Date(response.data.birthday);
|
||||||
commit('setCurrentUser', response.data);
|
commit('setCurrentUser', response.data);
|
||||||
commit('setCurrentPermissions', response.data.permissions);
|
commit('setCurrentPermissions', response.data.permissions);
|
||||||
})
|
})
|
||||||
|
@ -87,6 +89,9 @@ const actions: ActionTree<UserStateInterface, StateInterface> = {
|
||||||
axios
|
axios
|
||||||
.get('/users')
|
.get('/users')
|
||||||
.then((response: AxiosResponse<FG.User[]>) => {
|
.then((response: AxiosResponse<FG.User[]>) => {
|
||||||
|
response.data.forEach(user => {
|
||||||
|
if (user.birthday) user.birthday = new Date(user.birthday);
|
||||||
|
});
|
||||||
commit('setUsers', response.data);
|
commit('setUsers', response.data);
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
|
Loading…
Reference in New Issue