Compare commits
2 Commits
33ba00a682
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 23fddbd976 | |||
| 353eb97563 |
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "frontend",
|
"name": "frontend",
|
||||||
"version": "0.1.0",
|
"version": "0.2.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "frontend",
|
"name": "frontend",
|
||||||
"version": "0.1.0",
|
"version": "0.2.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@lucide/vue": "^1.20.0",
|
"@lucide/vue": "^1.20.0",
|
||||||
"@primeuix/themes": "^2.0.3",
|
"@primeuix/themes": "^2.0.3",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "frontend",
|
"name": "frontend",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.1.0",
|
"version": "0.2.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
|
|||||||
@@ -13,7 +13,14 @@ const expandedVersions = ref<string[]>([releaseVersions[0]?.version ?? semanticV
|
|||||||
const featureCount = computed(() => releaseNotes.filter((note) => note.type === 'feature').length)
|
const featureCount = computed(() => releaseNotes.filter((note) => note.type === 'feature').length)
|
||||||
const fixCount = computed(() => releaseNotes.filter((note) => note.type === 'fix').length)
|
const fixCount = computed(() => releaseNotes.filter((note) => note.type === 'fix').length)
|
||||||
const versionCount = computed(() => releaseVersions.length)
|
const versionCount = computed(() => releaseVersions.length)
|
||||||
|
const currentRelease = computed(() => releaseVersions[0] ?? null)
|
||||||
const currentReleaseSummary = computed(() => releaseVersions[0]?.summary ?? 'Aktueller Feature-Release.')
|
const currentReleaseSummary = computed(() => releaseVersions[0]?.summary ?? 'Aktueller Feature-Release.')
|
||||||
|
const currentReleaseTypeLabel = computed(() => changeTypeLabel(currentRelease.value?.releaseType ?? 'feature'))
|
||||||
|
const currentReleaseTypeNote = computed(() =>
|
||||||
|
currentRelease.value
|
||||||
|
? `Aktueller Changelog-Eintrag fuer ${currentRelease.value.version}.`
|
||||||
|
: 'Aktueller Changelog-Eintrag.',
|
||||||
|
)
|
||||||
|
|
||||||
function versionFeatureCount(version: typeof releaseVersions[number]) {
|
function versionFeatureCount(version: typeof releaseVersions[number]) {
|
||||||
return version.notes.filter((note) => note.type === 'feature').length
|
return version.notes.filter((note) => note.type === 'feature').length
|
||||||
@@ -94,8 +101,8 @@ function changeTypeClasses(type: ReleaseChangeType) {
|
|||||||
<div class="grid gap-3 p-5 md:grid-cols-3">
|
<div class="grid gap-3 p-5 md:grid-cols-3">
|
||||||
<div class="rounded-2xl border border-violet-100 bg-violet-50/55 px-4 py-3">
|
<div class="rounded-2xl border border-violet-100 bg-violet-50/55 px-4 py-3">
|
||||||
<p class="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500">Release-Typ</p>
|
<p class="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500">Release-Typ</p>
|
||||||
<strong class="mt-1 block text-lg text-violet-700">Feature</strong>
|
<strong class="mt-1 block text-lg text-violet-700">{{ currentReleaseTypeLabel }}</strong>
|
||||||
<p class="mt-1 text-xs leading-5 text-slate-600">Nach deiner Regel: 0.x.0.</p>
|
<p class="mt-1 text-xs leading-5 text-slate-600">{{ currentReleaseTypeNote }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-2xl border border-emerald-100 bg-emerald-50/55 px-4 py-3">
|
<div class="rounded-2xl border border-emerald-100 bg-emerald-50/55 px-4 py-3">
|
||||||
<p class="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500">Neue Features</p>
|
<p class="text-[11px] font-semibold uppercase tracking-[0.18em] text-slate-500">Neue Features</p>
|
||||||
@@ -223,7 +230,7 @@ function changeTypeClasses(type: ReleaseChangeType) {
|
|||||||
|
|
||||||
<div class="flex items-start gap-3 rounded-2xl border border-violet-100 bg-violet-50/60 px-4 py-3 text-sm leading-6 text-violet-900">
|
<div class="flex items-start gap-3 rounded-2xl border border-violet-100 bg-violet-50/60 px-4 py-3 text-sm leading-6 text-violet-900">
|
||||||
<Info class="mt-0.5 h-4 w-4 shrink-0" />
|
<Info class="mt-0.5 h-4 w-4 shrink-0" />
|
||||||
<p>Diese Version ist als <strong>{{ semanticVersion }}</strong> gesetzt, weil der Schwerpunkt auf neuen Features und groesseren UX-Verbesserungen liegt. Die Pipeline darf Build-Metadaten ergaenzen, aber nicht selbst Major, Feature oder Fix entscheiden.</p>
|
<p>Die semantische Version <strong>{{ semanticVersion }}</strong> bleibt die Quelle fuer Release-Notes und Build-Metadaten. Die Pipeline darf nur die Build-Suffixe ergaenzen, aber nicht selbst den Changelog-Inhalt umdeuten.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,9 @@ export function useAdminTeamManager() {
|
|||||||
})),
|
})),
|
||||||
})
|
})
|
||||||
roles.value = result.roles
|
roles.value = result.roles
|
||||||
|
rolePermissionDrafts.value = Object.fromEntries(
|
||||||
|
result.roles.map((role) => [role.key, [...role.permissionKeys]]),
|
||||||
|
)
|
||||||
savedRoleSnapshot.value = JSON.stringify(rolePermissionDrafts.value)
|
savedRoleSnapshot.value = JSON.stringify(rolePermissionDrafts.value)
|
||||||
successMessage.value = 'Rollen und Berechtigungen wurden gespeichert.'
|
successMessage.value = 'Rollen und Berechtigungen wurden gespeichert.'
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ export interface VersionRule {
|
|||||||
description: string
|
description: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export const semanticVersion = '0.1.0'
|
export const semanticVersion = '0.2.3'
|
||||||
export const buildVersion = import.meta.env.VITE_BUILD_VERSION?.trim() || semanticVersion
|
export const buildVersion = import.meta.env.VITE_BUILD_VERSION?.trim() || semanticVersion
|
||||||
export const buildDateLabel = import.meta.env.VITE_BUILD_DATE?.trim() || '29.06.2026'
|
export const buildDateLabel = import.meta.env.VITE_BUILD_DATE?.trim() || '30.06.2026'
|
||||||
|
|
||||||
export const versionRules: VersionRule[] = [
|
export const versionRules: VersionRule[] = [
|
||||||
{
|
{
|
||||||
@@ -49,6 +49,60 @@ export const releaseVersions: ReleaseVersionEntry[] = [
|
|||||||
buildVersion,
|
buildVersion,
|
||||||
buildDateLabel,
|
buildDateLabel,
|
||||||
releaseType: 'feature',
|
releaseType: 'feature',
|
||||||
|
summary: 'Demo-Update mit Sponsorensektion, Gewinnerarchiv, saubereren Public-Daten, robusterer Request-Validierung und klareren Admin-Hinweisen.',
|
||||||
|
notes: [
|
||||||
|
{
|
||||||
|
type: 'feature',
|
||||||
|
title: 'Sponsoren- und Share-Bereich fuer die Demo erweitert',
|
||||||
|
description: 'Die Landingpage und die Demo-Season enthalten jetzt Beispiel-Sponsoren sowie gepflegte Share-Links, damit die Live-Demo vorzeigbarer ist.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'feature',
|
||||||
|
title: 'Aktuelle Demo-Season wurde mit Tier-Kategorien und Kandidaten aufgefuellt',
|
||||||
|
description: 'Die laufende Demo nutzt jetzt ein volleres Voting-Dataset mit Hidden-, Rising- und Shining-Star-Unterkategorien statt nur flacher Platzhalter.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'feature',
|
||||||
|
title: 'Gewinnerarchiv 2025 wird robuster nachgezogen',
|
||||||
|
description: 'Das Archiv-Seed greift jetzt auch dann sauber, wenn bereits leere oder vorbereitete Season-Shells in der Datenbank existieren.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Review-Queue und Kandidaten-Kategorien wieder korrekt',
|
||||||
|
description: 'Legacy-Kategorien blockieren nicht mehr die Nominierungs-Queue, Badge-Zaehler und Kandidaten-Dropdowns im Adminbereich.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Landingpage-Demo-Texte wurden bereinigt',
|
||||||
|
description: 'Oeffentliche Kategorien zeigen keine Demo-Tier-Artefakte mehr, und die Live-Demo-Inhalte werden per Vorwaerts-Migration sauber nachgezogen.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Hostbild faellt sauber auf das Default-Artwork zurueck',
|
||||||
|
description: 'Wenn in der Datenbank noch kein Hostbild hinterlegt ist, liefert der Public-Endpoint jetzt keinen 404 mehr, sondern ein nutzbares Fallback.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Public- und Admin-Requests crashen bei kaputten Bodies nicht mehr',
|
||||||
|
description: 'Votes, Team-Login, Site-Settings und Bulk-Risk-Resolve liefern jetzt saubere 400-Fehler; Nominations und Clips validieren Pflichtfelder frueher.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Owner-only Settings und Bulk-Risk-UX klarer kommuniziert',
|
||||||
|
description: 'Die Settings-Seiten erklaeren jetzt sichtbar, warum nur Owner oder Creator speichern duerfen, und der Risk-Bereich weist klarer auf Low-Severity-only Bulk hin.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'fix',
|
||||||
|
title: 'Login- und Admin-Polish aus dem Demo-Fix-Block integriert',
|
||||||
|
description: 'Pflicht-Passwortwechsel ist visuell als Warning markiert, der API-Disconnect-Toast ist weniger nervoes, und lange Admin-Seiten scrollen zuverlaessiger.',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
version: '0.1.0',
|
||||||
|
buildVersion: '0.1.0',
|
||||||
|
buildDateLabel: '29.06.2026',
|
||||||
|
releaseType: 'feature',
|
||||||
summary: 'Feature-Release mit neuem Admin-Cockpit, Voting- und Gewinner-Workflows, Landingpage-Polish, Workflow-Regeln und robusterer Deploy-Basis.',
|
summary: 'Feature-Release mit neuem Admin-Cockpit, Voting- und Gewinner-Workflows, Landingpage-Polish, Workflow-Regeln und robusterer Deploy-Basis.',
|
||||||
notes: [
|
notes: [
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user