feat: implementa sistema de logotipo dinâmico

- Adiciona campo 'logo' ao modelo Settings no Prisma
- Atualiza API /api/settings para lidar com upload de logo
- Cria aba Logotipo funcional no admin com upload de imagem
- Atualiza Header para exibir logo dinâmico (fallback para ícone)
- Atualiza Footer para exibir logo dinâmico
- Atualiza Admin Layout para exibir logo dinâmico
- Logo é atualizado em tempo real via evento settings:refresh
This commit is contained in:
Erik
2025-11-29 16:36:25 -03:00
parent cbad251b39
commit e503069a86
6 changed files with 308 additions and 16 deletions

View File

@@ -2,6 +2,7 @@
import { useEffect, useState } from 'react';
import Link from 'next/link';
import Image from 'next/image';
import { useLocale } from '@/contexts/LocaleContext';
import { PartnerBadge } from './PartnerBadge';
@@ -13,6 +14,7 @@ type ContactSettings = {
linkedin?: string | null;
facebook?: string | null;
whatsapp?: string | null;
logo?: string | null;
};
export default function Footer() {
@@ -35,7 +37,8 @@ export default function Footer() {
instagram: data.instagram,
linkedin: data.linkedin,
facebook: data.facebook,
whatsapp: data.whatsapp
whatsapp: data.whatsapp,
logo: data.logo
});
}
} catch (error) {
@@ -58,7 +61,18 @@ export default function Footer() {
{/* Brand */}
<div className="col-span-1 md:col-span-1">
<div className="flex items-center gap-2 mb-6">
<i className="ri-building-2-fill text-4xl text-primary"></i>
{contact.logo ? (
<Image
src={contact.logo}
alt="Logo"
width={40}
height={40}
className="object-contain"
unoptimized
/>
) : (
<i className="ri-building-2-fill text-4xl text-primary"></i>
)}
<div className="flex items-center gap-2">
<span className="text-2xl font-bold font-headline">OCCTO</span>
<span className="text-[10px] font-bold text-primary bg-white/10 px-2 py-1 rounded-md uppercase tracking-wider">ENG.</span>