From d69ade626881ca6da459ccc1137d29652a95711f Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Sat, 14 Feb 2026 13:57:46 +0100 Subject: [PATCH] chore: update lockfile and commit all pending release fixes --- .env | 2 +- .../extensions/acquisition-manager/index.js | 2 +- .../acquisition-manager/package.json | 1 + directus/extensions/company-manager/index.js | 2 +- .../extensions/company-manager/package.json | 1 + directus/extensions/customer-manager/index.js | 2 +- .../extensions/customer-manager/package.json | 1 + directus/extensions/people-manager/index.js | 2 +- .../extensions/people-manager/package.json | 1 + packages/acquisition-manager/src/module.vue | 293 ++++----- packages/cms-infra/database/data.db | Bin 352256 -> 352256 bytes .../extensions/acquisition-manager/index.js | 2 +- .../acquisition-manager/package.json | 1 + .../extensions/company-manager/index.js | 2 +- .../extensions/company-manager/package.json | 1 + .../extensions/customer-manager/index.js | 2 +- .../extensions/customer-manager/package.json | 1 + .../extensions/people-manager/index.js | 2 +- .../extensions/people-manager/package.json | 1 + packages/cms-infra/schema/snapshot.yaml | 241 +++++++- .../cms-infra/uploads/directus-health-file | 2 +- packages/company-manager/src/module.vue | 96 +-- packages/customer-manager/src/module.vue | 567 +++++++++--------- packages/people-manager/src/module.vue | 182 +++--- pnpm-lock.yaml | 132 +++- 25 files changed, 941 insertions(+), 598 deletions(-) diff --git a/.env b/.env index 8debc36..ac1353d 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ # Project -IMAGE_TAG=v1.8.2 +IMAGE_TAG=1.8.4 PROJECT_NAME=at-mintel PROJECT_COLOR=#82ed20 GITEA_TOKEN=ccce002e30fe16a31a6c9d5a414740af2f72a582 diff --git a/directus/extensions/acquisition-manager/index.js b/directus/extensions/acquisition-manager/index.js index 5baf55e..30eabb9 100644 --- a/directus/extensions/acquisition-manager/index.js +++ b/directus/extensions/acquisition-manager/index.js @@ -1 +1 @@ -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{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}; +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{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}; diff --git a/directus/extensions/acquisition-manager/package.json b/directus/extensions/acquisition-manager/package.json index 2cd83ef..4733d96 100644 --- a/directus/extensions/acquisition-manager/package.json +++ b/directus/extensions/acquisition-manager/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@directus/extensions-sdk": "11.0.2", + "@mintel/directus-extension-toolkit": "workspace:*", "vue": "^3.4.0" } } \ No newline at end of file diff --git a/directus/extensions/company-manager/index.js b/directus/extensions/company-manager/index.js index 65efc66..ca1a3d3 100644 --- a/directus/extensions/company-manager/index.js +++ b/directus/extensions/company-manager/index.js @@ -1 +1 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,onMounted as n,resolveComponent as i,resolveDirective as s,openBlock as d,createBlock as o,withCtx as r,createVNode as u,createElementBlock as c,Fragment as m,renderList as v,createElementVNode as p,createTextVNode as f,toDisplayString as g,createCommentVNode as y,withDirectives as h}from"vue";var b=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,_=Object.prototype.propertyIsEnumerable,k=(e,a,t)=>a in e?b(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const F={class:"content-wrapper"},C={key:1,class:"empty-state"},V={key:2},O={class:"header"},j={class:"header-left"},z={class:"title"},A={class:"subtitle"},N={class:"header-right"},S={class:"detail-item full"},B={class:"value"},E={class:"drawer-content"},T={class:"form-section"},U={class:"field"},P={class:"field"},D={class:"field"},I={class:"drawer-actions"};var M=t({__name:"module",setup(a){const t=e(),b=l([]),M=l(null),W=l(null),$=l(!1),q=l(!1),G=l(!1),H=l({id:null,name:"",domain:"",notes:""});async function K(){try{const e=await t.get("/items/companies",{params:{sort:"name"}});b.value=e.data.data}catch(e){console.error("Failed to fetch companies:",e)}}function J(){G.value=!1,H.value={id:null,name:"",domain:"",notes:""},q.value=!0}function L(){G.value=!0,H.value=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&k(e,t,a[t]);if(x)for(var t of x(a))_.call(a,t)&&k(e,t,a[t]);return e})({},M.value),q.value=!0}async function Q(){if(H.value.name){$.value=!0;try{G.value?(await t.patch(`/items/companies/${H.value.id}`,H.value),W.value={type:"success",message:"Firma aktualisiert!"}):(await t.post("/items/companies",H.value),W.value={type:"success",message:"Firma angelegt!"}),q.value=!1,await K(),G.value&&(M.value=b.value.find(e=>e.id===H.value.id))}catch(e){W.value={type:"danger",message:e.message}}finally{$.value=!1}}else W.value={type:"danger",message:"Firmenname ist erforderlich."}}async function R(){if(confirm("Soll diese Firma wirklich gelöscht werden?"))try{await t.delete(`/items/companies/${M.value.id}`),W.value={type:"success",message:"Firma gelöscht."},M.value=null,await K()}catch(e){W.value={type:"danger",message:e.message}}}return n(K),(e,a)=>{const t=i("v-icon"),l=i("v-list-item-icon"),n=i("v-text-overflow"),x=i("v-list-item-content"),w=i("v-list-item"),_=i("v-divider"),k=i("v-list"),K=i("v-notice"),X=i("v-button"),Y=i("v-info"),Z=i("v-input"),ee=i("v-textarea"),ae=i("v-drawer"),te=i("private-view"),le=s("tooltip");return d(),o(te,{title:"Company Manager"},{navigation:r(()=>[u(k,{nav:""},{default:r(()=>[u(w,{onClick:J,clickable:""},{default:r(()=>[u(l,null,{default:r(()=>[u(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),u(x,null,{default:r(()=>[u(n,{text:"Neue Firma anlegen"})]),_:1})]),_:1}),u(_),(d(!0),c(m,null,v(b.value,e=>{var a;return d(),o(w,{key:e.id,active:(null==(a=M.value)?void 0:a.id)===e.id,class:"company-item",clickable:"",onClick:a=>function(e){M.value=e}(e)},{default:r(()=>[u(l,null,{default:r(()=>[u(t,{name:"business"})]),_:1}),u(x,null,{default:r(()=>[u(n,{text:e.name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),default:r(()=>[p("div",F,[W.value?(d(),o(K,{key:0,type:W.value.type,onClose:a[0]||(a[0]=e=>W.value=null),dismissible:""},{default:r(()=>[f(g(W.value.message),1)]),_:1},8,["type"])):y("v-if",!0),M.value?(d(),c("div",V,[p("header",O,[p("div",j,[p("h1",z,g(M.value.name),1),p("p",A,g(M.value.domain||"Keine Domain angegeben"),1)]),p("div",N,[h((d(),o(X,{secondary:"",rounded:"",icon:"",onClick:L},{default:r(()=>[u(t,{name:"edit"})]),_:1})),[[le,"Firma bearbeiten"]]),h((d(),o(X,{danger:"",rounded:"",icon:"",onClick:R},{default:r(()=>[u(t,{name:"delete"})]),_:1})),[[le,"Firma löschen"]])])]),u(_),p("div",S,[a[9]||(a[9]=p("span",{class:"label"},"Notizen / Adresse",-1)),p("p",B,g(M.value.notes||"---"),1)])])):(d(),c("div",C,[u(Y,{title:"Firma auswählen",icon:"business",center:""},{default:r(()=>[a[7]||(a[7]=f(" Wähle eine Firma in der Navigation aus oder ",-1)),u(X,{"x-small":"",onClick:J},{default:r(()=>[...a[6]||(a[6]=[f("erstelle eine neue Firma",-1)])]),_:1}),a[8]||(a[8]=f(". ",-1))]),_:1})]))]),u(ae,{modelValue:q.value,"onUpdate:modelValue":a[4]||(a[4]=e=>q.value=e),title:G.value?"Firma bearbeiten":"Neue Firma anlegen",icon:"business",onCancel:a[5]||(a[5]=e=>q.value=!1)},{default:r(()=>[p("div",E,[p("div",T,[p("div",U,[a[10]||(a[10]=p("span",{class:"label"},"Firmenname",-1)),u(Z,{modelValue:H.value.name,"onUpdate:modelValue":a[1]||(a[1]=e=>H.value.name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),p("div",P,[a[11]||(a[11]=p("span",{class:"label"},"Domain / Website",-1)),u(Z,{modelValue:H.value.domain,"onUpdate:modelValue":a[2]||(a[2]=e=>H.value.domain=e),placeholder:"example.com"},null,8,["modelValue"])]),p("div",D,[a[12]||(a[12]=p("span",{class:"label"},"Notizen / Adresse",-1)),u(ee,{modelValue:H.value.notes,"onUpdate:modelValue":a[3]||(a[3]=e=>H.value.notes=e),placeholder:"z.B. Branche, Adresse, etc."},null,8,["modelValue"])])]),p("div",I,[u(X,{primary:"",block:"",loading:$.value,onClick:Q},{default:r(()=>[...a[13]||(a[13]=[f(" Firma speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])]),_:1})}}}),W=[],$=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,l=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=W.indexOf(i);-1===s&&(s=W.push(i)-1,$[s]={}),t=$[s]&&$[s][l]?$[s][l]:$[s][l]=d()}else t=d();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function d(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),n=0;n{const t=e.__vccOpts||e;for(const[e,l]of a)t[e]=l;return t})(M,[["__scopeId","data-v-e9d08700"],["__file","module.vue"]])}]});export{q as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,onMounted as n,resolveComponent as i,resolveDirective as s,openBlock as o,createBlock as d,unref as u,withCtx as c,createVNode as r,createElementBlock as m,Fragment as v,renderList as p,createTextVNode as f,toDisplayString as g,createCommentVNode as y,withDirectives as x,createElementVNode as b}from"vue";import{MintelManagerLayout as h}from"@mintel/directus-extension-toolkit";const _={key:0,class:"details-grid"},w={class:"detail-item full"},k={class:"value"},F={class:"drawer-content"},C={class:"form-section"},V={class:"field"},N={class:"field"},A={class:"field"},z={class:"drawer-actions"};var S=t({__name:"module",setup(a){const t=e(),S=l([]),B=l(null),T=l(null),U=l(!1),E=l(!1),O=l(!1),j=l({id:null,name:"",domain:"",notes:""});async function D(){try{const e=await t.get("/items/companies",{params:{sort:"name"}});S.value=e.data.data}catch(e){console.error("Failed to fetch companies:",e)}}function M(){O.value=!1,j.value={id:null,name:"",domain:"",notes:""},E.value=!0}function W(){O.value=!0,j.value={id:B.value.id,name:B.value.name,domain:B.value.domain,notes:B.value.notes},E.value=!0}async function $(){if(j.value.name){U.value=!0;try{let e;if(O.value){const a=await t.patch(`/items/companies/${j.value.id}`,j.value);e=a.data.data,T.value={type:"success",message:"Firma aktualisiert!"}}else{const a=await t.post("/items/companies",j.value);e=a.data.data,T.value={type:"success",message:"Firma angelegt!"}}E.value=!1,await D(),e&&(B.value=S.value.find(a=>a.id===e.id)||e)}catch(e){T.value={type:"danger",message:e.message}}finally{U.value=!1}}else T.value={type:"danger",message:"Firmenname ist erforderlich."}}async function q(){if(confirm("Soll diese Firma wirklich gelöscht werden?"))try{await t.delete(`/items/companies/${B.value.id}`),T.value={type:"success",message:"Firma gelöscht."},B.value=null,await D()}catch(e){T.value={type:"danger",message:e.message}}}return n(D),(e,a)=>{var t;const l=i("v-icon"),n=i("v-list-item-icon"),D=i("v-text-overflow"),G=i("v-list-item-content"),H=i("v-list-item"),I=i("v-divider"),K=i("v-list"),J=i("v-button"),L=i("v-input"),P=i("v-textarea"),Q=i("v-drawer"),R=s("tooltip");return o(),d(u(h),{title:"Company Manager","item-title":(null==(t=B.value)?void 0:t.name)||"Firma wählen","is-empty":!B.value,"empty-title":"Firma auswählen","empty-icon":"business",notice:T.value,onCloseNotice:a[5]||(a[5]=e=>T.value=null)},{navigation:c(()=>[r(K,{nav:""},{default:c(()=>[r(H,{onClick:M,clickable:""},{default:c(()=>[r(n,null,{default:c(()=>[r(l,{name:"add",color:"var(--theme--primary)"})]),_:1}),r(G,null,{default:c(()=>[r(D,{text:"Neue Firma anlegen"})]),_:1})]),_:1}),r(I),(o(!0),m(v,null,p(S.value,e=>{var a;return o(),d(H,{key:e.id,active:(null==(a=B.value)?void 0:a.id)===e.id,class:"nav-item",clickable:"",onClick:a=>function(e){B.value=e}(e)},{default:c(()=>[r(n,null,{default:c(()=>[r(l,{name:"business"})]),_:1}),r(G,null,{default:c(()=>[r(D,{text:e.name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),subtitle:c(()=>[B.value?(o(),m(v,{key:0},[f(g(B.value.domain||"Keine Domain angegeben"),1)],64)):y("v-if",!0)]),actions:c(()=>[x((o(),d(J,{secondary:"",rounded:"",icon:"",onClick:W},{default:c(()=>[r(l,{name:"edit"})]),_:1})),[[R,"Firma bearbeiten",void 0,{bottom:!0}]]),x((o(),d(J,{danger:"",rounded:"",icon:"",onClick:q},{default:c(()=>[r(l,{name:"delete"})]),_:1})),[[R,"Firma löschen",void 0,{bottom:!0}]])]),"empty-state":c(()=>[a[7]||(a[7]=f(" Wähle eine Firma in der Navigation aus oder ",-1)),r(J,{"x-small":"",onClick:M},{default:c(()=>[...a[6]||(a[6]=[f("erstelle eine neue Firma",-1)])]),_:1}),a[8]||(a[8]=f(". ",-1))]),default:c(()=>[B.value?(o(),m("div",_,[b("div",w,[a[9]||(a[9]=b("span",{class:"label"},"Notizen / Adresse",-1)),b("p",k,g(B.value.notes||"---"),1)])])):y("v-if",!0),r(Q,{modelValue:E.value,"onUpdate:modelValue":a[3]||(a[3]=e=>E.value=e),title:O.value?"Firma bearbeiten":"Neue Firma anlegen",icon:"business",onCancel:a[4]||(a[4]=e=>E.value=!1)},{default:c(()=>[b("div",F,[b("div",C,[b("div",V,[a[10]||(a[10]=b("span",{class:"label"},"Firmenname",-1)),r(L,{modelValue:j.value.name,"onUpdate:modelValue":a[0]||(a[0]=e=>j.value.name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),b("div",N,[a[11]||(a[11]=b("span",{class:"label"},"Domain / Website",-1)),r(L,{modelValue:j.value.domain,"onUpdate:modelValue":a[1]||(a[1]=e=>j.value.domain=e),placeholder:"example.com"},null,8,["modelValue"])]),b("div",A,[a[12]||(a[12]=b("span",{class:"label"},"Notizen / Adresse",-1)),r(P,{modelValue:j.value.notes,"onUpdate:modelValue":a[2]||(a[2]=e=>j.value.notes=e),placeholder:"z.B. Branche, Adresse, etc."},null,8,["modelValue"])])]),b("div",z,[r(J,{primary:"",block:"",loading:U.value,onClick:$},{default:c(()=>[...a[13]||(a[13]=[f(" Firma speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])]),_:1},8,["item-title","is-empty","notice"])}}}),B=[],T=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,l=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=B.indexOf(i);-1===s&&(s=B.push(i)-1,T[s]={}),t=T[s]&&T[s][l]?T[s][l]:T[s][l]=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),n=0;n{const t=e.__vccOpts||e;for(const[e,l]of a)t[e]=l;return t})(S,[["__scopeId","data-v-c558ed15"],["__file","module.vue"]])}]});export{U as default}; diff --git a/directus/extensions/company-manager/package.json b/directus/extensions/company-manager/package.json index 217d7d3..f2b4919 100644 --- a/directus/extensions/company-manager/package.json +++ b/directus/extensions/company-manager/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@directus/extensions-sdk": "11.0.2", + "@mintel/directus-extension-toolkit": "workspace:*", "vue": "^3.4.0" } } \ No newline at end of file diff --git a/directus/extensions/customer-manager/index.js b/directus/extensions/customer-manager/index.js index f28c05b..be32655 100644 --- a/directus/extensions/customer-manager/index.js +++ b/directus/extensions/customer-manager/index.js @@ -1 +1 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as l,ref as t,computed as n,onMounted as i,resolveComponent as s,resolveDirective as r,openBlock as d,createBlock as o,withCtx as u,createVNode as m,createElementBlock as c,Fragment as v,renderList as p,createTextVNode as f,toDisplayString as g,createCommentVNode as y,createElementVNode as _,withDirectives as b,nextTick as h}from"vue";const x={class:"content-wrapper"},w={key:0,class:"empty-state"},k={class:"header"},V={class:"header-left"},C={class:"title"},M={class:"subtitle"},F={class:"header-right"},N={class:"user-cell"},z={class:"user-name"},E={key:0,class:"status-date"},U={key:0,class:"drawer-content"},$={class:"form-section"},P={class:"field"},S={class:"drawer-actions"},Z={key:0,class:"drawer-content"},A={class:"form-section"},T={class:"field"},j={class:"field"},D={class:"field"},O={class:"field"},W={key:1,class:"field"},q={class:"drawer-actions"};var B=l({__name:"module",setup(a){const l=e(),B=t([]),K=t(null),L=t([]),G=t(!1),I=t(!1),H=t(null),J=t(null),Q=t(!1),R=t(!1),X=t({id:"",name:""}),Y=t(!1),ee=t(!1),ae=t({id:"",first_name:"",last_name:"",email:"",person:null,temporary_password:""}),le=[{text:"Name",value:"name",sortable:!0},{text:"E-Mail",value:"email",sortable:!0},{text:"Zuletzt eingeladen",value:"last_invited",sortable:!0}],te=t([]),ne=n(()=>te.value.map(e=>({text:`${e.first_name} ${e.last_name} (${e.email})`,value:e.id})));async function ie(e){K.value=e,G.value=!0;try{const a=await l.get("/items/client_users",{params:{filter:{company:{_eq:e.id}},fields:["*","person.*"],sort:"first_name"}});L.value=a.data.data}finally{G.value=!1}}function se(){R.value=!1,X.value={id:"",name:""},Q.value=!0}async function re(){K.value&&(X.value={id:K.value.id,name:K.value.name},R.value=!0,await h(),Q.value=!0)}async function de(){var e;if(X.value.name){I.value=!0;try{R.value?(await l.patch(`/items/companies/${X.value.id}`,{name:X.value.name}),J.value={type:"success",message:"Firma aktualisiert!"}):(await l.post("/items/companies",{name:X.value.name}),J.value={type:"success",message:"Firma angelegt!"}),Q.value=!1,await fetchCompanies(),(null==(e=K.value)?void 0:e.id)===X.value.id&&(K.value.name=X.value.name)}catch(e){J.value={type:"danger",message:e.message}}finally{I.value=!1}}}function oe(){ee.value=!1,ae.value={id:"",first_name:"",last_name:"",email:"",temporary_password:""},Y.value=!0}async function ue(){if(ae.value.email&&K.value){I.value=!0;try{ee.value?(await l.patch(`/items/client_users/${ae.value.id}`,{first_name:ae.value.first_name,last_name:ae.value.last_name,email:ae.value.email,person:ae.value.person}),J.value={type:"success",message:"Mitarbeiter aktualisiert!"}):(await l.post("/items/client_users",{first_name:ae.value.first_name,last_name:ae.value.last_name,email:ae.value.email,company:K.value.id,person:ae.value.person}),J.value={type:"success",message:"Mitarbeiter angelegt!"}),Y.value=!1,await ie(K.value)}catch(e){J.value={type:"danger",message:e.message}}finally{I.value=!1}}}function me(e){const a=(null==e?void 0:e.item)||e;a&&a.id&&async function(e){var a;ae.value={id:e.id||"",first_name:e.first_name||"",last_name:e.last_name||"",email:e.email||"",person:(null==(a=e.person)?void 0:a.id)||e.person||null,temporary_password:e.temporary_password||""},ee.value=!0,await h(),Y.value=!0}(a)}return i(()=>{!async function(){const[e,a]=await Promise.all([l.get("/items/companies",{params:{sort:"name",fields:["id","name"]}}),l.get("/items/people",{params:{sort:"last_name"}})]);B.value=e.data.data,te.value=a.data.data}()}),(e,a)=>{const t=s("v-icon"),n=s("v-list-item-icon"),i=s("v-text-overflow"),h=s("v-list-item-content"),te=s("v-list-item"),ce=s("v-divider"),ve=s("v-list"),pe=s("v-notice"),fe=s("v-button"),ge=s("v-info"),ye=s("v-avatar"),_e=s("v-chip"),be=s("v-table"),he=s("v-input"),xe=s("v-drawer"),we=s("v-select"),ke=s("private-view"),Ve=r("tooltip");return d(),o(ke,{title:"Customer Manager"},{navigation:u(()=>[m(ve,{nav:""},{default:u(()=>[m(te,{onClick:se,clickable:""},{default:u(()=>[m(n,null,{default:u(()=>[m(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),m(h,null,{default:u(()=>[m(i,{text:"Neue Firma anlegen"})]),_:1})]),_:1}),m(ce),(d(!0),c(v,null,p(B.value,e=>{var a;return d(),o(te,{key:e.id,active:(null==(a=K.value)?void 0:a.id)===e.id,class:"company-item",clickable:"",onClick:a=>ie(e)},{default:u(()=>[m(n,null,{default:u(()=>[m(t,{name:"business"})]),_:1}),m(h,null,{default:u(()=>[m(i,{text:e.name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),"title-outer:after":u(()=>[J.value?(d(),o(pe,{key:0,type:J.value.type,onClose:a[0]||(a[0]=e=>J.value=null),dismissible:""},{default:u(()=>[f(g(J.value.message),1)]),_:1},8,["type"])):y("v-if",!0)]),default:u(()=>[_("div",x,[K.value?(d(),c(v,{key:1},[_("header",k,[_("div",V,[_("h1",C,g(K.value.name),1),_("p",M,g(L.value.length)+" Kunden-Mitarbeiter",1)]),_("div",F,[b((d(),o(fe,{secondary:"",rounded:"",icon:"",onClick:re},{default:u(()=>[m(t,{name:"edit"})]),_:1})),[[Ve,"Firma bearbeiten",void 0,{bottom:!0}]]),m(fe,{primary:"",onClick:oe},{default:u(()=>[...a[15]||(a[15]=[f(" Mitarbeiter hinzufügen ",-1)])]),_:1})])]),m(be,{headers:le,items:L.value,loading:G.value,class:"clickable-table","fixed-header":"","onClick:row":me},{"item.name":u(({item:e})=>[_("div",N,[m(ye,{name:e.first_name,"x-small":""},null,8,["name"]),_("span",z,g(e.first_name)+" "+g(e.last_name),1)])]),"item.last_invited":u(({item:e})=>{return[e.last_invited?(d(),c("span",E,g((l=e.last_invited,new Date(l).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}))),1)):(d(),o(_e,{key:1,"x-small":""},{default:u(()=>[...a[16]||(a[16]=[f("Noch nie",-1)])]),_:1}))];var l}),_:2},1032,["items","loading"])],64)):(d(),c("div",w,[m(ge,{title:"Firmen auswählen",icon:"business",center:""},{default:u(()=>[a[13]||(a[13]=f(" Wähle eine Firma in der Navigation aus oder ",-1)),m(fe,{"x-small":"",onClick:se},{default:u(()=>[...a[12]||(a[12]=[f("erstelle eine neue Firma",-1)])]),_:1}),a[14]||(a[14]=f(". ",-1))]),_:1})]))]),m(xe,{modelValue:Q.value,"onUpdate:modelValue":a[2]||(a[2]=e=>Q.value=e),title:R.value?"Firma bearbeiten":"Neue Firma anlegen",icon:"business",onCancel:a[3]||(a[3]=e=>Q.value=!1)},{default:u(()=>[Q.value?(d(),c("div",U,[_("div",$,[_("div",P,[a[17]||(a[17]=_("span",{class:"label"},"Firmenname",-1)),m(he,{modelValue:X.value.name,"onUpdate:modelValue":a[1]||(a[1]=e=>X.value.name=e),placeholder:"z.B. KLZ Cables",autofocus:""},null,8,["modelValue"])])]),_("div",S,[m(fe,{primary:"",block:"",loading:I.value,onClick:de},{default:u(()=>[...a[18]||(a[18]=[f("Speichern",-1)])]),_:1},8,["loading"])])])):y("v-if",!0)]),_:1},8,["modelValue","title"]),m(xe,{modelValue:Y.value,"onUpdate:modelValue":a[10]||(a[10]=e=>Y.value=e),title:ee.value?"Mitarbeiter bearbeiten":"Neuen Mitarbeiter anlegen",icon:"person",onCancel:a[11]||(a[11]=e=>Y.value=!1)},{default:u(()=>[Y.value?(d(),c("div",Z,[_("div",A,[_("div",T,[a[19]||(a[19]=_("span",{class:"label"},"Vorname",-1)),m(he,{modelValue:ae.value.first_name,"onUpdate:modelValue":a[4]||(a[4]=e=>ae.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),_("div",j,[a[20]||(a[20]=_("span",{class:"label"},"Nachname",-1)),m(he,{modelValue:ae.value.last_name,"onUpdate:modelValue":a[5]||(a[5]=e=>ae.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),_("div",D,[a[21]||(a[21]=_("span",{class:"label"},"E-Mail",-1)),m(he,{modelValue:ae.value.email,"onUpdate:modelValue":a[6]||(a[6]=e=>ae.value.email=e),placeholder:"E-Mail Adresse",type:"email"},null,8,["modelValue"])]),_("div",O,[a[22]||(a[22]=_("span",{class:"label"},"Zentrale Person (Verknüpfung)",-1)),m(we,{modelValue:ae.value.person,"onUpdate:modelValue":a[7]||(a[7]=e=>ae.value.person=e),items:ne.value,placeholder:"Person aus dem People Manager auswählen..."},null,8,["modelValue","items"])]),ee.value?(d(),o(ce,{key:0})):y("v-if",!0),ee.value?(d(),c("div",W,[a[23]||(a[23]=_("span",{class:"label"},"Temporäres Passwort",-1)),m(he,{modelValue:ae.value.temporary_password,"onUpdate:modelValue":a[8]||(a[8]=e=>ae.value.temporary_password=e),readonly:"",class:"password-input"},null,8,["modelValue"]),a[24]||(a[24]=_("p",{class:"field-note"},"Wird beim Senden der Zugangsdaten automatisch generiert.",-1))])):y("v-if",!0)]),_("div",q,[m(fe,{primary:"",block:"",loading:I.value,onClick:ue},{default:u(()=>[...a[25]||(a[25]=[f("Daten speichern",-1)])]),_:1},8,["loading"]),ee.value?(d(),c(v,{key:0},[m(ce),b((d(),o(fe,{secondary:"",block:"",loading:H.value===ae.value.id,onClick:a[9]||(a[9]=e=>async function(e){H.value=e.id;try{if(await l.post("/flows/trigger/33443f6b-cec7-4668-9607-f33ea674d501",[e.id]),J.value={type:"success",message:`Zugangsdaten für ${e.first_name} versendet. 📧`},await ie(K.value),Y.value&&ae.value.id===e.id){const a=L.value.find(a=>a.id===e.id);a&&(ae.value.temporary_password=a.temporary_password)}}catch(e){J.value={type:"danger",message:`Fehler: ${e.message}`}}finally{H.value=null}}(ae.value))},{default:u(()=>[m(t,{name:"send",left:""}),a[26]||(a[26]=f(" Zugangsdaten senden ",-1))]),_:1},8,["loading"])),[[Ve,"Generiert PW, speichert es und sendet E-Mail",void 0,{bottom:!0}]])],64)):y("v-if",!0)])])):y("v-if",!0)]),_:1},8,["modelValue","title"])]),_:1})}}}),K=[],L=[];!function(e,a){if(e&&"undefined"!=typeof document){var l,t=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=K.indexOf(i);-1===s&&(s=K.push(i)-1,L[s]={}),l=L[s]&&L[s][t]?L[s][t]:L[s][t]=r()}else l=r();65279===e.charCodeAt(0)&&(e=e.substring(1)),l.styleSheet?l.styleSheet.cssText+=e:l.appendChild(document.createTextNode(e))}function r(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var l=Object.keys(a.attributes),n=0;n{const l=e.__vccOpts||e;for(const[e,t]of a)l[e]=t;return l})(B,[["__scopeId","data-v-0fa2d616"],["__file","module.vue"]])}]});export{G as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as l,ref as t,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as u,createBlock as d,unref as r,withCtx as c,createVNode as m,createElementBlock as v,Fragment as p,renderList as f,createTextVNode as y,toDisplayString as g,createCommentVNode as _,withDirectives as b,createElementVNode as h}from"vue";import{MintelManagerLayout as k,MintelSelect as x}from"@mintel/directus-extension-toolkit";const w={class:"user-cell"},V={class:"user-name"},C={key:0,class:"status-date"},N={key:0,class:"drawer-content"},z={class:"form-section"},P={class:"field"},U={class:"field"},K={class:"field"},A={class:"field"},E={class:"drawer-actions"},M={key:0,class:"drawer-content"},S={class:"form-section"},T={class:"field"},Z={class:"field"},$={class:"field"},F={class:"field"},O={key:1,class:"field"},j={class:"drawer-actions"};var D=l({__name:"module",setup(a){const l=e(),D=t([]),W=t(null),q=t([]),B=t(!1),I=t(!1),L=t(null),G=t(null),H=t([]),J=t([]),Q=t(!1),R=t(!1),X=t({id:null,company:null,contact_person:null,status:"active",notes:""}),Y=t(!1),ee=t(!1),ae=t({id:"",first_name:"",last_name:"",email:"",person:null,temporary_password:""}),le=[{text:"Name",value:"name",sortable:!0},{text:"E-Mail",value:"email",sortable:!0},{text:"Zuletzt eingeladen",value:"last_invited",sortable:!0}],te=n(()=>H.value.map(e=>({text:e.name,value:e.id}))),ne=n(()=>J.value.map(e=>({text:`${e.first_name} ${e.last_name} (${e.email})`,value:e.id})));async function ie(){B.value=!0;try{const[e,a,t]=await Promise.all([l.get("/items/customers",{params:{fields:["*","company.*","contact_person.*"],sort:"company.name"}}),l.get("/items/companies",{params:{sort:"name"}}),l.get("/items/people",{params:{sort:"last_name"}})]);D.value=e.data.data,H.value=a.data.data,J.value=t.data.data}finally{B.value=!1}}async function se(e){W.value=e,B.value=!0;try{const a=await l.get("/items/client_users",{params:{filter:{company:{_eq:e.company.id}},fields:["*","person.*"],sort:"first_name"}});q.value=a.data.data}finally{B.value=!1}}function oe(){R.value=!1,X.value={id:null,company:null,contact_person:null,status:"active",notes:""},Q.value=!0}function ue(){var e,a;W.value&&(R.value=!0,X.value={id:W.value.id,company:(null==(e=W.value.company)?void 0:e.id)||W.value.company,contact_person:(null==(a=W.value.contact_person)?void 0:a.id)||W.value.contact_person,status:W.value.status,notes:W.value.notes},Q.value=!0)}async function de(){if(X.value.company){I.value=!0;try{if(R.value?(await l.patch(`/items/customers/${X.value.id}`,X.value),G.value={type:"success",message:"Kunde aktualisiert!"}):(await l.post("/items/customers",X.value),G.value={type:"success",message:"Neuer Kunde verlinkt!"}),Q.value=!1,await ie(),X.value.id){const e=D.value.find(e=>e.id===X.value.id);e&&se(e)}}catch(e){G.value={type:"danger",message:e.message}}finally{I.value=!1}}}function re(){ee.value=!1,ae.value={id:"",first_name:"",last_name:"",email:"",person:null,temporary_password:""},Y.value=!0}function ce(e){var a;const l=(null==e?void 0:e.item)||e;l&&l.id&&(ae.value={id:l.id,first_name:l.first_name,last_name:l.last_name,email:l.email,person:(null==(a=l.person)?void 0:a.id)||l.person,temporary_password:l.temporary_password},ee.value=!0,Y.value=!0)}async function me(){if(ae.value.email&&W.value){I.value=!0;try{const e={first_name:ae.value.first_name,last_name:ae.value.last_name,email:ae.value.email,person:ae.value.person,company:W.value.company.id};ee.value?await l.patch(`/items/client_users/${ae.value.id}`,e):await l.post("/items/client_users",e),Y.value=!1,await se(W.value)}finally{I.value=!1}}}function ve(e){G.value={type:"info",message:("company"===e?"Firma":"Person")+" im jeweiligen Manager anlegen."}}return i(ie),(e,a)=>{var t,n;const i=s("v-icon"),H=s("v-list-item-icon"),J=s("v-text-overflow"),ie=s("v-list-item-content"),pe=s("v-list-item"),fe=s("v-divider"),ye=s("v-list"),ge=s("v-button"),_e=s("v-avatar"),be=s("v-chip"),he=s("v-table"),ke=s("v-select"),xe=s("v-textarea"),we=s("v-drawer"),Ve=s("v-input"),Ce=o("tooltip");return u(),d(r(k),{title:"Customer Manager","item-title":(null==(n=null==(t=W.value)?void 0:t.company)?void 0:n.name)||"Kunde wählen","is-empty":!W.value,"empty-title":"Kunde auswählen","empty-icon":"handshake",notice:G.value,onCloseNotice:a[16]||(a[16]=e=>G.value=null)},{navigation:c(()=>[m(ye,{nav:""},{default:c(()=>[m(pe,{onClick:oe,clickable:""},{default:c(()=>[m(H,null,{default:c(()=>[m(i,{name:"add",color:"var(--theme--primary)"})]),_:1}),m(ie,null,{default:c(()=>[m(J,{text:"Neuen Kunden verlinken"})]),_:1})]),_:1}),m(fe),(u(!0),v(p,null,f(D.value,e=>{var a;return u(),d(pe,{key:e.id,active:(null==(a=W.value)?void 0:a.id)===e.id,class:"nav-item",clickable:"",onClick:a=>se(e)},{default:c(()=>[m(H,null,{default:c(()=>[m(i,{name:"business"})]),_:1}),m(ie,null,{default:c(()=>{var a;return[m(J,{text:null==(a=e.company)?void 0:a.name},null,8,["text"])]}),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),subtitle:c(()=>{var e;return[W.value?(u(),v(p,{key:0},[y(g(q.value.length)+" Portal-Nutzer · "+g(null==(e=W.value.company)?void 0:e.domain),1)],64)):_("v-if",!0)]}),actions:c(()=>[b((u(),d(ge,{secondary:"",rounded:"",icon:"",onClick:ue},{default:c(()=>[m(i,{name:"edit"})]),_:1})),[[Ce,"Kunden-Verlinkung bearbeiten",void 0,{bottom:!0}]]),m(ge,{primary:"",onClick:re},{default:c(()=>[...a[17]||(a[17]=[y(" Portal-Nutzer hinzufügen ",-1)])]),_:1})]),"empty-state":c(()=>[a[19]||(a[19]=y(" Wähle einen Kunden aus der Liste oder ",-1)),m(ge,{"x-small":"",onClick:oe},{default:c(()=>[...a[18]||(a[18]=[y("verlinke eine neue Firma",-1)])]),_:1}),a[20]||(a[20]=y(". ",-1))]),default:c(()=>[m(he,{headers:le,items:q.value,loading:B.value,class:"clickable-table","fixed-header":"","onClick:row":ce},{"item.name":c(({item:e})=>[h("div",w,[m(_e,{name:e.first_name,"x-small":""},null,8,["name"]),h("span",V,g(e.first_name)+" "+g(e.last_name),1)])]),"item.last_invited":c(({item:e})=>{return[e.last_invited?(u(),v("span",C,g((l=e.last_invited,new Date(l).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}))),1)):(u(),d(be,{key:1,"x-small":""},{default:c(()=>[...a[21]||(a[21]=[y("Noch nie",-1)])]),_:1}))];var l}),_:2},1032,["items","loading"]),m(we,{modelValue:Q.value,"onUpdate:modelValue":a[6]||(a[6]=e=>Q.value=e),title:R.value?"Kunden-Verlinkung bearbeiten":"Kunden verlinken",icon:"handshake",onCancel:a[7]||(a[7]=e=>Q.value=!1)},{default:c(()=>[Q.value?(u(),v("div",N,[h("div",z,[h("div",P,[a[22]||(a[22]=h("span",{class:"label"},"Organisation / Firma",-1)),m(r(x),{modelValue:X.value.company,"onUpdate:modelValue":a[0]||(a[0]=e=>X.value.company=e),items:te.value,placeholder:"Firma auswählen...","allow-add":"",onAdd:a[1]||(a[1]=e=>ve("company"))},null,8,["modelValue","items"])]),h("div",U,[a[23]||(a[23]=h("span",{class:"label"},"Haupt-Ansprechpartner (optional)",-1)),m(r(x),{modelValue:X.value.contact_person,"onUpdate:modelValue":a[2]||(a[2]=e=>X.value.contact_person=e),items:ne.value,placeholder:"Person auswählen...","allow-add":"",onAdd:a[3]||(a[3]=e=>ve("person"))},null,8,["modelValue","items"])]),h("div",K,[a[24]||(a[24]=h("span",{class:"label"},"Status",-1)),m(ke,{modelValue:X.value.status,"onUpdate:modelValue":a[4]||(a[4]=e=>X.value.status=e),items:[{text:"Aktiv",value:"active"},{text:"Inaktiv",value:"inactive"}]},null,8,["modelValue"])]),h("div",A,[a[25]||(a[25]=h("span",{class:"label"},"Notizen",-1)),m(xe,{modelValue:X.value.notes,"onUpdate:modelValue":a[5]||(a[5]=e=>X.value.notes=e),placeholder:"Besonderheiten zu diesem Kunden..."},null,8,["modelValue"])])]),h("div",E,[m(ge,{primary:"",block:"",loading:I.value,onClick:de},{default:c(()=>[...a[26]||(a[26]=[y("Speichern",-1)])]),_:1},8,["loading"])])])):_("v-if",!0)]),_:1},8,["modelValue","title"]),m(we,{modelValue:Y.value,"onUpdate:modelValue":a[14]||(a[14]=e=>Y.value=e),title:ee.value?"Portal-Nutzer bearbeiten":"Neuen Portal-Nutzer anlegen",icon:"person",onCancel:a[15]||(a[15]=e=>Y.value=!1)},{default:c(()=>[Y.value?(u(),v("div",M,[h("div",S,[h("div",T,[a[27]||(a[27]=h("span",{class:"label"},"Vorname",-1)),m(Ve,{modelValue:ae.value.first_name,"onUpdate:modelValue":a[8]||(a[8]=e=>ae.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),h("div",Z,[a[28]||(a[28]=h("span",{class:"label"},"Nachname",-1)),m(Ve,{modelValue:ae.value.last_name,"onUpdate:modelValue":a[9]||(a[9]=e=>ae.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),h("div",$,[a[29]||(a[29]=h("span",{class:"label"},"E-Mail",-1)),m(Ve,{modelValue:ae.value.email,"onUpdate:modelValue":a[10]||(a[10]=e=>ae.value.email=e),placeholder:"E-Mail Adresse",type:"email"},null,8,["modelValue"])]),h("div",F,[a[30]||(a[30]=h("span",{class:"label"},"Zentrale Person (Verknüpfung)",-1)),m(ke,{modelValue:ae.value.person,"onUpdate:modelValue":a[11]||(a[11]=e=>ae.value.person=e),items:ne.value,placeholder:"Master-Person auswählen..."},null,8,["modelValue","items"])]),ee.value?(u(),d(fe,{key:0})):_("v-if",!0),ee.value?(u(),v("div",O,[a[31]||(a[31]=h("span",{class:"label"},"Temporäres Passwort",-1)),m(Ve,{modelValue:ae.value.temporary_password,"onUpdate:modelValue":a[12]||(a[12]=e=>ae.value.temporary_password=e),readonly:"",class:"password-input"},null,8,["modelValue"]),a[32]||(a[32]=h("p",{class:"field-note"},"Wird beim Senden der Zugangsdaten automatisch generiert.",-1))])):_("v-if",!0)]),h("div",j,[m(ge,{primary:"",block:"",loading:I.value,onClick:me},{default:c(()=>[...a[33]||(a[33]=[y("Daten speichern",-1)])]),_:1},8,["loading"]),ee.value?(u(),v(p,{key:0},[m(fe),b((u(),d(ge,{secondary:"",block:"",loading:L.value===ae.value.id,onClick:a[13]||(a[13]=e=>async function(e){L.value=e.id;try{await l.post("/flows/trigger/33443f6b-cec7-4668-9607-f33ea674d501",[e.id]),G.value={type:"success",message:"Zugangsdaten versendet. 📧"},await se(W.value)}finally{L.value=null}}(ae.value))},{default:c(()=>[m(i,{name:"send",left:""}),a[34]||(a[34]=y(" Zugangsdaten senden ",-1))]),_:1},8,["loading"])),[[Ce,"Generiert PW, speichert es und sendet E-Mail",void 0,{bottom:!0}]])],64)):_("v-if",!0)])])):_("v-if",!0)]),_:1},8,["modelValue","title"])]),_:1},8,["item-title","is-empty","notice"])}}}),W=[],q=[];!function(e,a){if(e&&"undefined"!=typeof document){var l,t=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=W.indexOf(i);-1===s&&(s=W.push(i)-1,q[s]={}),l=q[s]&&q[s][t]?q[s][t]:q[s][t]=o()}else l=o();65279===e.charCodeAt(0)&&(e=e.substring(1)),l.styleSheet?l.styleSheet.cssText+=e:l.appendChild(document.createTextNode(e))}function o(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var l=Object.keys(a.attributes),n=0;n{const l=e.__vccOpts||e;for(const[e,t]of a)l[e]=t;return l})(D,[["__scopeId","data-v-3f525746"],["__file","module.vue"]])}]});export{B as default}; diff --git a/directus/extensions/customer-manager/package.json b/directus/extensions/customer-manager/package.json index fc3bf57..540a73a 100644 --- a/directus/extensions/customer-manager/package.json +++ b/directus/extensions/customer-manager/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@directus/extensions-sdk": "11.0.2", + "@mintel/directus-extension-toolkit": "workspace:*", "vue": "^3.4.0" } } \ No newline at end of file diff --git a/directus/extensions/people-manager/index.js b/directus/extensions/people-manager/index.js index 81751ad..53c5385 100644 --- a/directus/extensions/people-manager/index.js +++ b/directus/extensions/people-manager/index.js @@ -1 +1 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as n,computed as l,onMounted as o,resolveComponent as s,resolveDirective as i,openBlock as r,createBlock as c,withCtx as d,createVNode as u,createElementBlock as p,Fragment as m,renderList as v,createElementVNode as f,createTextVNode as y,toDisplayString as g,createCommentVNode as h,withDirectives as _}from"vue";var b=Object.defineProperty,x=Object.defineProperties,w=Object.getOwnPropertyDescriptors,P=Object.getOwnPropertySymbols,k=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable,j=(e,a,t)=>a in e?b(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const O={class:"content-wrapper"},C={key:1,class:"empty-state"},N={key:2},z={class:"header"},S={class:"header-left"},U={class:"title"},A={class:"subtitle"},E={class:"header-right"},F={class:"details-grid"},T={class:"detail-item"},$={class:"value"},B={class:"drawer-content"},M={class:"form-section"},I={class:"field"},q={class:"field"},D={class:"field"},L={class:"field"},W={class:"drawer-actions"};var Z=t({__name:"module",setup(a){const t=e(),b=n([]),Z=n([]),G=n(null),H=n(null),J=n(!1),K=n(!1),Q=n(!1),R=n({id:null,first_name:"",last_name:"",company:null,company_name:""}),X=l(()=>Z.value.map(e=>({text:e.name,value:e.id})));async function Y(){try{const[e,a]=await Promise.all([t.get("/items/people",{params:{sort:"last_name",fields:"*.*"}}),t.get("/items/companies",{params:{sort:"name"}})]);b.value=e.data.data,Z.value=a.data.data}catch(e){console.error("Failed to fetch data:",e)}}function ee(){Q.value=!1,R.value={id:null,first_name:"",last_name:"",company:null,company_name:""},K.value=!0}function ae(){Q.value=!0;const e=G.value;let a=null,t=e.company_name||"";var n;e.company&&("object"==typeof e.company?a=e.company.id:36===e.company.length?a=e.company:t=e.company),R.value=(n=((e,a)=>{for(var t in a||(a={}))k.call(a,t)&&j(e,t,a[t]);if(P)for(var t of P(a))V.call(a,t)&&j(e,t,a[t]);return e})({},e),x(n,w({company:a,company_name:t}))),K.value=!0}async function te(){if(R.value.first_name&&R.value.last_name){J.value=!0;try{Q.value?(await t.patch(`/items/people/${R.value.id}`,R.value),H.value={type:"success",message:"Person aktualisiert!"}):(await t.post("/items/people",R.value),H.value={type:"success",message:"Person angelegt!"}),K.value=!1,await Y(),Q.value&&(G.value=b.value.find(e=>e.id===R.value.id))}catch(e){H.value={type:"danger",message:e.message}}finally{J.value=!1}}else H.value={type:"danger",message:"Vor- und Nachname sind erforderlich."}}async function ne(){if(confirm("Soll diese Person wirklich gelöscht werden?"))try{await t.delete(`/items/people/${G.value.id}`),H.value={type:"success",message:"Person gelöscht."},G.value=null,await Y()}catch(e){H.value={type:"danger",message:e.message}}}return o(Y),(e,a)=>{const t=s("v-icon"),n=s("v-list-item-icon"),l=s("v-text-overflow"),o=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),P=s("v-list"),k=s("v-notice"),V=s("v-button"),j=s("v-info"),Y=s("v-input"),le=s("v-select"),oe=s("v-drawer"),se=s("private-view"),ie=i("tooltip");return r(),c(se,{title:"People Manager"},{navigation:d(()=>[u(P,{nav:""},{default:d(()=>[u(x,{onClick:ee,clickable:""},{default:d(()=>[u(n,null,{default:d(()=>[u(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),u(o,null,{default:d(()=>[u(l,{text:"Neue Person anlegen"})]),_:1})]),_:1}),u(w),(r(!0),p(m,null,v(b.value,e=>{var a;return r(),c(x,{key:e.id,active:(null==(a=G.value)?void 0:a.id)===e.id,class:"person-item",clickable:"",onClick:a=>function(e){G.value=e}(e)},{default:d(()=>[u(n,null,{default:d(()=>[u(t,{name:"person"})]),_:1}),u(o,null,{default:d(()=>[u(l,{text:`${e.first_name} ${e.last_name}`},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),default:d(()=>{return[f("div",O,[H.value?(r(),c(k,{key:0,type:H.value.type,onClose:a[0]||(a[0]=e=>H.value=null),dismissible:""},{default:d(()=>[y(g(H.value.message),1)]),_:1},8,["type"])):h("v-if",!0),G.value?(r(),p("div",N,[f("header",z,[f("div",S,[f("h1",U,g(G.value.first_name)+" "+g(G.value.last_name),1),f("p",A,g((e=G.value,e?e.company?"object"==typeof e.company?e.company.name:(null==(n=Z.value.find(a=>a.id===e.company))?void 0:n.name)||e.company_name:e.company_name||"---":"---")),1)]),f("div",E,[_((r(),c(V,{secondary:"",rounded:"",icon:"",onClick:ae},{default:d(()=>[u(t,{name:"edit"})]),_:1})),[[ie,"Person bearbeiten"]]),_((r(),c(V,{danger:"",rounded:"",icon:"",onClick:ne},{default:d(()=>[u(t,{name:"delete"})]),_:1})),[[ie,"Person löschen"]])])]),u(w),f("div",F,[f("div",T,[a[10]||(a[10]=f("span",{class:"label"},"Name",-1)),f("p",$,g(G.value.first_name)+" "+g(G.value.last_name),1)])])])):(r(),p("div",C,[u(j,{title:"Person auswählen",icon:"person",center:""},{default:d(()=>[a[8]||(a[8]=y(" Wähle eine Person in der Navigation aus oder ",-1)),u(V,{"x-small":"",onClick:ee},{default:d(()=>[...a[7]||(a[7]=[y("erstelle eine neue Person",-1)])]),_:1}),a[9]||(a[9]=y(". ",-1))]),_:1})]))]),u(oe,{modelValue:K.value,"onUpdate:modelValue":a[5]||(a[5]=e=>K.value=e),title:Q.value?"Person bearbeiten":"Neue Person anlegen",icon:"person",onCancel:a[6]||(a[6]=e=>K.value=!1)},{default:d(()=>[f("div",B,[f("div",M,[f("div",I,[a[11]||(a[11]=f("span",{class:"label"},"Vorname",-1)),u(Y,{modelValue:R.value.first_name,"onUpdate:modelValue":a[1]||(a[1]=e=>R.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),f("div",q,[a[12]||(a[12]=f("span",{class:"label"},"Nachname",-1)),u(Y,{modelValue:R.value.last_name,"onUpdate:modelValue":a[2]||(a[2]=e=>R.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),f("div",D,[a[13]||(a[13]=f("span",{class:"label"},"Zentrale Firma",-1)),u(le,{modelValue:R.value.company,"onUpdate:modelValue":a[3]||(a[3]=e=>R.value.company=e),items:X.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),f("div",L,[a[14]||(a[14]=f("span",{class:"label"},"Firma (Legacy / Neu)",-1)),u(Y,{modelValue:R.value.company_name,"onUpdate:modelValue":a[4]||(a[4]=e=>R.value.company_name=e),placeholder:"z.B. Mintel"},null,8,["modelValue"])])]),f("div",W,[u(V,{primary:"",block:"",loading:J.value,onClick:te},{default:d(()=>[...a[15]||(a[15]=[y(" Person speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])];var e,n}),_:1})}}}),G=[],H=[];!function(e,a){if(e&&"undefined"!=typeof document){var t,n=!0===a.prepend?"prepend":"append",l=!0===a.singleTag,o="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(l){var s=G.indexOf(o);-1===s&&(s=G.push(o)-1,H[s]={}),t=H[s]&&H[s][n]?H[s][n]:H[s][n]=i()}else t=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),l=0;l{const t=e.__vccOpts||e;for(const[e,n]of a)t[e]=n;return t})(Z,[["__scopeId","data-v-5f235c38"],["__file","module.vue"]])}]});export{J as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as l,ref as t,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as d,createBlock as u,unref as r,withCtx as c,createVNode as m,createElementBlock as v,Fragment as p,renderList as f,createTextVNode as g,toDisplayString as y,createCommentVNode as _,withDirectives as h,createElementVNode as b}from"vue";import{MintelManagerLayout as x,MintelSelect as w}from"@mintel/directus-extension-toolkit";const k={key:0,class:"details-grid"},V={class:"detail-item"},P={class:"value"},C={class:"detail-item"},N={class:"value"},A={class:"detail-item"},E={class:"value"},M={class:"detail-item"},U={class:"value"},$={class:"drawer-content"},F={class:"form-section"},O={class:"field"},S={class:"field"},T={class:"field"},j={class:"field"},z={class:"drawer-actions"};var B=l({__name:"module",setup(a){const l=e(),B=t([]),q=t([]),I=t(null),W=t(null),Z=t(!1),D=t(!1),G=t(!1),H=t({id:null,first_name:"",last_name:"",email:"",company:null}),J=n(()=>q.value.map(e=>({text:e.name,value:e.id})));function K(e){var a;return e&&e.company?"object"==typeof e.company?e.company.name:(null==(a=q.value.find(a=>a.id===e.company))?void 0:a.name)||"Unbekannte Firma":"---"}async function L(){try{const[e,a]=await Promise.all([l.get("/items/people",{params:{sort:"last_name",fields:"*.*"}}),l.get("/items/companies",{params:{sort:"name"}})]);B.value=e.data.data,q.value=a.data.data}catch(e){console.error("Failed to fetch data:",e)}}function Q(){G.value=!1,H.value={id:null,first_name:"",last_name:"",email:"",company:null},D.value=!0}function R(){var e;G.value=!0;const a=I.value;H.value={id:a.id,first_name:a.first_name,last_name:a.last_name,email:a.email,company:(null==(e=a.company)?void 0:e.id)||a.company},D.value=!0}async function X(){if(H.value.first_name&&H.value.last_name){Z.value=!0;try{let e;if(G.value){const a=await l.patch(`/items/people/${H.value.id}`,H.value);e=a.data.data,W.value={type:"success",message:"Person aktualisiert!"}}else{const a=await l.post("/items/people",H.value);e=a.data.data,W.value={type:"success",message:"Person angelegt!"}}D.value=!1,await L(),e&&(I.value=B.value.find(a=>a.id===e.id)||e)}catch(e){W.value={type:"danger",message:e.message}}finally{Z.value=!1}}else W.value={type:"danger",message:"Vor- und Nachname sind erforderlich."}}async function Y(){if(confirm("Soll diese Person wirklich gelöscht werden?"))try{await l.delete(`/items/people/${I.value.id}`),W.value={type:"success",message:"Person gelöscht."},I.value=null,await L()}catch(e){W.value={type:"danger",message:e.message}}}return i(L),(e,a)=>{var l,t;const n=s("v-icon"),i=s("v-list-item-icon"),q=s("v-text-overflow"),L=s("v-list-item-content"),ee=s("v-list-item"),ae=s("v-divider"),le=s("v-list"),te=s("v-button"),ne=s("v-input"),ie=s("v-drawer"),se=o("tooltip");return d(),u(r(x),{title:"People Manager","item-title":`${null==(l=I.value)?void 0:l.first_name} ${null==(t=I.value)?void 0:t.last_name}`||"Person wählen","is-empty":!I.value,"empty-title":"Person auswählen","empty-icon":"person",notice:W.value,onCloseNotice:a[7]||(a[7]=e=>W.value=null)},{navigation:c(()=>[m(le,{nav:""},{default:c(()=>[m(ee,{onClick:Q,clickable:""},{default:c(()=>[m(i,null,{default:c(()=>[m(n,{name:"add",color:"var(--theme--primary)"})]),_:1}),m(L,null,{default:c(()=>[m(q,{text:"Neue Person anlegen"})]),_:1})]),_:1}),m(ae),(d(!0),v(p,null,f(B.value,e=>{var a;return d(),u(ee,{key:e.id,active:(null==(a=I.value)?void 0:a.id)===e.id,class:"nav-item",clickable:"",onClick:a=>function(e){I.value=e}(e)},{default:c(()=>[m(i,null,{default:c(()=>[m(n,{name:"person"})]),_:1}),m(L,null,{default:c(()=>[m(q,{text:`${e.first_name} ${e.last_name}`},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),subtitle:c(()=>[I.value?(d(),v(p,{key:0},[g(y(K(I.value)),1)],64)):_("v-if",!0)]),actions:c(()=>[h((d(),u(te,{secondary:"",rounded:"",icon:"",onClick:R},{default:c(()=>[m(n,{name:"edit"})]),_:1})),[[se,"Person bearbeiten",void 0,{bottom:!0}]]),h((d(),u(te,{danger:"",rounded:"",icon:"",onClick:Y},{default:c(()=>[m(n,{name:"delete"})]),_:1})),[[se,"Person löschen",void 0,{bottom:!0}]])]),"empty-state":c(()=>[a[9]||(a[9]=g(" Wähle eine Person in der Navigation aus oder ",-1)),m(te,{"x-small":"",onClick:Q},{default:c(()=>[...a[8]||(a[8]=[g("erstelle eine neue Person",-1)])]),_:1}),a[10]||(a[10]=g(". ",-1))]),default:c(()=>[I.value?(d(),v("div",k,[b("div",V,[a[11]||(a[11]=b("span",{class:"label"},"Vorname",-1)),b("p",P,y(I.value.first_name),1)]),b("div",C,[a[12]||(a[12]=b("span",{class:"label"},"Nachname",-1)),b("p",N,y(I.value.last_name),1)]),b("div",A,[a[13]||(a[13]=b("span",{class:"label"},"E-Mail",-1)),b("p",E,y(I.value.email||"---"),1)]),b("div",M,[a[14]||(a[14]=b("span",{class:"label"},"Organisation",-1)),b("p",U,y(K(I.value)),1)])])):_("v-if",!0),m(ie,{modelValue:D.value,"onUpdate:modelValue":a[5]||(a[5]=e=>D.value=e),title:G.value?"Person bearbeiten":"Neue Person anlegen",icon:"person",onCancel:a[6]||(a[6]=e=>D.value=!1)},{default:c(()=>[b("div",$,[b("div",F,[b("div",O,[a[15]||(a[15]=b("span",{class:"label"},"Vorname",-1)),m(ne,{modelValue:H.value.first_name,"onUpdate:modelValue":a[0]||(a[0]=e=>H.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),b("div",S,[a[16]||(a[16]=b("span",{class:"label"},"Nachname",-1)),m(ne,{modelValue:H.value.last_name,"onUpdate:modelValue":a[1]||(a[1]=e=>H.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),b("div",T,[a[17]||(a[17]=b("span",{class:"label"},"E-Mail",-1)),m(ne,{modelValue:H.value.email,"onUpdate:modelValue":a[2]||(a[2]=e=>H.value.email=e),placeholder:"E-Mail Adresse",type:"email"},null,8,["modelValue"])]),b("div",j,[a[18]||(a[18]=b("span",{class:"label"},"Zentrale Firma",-1)),m(r(w),{modelValue:H.value.company,"onUpdate:modelValue":a[3]||(a[3]=e=>H.value.company=e),items:J.value,placeholder:"Bestehende Firma auswählen...","allow-add":"",onAdd:a[4]||(a[4]=e=>{W.value={type:"info",message:"Firma im Company Manager anlegen."}})},null,8,["modelValue","items"])])]),b("div",z,[m(te,{primary:"",block:"",loading:Z.value,onClick:X},{default:c(()=>[...a[19]||(a[19]=[g(" Person speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])]),_:1},8,["item-title","is-empty","notice"])}}}),q=[],I=[];!function(e,a){if(e&&"undefined"!=typeof document){var l,t=!0===a.prepend?"prepend":"append",n=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(n){var s=q.indexOf(i);-1===s&&(s=q.push(i)-1,I[s]={}),l=I[s]&&I[s][t]?I[s][t]:I[s][t]=o()}else l=o();65279===e.charCodeAt(0)&&(e=e.substring(1)),l.styleSheet?l.styleSheet.cssText+=e:l.appendChild(document.createTextNode(e))}function o(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var l=Object.keys(a.attributes),n=0;n{const l=e.__vccOpts||e;for(const[e,t]of a)l[e]=t;return l})(B,[["__scopeId","data-v-04ecd491"],["__file","module.vue"]])}]});export{W as default}; diff --git a/directus/extensions/people-manager/package.json b/directus/extensions/people-manager/package.json index 6e5e6cb..c4aaa57 100644 --- a/directus/extensions/people-manager/package.json +++ b/directus/extensions/people-manager/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@directus/extensions-sdk": "11.0.2", + "@mintel/directus-extension-toolkit": "workspace:*", "vue": "^3.4.0" } } \ No newline at end of file diff --git a/packages/acquisition-manager/src/module.vue b/packages/acquisition-manager/src/module.vue index d3f1815..5b3c2b3 100644 --- a/packages/acquisition-manager/src/module.vue +++ b/packages/acquisition-manager/src/module.vue @@ -1,8 +1,16 @@ diff --git a/packages/people-manager/src/module.vue b/packages/people-manager/src/module.vue index 498e88c..10e831c 100644 --- a/packages/people-manager/src/module.vue +++ b/packages/people-manager/src/module.vue @@ -1,5 +1,13 @@ - +