feat: Add CMS and Member Area screens with ViewModels
- Implemented CmsViewModel to manage CMS data loading and state. - Created MemberAreaDetailScreens for displaying member information and news. - Added MembersViewModel and MemberNewsViewModel for managing member data and news. - Developed MemberAreaScreen to provide navigation and display member-related options. - Introduced ProfileScreen and ProfileViewModel for user profile management. - Implemented state management for loading, error handling, and form updates across screens.
This commit is contained in:
@@ -155,10 +155,11 @@
|
||||
|
||||
<script setup>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { AlertCircle, Check, Loader2, Lock } from 'lucide-vue-next'
|
||||
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
const authStore = useAuthStore()
|
||||
|
||||
const formData = ref({
|
||||
@@ -199,16 +200,15 @@ const handleLogin = async () => {
|
||||
if (response.success) {
|
||||
successMessage.value = 'Anmeldung erfolgreich! Sie werden weitergeleitet...'
|
||||
|
||||
// Redirect based on role
|
||||
// Redirect: prefer `redirect` query (only same-origin paths), otherwise open the member area.
|
||||
setTimeout(() => {
|
||||
const roles = response.user.roles || (response.user.role ? [response.user.role] : [])
|
||||
if (roles.includes('trainer')) {
|
||||
router.push('/cms/kontaktanfragen')
|
||||
} else if (roles.includes('admin') || roles.includes('vorstand') || roles.includes('newsletter')) {
|
||||
router.push('/cms')
|
||||
} else {
|
||||
router.push('/mitgliederbereich')
|
||||
const requested = route.query.redirect
|
||||
if (typeof requested === 'string' && requested.startsWith('/')) {
|
||||
router.push(requested)
|
||||
return
|
||||
}
|
||||
|
||||
router.push('/mitgliederbereich')
|
||||
}, 1000)
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -230,14 +230,13 @@ const handlePasskeyLogin = async () => {
|
||||
successMessage.value = 'Passkey-Anmeldung erfolgreich! Sie werden weitergeleitet...'
|
||||
|
||||
setTimeout(() => {
|
||||
const roles = response.user.roles || (response.user.role ? [response.user.role] : [])
|
||||
if (roles.includes('trainer')) {
|
||||
router.push('/cms/kontaktanfragen')
|
||||
} else if (roles.includes('admin') || roles.includes('vorstand') || roles.includes('newsletter')) {
|
||||
router.push('/cms')
|
||||
} else {
|
||||
router.push('/mitgliederbereich')
|
||||
const requested = route.query.redirect
|
||||
if (typeof requested === 'string' && requested.startsWith('/')) {
|
||||
router.push(requested)
|
||||
return
|
||||
}
|
||||
|
||||
router.push('/mitgliederbereich')
|
||||
}, 1000)
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -256,4 +255,3 @@ useHead({
|
||||
title: 'Login - Harheimer TC',
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user