PageSourceSearch

https://genesissa.com/_nuxt/CZllib--.js

js genesissa.com collected 2026-10-02 01:31:21 UTC 11,306 bytes, 1 lines download raw bytes

1import{_ as W}from"./CdUKF6gm.js";/* empty css        *//* empty css        */import{M as K,cd as Q,bW as X,b4 as Y,b7 as Z,co as z,x as r,H as ee,bO as l,v as ae,b as g,u as s,a_ as te,bE as e,w as i,bo as y,cs as N,ci as O,B as C,bm as x,ai as R,s as E,bc as o}from"./BqRK_f-2.js";import{C as se}from"./C4jdoUid.js";import{u as oe}from"./CNxMQkOW.js";import{u as re}from"./DyTmvOMJ.js";import{a as G}from"./DOcBdUHk.js";import"./Cbns0pqo.js";import"./2eavgsaj.js";import"./DD0bMvq5.js";import"./e5v6qK9R.js";import"./DXek99um.js";const le={nome:"Nome"};function ne(I={}){return Object.entries(le).filter(([a])=>!String(I?.[a]??"").trim()).map(([,a])=>a)}function ie(I=[],a={}){const j=Object.entries(a||{}).filter(([,k])=>String(k??"").trim()!==""),S=[],u=[];return(I||[]).forEach((k,n)=>{const c={};for(const[d,f]of j){const h=k?.[f],q=h==null?"":String(h).trim();q!==""&&(c[d]=q)}if(!c.nome){u.push({linha:n+2,motivo:"Sem nome"});return}S.push(c)}),{prontas:S,descartadas:u}}const ue={class:"mx-auto w-full max-w-5xl px-3 py-4 sm:px-4 md:py-6"},ce={class:"mb-5 mt-4"},de={class:"mt-1 text-sm text-[var(--muted)]"},me={class:"dashboard-card rounded-3xl p-4 md:p-6"},ve={class:"text-sm font-bold text-[var(--text)]"},pe={class:"mt-1 text-sm text-[var(--muted)]"},xe={class:"mt-4 flex flex-wrap items-center gap-3"},fe={key:0,class:"text-sm text-[var(--muted)]"},he={key:0,class:"mt-3 text-sm text-red-600 dark:text-red-400"},_e={key:1,class:"mt-3 rounded-xl border border-amber-500/30 bg-amber-500/5 px-3 py-2 text-xs text-[var(--text)]"},be={key:0,class:"dashboard-card mt-6 rounded-3xl p-4 md:p-6"},ge={class:"text-sm font-bold text-[var(--text)]"},ye={class:"mt-1 text-sm text-[var(--muted)]"},ke={class:"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2"},we=["for"],Ee={key:0,class:"text-red-500"},qe={key:1,class:"ml-1 rounded-md bg-[var(--accent-soft)] px-1.5 py-0.5 text-[10px] font-semibold normal-case tracking-normal text-[var(--accent)]"},Ce=["id","onUpdate:modelValue"],Ve={value:""},Ie=["value"],Se={key:0,class:"mt-3 text-sm text-red-600 dark:text-red-400"},Ae={key:1,class:"mt-5"},Me={class:"text-xs font-bold uppercase tracking-[0.06em] text-[var(--muted)]"},je={class:"mt-2 overflow-x-auto rounded-xl border border-[var(--border)]"},Be={class:"w-full text-sm"},Ne={class:"bg-[var(--surface-2)]"},Oe={key:1,class:"dashboard-card mt-6 rounded-3xl p-4 md:p-6"},Pe={class:"text-sm font-bold text-[var(--text)]"},$e={class:"mt-4 flex flex-wrap items-center gap-3"},Te={class:"w-40 shrink-0 text-xs font-bold uppercase tracking-[0.06em] text-[var(--muted)]",for:"funil-destino"},De=["value"],Ue={class:"mt-3 flex flex-wrap items-center gap-3"},Fe={class:"w-40 shrink-0 text-xs font-bold uppercase tracking-[0.06em] text-[var(--muted)]",for:"etapa-destino"},Le=["disabled"],ze={value:null},Re=["value"],Ge={class:"mt-2 text-xs text-[var(--muted)]"},He={class:"mt-4 rounded-xl border border-[var(--border)] bg-[var(--surface-2)] px-3 py-2 text-sm text-[var(--text)]"},Je={key:0,class:"text-[var(--muted)]"},We=["disabled"],Ke={key:0,class:"h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent"},Qe={key:0,class:"mt-3 text-xs text-[var(--muted)]"},Xe={key:1,class:"mt-4 rounded-xl border border-[var(--border)] bg-[var(--surface-2)] p-3 text-sm"},Ye={class:"font-semibold text-[var(--text)]"},Ze={key:0,class:"mt-2 space-y-0.5"},ea={key:1,class:"mt-2 rounded-lg border border-amber-500/30 bg-amber-500/5 px-2.5 py-1.5 text-xs text-[var(--text)]"},aa={key:2,class:"mt-2 rounded-lg border border-amber-500/30 bg-amber-500/5 px-2.5 py-1.5 text-xs text-[var(--text)]"},xa=K({__name:"importar",setup(I){const{tn:a}=Q(),{canImportarLeads:j}=oe(),{pageTitleClass:S}=re(),u=X(),k=x(null),n=x(null),c=x({}),d=x(null),f=x(null),h=x([]),q=x(!1),w=x(!1),P=x(!1),A=x(""),m=x(null),H=async v=>{const p=v.target.files?.[0];if(p){q.value=!0,A.value="",m.value=null;try{const _=await u.lerPlanilhaParaImportar(p);n.value=_,c.value={..._.sugestao||{}};for(const t of _.campos)t.campo in c.value||(c.value[t.campo]="")}catch(_){n.value=null,A.value=R(_,a("Não consegui ler esta planilha."))}finally{q.value=!1}}},$=E(()=>n.value?ie(n.value.linhas,c.value):{prontas:[],descartadas:[]}),V=E(()=>$.value.prontas),M=E(()=>$.value.descartadas),B=E(()=>ne(c.value)),T=E(()=>(n.value?.campos||[]).filter(v=>c.value[v.campo])),D=E(()=>V.value.slice(0,5)),U=E(()=>B.value.length===0&&V.value.length>0&&!!d.value&&!!f.value),F=async()=>
1{if(!d.value){h.value=[],f.value=null;return}try{const p=await u.fetchColunasDoFunil(d.value);h.value=[...p||[]].sort((_,t)=>_.ordem-t.ordem)}catch{h.value=[]}h.value.some(p=>p.id===f.value)||(f.value=null)},J=async()=>{if(!(!U.value||w.value)){w.value=!0,m.value=null;try{const v=await u.importarCardsPelaFila(V.value,d.value,f.value,()=>P.value);m.value=v,G.success(`${v.criados} ${a("cards criados")}`),n.value=null,c.value={},k.value&&(k.value.value="")}catch(v){v?.message!=="cancelado"&&G.error(R(v,a("Não foi possível importar")))}finally{w.value=!1}}};return Y(()=>{P.value=!0}),Z(async()=>{await u.loadFunis(),d.value=u.funilSelecionadoId||u.funis[0]?.id||null,await F()}),z(d,F),z(()=>u.funis.length,()=>{d.value||(d.value=u.funilSelecionadoId||u.funis[0]?.id||null)}),(v,p)=>{const _=W;return o(),r("div",ue,[ee(se),l(j)?(o(),r(g,{key:1},[s("header",ce,[s("h1",{class:te(l(S)??"text-xl font-bold text-[var(--text)] md:text-2xl")},e(l(a)("Importar planilha para o CRM")),3),s("p",de,e(l(a)("Use a planilha que você já tem. Você escolhe o que cada coluna significa — não precisa renomear nada.")),1)]),s("div",me,[s("h2",ve,e(l(a)("1. Escolha a planilha")),1),s("p",pe,e(l(a)("Aceita .csv, .xlsx e .xlsm, até 10 MB.")),1),s("div",xe,[s("input",{ref_key:"campoArquivo",ref:k,type:"file",accept:".csv,.xlsx,.xlsm",class:"block w-full max-w-sm text-sm text-[var(--text)] file:mr-3 file:rounded-xl file:border-0 file:bg-[var(--accent-soft)] file:px-4 file:py-2 file:text-sm file:font-semibold file:text-[var(--accent)]",onChange:H},null,544),q.value?(o(),r("span",fe,e(l(a)("Lendo a planilha…")),1)):i("",!0)]),A.value?(o(),r("p",he,e(A.value),1)):i("",!0),n.value&&n.value.truncado?(o(),r("p",_e,e(l(a)("A planilha tem"))+" "+e(n.value.total_lido)+" "+e(l(a)("linhas e eu li as primeiras"))+" "+e(n.value.maximo_de_linhas)+". "+e(l(a)("Divida o arquivo para importar o resto.")),1)):i("",!0)]),n.value?(o(),r("div",be,[s("h2",ge,e(l(a)("2. Onde cada coluna cai")),1),s("p",ye,e(l(a)("Já adivinhei pelo nome das colunas. Confira e troque o que estiver errado — deixe em branco o que não quiser importar.")),1),s("div",ke,[(o(!0),r(g,null,y(n.value.campos,t=>(o(),r("div",{key:t.campo,class:"flex items-center gap-3"},[s("label",{class:"w-40 shrink-0 text-xs font-bold uppercase tracking-[0.06em] text-[var(--muted)]",for:`mapa-${t.campo}`},[C(e(t.rotulo),1),t.obrigatorio?(o(),r("span",Ee," *")):i("",!0),t.personalizado?(o(),r("span",qe,e(l(a)("seu campo")),1)):i("",!0)],8,we),N(s("select",{id:`mapa-${t.campo}`,"onUpdate:modelValue":b=>c.value[t.campo]=b,class:"min-w-0 flex-1 rounded-xl border border-[var(--border)] bg-[var(--surface-2)] px-3 py-2 text-sm text-[var(--text)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"},[s("option",Ve,e(l(a)("— não importar —")),1),(o(!0),r(g,null,y(n.value.cabecalhos,b=>(o(),r("option",{key:b,value:b},e(b),9,Ie))),128))],8,Ce),[[O,c.value[t.campo]]])]))),128))]),B.value.length?(o(),r("p",Se,e(l(a)("Escolha a coluna de"))+" "+e(B.value.join(", "))+" "+e(l(a)("para continuar.")),1)):i("",!0),D.value.length?(o(),r("div",Ae,[s("h3",Me,e(l(a)("Prévia das primeiras linhas")),1),s("div",je,[s("table",Be,[s("thead",Ne,[s("tr",null,[(o(!0),r(g,null,y(T.value,t=>(o(),r("th",{key:t.campo,class:"px-3 py-2 text-left text-xs font-bold uppercase tracking-[0.06em] text-[var(--muted)]"},e(t.rotulo),1))),128))])]),s("tbody",null,[(o(!0),r(g,null,y(D.value,(t,b)=>(o(),r("tr",{key:b,class:"border-t border-[var(--border)]"},[(o(!0),r(g,null,y(T.value,L=>(o(),r("td",{key:L.campo,class:"px-3 py-2 text-[var(--text)]"},e(t[L.campo]||"—"),1))),128))]))),128))])])])])):i("",!0)])):i("",!0),n.value?(o(),r("div",Oe,[s("h2",Pe,e(l(a)("3. Para onde vão os cards")),1),s("div",$e,[s("label",Te,e(l(a)("Funil")),1),N(s("select",{id:"funil-destino","onUpdate:modelValue":p[0]||(p[0]=t=>d.value=t),class:"min-w-0 flex-1 rounded-xl border border-[var(--border)] bg-[var(--surface-2)] px-3 py-2 text-sm text-[var(--text)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)]"},[(o(!0),r(g,null,y(l(u).funis,t=>(o(),r("option",{key:t.id,value:t.id},e(t.nome),9,De))),128))],512),[[O,d.value]])]),s("div",Ue,[s("label",Fe,e(l(a)("Etapa")),1),N(s("select",{id:"etapa-destino","onUpdate:modelValue":p[1]||(p[1]=t=>f.value=t),disabled:!h.value.length,class:"min-w-0 flex-1 rounded-xl border border-[var(--border)] bg-[var(--surface-2)] px-3 py-2 text-sm text-[var(--text)] focu
1s:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] disabled:opacity-50"},[s("option",ze,e(l(a)("Escolha a etapa…")),1),(o(!0),r(g,null,y(h.value,t=>(o(),r("option",{key:t.id,value:t.id},e(t.nome),9,Re))),128))],8,Le),[[O,f.value]])]),s("p",Ge,e(l(a)("Todos os cards desta planilha entram na etapa escolhida — a não ser que você mapeie uma coluna de Etapa no passo 2, que aí manda a da planilha.")),1),s("div",He,[C(e(l(a)("Vão entrar"))+" ",1),s("strong",null,e(V.value.length),1),C(" "+e(l(a)("linhas."))+" ",1),M.value.length?(o(),r("span",Je,e(M.value.length)+" "+e(l(a)("ficam de fora por estar sem nome (linhas"))+" "+e(M.value.slice(0,8).map(t=>t.linha).join(", "))+e(M.value.length>8?"…":"")+"). ",1)):i("",!0)]),s("button",{type:"button",disabled:!U.value||w.value,class:"btn-primary-gradient mt-4 inline-flex min-h-[44px] items-center justify-center gap-2 rounded-xl px-5 py-2.5 text-sm font-semibold text-white transition duration-200 disabled:opacity-45",onClick:J},[w.value?(o(),r("span",Ke)):i("",!0),C(" "+e(w.value?l(a)("Importando…"):`${l(a)("Importar")} ${V.value.length} ${l(a)("linhas")}`),1)],8,We),w.value?(o(),r("p",Qe,e(l(a)("A importação roda no servidor e pode levar alguns minutos em planilha grande. Ela continua mesmo se você fechar esta aba — os cards vão aparecendo no funil.")),1)):i("",!0),m.value?(o(),r("div",Xe,[s("p",Ye,e(m.value.criados)+" "+e(l(a)("cards criados"))+" · "+e(m.value.ignorados)+" "+e(l(a)("ignorados")),1),m.value.erros?.length?(o(),r("ul",Ze,[(o(!0),r(g,null,y(m.value.erros.slice(0,10),(t,b)=>(o(),r("li",{key:b,class:"text-xs text-[var(--muted)]"},e(t.nome)+": "+e(t.motivo),1))),128))])):i("",!0),m.value.responsaveis_nao_encontrados?.length?(o(),r("p",ea,[C(e(l(a)("Estes nomes da coluna de responsável não batem com nenhum colaborador ativo, e os cards entraram sem dono:"))+" ",1),s("strong",null,e(m.value.responsaveis_nao_encontrados.join(", ")),1)])):i("",!0),m.value.etapas_nao_encontradas?.length?(o(),r("p",aa,[C(e(l(a)("Estas etapas da planilha não batem com nenhuma coluna deste funil (ou batem com mais de uma), e esses cards entraram na etapa escolhida acima:"))+" ",1),s("strong",null,e(m.value.etapas_nao_encontradas.join(", ")),1)])):i("",!0)])):i("",!0)])):i("",!0)],64)):(o(),ae(_,{key:0,message:"Você não tem permissão para importar leads."}))])}}});export{xa as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.