diff --git a/server.ts b/server.ts index c9b8085..29c3389 100644 --- a/server.ts +++ b/server.ts @@ -1235,7 +1235,9 @@ app.get('/api/settings', async (req: Request, res: Response) => { brandName: settings?.brandName || 'MICROTEC', brandSlogan: settings?.brandSlogan || 'Acelere seus estudos em informática e pacote Office no estilo Netflix.', cnpj: settings?.cnpj || '', - address: settings?.address || '' + address: settings?.address || '', + termsOfUse: settings?.termsOfUse || '', + privacyPolicy: settings?.privacyPolicy || '' }); }); @@ -1263,7 +1265,9 @@ app.get('/api/admin/settings', authenticateToken, requireAdmin, async (req: Auth smtpUser: settings?.smtpUser || '', smtpPass: settings?.smtpPass || '', smtpFrom: settings?.smtpFrom || 'no-reply@microtecinformaticacurso.com.br', - smtpSecure: settings?.smtpSecure || false + smtpSecure: settings?.smtpSecure || false, + termsOfUse: settings?.termsOfUse || '', + privacyPolicy: settings?.privacyPolicy || '' }); }); diff --git a/src/App.tsx b/src/App.tsx index 63078f9..4447947 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -12,6 +12,7 @@ import CourseUnlockModal from './components/CourseUnlockModal'; import CertificatesTab from './components/CertificatesTab'; import ProfileView from './components/ProfileView'; import HelpView from './components/HelpView'; +import CustomModal from './components/CustomModal'; import { User as UserType, Course as CourseType, SubscriptionStatus } from './types'; export default function App() { @@ -51,7 +52,8 @@ export default function App() { // Course catalogue const [courses, setCourses] = useState<(CourseType & { progress?: number; totalLessons?: number; completedLessons?: number })[]>([]); const [isLoadingCourses, setIsLoadingCourses] = useState(false); - const [settings, setSettings] = useState<{ brandName?: string; brandSlogan?: string; cnpj?: string; address?: string } | null>(null); + const [settings, setSettings] = useState<{ brandName?: string; brandSlogan?: string; cnpj?: string; address?: string; termsOfUse?: string; privacyPolicy?: string } | null>(null); + const [infoModal, setInfoModal] = useState<{isOpen: boolean, title: string, content: string}>({isOpen: false, title: '', content: ''}); useEffect(() => { const urlParams = new URLSearchParams(window.location.search); @@ -461,8 +463,34 @@ export default function App() { {settings?.cnpj && (

CNPJ: {settings.cnpj} • Endereço: {settings.address}

)} -

© 2026 {(settings?.brandName || 'Plataforma')}FLIX Inc. Todos os direitos reservados. Integrado oficialmente com a API Asaas.

+
+ + +
+

© 2026 {(settings?.brandName || 'Plataforma')}FLIX Inc. Todos os direitos reservados. Integrado oficialmente com a API Asaas.

+ + {/* Info Modal for Terms and Privacy */} + setInfoModal({...infoModal, isOpen: false})} + title={infoModal.title} + isGlass={true} + > +
+ {infoModal.content} +
+
) : ( /* --- UNAUTHENTICATED PORTAL (LOGIN / REGISTER) --- */ diff --git a/src/components/AdminDashboard.tsx b/src/components/AdminDashboard.tsx index 9b5d1d1..515b2fb 100644 --- a/src/components/AdminDashboard.tsx +++ b/src/components/AdminDashboard.tsx @@ -1346,6 +1346,28 @@ export default function AdminDashboard({ token, adminUser, onLogout }: AdminDash

Exibido no rodapé do portal.

+
+ +