Prepara versao dev 1.0

This commit is contained in:
Erik Silva
2025-12-08 21:47:38 -03:00
parent 512287698e
commit 190fde20c3
85 changed files with 7755 additions and 2317 deletions

View File

@@ -38,19 +38,6 @@ export default function CadastroPage() {
// Carregar dados do localStorage ao montar
useEffect(() => {
// Mostrar dica de atalho
setTimeout(() => {
toast('💡 Dica: Pressione a tecla T para preencher dados de teste automaticamente!', {
duration: 5000,
icon: '⚡',
style: {
background: '#FFA500',
color: '#fff',
fontWeight: 'bold',
},
});
}, 1000);
const saved = localStorage.getItem('cadastroFormData');
if (saved) {
try {
@@ -94,20 +81,6 @@ export default function CadastroPage() {
localStorage.setItem('cadastroFormData', JSON.stringify(dataToSave));
}, [currentStep, completedSteps, formData, contacts, password, passwordStrength, cnpjData, cepData, subdomain, domainAvailable, primaryColor, secondaryColor, logoUrl]);
// ATALHO DE TECLADO - Pressione T para preencher dados de teste
useEffect(() => {
const handleKeyPress = (e: KeyboardEvent) => {
if (e.key === 't' || e.key === 'T') {
if (confirm('🚀 PREENCHER DADOS DE TESTE?\n\nIsso vai preencher todos os campos automaticamente e ir pro Step 5.\n\nClique OK para continuar.')) {
fillTestData();
}
}
};
window.addEventListener('keydown', handleKeyPress);
return () => window.removeEventListener('keydown', handleKeyPress);
}, []);
// Função para atualizar formData
const updateFormData = (name: string, value: any) => {
setFormData(prev => ({ ...prev, [name]: value }));
@@ -323,48 +296,48 @@ export default function CadastroPage() {
const handleSubmitRegistration = async () => {
try {
const payload = {
// Step 1 - Dados Pessoais
email: formData.email,
password: password,
fullName: formData.fullName,
newsletter: formData.newsletter || false,
// Step 2 - Empresa
companyName: formData.companyName,
// Dados da agência
agencyName: formData.companyName,
subdomain: subdomain,
cnpj: formData.cnpj,
razaoSocial: cnpjData.razaoSocial,
razaoSocial: formData.razaoSocial,
description: formData.description,
website: formData.website,
industry: formData.industry,
teamSize: formData.teamSize,
// Step 3 - Localização e Contato
// Endereço
cep: formData.cep,
state: cepData.state,
city: cepData.city,
neighborhood: cepData.neighborhood,
street: cepData.street,
state: formData.state,
city: formData.city,
neighborhood: formData.neighborhood,
street: formData.street,
number: formData.number,
complement: formData.complement,
contacts: contacts,
// Step 4 - Domínio
subdomain: subdomain,
// Step 5 - Personalização
primaryColor: primaryColor,
secondaryColor: secondaryColor,
logoUrl: logoUrl,
// Admin
adminEmail: formData.email,
adminPassword: password,
adminName: formData.fullName,
};
console.log('📤 Enviando cadastro completo:', payload);
toast.loading('Criando sua conta...', { id: 'register' });
const data = await apiRequest(API_ENDPOINTS.register, {
const response = await fetch('/api/admin/agencies', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'Erro ao criar conta');
}
const data = await response.json();
console.log('📥 Resposta data:', data);
// Salvar autenticação
@@ -373,6 +346,7 @@ export default function CadastroPage() {
id: data.id,
email: data.email,
name: data.name,
role: data.role || 'ADMIN_AGENCIA',
tenantId: data.tenantId,
company: data.company,
subdomain: data.subdomain
@@ -382,7 +356,7 @@ export default function CadastroPage() {
// Sucesso - limpar localStorage do form
localStorage.removeItem('cadastroFormData');
toast.success('Conta criada com sucesso! Redirecionando para o painel...', {
toast.success('Conta criada com sucesso! Redirecionando para seu painel...', {
id: 'register',
duration: 2000,
style: {
@@ -391,9 +365,10 @@ export default function CadastroPage() {
},
});
// Aguardar 2 segundos e redirecionar para o painel
// Redirecionar para o painel da agência no subdomínio
setTimeout(() => {
window.location.href = '/painel';
const agencyUrl = `http://${data.subdomain}.localhost/login`;
window.location.href = agencyUrl;
}, 2000);
} catch (error: any) {
@@ -702,35 +677,12 @@ export default function CadastroPage() {
{currentStepData?.description}
</p>
</div>
{/* BOTÃO TESTE RÁPIDO - GRANDE E VISÍVEL */}
<button
type="button"
onClick={fillTestData}
className="px-8 py-4 text-xl font-bold text-white bg-yellow-500 hover:bg-yellow-600 rounded-lg shadow-2xl border-4 border-yellow-700 animate-pulse"
style={{ minWidth: '250px' }}
>
TESTE RÁPIDO
</button>
</div>
</div>
{/* Formulário */}
<div className="flex-1 overflow-y-auto bg-[#FDFDFC] px-6 sm:px-12 py-6">
<div className="max-w-2xl mx-auto">
{/* Botão Teste Rápido GRANDE */}
<div className="mb-6 p-4 bg-yellow-50 border-2 border-yellow-400 rounded-lg">
<button
type="button"
onClick={fillTestData}
className="w-full px-6 py-4 text-lg font-bold text-white bg-gradient-to-r from-[#FF3A05] to-[#FF0080] rounded-lg hover:opacity-90 transition-opacity shadow-lg"
>
CLIQUE AQUI - PREENCHER DADOS DE TESTE AUTOMATICAMENTE
</button>
<p className="text-sm text-yellow-800 mt-2 text-center">
Preenche todos os campos e vai direto pro Step 5 para você clicar em Finalizar
</p>
</div>
<form onSubmit={(e) => { e.preventDefault(); handleNext(e); }} className="space-y-6">
{currentStep === 1 && (
<div className="space-y-5">