Charaktererstellung funktioniert

This commit is contained in:
2025-08-28 00:46:55 +02:00
parent 838e5fef32
commit cace6c40b8
7 changed files with 476 additions and 70 deletions
+29 -2
View File
@@ -244,7 +244,7 @@ export default {
alert('Your session has expired. Please log in again.')
} else if (error.response && error.response.status === 400) {
const errorMsg = error.response.data?.error || 'Invalid data submitted'
alert(`Error saving character data: ${errorMsg}`)
//alert(`Error saving character data: ${errorMsg}`)
} //else {
//alert('Failed to save character data. Please try again.')
//}
@@ -285,10 +285,37 @@ export default {
}
},
getUserIdFromToken() {
try {
const token = localStorage.getItem('token')
if (!token) return null
// Decode JWT token to get user ID
const base64Url = token.split('.')[1]
const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
const jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
}).join(''))
const payload = JSON.parse(jsonPayload)
return payload.user_id || payload.userID || payload.sub || null
} catch (error) {
console.error('Error decoding token:', error)
return null
}
},
async handleFinalize() {
try {
const token = localStorage.getItem('token')
const response = await API.post(`/api/characters/create-session/${this.sessionId}/finalize`, {}, {
const userId = this.getUserIdFromToken()
const requestBody = {}
if (userId) {
requestBody.user_id = userId
}
const response = await API.post(`/api/characters/create-session/${this.sessionId}/finalize`, requestBody, {
headers: { Authorization: `Bearer ${token}` },
})
@@ -360,13 +360,7 @@ export default {
selectedSkills: {
handler(newSkills) {
// Save skills automatically when they change
this.$emit('save', {
skills: newSkills,
skills_meta: {
totalUsedPoints: this.totalUsedPoints,
selectedCategory: this.selectedCategory
}
})
this.saveSkillsToSession()
},
deep: true
}
@@ -385,7 +379,22 @@ export default {
// Initialize component
this.initializeComponent()
},
beforeUnmount() {
// Ensure skills are saved when component is about to be unmounted
this.saveSkillsToSession()
},
methods: {
saveSkillsToSession() {
// Save skills to session data via emit
this.$emit('save', {
skills: this.selectedSkills,
skills_meta: {
totalUsedPoints: this.totalUsedPoints,
selectedCategory: this.selectedCategory
}
})
},
async initializeComponent() {
try {
this.isLoading = true
+35 -45
View File
@@ -1,53 +1,43 @@
<template>
<div class="cd-view">
<DeleteCharView
v-if="showDeleteDialog"
:character="character"
@deleted="handleDeleted"
@cancel="handleCancel"
/>
<p>Are you sure you want to delete {{ character.name }}?</p>
<button @click="deleteCharacter">Yes</button>
<button @click="$emit('cancel')">No</button>
</div>
</template>
<div class="cd-view">
<p>Are you sure you want to delete {{ character.name }}?</p>
<button @click="deleteCharacter" class="btn btn-danger">Yes, Delete</button>
<button @click="$emit('cancel')" class="btn btn-secondary">Cancel</button>
</div>
</template>
<script>
export default {
name: "DeleteCharView",
<script>
import API from '../utils/api'
props: {
character: {
type: Object,
required: true
}
},
methods: {
async deleteCharacter() {
try {
const response = await fetch(`/api/characters/${this.character.id}`, {
method: 'DELETE'
});
if (response.ok) {
this.$emit('deleted');
} else {
console.error('Failed to delete character');
}
} catch (error) {
console.error('Error:', error);
export default {
name: "DeleteCharView",
props: {
character: {
type: Object,
required: true
}
},
emits: ['deleted', 'cancel'],
methods: {
async deleteCharacter() {
try {
const response = await API.delete(`/api/characters/${this.character.id}`)
if (response.status === 200 || response.status === 204) {
this.$emit('deleted')
} else {
console.error('Failed to delete character')
}
},
handleCancel() {
this.showDeleteDialog = false;
// Optional: Go back in router history
this.$router.go(-1);
},
handleDeleted() {
this.$router.push('/characters');
} catch (error) {
console.error('Error deleting character:', error)
}
}
}
};
</script>
}
}
</script>
<style>
/*