PageSourceSearch

https://bewarnd.com/assets/sys.vertrieb.index-BbD-9WgB.js

js bewarnd.com collected 2026-10-08 19:25:07 UTC 9,238 bytes, 1 lines download raw bytes

1import{e as se,u as te,P as ae,Q as re,S as ne,T as ie,U as le,r as n,t as a,j as e,L as oe}from"./index-CUYHE-vR.js";import{u as l}from"./useServerFn-BOBgMgVr.js";import{u as ce}from"./useQuery-CghbyPts.js";import{u}from"./useMutation-D3ywMT7w.js";import{S as me}from"./SysShell-BC3PKUzZ.js";import{S as N,f as D}from"./sys-ui-B5e8h5wt.js";import{d as de,s as S,S as ue}from"./blocks-DeAS80bt.js";import{C as b,b as E,c as P,a as y}from"./card-CEaCIKgH.js";import{B as r}from"./button-BhXLT2Ki.js";import{I as x}from"./input-DYE2ZIIH.js";import{L as h}from"./label-O6UafU6q.js";import{B as xe}from"./badge-ChB08sOF.js";import{S as T,a as z,b as A,c as V,d as g}from"./select-BKfOlTHF.js";import{D as he,a as ge,b as pe,c as je,e as fe,d as ve}from"./dialog-CbgRhpvt.js";import{L as $}from"./loader-circle-DyBiffsG.js";import{P as Ne}from"./plus-D2MfflyE.js";import{F as B}from"./files-DU76EYl0.js";import{E as Se}from"./eye-CpEu_IWr.js";import{M as K}from"./mail-vW1wFqmj.js";import{S as be}from"./search-DqMhe-ue.js";import{C as ye}from"./copy-BSGTBmnT.js";import{E as we}from"./external-link-BT60KbgX.js";import{T as Ce}from"./trash-2-DF8ISL83.js";import"./BrandLogo-m7nME4zE.js";import"./shield-check-GsVCwSbH.js";import"./createLucideIcon-DLwbKbm5.js";import"./layout-dashboard-D_9QmXKr.js";import"./building-2-BzrTaik4.js";import"./users-D3hvNk7t.js";import"./boxes-DFtU-NqZ.js";import"./megaphone-X0XCVbcY.js";import"./sparkles-BdM4W39l.js";import"./settings-DVm1NLmt.js";import"./log-out-DTgFhhD-.js";import"./floating-ui.react-dom-BRK9D2JF.js";import"./index-_jXcNfx9.js";import"./chevron-down-DmxPYvQ9.js";import"./check-DCga5OmB.js";import"./chevron-up-DGAtKTbY.js";import"./index-COzJ4H0B.js";import"./index-DzUoH9t0.js";import"./index-CZpepo_v.js";import"./index-B4G4yD6V.js";import"./use-mobile-BrU47ekK.js";import"./x-CxT5F_K_.js";const ke={draft:"Entwurf",live:"Live",disabled:"Deaktiviert"};function fs(){const M=se(),q=te(),I=l(ae),O=l(re),Q=l(ne),H=l(ie),U=l(le),{data:w,isLoading:R}=ce({queryKey:["sys","sales"],queryFn:()=>I()}),[p,G]=n.useState(""),[Z,o]=n.useState(!1),[c,C]=n.useState(""),[k,L]=n.useState(""),[j,J]=n.useState("kommune"),[F,f]=n.useState(""),m=()=>M.invalidateQueries({queryKey:["sys","sales"]}),v=u({mutationFn:()=>O({data:{slug:F.trim()||S(c),customer_name:c.trim(),contact_name:k.trim()||null,segment:j,status:"draft",blocks:de(j)}}),onSuccess:s=>{a.success("Vorstellungsseite angelegt"),o(!1),C(""),L(""),f(""),m(),q({to:"/sys/vertrieb/$id",params:{id:s.id}})},onError:s=>a.error(s.message)}),W=u({mutationFn:s=>Q({data:{id:s}}),onSuccess:()=>{a.success("Seite dupliziert"),m()},onError:s=>a.error(s.message)}),X=u({mutationFn:s=>H({data:{id:s}}),onSuccess:()=>{a.success("Seite gelöscht"),m()},onError:s=>a.error(s.message)}),Y=u({mutationFn:s=>U({data:s}),onSuccess:m,onError:s=>a.error(s.message)}),i=w?.pages??[],d=w?.leads??[],_=n.useMemo(()=>{const s=p.trim().toLowerCase();return s?i.filter(t=>t.customer_name.toLowerCase().includes(s)||t.slug.toLowerCase().includes(s)||(t.city??"").toLowerCase().includes(s)):i},[i,p]);function ee(s){const t=`${window.location.origin}/vorstellung/${s}`;navigator.clipboard.writeText(t),a.success("Link kopiert")}return R?e.jsx("div",{className:"flex h-48 items-center justify-center",children:e.jsx($,{className:"h-5 w-5 animate-spin text-primary"})}):e.jsxs(e.Fragment,{children:[e.jsx(me,{title:"Vertrieb",description:"Persönliche Vorstellungsseiten für Leads — modular aufgebaut, mit Demo-Link und Kontaktformular.",action:e.jsxs(r,{size:"sm",className:"gap-2",onClick:()=>o(!0),children:[e.jsx(Ne,{className:"h-4 w-4"})," Neue Seite"]})}),e.jsxs("div",{className:"mb-5 grid gap-3 sm:grid-cols-3",children:[e.jsx(N,{label:"Seiten",value:i.length,icon:e.jsx(B,{className:"h-5 w-5"})}),e.jsx(N,{label:"Aufrufe gesamt",value:i.reduce((s,t)=>s+(t.view_count??0),0),icon:e.jsx(Se,{className:"h-5 w-5"})}),e.jsx(N,{label:"Offene Anfragen",value:d.filter(s=>s.status==="new").length,hint:`${d.length} insgesamt`,icon:e.jsx(K,{className:"h-5 w-5"})})]}),e.jsxs("div",{className:"relative mb-3 max-w-sm",children:[e.jsx(be,{className:"absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(x,{className:"pl-8",placeholder:"Kunde, Link oder Ort suchen",value:p,onChange:s=>G(s.target.value)})]}),e.jsxs("div",{className:"grid gap-3 lg:grid-cols-2",children:[_.map(s=>e.jsxs(b,{className:"border-border bg-card/60",children:[e.jsx(E,{className:"pb-2",children:e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx(P,{className:"truncate text-sm",children:s.customer_name}),e.jsxs("div",{className:"mt-1 truncate font-mono text-[11px] text-muted-foreground",children:["/vorstellung/",s.slug]})]}),e.jsx(xe,{variant:s.status==="live"?"secondary":"outline",className:"shrink-0 text-[10px]",children:ke[s.status]??s.status})]})}),e.jsxs(y,{className:"space-y-3 pt-0",children:[e.jsxs("div",{className:"flex flex-wrap gap-x-4 gap-y-1 text-xs text-muted-foreground",children:[e.jsx("span",{children:s.city?`${s.postal_code??""} ${s.city}`.trim():"Kein Ort"}),e.jsxs("span",{children:[s.view_count??0," Aufrufe"]}),e.jsxs("span",{children:["Zuletzt: ",D(s.last_viewed_at)]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(r,{size:"sm",variant:"outline",asChild:!0,children:e.jsx(oe,{to:"/sys/vertrieb/$id",params:{id:s.id},children:"Bearbeiten"})}),e.jsxs(r,{size:"sm",variant:"ghost",className:"gap-1.5",onClick:()=>ee(s.slug),children:[e.jsx(ye,{className:"h-3.5 w-3.5"})," Link"]}),e.jsx(r,{size:"sm",variant:"ghost",className:"gap-1.5",asChild:!0,children:e.jsxs("a",{href:`/vorstellung/${s.slug}`,target:"_blank",rel:"noreferrer",children:[e.jsx(we,{className:"h-3.5 w-3.5"})," Vorschau"]})}),e.jsxs(r,{size:"sm",variant:"ghost",className:"gap-1.5",onClick:()=>W.mutate(s.id),children:[e.jsx(B,{className:"h-3.5 w-3.5"})," Duplizieren"]}),e.jsx(r,{size:"sm",variant:"ghost",className:"gap-1.5 text-destructive",onClick:()=>{confirm(`Seite „${s.customer_name}" wirklich löschen?`)&&X.mutate(s.id)},children:e.jsx(Ce,{className:"h-3.5 w-3.5"})})]})]})]},s.id)),_.length?null:e.jsx(b,{className:"border-dashed border-border bg-card/30 lg:col-span-2",children:e.jsx(y,{className:"py-10 text-center text-sm text-muted-foreground",children:"Noch keine Vorstellungsseite angelegt."})})]}),e.jsxs(b,{className:"mt-6 border-border bg-card/60",children:[e.jsx(E,{className:"pb-2",children:e.jsxs(P,{className:"flex items-center gap-2 text-sm",children:[e.jsx(K,{className:"h-4 w-4 text-primary"})," Anfragen"]})}),e.jsx(y,{className:"space-y-2 pt-0",children:d.length?d.map(s=>e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3 rounded-md border border-border bg-background/40 px-3 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"text-sm font-medium",children:[s.name," ",e.jsx("span",{className:"text-xs font-normal text-muted-foreground",children:s.email})]}),e.jsxs("div",{className:"mt-0.5 text-xs text-muted-foreground",children:[s.interest==="appointment"?"Termin zur Vorstellung":"Rückruf"," ·"," ",s.sales_pages?.customer_name??"—"," · ",D(s.created_at),s.phone?` · ${s.phone}`:""]}),s.message?e.jsx("div",{className:"mt-1 text-xs text-muted-foreground",children:s.message}):null]}),e.jsxs(T,{value:s.status,onValueChange:t=>Y.mutate({id:s.id,status:t}),children:[e.jsx(z,{className:"h-8 w-40 text-xs",children:e.jsx(A,{})}),e.jsxs(V,{children:[e.jsx(g,{value:"new",children:"Neu"}),e.jsx(g,{value:"in_progress",children:"In Bearbeitung"}),e.jsx(g,{value:"done",children:"Erledigt"})]})]})]},s.id)):e.jsx("p",{className:"py-6 text-center text-sm text-muted-foreground",children:"Noch keine Anfragen eingegangen."})})]}),e.jsx(he,{open:Z,onOpenChange:o,children:e.jsxs(ge,{children:[e.jsxs(pe,{children:[e.jsx(je,{children:"Neue Vorstellungsseite"}),e.jsx(fe,{children:"Der Link entsteht aus dem Kundennamen und lässt sich anpassen."})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{children:[e.jsx(h,{htmlFor:"sp-name",children:"Kunde"}),e.jsx(x,{id:"sp-name",value:c,placeholder:"Stadt Musterhausen",onChange:s=>{C(s.target.value),f(S(s.target.value))}})]}),e.jsxs("div",{children:[e.jsx(h,{htmlFor:"sp-contact",children:"Ansprechpartner (optional)"}),e.jsx(x,{id:"sp-contact",value:k,placeholder:"Frau Müller",onChange:s=>L(s.target.value)})]}),e.jsxs("div",{children:[e.jsx(h,{children:"Segment"}),e.jsxs(T,{value:j,onValueChange:s=>J(s),children:[e.jsx(z,{children:e.jsx(A,{})}),e.jsx(V,{children:ue.map(s=>e.jsx(g,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs("div",{children:[e.jsx(h,{htmlFor:"sp-slug",children:"Link"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"shrink-0 text-xs text-muted-foreground",children:"/vorstellung/"}),e.jsx(x,{id:"sp-slug",value:F,onChange:s=>
1f(S(s.target.value))})]})]})]}),e.jsxs(ve,{children:[e.jsx(r,{variant:"outline",onClick:()=>o(!1),children:"Abbrechen"}),e.jsxs(r,{disabled:c.trim().length<2||v.isPending,onClick:()=>v.mutate(),children:[v.isPending?e.jsx($,{className:"mr-2 h-4 w-4 animate-spin"}):null,"Anlegen"]})]})]})})]})}export{fs as component};

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.