diff --git a/src/main/webapp/master/clientes.html b/src/main/webapp/master/clientes.html index 64388c5..8afacd4 100644 --- a/src/main/webapp/master/clientes.html +++ b/src/main/webapp/master/clientes.html @@ -57,7 +57,13 @@
-
+
+
+ + +
+ +
diff --git a/src/main/webapp/master/clientes.js b/src/main/webapp/master/clientes.js index 365a016..06190bf 100644 --- a/src/main/webapp/master/clientes.js +++ b/src/main/webapp/master/clientes.js @@ -1,4 +1,5 @@ const empresaForm=document.querySelector('#empresa-form'),rows=document.querySelector('#rows'),busca=document.querySelector('#busca'),planoSelect=document.querySelector('#plano-select'),cadastroModal=document.querySelector('#cadastro-modal');let empresas=[],planos=[],modo=null,selecionado=null; +let modoSlugAuto='sequencial'; const Icons = { edit: '', @@ -14,6 +15,25 @@ function match(e,q){if(!q)return true;return [e.slug,e.nome,e.cnpj,e.status,e.pl function statusAction(e){const acao=e.status==='ativa'?'Bloquear':'Ativar';return ``} function detalheRow(e){if(selecionado!==e.id||!modo)return'';if(modo==='ver')return `

${esc(e.nome)}

Slug: ${esc(e.slug)}

CNPJ: ${esc(e.cnpj||'-')}

Status: ${esc(e.status)}

Plano: ${e.plano?`${esc(e.plano)} ${e.plano_valor_centavos?'- '+Util.money(e.plano_valor_centavos):''}`:'-'}

Conta principal: abra Editar para alterar dados da empresa; funcionarios ficam no acesso da empresa.

`;return `
`} +function proximoSlugSequencial(){ + let max=0; + for(const e of empresas){ + const n=parseInt(e.slug,10); + if(!isNaN(n)&&n>max)max=n; + } + return String(max+1).padStart(4,'0'); +} + +function slugify(text){ + return String(text||'') + .normalize('NFD') + .replace(/[\u0300-\u036f]/g,'') + .toLowerCase() + .trim() + .replace(/[^a-z0-9_-]+/g,'_') + .replace(/^_+|_+$/g,''); +} + function render(){ const q=busca.value.trim(); const lista=empresas.filter(e=>match(e,q)); @@ -43,9 +63,31 @@ window.alternarBusca=()=>{ } }; +window.alternarTipoSlug=()=>{ + const slugInput=empresaForm.querySelector('input[name="slug"]'); + const nomeInput=empresaForm.querySelector('input[name="nome"]'); + const btn=document.querySelector('#btn-slug-tipo'); + if(modoSlugAuto==='sequencial'){ + modoSlugAuto='nome'; + if(btn)btn.textContent='Usar sequencial'; + if(slugInput)slugInput.value=slugify(nomeInput?.value)||'cliente'; + }else{ + modoSlugAuto='sequencial'; + if(btn)btn.textContent='Gerar do nome'; + if(slugInput)slugInput.value=proximoSlugSequencial(); + } +}; + window.abrirModalCadastro=()=>{ cadastroModal?.classList.remove('hidden'); - empresaForm.querySelector('input[name="slug"]')?.focus(); + const slugInput=empresaForm.querySelector('input[name="slug"]'); + const btn=document.querySelector('#btn-slug-tipo'); + modoSlugAuto='sequencial'; + if(btn)btn.textContent='Gerar do nome'; + if(slugInput){ + slugInput.value=proximoSlugSequencial(); + } + empresaForm.querySelector('input[name="nome"]')?.focus(); }; window.fecharModalCadastro=()=>{ @@ -62,8 +104,20 @@ window.alternarCadastro=(forcar)=>{ } }; +const nomeInput=empresaForm.querySelector('input[name="nome"]'); +nomeInput?.addEventListener('input',()=>{ + if(modoSlugAuto==='nome'){ + const slugInput=empresaForm.querySelector('input[name="slug"]'); + if(slugInput)slugInput.value=slugify(nomeInput.value); + } +}); + empresaForm.onsubmit=async e=>{ e.preventDefault(); + const slugInput=empresaForm.querySelector('input[name="slug"]'); + if(slugInput&&!slugInput.value.trim()){ + slugInput.value=proximoSlugSequencial(); + } try{ await Api.post('/api/master/empresas',Util.formData(empresaForm)); empresaForm.reset();