Files
at-mintel/directus/extensions/acquisition-manager/index.js
Marc Mintel d69ade6268
Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 1s
Monorepo Pipeline / 🧪 Test (push) Successful in 2m2s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m14s
Monorepo Pipeline / 🚀 Release (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
chore: update lockfile and commit all pending release fixes
2026-02-14 13:57:46 +01:00

2 lines
13 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 o,openBlock as r,createBlock as u,unref as d,withCtx as c,createVNode as v,createElementBlock as p,Fragment as m,renderList as f,createElementVNode as g,toDisplayString as y,createTextVNode as b,createCommentVNode as h,withDirectives as _}from"vue";import{MintelManagerLayout as x,MintelStatCard as w,MintelSelect as k}from"@mintel/directus-extension-toolkit";var A=Object.defineProperty,$=Object.getOwnPropertySymbols,C=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,F=(e,a,t)=>a in e?A(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const O=["href"],P={key:0,class:"sections"},U={class:"main-info"},j={class:"form-grid"},L={class:"field"},q={key:1,class:"value text-subdued"},E={class:"field full"},S={class:"value text-block"},N={key:0,class:"ai-observations"},z={class:"metrics"},B={class:"page-title"},D={class:"page-url"},M={class:"drawer-content"},T={class:"form-section"},I={class:"field"},K={class:"field"},R={class:"field"},W={class:"field"},G={class:"drawer-actions"};var Z=t({__name:"module",setup(a){const t=e(),A=n([]),Z=n(null),H=n(!1),J=n(!1),Q=n(!1),X=n(!1),Y=n(!1),ee=n(null),ae=n({company:null,website_url:"",contact_person:null,briefing:"",status:"new"}),te=n([]),ne=n([]),le=l(()=>te.value.map(e=>({text:e.name,value:e.id}))),ie=l(()=>ne.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function se(e){var a;return e?e.company?"object"==typeof e.company?e.company.name:(null==(a=te.value.find(a=>a.id===e.company))?void 0:a.name)||"Unbekannte Firma":"Unbekannte Organisation":""}function oe(e){if(!e)return"";if("object"==typeof e)return`${e.first_name} ${e.last_name}`;const a=ne.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const re=l(()=>A.value.find(e=>e.id===Z.value));async function ue(){try{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"}})]);A.value=e.data.data,ne.value=a.data.data,te.value=n.data.data,!Z.value&&A.value.length>0&&(Z.value=A.value[0].id)}catch(e){console.error("Fetch error:",e)}}async function de(){await ue()}function ce(){ae.value={company:null,website_url:"",contact_person:null,briefing:"",status:"new"},X.value=!0}async function ve(){if(Z.value){H.value=!0;try{await t.post(`/acquisition/audit/${Z.value}`),ee.value={type:"success",message:"Audit erfolgreich gestartet!"},await de()}catch(e){ee.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{H.value=!1}}}async function pe(){if(Z.value){Q.value=!0;try{await t.post(`/acquisition/audit-email/${Z.value}`),ee.value={type:"success",message:"Audit E-Mail versendet!"},await de()}catch(e){ee.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{Q.value=!1}}}async function me(){if(Z.value){J.value=!0;try{await t.post(`/acquisition/estimate/${Z.value}`),ee.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await de()}catch(e){ee.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{J.value=!1}}}async function fe(){if(Z.value){Q.value=!0;try{await t.post(`/acquisition/estimate-email/${Z.value}`),ee.value={type:"success",message:"Angebot erfolgreich versendet!"},await de()}catch(e){ee.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{Q.value=!1}}}function ge(){var e;(null==(e=re.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${re.value.audit_pdf_path}`,"_blank")}async function ye(){if(ae.value.company){Y.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))C.call(a,t)&&F(e,t,a[t]);if($)for(var t of $(a))V.call(a,t)&&F(e,t,a[t]);return e})({id:crypto.randomUUID()},ae.value);await t.post("/items/leads",e),ee.value={type:"success",message:"Lead erfolgreich registriert!"},X.value=!1,await de(),Z.value=e.id}catch(e){ee.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{Y.value=!1}}else ee.value={type:"danger",message:"Organisation erforderlich."}}function be(e){ee.value={type:"info",message:("company"===e?"Firma":"Person")+" im jeweiligen Manager anlegen."}}function he(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 _e(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(ue),(e,a)=>{const t=s("v-icon"),n=s("v-list-item-icon"),l=s("v-text-overflow"),i=s("v-list-item-content"),$=s("v-list-item"),C=s("v-divider"),V=s("v-list"),F=s("v-button"),te=s("v-table"),ne=s("v-input"),ue=s("v-textarea"),de=s("v-drawer"),xe=o("tooltip");return r(),u(d(x),{title:"Acquisition Manager","item-title":se(re.value)||"Lead wählen","is-empty":!re.value,"empty-title":"Lead auswählen","empty-icon":"auto_awesome",notice:ee.value,onCloseNotice:a[9]||(a[9]=e=>ee.value=null)},{navigation:c(()=>[v(V,{nav:""},{default:c(()=>[v($,{onClick:ce,clickable:""},{default:c(()=>[v(n,null,{default:c(()=>[v(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),v(i,null,{default:c(()=>[v(l,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),v(C),(r(!0),p(m,null,f(A.value,e=>(r(),u($,{key:e.id,active:Z.value===e.id,class:"nav-item",clickable:"",onClick:a=>{return t=e.id,void(Z.value=t);var t}},{default:c(()=>[v(n,null,{default:c(()=>[v(t,{name:he(e.status),color:_e(e.status)},null,8,["name","color"])]),_:2},1024),v(i,null,{default:c(()=>[v(l,{text:se(e)},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),subtitle:c(()=>[re.value?(r(),p(m,{key:0},[v(t,{name:"language","x-small":""}),g("a",{href:re.value.website_url,target:"_blank",class:"url-link"},y(re.value.website_url.replace(/^https?:\/\//,"")),9,O),b(" · Status: "+y(re.value.status.toUpperCase()),1)],64)):h("v-if",!0)]),actions:c(()=>{var e,n,l,i;return["new"===(null==(e=re.value)?void 0:e.status)?(r(),u(F,{key:0,secondary:"",loading:H.value,onClick:ve},{default:c(()=>[v(t,{name:"settings_suggest",left:""}),a[10]||(a[10]=b(" Audit starten ",-1))]),_:1},8,["loading"])):h("v-if",!0),"audit_ready"===(null==(n=re.value)?void 0:n.status)?(r(),p(m,{key:1},[v(F,{secondary:"",loading:Q.value,onClick:pe},{default:c(()=>[v(t,{name:"mail",left:""}),a[11]||(a[11]=b(" Audit E-Mail ",-1))]),_:1},8,["loading"]),v(F,{loading:J.value,onClick:me},{default:c(()=>[v(t,{name:"picture_as_pdf",left:""}),a[12]||(a[12]=b(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):h("v-if",!0),(null==(l=re.value)?void 0:l.audit_pdf_path)?_((r(),u(F,{key:2,secondary:"",icon:"",onClick:ge},{default:c(()=>[v(t,{name:"open_in_new"})]),_:1})),[[xe,"PDF öffnen",void 0,{bottom:!0}]]):h("v-if",!0),(null==(i=re.value)?void 0:i.audit_pdf_path)?(r(),u(F,{key:3,primary:"",loading:Q.value,onClick:fe},{default:c(()=>[v(t,{name:"send",left:""}),a[13]||(a[13]=b(" Angebot senden ",-1))]),_:1},8,["loading"])):h("v-if",!0)]}),"empty-state":c(()=>[a[15]||(a[15]=b(" Wähle einen Lead in der Navigation aus oder ",-1)),v(F,{"x-small":"",onClick:ce},{default:c(()=>[...a[14]||(a[14]=[b("registriere einen neuen Lead",-1)])]),_:1}),a[16]||(a[16]=b(". ",-1))]),default:c(()=>{var e;return[re.value?(r(),p("div",P,[g("div",U,[g("div",j,[g("div",L,[a[17]||(a[17]=g("span",{class:"label"},"Kontaktperson",-1)),re.value.contact_person?(r(),p("div",{key:0,class:"value person-link",onClick:a[0]||(a[0]=e=>{return a=re.value.contact_person,void(ee.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},y(oe(re.value.contact_person)),1)):(r(),p("div",q,"Keine Person verknüpft"))]),g("div",E,[a[18]||(a[18]=g("span",{class:"label"},"Briefing / Fokus",-1)),g("div",S,y(re.value.briefing||"Kein Briefing hinterlegt."),1)])])]),v(C),re.value.ai_state?(r(),p("div",N,[a[19]||(a[19]=g("h3",{class:"section-title"},"AI Observations & Estimation",-1)),g("div",z,[v(d(w),{label:"Projekt-Modus",value:re.value.ai_state.projectType||"Unbekannt",icon:"category"},null,8,["value"]),v(d(w),{label:"Seitenanzahl",value:(null==(e=re.value.ai_state.sitemap)?void 0:e.length)||"0",icon:"description"},null,8,["value"])]),re.value.ai_state.sitemap?(r(),u(te,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:re.value.ai_state.sitemap,class:"observation-table"},{"item.title":c(({item:e})=>[g("span",B,y(e.title),1)]),"item.url":c(({item:e})=>[g("span",D,y(e.url),1)]),_:2},1032,["items"])):h("v-if",!0)])):h("v-if",!0)])):h("v-if",!0),v(de,{modelValue:X.value,"onUpdate:modelValue":a[7]||(a[7]=e=>X.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[8]||(a[8]=e=>X.value=!1)},{default:c(()=>[g("div",M,[g("div",T,[g("div",I,[a[20]||(a[20]=g("span",{class:"label"},"Organisation / Firma (Zentral)",-1)),v(d(k),{modelValue:ae.value.company,"onUpdate:modelValue":a[1]||(a[1]=e=>ae.value.company=e),items:le.value,placeholder:"Bestehende Firma auswählen...","allow-add":"",onAdd:a[2]||(a[2]=e=>be("company"))},null,8,["modelValue","items"])]),g("div",K,[a[21]||(a[21]=g("span",{class:"label"},"Website URL",-1)),v(ne,{modelValue:ae.value.website_url,"onUpdate:modelValue":a[3]||(a[3]=e=>ae.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),g("div",R,[a[22]||(a[22]=g("span",{class:"label"},"Briefing / Fokus",-1)),v(ue,{modelValue:ae.value.briefing,"onUpdate:modelValue":a[4]||(a[4]=e=>ae.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),g("div",W,[a[23]||(a[23]=g("span",{class:"label"},"Kontaktperson (Optional)",-1)),v(d(k),{modelValue:ae.value.contact_person,"onUpdate:modelValue":a[5]||(a[5]=e=>ae.value.contact_person=e),items:ie.value,placeholder:"Person auswählen...","allow-add":"",onAdd:a[6]||(a[6]=e=>be("person"))},null,8,["modelValue","items"])])]),g("div",G,[v(F,{primary:"",block:"",loading:Y.value,onClick:ye},{default:c(()=>[...a[24]||(a[24]=[b("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1},8,["item-title","is-empty","notice"])}}}),H=[],J=[];!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=H.indexOf(i);-1===s&&(s=H.push(i)-1,J[s]={}),t=J[s]&&J[s][n]?J[s][n]:J[s][n]=o()}else t=o();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function o(){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.url-link[data-v-2120fd89] { color: inherit; text-decoration: none; border-bottom: 1px solid transparent;\n}\n.url-link[data-v-2120fd89]:hover { border-bottom-color: currentColor;\n}\n.sections[data-v-2120fd89] { display: flex; flex-direction: column; gap: 32px;\n}\n.form-grid[data-v-2120fd89] { display: grid; grid-template-columns: 1fr 1fr; gap: 24px;\n}\n.field[data-v-2120fd89] { display: flex; flex-direction: column; gap: 8px;\n}\n.field.full[data-v-2120fd89] { grid-column: span 2;\n}\n.label[data-v-2120fd89] { font-size: 11px; font-weight: 700; text-transform: uppercase; color: var(--theme--foreground-subdued); letter-spacing: 0.5px;\n}\n.value[data-v-2120fd89] { font-size: 15px; color: var(--theme--foreground);\n}\n.text-block[data-v-2120fd89] { line-height: 1.6; white-space: pre-wrap; background: var(--theme--background-subdued); padding: 16px; border-radius: 8px;\n}\n.ai-observations[data-v-2120fd89] { display: flex; flex-direction: column; gap: 16px;\n}\n.section-title[data-v-2120fd89] { font-size: 16px; font-weight: 700; color: var(--theme--foreground); margin-bottom: 8px;\n}\n.metrics[data-v-2120fd89] { display: flex; gap: 24px; margin-bottom: 16px;\n}\n.observation-table[data-v-2120fd89] { border: 1px solid var(--theme--border); border-radius: 8px; overflow: hidden;\n}\n.page-title[data-v-2120fd89] { font-weight: 600;\n}\n.page-url[data-v-2120fd89] { font-family: var(--family-monospace); font-size: 12px; color: var(--theme--foreground-subdued);\n}\n.drawer-content[data-v-2120fd89] { padding: 24px; display: flex; flex-direction: column; gap: 32px;\n}\n.form-section[data-v-2120fd89] { display: flex; flex-direction: column; gap: 20px;\n}\n.drawer-actions[data-v-2120fd89] { margin-top: 24px; display: flex; flex-direction: column; gap: 12px;\n}\n",{});var Q=((e,a)=>{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(Z,[["__scopeId","data-v-2120fd89"],["__file","module.vue"]]),X=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:Q},{path:":id",component:Q,props:!0}]});export{X as default};