feat(match3): Erweiterung der Match3-Admin-Funktionalitäten und -Modelle

- Implementierung neuer Endpunkte für die Verwaltung von Match3-Kampagnen, Levels, Objectives und Tile-Typen im Admin-Bereich.
- Anpassung der Admin-Services zur Unterstützung von Benutzerberechtigungen und Fehlerbehandlung.
- Einführung von neuen Modellen und Assoziationen für Match3-Levels und Tile-Typen in der Datenbank.
- Verbesserung der Internationalisierung für Match3-spezifische Texte in Deutsch und Englisch.
- Aktualisierung der Frontend-Routen und -Komponenten zur Verwaltung von Match3-Inhalten.
This commit is contained in:
Torsten Schulz (local)
2025-08-23 06:00:29 +02:00
parent 3eb7ae4e93
commit e168adeb51
40 changed files with 6474 additions and 1007 deletions

View File

@@ -93,6 +93,61 @@
"systemmessage": "Systemnachricht"
},
"confirmDelete": "Soll dieser Chatraum wirklich gelöscht werden?"
},
"match3": {
"title": "Match3 Level verwalten",
"newLevel": "Neues Level erstellen",
"editLevel": "Level bearbeiten",
"deleteLevel": "Level löschen",
"confirmDelete": "Möchtest du dieses Level wirklich löschen?",
"levelName": "Name",
"levelDescription": "Beschreibung",
"boardWidth": "Breite",
"boardHeight": "Höhe",
"moveLimit": "Zug-Limit",
"levelOrder": "Reihenfolge",
"boardLayout": "Board-Layout",
"tileTypes": "Verfügbare Tile-Typen",
"actions": "Aktionen",
"edit": "Bearbeiten",
"delete": "Löschen",
"save": "Speichern",
"cancel": "Abbrechen",
"update": "Aktualisieren",
"create": "Erstellen",
"boardControls": {
"fillAll": "Alle aktivieren",
"clearAll": "Alle deaktivieren",
"invert": "Invertieren"
},
"loading": "Lade Level...",
"retry": "Erneut versuchen",
"availableLevels": "Verfügbare Level: {count}",
"levelFormat": "Level {number}: {name}",
"levelObjectives": "Level-Objekte",
"objectivesTitle": "Siegvoraussetzungen",
"addObjective": "Objektiv hinzufügen",
"removeObjective": "Entfernen",
"objectiveType": "Typ",
"objectiveTypeScore": "Punkte sammeln",
"objectiveTypeMatches": "Matches machen",
"objectiveTypeMoves": "Züge verwenden",
"objectiveTypeTime": "Zeit einhalten",
"objectiveTypeSpecial": "Spezialziel",
"objectiveOperator": "Operator",
"operatorGreaterEqual": "Größer oder gleich (≥)",
"operatorLessEqual": "Kleiner oder gleich (≤)",
"operatorEqual": "Gleich (=)",
"operatorGreater": "Größer als (>)",
"operatorLess": "Kleiner als (<)",
"objectiveTarget": "Zielwert",
"objectiveTargetPlaceholder": "z.B. 100",
"objectiveOrder": "Reihenfolge",
"objectiveOrderPlaceholder": "1, 2, 3...",
"objectiveDescription": "Beschreibung",
"objectiveDescriptionPlaceholder": "z.B. Sammle 100 Punkte",
"objectiveRequired": "Erforderlich für Level-Abschluss",
"noObjectives": "Keine Siegvoraussetzungen definiert. Klicke auf 'Objektiv hinzufügen' um welche zu erstellen."
}
}
}

View File

@@ -53,7 +53,12 @@
"logentries": "Log-Einträge",
"edituser": "Benutzer bearbeiten",
"database": "Datenbank"
}
},
"minigames": "Minispiele",
"m-minigames": {
"match3": "Match3 Level"
},
"chatrooms": "Chaträume"
},
"m-friends": {
"manageFriends": "Freunde verwalten",

View File

@@ -1,3 +1,59 @@
{
"admin": {
"match3": {
"title": "Manage Match3 Levels",
"newLevel": "Create New Level",
"editLevel": "Edit Level",
"deleteLevel": "Delete Level",
"confirmDelete": "Do you really want to delete this level?",
"levelName": "Name",
"levelDescription": "Description",
"boardWidth": "Width",
"boardHeight": "Height",
"moveLimit": "Move Limit",
"levelOrder": "Order",
"boardLayout": "Board Layout",
"tileTypes": "Available Tile Types",
"actions": "Actions",
"edit": "Edit",
"delete": "Delete",
"save": "Save",
"cancel": "Cancel",
"update": "Update",
"create": "Create",
"boardControls": {
"fillAll": "Activate All",
"clearAll": "Deactivate All",
"invert": "Invert"
},
"loading": "Loading levels...",
"retry": "Retry",
"availableLevels": "Available Levels: {count}",
"levelFormat": "Level {number}: {name}",
"levelObjectives": "Level Objectives",
"objectivesTitle": "Victory Conditions",
"addObjective": "Add Objective",
"removeObjective": "Remove",
"objectiveType": "Type",
"objectiveTypeScore": "Collect Score",
"objectiveTypeMatches": "Make Matches",
"objectiveTypeMoves": "Use Moves",
"objectiveTypeTime": "Keep Time",
"objectiveTypeSpecial": "Special Goal",
"objectiveOperator": "Operator",
"operatorGreaterEqual": "Greater or equal (≥)",
"operatorLessEqual": "Less or equal (≤)",
"operatorEqual": "Equal (=)",
"operatorGreater": "Greater than (>)",
"operatorLess": "Less than (<)",
"objectiveTarget": "Target Value",
"objectiveTargetPlaceholder": "e.g. 100",
"objectiveOrder": "Order",
"objectiveOrderPlaceholder": "1, 2, 3...",
"objectiveDescription": "Description",
"objectiveDescriptionPlaceholder": "e.g. Collect 100 points",
"objectiveRequired": "Required for level completion",
"noObjectives": "No victory conditions defined. Click 'Add Objective' to create some."
}
}
}

View File

@@ -2,7 +2,8 @@ import AdminInterestsView from '../views/admin/InterestsView.vue';
import AdminContactsView from '../views/admin/ContactsView.vue';
import RoomsView from '../views/admin/RoomsView.vue';
import ForumAdminView from '../dialogues/admin/ForumAdminView.vue';
import AdminFalukantEditUserView from '../views/admin/falukant/EditUserView.vue'
import AdminFalukantEditUserView from '../views/admin/falukant/EditUserView.vue';
import AdminMinigamesView from '../views/admin/MinigamesView.vue';
const adminRoutes = [
{
@@ -34,6 +35,12 @@ const adminRoutes = [
name: 'AdminFalukantEditUserView',
component: AdminFalukantEditUserView,
meta: { requiresAuth: true }
},
{
path: '/admin/minigames/match3',
name: 'AdminMinigames',
component: AdminMinigamesView,
meta: { requiresAuth: true }
}
];

View File

@@ -10,10 +10,19 @@ const apiClient = axios.create({
apiClient.interceptors.request.use(config => {
const user = store.getters.user;
console.log('🔑 Axios Interceptor - User:', user);
if (user && user.authCode) {
config.headers['userId'] = user.id;
config.headers['authCode'] = user.authCode;
config.headers['userid'] = user.id;
config.headers['authcode'] = user.authCode; // Kleinschreibung!
console.log('📡 Setze Headers:', {
userid: user.id,
authcode: user.authCode
});
} else {
console.log('⚠️ Keine User-Daten verfügbar');
}
return config;
}, error => {
return Promise.reject(error);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff