Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 2s
Monorepo Pipeline / 🧹 Lint (push) Successful in 1m1s
Monorepo Pipeline / 🚀 Release (push) Has been cancelled
Monorepo Pipeline / 🧪 Test (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been cancelled
Monorepo Pipeline / 🏗️ Build (push) Has been cancelled
2 lines
14 KiB
JavaScript
2 lines
14 KiB
JavaScript
import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as l,onMounted as i,resolveComponent as s,resolveDirective as r,openBlock as o,createBlock as u,withCtx as d,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as b,createCommentVNode as g,createElementVNode as y,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,$=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const C={class:"content-wrapper"},V={key:0,class:"empty-state"},A={class:"header"},F={class:"header-left"},O={class:"title"},j={class:"subtitle"},P=["href"],U={class:"header-right"},L={class:"sections"},q={class:"main-info"},z={class:"form-grid"},E={class:"field"},S={key:1,class:"value text-subdued"},B={class:"field full"},N={class:"value text-block"},D={key:0,class:"ai-observations"},T={class:"metrics"},I={class:"page-title"},K={class:"page-url"},M={class:"drawer-content"},R={class:"form-section"},W={class:"field"},G={class:"field"},Z={class:"field"},H={class:"field"},J={class:"drawer-actions"};var Q=t({__name:"module",setup(a){const t=e(),_=n([]),Q=n(null),X=n(!1),Y=n(!1),ee=n(!1),ae=n(!1),te=n(!1),ne=n(null),le=n({company:null,website_url:"",contact_person:null,briefing:"",status:"new"}),ie=n([]),se=n([]),re=l(()=>ie.value.map(e=>({text:e.name,value:e.id}))),oe=l(()=>se.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function ue(e){var a;return e.company?"object"==typeof e.company?e.company.name:(null==(a=ie.value.find(a=>a.id===e.company))?void 0:a.name)||e.company_name:e.company_name}function de(e){if(!e)return"";if("object"==typeof e)return`${e.first_name} ${e.last_name}`;const a=se.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ce=l(()=>_.value.find(e=>e.id===Q.value));async function ve(){const[e,a,n]=await Promise.all([t.get("/items/leads",{params:{sort:"-date_created",fields:"*.*"}}),t.get("/items/people",{params:{sort:"last_name"}}),t.get("/items/companies",{params:{sort:"name"}})]);_.value=e.data.data,se.value=a.data.data,ie.value=n.data.data,!Q.value&&_.value.length>0&&(Q.value=_.value[0].id)}async function pe(){await ve()}async function me(){if(Q.value){X.value=!0;try{await t.post(`/acquisition/audit/${Q.value}`),ne.value={type:"success",message:"Audit erfolgreich gestartet!"},await pe()}catch(e){ne.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{X.value=!1}}}async function fe(){if(Q.value){ee.value=!0;try{await t.post(`/acquisition/audit-email/${Q.value}`),ne.value={type:"success",message:"Audit E-Mail versendet!"},await pe()}catch(e){ne.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ee.value=!1}}}async function be(){if(Q.value){Y.value=!0;try{await t.post(`/acquisition/estimate/${Q.value}`),ne.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await pe()}catch(e){ne.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{Y.value=!1}}}async function ge(){if(Q.value){ee.value=!0;try{await t.post(`/acquisition/estimate-email/${Q.value}`),ne.value={type:"success",message:"Angebot erfolgreich versendet!"},await pe()}catch(e){ne.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ee.value=!1}}}function ye(){var e;(null==(e=ce.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ce.value.audit_pdf_path}`,"_blank")}async function he(){if(le.value.company){te.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&$(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&$(e,t,a[t]);return e})({id:crypto.randomUUID()},le.value);await t.post("/items/leads",e),ne.value={type:"success",message:"Lead erfolgreich registriert!"},ae.value=!1,await pe(),Q.value=e.id,le.value={company:null,website_url:"",contact_person:null,briefing:"",status:"new"}}catch(e){ne.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{te.value=!1}}else ne.value={type:"danger",message:"Organisation erforderlich."}}function _e(e){switch(e){case"new":return"fiber_new";case"auditing":return"hourglass_empty";case"audit_ready":return"check_circle";case"contacted":return"mail_outline";default:return"help_outline"}}function xe(e){switch(e){case"new":return"var(--theme--primary)";case"auditing":return"var(--theme--warning)";case"audit_ready":return"var(--theme--success)";case"contacted":return"var(--theme--secondary)";default:return"var(--theme--foreground-subdued)"}}return i(ve),(e,a)=>{const t=s("v-icon"),n=s("v-list-item-icon"),l=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),$=s("v-notice"),ie=s("v-button"),se=s("v-info"),ve=s("v-table"),pe=s("v-select"),we=s("v-input"),ke=s("v-textarea"),$e=s("v-drawer"),Ce=s("private-view"),Ve=r("tooltip");return o(),u(Ce,{title:"Acquisition Manager"},{navigation:d(()=>[c(k,{nav:""},{default:d(()=>[c(x,{onClick:a[0]||(a[0]=e=>ae.value=!0),clickable:""},{default:d(()=>[c(n,null,{default:d(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:d(()=>[c(l,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(o(!0),v(p,null,m(_.value,e=>(o(),u(x,{key:e.id,active:Q.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(Q.value=t);var t}},{default:d(()=>[c(n,null,{default:d(()=>[c(t,{name:_e(e.status),color:xe(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:d(()=>[c(l,{text:ue(e)},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":d(()=>[ne.value?(o(),u($,{key:0,type:ne.value.type,onClose:a[1]||(a[1]=e=>ne.value=null),dismissible:""},{default:d(()=>[f(b(ne.value.message),1)]),_:1},8,["type"])):g("v-if",!0)]),default:d(()=>{var e;return[y("div",C,[ce.value?(o(),v(p,{key:1},[y("header",A,[y("div",F,[y("h1",O,b(ue(ce.value)),1),y("p",j,[c(t,{name:"language","x-small":""}),y("a",{href:ce.value.website_url,target:"_blank",class:"url-link"},b(ce.value.website_url.replace(/^https?:\/\//,"")),9,P),f(" · Status: "+b(ce.value.status.toUpperCase()),1)])]),y("div",U,["new"===ce.value.status?(o(),u(ie,{key:0,secondary:"",loading:X.value,onClick:me},{default:d(()=>[c(t,{name:"settings_suggest",left:""}),a[13]||(a[13]=f(" Audit starten ",-1))]),_:1},8,["loading"])):g("v-if",!0),"audit_ready"===ce.value.status?(o(),v(p,{key:1},[c(ie,{secondary:"",loading:ee.value,onClick:fe},{default:d(()=>[c(t,{name:"mail",left:""}),a[14]||(a[14]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(ie,{loading:Y.value,onClick:be},{default:d(()=>[c(t,{name:"picture_as_pdf",left:""}),a[15]||(a[15]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):g("v-if",!0),ce.value.audit_pdf_path?h((o(),u(ie,{key:2,secondary:"",icon:"",onClick:ye},{default:d(()=>[c(t,{name:"open_in_new"})]),_:1})),[[Ve,"PDF öffnen",void 0,{bottom:!0}]]):g("v-if",!0),ce.value.audit_pdf_path?(o(),u(ie,{key:3,primary:"",loading:ee.value,onClick:ge},{default:d(()=>[c(t,{name:"send",left:""}),a[16]||(a[16]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):g("v-if",!0)])]),y("div",L,[y("div",q,[y("div",z,[y("div",E,[a[17]||(a[17]=y("span",{class:"label"},"Kontaktperson",-1)),ce.value.contact_person?(o(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ce.value.contact_person,void(ne.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},b(de(ce.value.contact_person)),1)):(o(),v("div",S,"Keine Person verknüpft"))]),y("div",B,[a[18]||(a[18]=y("span",{class:"label"},"Briefing / Fokus",-1)),y("div",N,b(ce.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ce.value.ai_state?(o(),v("div",D,[a[19]||(a[19]=y("h3",{class:"section-title"},"AI Observations & Estimation",-1)),y("div",T,[c(se,{label:"Projekt-Modus",value:ce.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(se,{label:"Seitenanzahl",value:(null==(e=ce.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ce.value.ai_state.sitemap?(o(),u(ve,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ce.value.ai_state.sitemap,class:"observation-table"},{"item.title":d(({item:e})=>[y("span",I,b(e.title),1)]),"item.url":d(({item:e})=>[y("span",K,b(e.url),1)]),_:2},1032,["items"])):g("v-if",!0)])):g("v-if",!0)])],64)):(o(),v("div",V,[c(se,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:d(()=>[a[11]||(a[11]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(ie,{"x-small":"",onClick:a[2]||(a[2]=e=>ae.value=!0)},{default:d(()=>[...a[10]||(a[10]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[12]||(a[12]=f(". ",-1))]),_:1})]))]),c($e,{modelValue:ae.value,"onUpdate:modelValue":a[8]||(a[8]=e=>ae.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[9]||(a[9]=e=>ae.value=!1)},{default:d(()=>[y("div",M,[y("div",R,[y("div",W,[a[20]||(a[20]=y("span",{class:"label"},"Organisation / Firma (Zentral)",-1)),c(pe,{modelValue:le.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>le.value.company=e),items:re.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),y("div",G,[a[21]||(a[21]=y("span",{class:"label"},"Website URL",-1)),c(we,{modelValue:le.value.website_url,"onUpdate:modelValue":a[5]||(a[5]=e=>le.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),y("div",Z,[a[22]||(a[22]=y("span",{class:"label"},"Briefing / Fokus",-1)),c(ke,{modelValue:le.value.briefing,"onUpdate:modelValue":a[6]||(a[6]=e=>le.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),y("div",H,[a[23]||(a[23]=y("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(pe,{modelValue:le.value.contact_person,"onUpdate:modelValue":a[7]||(a[7]=e=>le.value.contact_person=e),items:oe.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),y("div",J,[c(ie,{primary:"",block:"",loading:te.value,onClick:he},{default:d(()=>[...a[24]||(a[24]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),X=[],Y=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,n=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var s=X.indexOf(i);-1===s&&(s=X.push(i)-1,Y[s]={}),t=Y[s]&&Y[s][n]?Y[s][n]:Y[s][n]=r()}else t=r();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function r(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l<t.length;l++)e.setAttribute(t[l],a.attributes[t[l]]);var s="prepend"===n?"afterbegin":"beforeend";return i.insertAdjacentElement(s,e),e}}("\n.content-wrapper[data-v-b40eab15] { padding: 32px; height: 100%; display: flex; flex-direction: column; overflow-y: auto;\n}\n.lead-item[data-v-b40eab15] { cursor: pointer;\n}\n.header[data-v-b40eab15] { margin-bottom: 24px; display: flex; justify-content: space-between; align-items: flex-end;\n}\n.header-right[data-v-b40eab15] { display: flex; gap: 12px;\n}\n.title[data-v-b40eab15] { font-size: 24px; font-weight: 800; margin-bottom: 4px; color: var(--theme--foreground);\n}\n.subtitle[data-v-b40eab15] { color: var(--theme--foreground-subdued); font-size: 14px; display: flex; align-items: center; gap: 8px;\n}\n.url-link[data-v-b40eab15] { color: inherit; text-decoration: none; border-bottom: 1px solid transparent;\n}\n.url-link[data-v-b40eab15]:hover { border-bottom-color: currentColor;\n}\n.empty-state[data-v-b40eab15] { height: 100%; display: flex; align-items: center; justify-content: center;\n}\n.sections[data-v-b40eab15] { display: flex; flex-direction: column; gap: 32px;\n}\n.form-grid[data-v-b40eab15] { display: grid; grid-template-columns: 1fr 1fr; gap: 24px;\n}\n.field[data-v-b40eab15] { display: flex; flex-direction: column; gap: 8px;\n}\n.field.full[data-v-b40eab15] { grid-column: span 2;\n}\n.label[data-v-b40eab15] { font-size: 11px; font-weight: 700; text-transform: uppercase; color: var(--theme--foreground-subdued); letter-spacing: 0.5px;\n}\n.value[data-v-b40eab15] { font-size: 15px; color: var(--theme--foreground);\n}\n.text-block[data-v-b40eab15] { line-height: 1.6; white-space: pre-wrap; background: var(--theme--background-subdued); padding: 16px; border-radius: 8px;\n}\n.ai-observations[data-v-b40eab15] { display: flex; flex-direction: column; gap: 16px;\n}\n.section-title[data-v-b40eab15] { font-size: 16px; font-weight: 700; color: var(--theme--foreground); margin-bottom: 8px;\n}\n.metrics[data-v-b40eab15] { display: flex; gap: 32px; margin-bottom: 16px;\n}\n.observation-table[data-v-b40eab15] { border: 1px solid var(--theme--border); border-radius: 8px; overflow: hidden;\n}\n.page-title[data-v-b40eab15] { font-weight: 600;\n}\n.page-url[data-v-b40eab15] { font-family: var(--family-monospace); font-size: 12px; color: var(--theme--foreground-subdued);\n}\n.drawer-content[data-v-b40eab15] { padding: 24px; display: flex; flex-direction: column; gap: 32px;\n}\n.form-section[data-v-b40eab15] { display: flex; flex-direction: column; gap: 20px;\n}\n.drawer-actions[data-v-b40eab15] { margin-top: 24px; display: flex; flex-direction: column; gap: 12px;\n}\n[data-v-b40eab15] .v-list-item { cursor: pointer !important;\n}\n",{});var ee=((e,a)=>{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(Q,[["__scopeId","data-v-b40eab15"],["__file","module.vue"]]),ae=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ee},{path:":id",component:ee,props:!0}]});export{ae as default};
|