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

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>YourPart</title>
<script type="module" crossorigin src="/assets/index-C2z2YL6l.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BLkCbvUa.css">
</head>
<body>
<div id="app"></div>
</body>
</html>

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