flaschengeist-frontend/src/plugins/user/pages/AdminSettings.vue

119 lines
2.9 KiB
Vue
Raw Normal View History

<template>
<div>
2020-11-12 13:28:02 +00:00
<q-tabs v-model="tab" v-if="$q.screen.gt.sm">
<q-tab
v-for="(tabindex, index) in tabs"
:key="'tab' + index"
:name="tabindex.name"
:label="tabindex.label"
/>
2020-11-12 13:28:02 +00:00
</q-tabs>
<div class="fit row justify-end" v-else>
<q-btn flat round icon="mdi-menu" @click="showDrawer = !showDrawer" />
2020-11-12 13:28:02 +00:00
</div>
<q-drawer
side="right"
v-model="showDrawer"
@click="showDrawer = !showDrawer"
behavior="mobile"
>
2020-11-12 13:28:02 +00:00
<q-list v-model="tab">
<q-item
v-for="(tabindex, index) in tabs"
:key="'tab' + index"
:active="tab == tabindex.name"
clickable
@click="tab = tabindex.name"
>
2020-11-12 13:28:02 +00:00
<q-item-label>{{ tabindex.label }}</q-item-label>
</q-item>
</q-list>
</q-drawer>
<q-page
padding
class="fit row justify-center content-start items-start q-gutter-sm"
>
<q-tab-panels
v-model="tab"
style="background-color: transparent;"
class="q-ma-none q-pa-none"
animated
>
2020-11-12 13:28:02 +00:00
<q-tab-panel name="user">
<UpdateUser />
2020-11-12 13:28:02 +00:00
</q-tab-panel>
<q-tab-panel name="newUser">
<NewUser />
2020-11-12 13:28:02 +00:00
</q-tab-panel>
<q-tab-panel name="roles">
<RoleSettings v-if="canEditRoles" />
2020-11-12 13:28:02 +00:00
</q-tab-panel>
</q-tab-panels>
</q-page>
</div>
</template>
<script lang="ts">
import {
computed,
defineComponent,
onBeforeMount,
ref
} from '@vue/composition-api';
import RoleSettings from '../components/settings/RoleSettings.vue';
import UpdateUser from '../components/UpdateUser.vue';
import NewUser from '../components/NewUser.vue';
import { Store } from 'vuex';
import { StateInterface } from 'src/store';
import { hasPermission } from 'src/components/permission';
import { PERMISSIONS } from '../permissions';
import { Screen } from 'quasar';
export default defineComponent({
name: 'AdminSettings',
components: { RoleSettings, UpdateUser, NewUser },
setup(_, { root }) {
const store = <Store<StateInterface>>root.$store;
onBeforeMount(() => {
store.dispatch('user/getUsers').catch(error => console.warn(error));
});
const canEditRoles = computed(() =>
hasPermission(PERMISSIONS.ROLES_EDIT, store)
);
2020-11-12 13:28:02 +00:00
interface Tab {
name: string;
label: string;
}
const tabs: Tab[] = [
{ name: 'user', label: 'Mitglieder' },
{ name: 'newUser', label: 'Neues Mitglied' },
{ name: 'roles', label: 'Rollen' }
];
2020-11-12 13:28:02 +00:00
const drawer = ref<boolean>(false);
2020-11-12 13:28:02 +00:00
const showDrawer = computed({
get: () => {
return !Screen.gt.sm && drawer.value;
2020-11-12 13:28:02 +00:00
},
set: (val: boolean) => {
drawer.value = val;
2020-11-12 13:28:02 +00:00
}
});
2020-11-12 13:28:02 +00:00
const tab = ref<string>('user');
return {
2020-11-12 13:28:02 +00:00
canEditRoles,
showDrawer,
tab,
tabs
};
}
});
</script>