diff --git a/.agent/workflows/cms-workflow.md b/.agent/workflows/cms-workflow.md new file mode 100644 index 0000000..c30dddb --- /dev/null +++ b/.agent/workflows/cms-workflow.md @@ -0,0 +1,82 @@ +--- +description: How to manage and deploy Directus CMS infrastructure changes. +--- + +# Directus CMS Infrastructure Workflow + +This workflow ensures "Industrial Grade" consistency and stability across local, testing, and production environments for the `at-mintel` Directus CMS. + +## 1. Local Development Lifecycle + +### Starting the CMS +To start the local Directus instance with extensions: +```bash +cd packages/cms-infra +npm run up +``` + +### Modifying Schema +1. **Directus UI**: Make your changes directly in the local Directus Admin UI (Collections, Fields, Relations). +2. **Take Snapshot**: + ```bash + cd packages/cms-infra + npm run snapshot:local + ``` + This updates `packages/cms-infra/schema/snapshot.yaml`. +3. **Commit**: Commit the updated `snapshot.yaml`. + +## 2. Deploying Schema Changes + +### To Local Environment (Reconciliation) +If you pull changes from Git and need to apply them to your local database: +```bash +cd packages/cms-infra +npm run schema:apply:local +``` +> [!IMPORTANT] +> This command automatically runs `scripts/cms-reconcile.sh` to prevent "Field already exists" errors by registering database columns in Directus metadata first. + +### To Production (Infra) +To deploy the local snapshot to the production server: +```bash +cd packages/cms-infra +npm run schema:apply:infra +``` +This script: +1. Syncs built extensions via rsync. +2. Injects the `snapshot.yaml` into the remote container. +3. Runs `directus schema apply`. +4. Restarts Directus to clear the schema cache. + +## 3. Data Synchronization + +### Pulling from Production +To update your local environment with production data and assets: +```bash +cd packages/cms-infra +npm run sync:pull +``` + +### Pushing to Production +> [!CAUTION] +> This will overwrite production data. Use with extreme care. +```bash +cd packages/cms-infra +npm run sync:push +``` + +## 4. Extension Management +When modifying extensions in `packages/*-manager`: +1. Extensions are automatically built and synced when running `npm run up`. +2. To sync manually without restarting the stack: + ```bash + cd packages/cms-infra + npm run build:extensions + ``` + +## 5. Troubleshooting "Field already exists" +If `schema:apply` fails with "Field already exists", run: +```bash +./scripts/cms-reconcile.sh +``` +This script ensures the database state matches Directus's internal field registry (`directus_fields`). diff --git a/.env b/.env index ed2418c..06df8cf 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ # Project -IMAGE_TAG=latest +IMAGE_TAG=v1.8.0 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 533d6a0..1b3967a 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 l,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as d,createBlock as r,withCtx as u,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as g,createCommentVNode as y,createElementVNode as b,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const A={class:"content-wrapper"},C={key:0,class:"empty-state"},$={class:"header"},U={class:"header-left"},F={class:"title"},O={class:"subtitle"},P=["href"],E={class:"header-right"},S={class:"sections"},j={class:"main-info"},L={class:"form-grid"},z={class:"field"},q={key:1,class:"value text-subdued"},B={class:"field"},N={class:"value"},D={class:"field full"},M={class:"value text-block"},I={key:0,class:"ai-observations"},T={class:"metrics"},K={class:"page-title"},G={class:"page-url"},R={class:"drawer-content"},W={class:"form-section"},H={class:"field"},J={class:"field"},Q={class:"field"},X={class:"field"},Y={class:"field"},Z={class:"field"},ee={class:"drawer-actions"};var ae=t({__name:"module",setup(a){const t=e(),_=l([]),ae=l(null),te=l(!1),le=l(!1),ne=l(!1),ie=l(!1),se=l(!1),oe=l(null),de=l({company_name:"",website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}),re=l([]),ue=n(()=>re.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function ce(e){const a=re.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ve=n(()=>_.value.find(e=>e.id===ae.value));async function pe(){const[e,a]=await Promise.all([t.get("/items/leads",{params:{sort:"-date_created"}}),t.get("/items/people",{params:{sort:"last_name"}})]);_.value=e.data.data,re.value=a.data.data,!ae.value&&_.value.length>0&&(ae.value=_.value[0].id)}async function me(){if(ae.value){te.value=!0;try{await t.post(`/acquisition/audit/${ae.value}`),oe.value={type:"success",message:"Audit erfolgreich gestartet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{te.value=!1}}}async function fe(){if(ae.value){ne.value=!0;try{await t.post(`/acquisition/audit-email/${ae.value}`),oe.value={type:"success",message:"Audit E-Mail versendet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ne.value=!1}}}async function ge(){if(ae.value){le.value=!0;try{await t.post(`/acquisition/estimate/${ae.value}`),oe.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{le.value=!1}}}async function ye(){if(ae.value){ne.value=!0;try{await t.post(`/acquisition/estimate-email/${ae.value}`),oe.value={type:"success",message:"Angebot erfolgreich versendet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ne.value=!1}}}function be(){var e;(null==(e=ve.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ve.value.audit_pdf_path}`,"_blank")}async function he(){if(de.value.company_name){se.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&V(e,t,a[t]);return e})({id:crypto.randomUUID()},de.value);await t.post("/items/leads",e),oe.value={type:"success",message:"Lead erfolgreich registriert!"},ie.value=!1,await pe(),ae.value=e.id,de.value={company_name:"",website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}}catch(e){oe.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{se.value=!1}}}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(pe),(e,a)=>{const t=s("v-icon"),l=s("v-list-item-icon"),n=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),V=s("v-notice"),re=s("v-button"),pe=s("v-info"),we=s("v-table"),ke=s("v-input"),Ve=s("v-textarea"),Ae=s("v-select"),Ce=s("v-drawer"),$e=s("private-view"),Ue=o("tooltip");return d(),r($e,{title:"Acquisition Manager"},{navigation:u(()=>[c(k,{nav:""},{default:u(()=>[c(x,{onClick:a[0]||(a[0]=e=>ie.value=!0),clickable:""},{default:u(()=>[c(l,null,{default:u(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:u(()=>[c(n,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(d(!0),v(p,null,m(_.value,e=>(d(),r(x,{key:e.id,active:ae.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(ae.value=t);var t}},{default:u(()=>[c(l,null,{default:u(()=>[c(t,{name:_e(e.status),color:xe(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:u(()=>[c(n,{text:e.company_name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":u(()=>[oe.value?(d(),r(V,{key:0,type:oe.value.type,onClose:a[1]||(a[1]=e=>oe.value=null),dismissible:""},{default:u(()=>[f(g(oe.value.message),1)]),_:1},8,["type"])):y("v-if",!0)]),default:u(()=>{var e;return[b("div",A,[c(V,{type:"success",style:{"margin-bottom":"16px"}},{default:u(()=>[f(" DEBUG: Module Version 1.1.0 - Native Build - "+g((new Date).toISOString()),1)]),_:1}),ve.value?(d(),v(p,{key:1},[b("header",$,[b("div",U,[b("h1",F,g(ve.value.company_name),1),b("p",O,[c(t,{name:"language","x-small":""}),b("a",{href:ve.value.website_url,target:"_blank",class:"url-link"},g(ve.value.website_url.replace(/^https?:\/\//,"")),9,P),f(" · Status: "+g(ve.value.status.toUpperCase()),1)])]),b("div",E,["new"===ve.value.status?(d(),r(re,{key:0,secondary:"",loading:te.value,onClick:me},{default:u(()=>[c(t,{name:"settings_suggest",left:""}),a[15]||(a[15]=f(" Audit starten ",-1))]),_:1},8,["loading"])):y("v-if",!0),"audit_ready"===ve.value.status?(d(),v(p,{key:1},[c(re,{secondary:"",loading:ne.value,onClick:fe},{default:u(()=>[c(t,{name:"mail",left:""}),a[16]||(a[16]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(re,{loading:le.value,onClick:ge},{default:u(()=>[c(t,{name:"picture_as_pdf",left:""}),a[17]||(a[17]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):y("v-if",!0),ve.value.audit_pdf_path?h((d(),r(re,{key:2,secondary:"",icon:"",onClick:be},{default:u(()=>[c(t,{name:"open_in_new"})]),_:1})),[[Ue,"PDF öffnen",void 0,{bottom:!0}]]):y("v-if",!0),ve.value.audit_pdf_path?(d(),r(re,{key:3,primary:"",loading:ne.value,onClick:ye},{default:u(()=>[c(t,{name:"send",left:""}),a[18]||(a[18]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):y("v-if",!0)])]),b("div",S,[b("div",j,[b("div",L,[b("div",z,[a[19]||(a[19]=b("span",{class:"label"},"Kontaktperson",-1)),ve.value.contact_person?(d(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ve.value.contact_person,void(oe.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},g(ce(ve.value.contact_person)),1)):(d(),v("div",q,"Keine Person verknüpft"))]),b("div",B,[a[20]||(a[20]=b("span",{class:"label"},"E-Mail (Legacy)",-1)),b("div",N,g(ve.value.contact_email||"—"),1)]),b("div",D,[a[21]||(a[21]=b("span",{class:"label"},"Briefing / Fokus",-1)),b("div",M,g(ve.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ve.value.ai_state?(d(),v("div",I,[a[22]||(a[22]=b("h3",{class:"section-title"},"AI Observations & Estimation",-1)),b("div",T,[c(pe,{label:"Projekt-Modus",value:ve.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(pe,{label:"Seitenanzahl",value:(null==(e=ve.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ve.value.ai_state.sitemap?(d(),r(we,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ve.value.ai_state.sitemap,class:"observation-table"},{"item.title":u(({item:e})=>[b("span",K,g(e.title),1)]),"item.url":u(({item:e})=>[b("span",G,g(e.url),1)]),_:2},1032,["items"])):y("v-if",!0)])):y("v-if",!0)])],64)):(d(),v("div",C,[c(pe,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:u(()=>[a[13]||(a[13]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(re,{"x-small":"",onClick:a[2]||(a[2]=e=>ie.value=!0)},{default:u(()=>[...a[12]||(a[12]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[14]||(a[14]=f(". ",-1))]),_:1})]))]),c(Ce,{modelValue:ie.value,"onUpdate:modelValue":a[10]||(a[10]=e=>ie.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[11]||(a[11]=e=>ie.value=!1)},{default:u(()=>[b("div",R,[b("div",W,[b("div",H,[a[23]||(a[23]=b("span",{class:"label"},"Firma",-1)),c(ke,{modelValue:de.value.company_name,"onUpdate:modelValue":a[4]||(a[4]=e=>de.value.company_name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),b("div",J,[a[24]||(a[24]=b("span",{class:"label"},"Website URL",-1)),c(ke,{modelValue:de.value.website_url,"onUpdate:modelValue":a[5]||(a[5]=e=>de.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),b("div",Q,[a[25]||(a[25]=b("span",{class:"label"},"Ansprechpartner",-1)),c(ke,{modelValue:de.value.contact_name,"onUpdate:modelValue":a[6]||(a[6]=e=>de.value.contact_name=e),placeholder:"Vorname Nachname"},null,8,["modelValue"])]),b("div",X,[a[26]||(a[26]=b("span",{class:"label"},"E-Mail Adresse",-1)),c(ke,{modelValue:de.value.contact_email,"onUpdate:modelValue":a[7]||(a[7]=e=>de.value.contact_email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),b("div",Y,[a[27]||(a[27]=b("span",{class:"label"},"Briefing / Fokus",-1)),c(Ve,{modelValue:de.value.briefing,"onUpdate:modelValue":a[8]||(a[8]=e=>de.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),b("div",Z,[a[28]||(a[28]=b("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(Ae,{modelValue:de.value.contact_person,"onUpdate:modelValue":a[9]||(a[9]=e=>de.value.contact_person=e),items:ue.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),b("div",ee,[c(re,{primary:"",block:"",loading:se.value,onClick:he},{default:u(()=>[...a[29]||(a[29]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),te=[],le=[];!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=te.indexOf(i);-1===s&&(s=te.push(i)-1,le[s]={}),t=le[s]&&le[s][l]?le[s][l]:le[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})(ae,[["__scopeId","data-v-6a55edd7"],["__file","module.vue"]]),ie=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ne},{path:":id",component:ne,props:!0}]});export{ie as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as r,createBlock as u,withCtx as d,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as g,createCommentVNode as b,createElementVNode as y,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const A={class:"content-wrapper"},$={key:0,class:"empty-state"},C={class:"header"},F={class:"header-left"},U={class:"title"},O={class:"subtitle"},j=["href"],P={class:"header-right"},E={class:"sections"},L={class:"main-info"},S={class:"form-grid"},z={class:"field"},B={key:1,class:"value text-subdued"},N={class:"field"},q={class:"value"},D={class:"field full"},M={class:"value text-block"},I={key:0,class:"ai-observations"},T={class:"metrics"},K={class:"page-title"},G={class:"page-url"},R={class:"drawer-content"},W={class:"form-section"},H={class:"field"},Z={class:"field"},J={class:"field"},Q={class:"field"},X={class:"field"},Y={class:"field"},ee={class:"field"},ae={class:"drawer-actions"};var te=t({__name:"module",setup(a){const t=e(),_=l([]),te=l(null),le=l(!1),ne=l(!1),ie=l(!1),se=l(!1),oe=l(!1),re=l(null),ue=l({company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}),de=l([]),ce=l([]),ve=n(()=>de.value.map(e=>({text:e.name,value:e.id}))),pe=n(()=>ce.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function me(e){var a;return e.company?"object"==typeof e.company?e.company.name:(null==(a=de.value.find(a=>a.id===e.company))?void 0:a.name)||e.company_name:e.company_name}function fe(e){if(!e)return"";if("object"==typeof e)return`${e.first_name} ${e.last_name}`;const a=ce.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ge=n(()=>_.value.find(e=>e.id===te.value));async function be(){const[e,a,l]=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,ce.value=a.data.data,de.value=l.data.data,!te.value&&_.value.length>0&&(te.value=_.value[0].id)}async function ye(){await be()}async function he(){if(te.value){le.value=!0;try{await t.post(`/acquisition/audit/${te.value}`),re.value={type:"success",message:"Audit erfolgreich gestartet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{le.value=!1}}}async function _e(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/audit-email/${te.value}`),re.value={type:"success",message:"Audit E-Mail versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}async function xe(){if(te.value){ne.value=!0;try{await t.post(`/acquisition/estimate/${te.value}`),re.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{ne.value=!1}}}async function we(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/estimate-email/${te.value}`),re.value={type:"success",message:"Angebot erfolgreich versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}function ke(){var e;(null==(e=ge.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ge.value.audit_pdf_path}`,"_blank")}async function Ve(){if(ue.value.company_name||ue.value.company){oe.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&V(e,t,a[t]);return e})({id:crypto.randomUUID()},ue.value);await t.post("/items/leads",e),re.value={type:"success",message:"Lead erfolgreich registriert!"},se.value=!1,await ye(),te.value=e.id,ue.value={company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}}catch(e){re.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{oe.value=!1}}else re.value={type:"danger",message:"Firma oder Firmenname erforderlich."}}function Ae(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(be),(e,a)=>{const t=s("v-icon"),l=s("v-list-item-icon"),n=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),V=s("v-notice"),de=s("v-button"),ce=s("v-info"),be=s("v-table"),ye=s("v-select"),Ce=s("v-input"),Fe=s("v-textarea"),Ue=s("v-drawer"),Oe=s("private-view"),je=o("tooltip");return r(),u(Oe,{title:"Acquisition Manager"},{navigation:d(()=>[c(k,{nav:""},{default:d(()=>[c(x,{onClick:a[0]||(a[0]=e=>se.value=!0),clickable:""},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:d(()=>[c(n,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(r(!0),v(p,null,m(_.value,e=>(r(),u(x,{key:e.id,active:te.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(te.value=t);var t}},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:Ae(e.status),color:$e(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:d(()=>[c(n,{text:me(e)},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":d(()=>[re.value?(r(),u(V,{key:0,type:re.value.type,onClose:a[1]||(a[1]=e=>re.value=null),dismissible:""},{default:d(()=>[f(g(re.value.message),1)]),_:1},8,["type"])):b("v-if",!0)]),default:d(()=>{var e;return[y("div",A,[c(V,{type:"success",style:{"margin-bottom":"16px"}},{default:d(()=>[f(" DEBUG: Module Version 1.1.0 - Native Build - "+g((new Date).toISOString()),1)]),_:1}),ge.value?(r(),v(p,{key:1},[y("header",C,[y("div",F,[y("h1",U,g(me(ge.value)),1),y("p",O,[c(t,{name:"language","x-small":""}),y("a",{href:ge.value.website_url,target:"_blank",class:"url-link"},g(ge.value.website_url.replace(/^https?:\/\//,"")),9,j),f(" · Status: "+g(ge.value.status.toUpperCase()),1)])]),y("div",P,["new"===ge.value.status?(r(),u(de,{key:0,secondary:"",loading:le.value,onClick:he},{default:d(()=>[c(t,{name:"settings_suggest",left:""}),a[16]||(a[16]=f(" Audit starten ",-1))]),_:1},8,["loading"])):b("v-if",!0),"audit_ready"===ge.value.status?(r(),v(p,{key:1},[c(de,{secondary:"",loading:ie.value,onClick:_e},{default:d(()=>[c(t,{name:"mail",left:""}),a[17]||(a[17]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(de,{loading:ne.value,onClick:xe},{default:d(()=>[c(t,{name:"picture_as_pdf",left:""}),a[18]||(a[18]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):b("v-if",!0),ge.value.audit_pdf_path?h((r(),u(de,{key:2,secondary:"",icon:"",onClick:ke},{default:d(()=>[c(t,{name:"open_in_new"})]),_:1})),[[je,"PDF öffnen",void 0,{bottom:!0}]]):b("v-if",!0),ge.value.audit_pdf_path?(r(),u(de,{key:3,primary:"",loading:ie.value,onClick:we},{default:d(()=>[c(t,{name:"send",left:""}),a[19]||(a[19]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):b("v-if",!0)])]),y("div",E,[y("div",L,[y("div",S,[y("div",z,[a[20]||(a[20]=y("span",{class:"label"},"Kontaktperson",-1)),ge.value.contact_person?(r(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ge.value.contact_person,void(re.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},g(fe(ge.value.contact_person)),1)):(r(),v("div",B,"Keine Person verknüpft"))]),y("div",N,[a[21]||(a[21]=y("span",{class:"label"},"E-Mail (Legacy)",-1)),y("div",q,g(ge.value.contact_email||"—"),1)]),y("div",D,[a[22]||(a[22]=y("span",{class:"label"},"Briefing / Fokus",-1)),y("div",M,g(ge.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ge.value.ai_state?(r(),v("div",I,[a[23]||(a[23]=y("h3",{class:"section-title"},"AI Observations & Estimation",-1)),y("div",T,[c(ce,{label:"Projekt-Modus",value:ge.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(ce,{label:"Seitenanzahl",value:(null==(e=ge.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ge.value.ai_state.sitemap?(r(),u(be,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ge.value.ai_state.sitemap,class:"observation-table"},{"item.title":d(({item:e})=>[y("span",K,g(e.title),1)]),"item.url":d(({item:e})=>[y("span",G,g(e.url),1)]),_:2},1032,["items"])):b("v-if",!0)])):b("v-if",!0)])],64)):(r(),v("div",$,[c(ce,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:d(()=>[a[14]||(a[14]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(de,{"x-small":"",onClick:a[2]||(a[2]=e=>se.value=!0)},{default:d(()=>[...a[13]||(a[13]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[15]||(a[15]=f(". ",-1))]),_:1})]))]),c(Ue,{modelValue:se.value,"onUpdate:modelValue":a[11]||(a[11]=e=>se.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[12]||(a[12]=e=>se.value=!1)},{default:d(()=>[y("div",R,[y("div",W,[y("div",H,[a[24]||(a[24]=y("span",{class:"label"},"Organisation / Firma (Zentral)",-1)),c(ye,{modelValue:ue.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>ue.value.company=e),items:ve.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),y("div",Z,[a[25]||(a[25]=y("span",{class:"label"},"Organisation / Firma (Legacy / Neu)",-1)),c(Ce,{modelValue:ue.value.company_name,"onUpdate:modelValue":a[5]||(a[5]=e=>ue.value.company_name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),y("div",J,[a[26]||(a[26]=y("span",{class:"label"},"Website URL",-1)),c(Ce,{modelValue:ue.value.website_url,"onUpdate:modelValue":a[6]||(a[6]=e=>ue.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),y("div",Q,[a[27]||(a[27]=y("span",{class:"label"},"Ansprechpartner",-1)),c(Ce,{modelValue:ue.value.contact_name,"onUpdate:modelValue":a[7]||(a[7]=e=>ue.value.contact_name=e),placeholder:"Vorname Nachname"},null,8,["modelValue"])]),y("div",X,[a[28]||(a[28]=y("span",{class:"label"},"E-Mail Adresse",-1)),c(Ce,{modelValue:ue.value.contact_email,"onUpdate:modelValue":a[8]||(a[8]=e=>ue.value.contact_email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),y("div",Y,[a[29]||(a[29]=y("span",{class:"label"},"Briefing / Fokus",-1)),c(Fe,{modelValue:ue.value.briefing,"onUpdate:modelValue":a[9]||(a[9]=e=>ue.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),y("div",ee,[a[30]||(a[30]=y("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(ye,{modelValue:ue.value.contact_person,"onUpdate:modelValue":a[10]||(a[10]=e=>ue.value.contact_person=e),items:pe.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),y("div",ae,[c(de,{primary:"",block:"",loading:oe.value,onClick:Ve},{default:d(()=>[...a[31]||(a[31]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),le=[],ne=[];!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=le.indexOf(i);-1===s&&(s=le.push(i)-1,ne[s]={}),t=ne[s]&&ne[s][l]?ne[s][l]:ne[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})(te,[["__scopeId","data-v-c729ebea"],["__file","module.vue"]]),se=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ie},{path:":id",component:ie,props:!0}]});export{se as default}; diff --git a/directus/extensions/acquisition-manager/package.json b/directus/extensions/acquisition-manager/package.json index 14990bd..7ac8793 100644 --- a/directus/extensions/acquisition-manager/package.json +++ b/directus/extensions/acquisition-manager/package.json @@ -2,7 +2,7 @@ "name": "acquisition-manager", "description": "Custom High-Fidelity Acquisition Management for Directus", "icon": "account_balance_wallet", - "version": "1.7.12", + "version": "1.8.0", "type": "module", "keywords": [ "directus", diff --git a/directus/extensions/acquisition/package.json b/directus/extensions/acquisition/package.json index 4bbaa84..a9cfb5d 100644 --- a/directus/extensions/acquisition/package.json +++ b/directus/extensions/acquisition/package.json @@ -1,6 +1,6 @@ { "name": "acquisition", - "version": "1.7.12", + "version": "1.8.0", "type": "module", "directus:extension": { "type": "endpoint", @@ -24,4 +24,4 @@ "react": "^19.2.4", "react-dom": "^19.2.4" } -} \ No newline at end of file +} diff --git a/directus/extensions/customer-manager/package.json b/directus/extensions/customer-manager/package.json index 426752b..3f78767 100644 --- a/directus/extensions/customer-manager/package.json +++ b/directus/extensions/customer-manager/package.json @@ -2,7 +2,7 @@ "name": "customer-manager", "description": "Custom High-Fidelity Customer & Company Management for Directus", "icon": "supervisor_account", - "version": "1.7.12", + "version": "1.8.0", "type": "module", "keywords": [ "directus", diff --git a/directus/extensions/feedback-commander/package.json b/directus/extensions/feedback-commander/package.json index a0e6798..b382b0e 100644 --- a/directus/extensions/feedback-commander/package.json +++ b/directus/extensions/feedback-commander/package.json @@ -2,7 +2,7 @@ "name": "feedback-commander", "description": "Custom High-Fidelity Feedback Management Extension for Directus", "icon": "view_kanban", - "version": "1.7.12", + "version": "1.8.0", "type": "module", "keywords": [ "directus", diff --git a/directus/extensions/people-manager/index.js b/directus/extensions/people-manager/index.js index 7b71123..ecff1c0 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 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 p,renderList as v,createElementVNode as m,createTextVNode as f,toDisplayString as b,createCommentVNode as g,withDirectives as y}from"vue";var h=Object.defineProperty,x=Object.getOwnPropertySymbols,_=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?h(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const k={class:"content-wrapper"},P={key:1,class:"empty-state"},C={key:2},O={class:"header"},j={class:"header-left"},N={class:"title"},E={class:"subtitle"},T={class:"header-right"},U={class:"details-grid"},z={class:"detail-item"},M={class:"value"},S={class:"detail-item"},A={class:"value"},$={class:"drawer-content"},B={class:"form-section"},F={class:"field"},I={class:"field"},q={class:"field"},K={class:"field"},W={class:"field"},D={class:"drawer-actions"};var G=t({__name:"module",setup(a){const t=e(),h=l([]),G=l(null),H=l(null),J=l(!1),L=l(!1),Q=l(!1),R=l({id:null,first_name:"",last_name:"",email:"",company:"",phone:""});async function X(){try{const e=await t.get("/items/people",{params:{sort:"last_name"}});h.ref=e.data.data}catch(e){console.error("Failed to fetch people:",e)}}function Y(){Q.value=!1,R.value={id:null,first_name:"",last_name:"",email:"",company:"",phone:""},L.value=!0}function Z(){Q.value=!0,R.value=((e,a)=>{for(var t in a||(a={}))_.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))w.call(a,t)&&V(e,t,a[t]);return e})({},G.value),L.value=!0}async function ee(){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!"}),L.value=!1,await X(),Q.value&&(G.value=R.value)}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 ae(){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 X()}catch(e){H.value={type:"danger",message:e.message}}}return n(X),(e,a)=>{const t=i("v-icon"),l=i("v-list-item-icon"),n=i("v-text-overflow"),x=i("v-list-item-content"),_=i("v-list-item"),w=i("v-divider"),V=i("v-list"),X=i("v-notice"),te=i("v-button"),le=i("v-info"),ne=i("v-input"),ie=i("v-drawer"),se=i("private-view"),de=s("tooltip");return d(),o(se,{title:"People Manager"},{navigation:r(()=>[u(V,{nav:""},{default:r(()=>[u(_,{onClick:Y,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 Person anlegen"})]),_:1})]),_:1}),u(w),(d(!0),c(p,null,v(h.value,e=>{var a;return d(),o(_,{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:r(()=>[u(l,null,{default:r(()=>[u(t,{name:"person"})]),_:1}),u(x,null,{default:r(()=>[u(n,{text:`${e.first_name} ${e.last_name}`},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),default:r(()=>[m("div",k,[H.value?(d(),o(X,{key:0,type:H.value.type,onClose:a[0]||(a[0]=e=>H.value=null),dismissible:""},{default:r(()=>[f(b(H.value.message),1)]),_:1},8,["type"])):g("v-if",!0),G.value?(d(),c("div",C,[m("header",O,[m("div",j,[m("h1",N,b(G.value.first_name)+" "+b(G.value.last_name),1),m("p",E,b(G.value.email||"Keine E-Mail angegeben"),1)]),m("div",T,[y((d(),o(te,{secondary:"",rounded:"",icon:"",onClick:Z},{default:r(()=>[u(t,{name:"edit"})]),_:1})),[[de,"Person bearbeiten"]]),y((d(),o(te,{danger:"",rounded:"",icon:"",onClick:ae},{default:r(()=>[u(t,{name:"delete"})]),_:1})),[[de,"Person löschen"]])])]),u(w),m("div",U,[m("div",z,[a[11]||(a[11]=m("span",{class:"label"},"Organisation",-1)),m("p",M,b(G.value.company||"---"),1)]),m("div",S,[a[12]||(a[12]=m("span",{class:"label"},"Telefon",-1)),m("p",A,b(G.value.phone||"---"),1)])])])):(d(),c("div",P,[u(le,{title:"Person auswählen",icon:"person",center:""},{default:r(()=>[a[9]||(a[9]=f(" Wähle eine Person in der Navigation aus oder ",-1)),u(te,{"x-small":"",onClick:Y},{default:r(()=>[...a[8]||(a[8]=[f("erstelle eine neue Person",-1)])]),_:1}),a[10]||(a[10]=f(". ",-1))]),_:1})]))]),u(ie,{modelValue:L.value,"onUpdate:modelValue":a[6]||(a[6]=e=>L.value=e),title:Q.value?"Person bearbeiten":"Neue Person anlegen",icon:"person",onCancel:a[7]||(a[7]=e=>L.value=!1)},{default:r(()=>[m("div",$,[m("div",B,[m("div",F,[a[13]||(a[13]=m("span",{class:"label"},"Vorname",-1)),u(ne,{modelValue:R.value.first_name,"onUpdate:modelValue":a[1]||(a[1]=e=>R.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),m("div",I,[a[14]||(a[14]=m("span",{class:"label"},"Nachname",-1)),u(ne,{modelValue:R.value.last_name,"onUpdate:modelValue":a[2]||(a[2]=e=>R.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),m("div",q,[a[15]||(a[15]=m("span",{class:"label"},"E-Mail",-1)),u(ne,{modelValue:R.value.email,"onUpdate:modelValue":a[3]||(a[3]=e=>R.value.email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),m("div",K,[a[16]||(a[16]=m("span",{class:"label"},"Organisation / Firma",-1)),u(ne,{modelValue:R.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>R.value.company=e),placeholder:"z.B. Mintel"},null,8,["modelValue"])]),m("div",W,[a[17]||(a[17]=m("span",{class:"label"},"Telefon",-1)),u(ne,{modelValue:R.value.phone,"onUpdate:modelValue":a[5]||(a[5]=e=>R.value.phone=e),placeholder:"+49 ..."},null,8,["modelValue"])])]),m("div",D,[u(te,{primary:"",block:"",loading:J.value,onClick:ee},{default:r(()=>[...a[18]||(a[18]=[f(" Person speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])]),_:1})}}}),H=[],J=[];!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=H.indexOf(i);-1===s&&(s=H.push(i)-1,J[s]={}),t=J[s]&&J[s][l]?J[s][l]:J[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})(G,[["__scopeId","data-v-bd30dab7"],["__file","module.vue"]])}]});export{L as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as l,ref as n,computed as t,onMounted as i,resolveComponent as o,resolveDirective as s,openBlock as r,createBlock as d,withCtx as u,createVNode as c,createElementBlock as p,Fragment as m,renderList as v,createElementVNode as f,createTextVNode as y,toDisplayString as g,createCommentVNode as h,withDirectives as b}from"vue";var _=Object.defineProperty,x=Object.defineProperties,w=Object.getOwnPropertyDescriptors,V=Object.getOwnPropertySymbols,P=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,O=(e,a,l)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:l}):e[a]=l;const j={class:"content-wrapper"},C={key:1,class:"empty-state"},N={key:2},U={class:"header"},E={class:"header-left"},T={class:"title"},z={class:"subtitle"},F={class:"header-right"},M={class:"details-grid"},S={class:"detail-item"},A={class:"value"},$={class:"detail-item"},B={class:"value"},I={class:"drawer-content"},q={class:"form-section"},D={class:"field"},K={class:"field"},L={class:"field"},W={class:"field"},Z={class:"field"},G={class:"field"},H={class:"drawer-actions"};var J=l({__name:"module",setup(a){const l=e(),_=n([]),J=n([]),Q=n(null),R=n(null),X=n(!1),Y=n(!1),ee=n(!1),ae=n({id:null,first_name:"",last_name:"",email:"",company:null,company_name:"",phone:""}),le=t(()=>J.value.map(e=>({text:e.name,value:e.id})));async function ne(){try{const[e,a]=await Promise.all([l.get("/items/people",{params:{sort:"last_name",fields:"*.*"}}),l.get("/items/companies",{params:{sort:"name"}})]);_.value=e.data.data,J.value=a.data.data}catch(e){console.error("Failed to fetch data:",e)}}function te(){ee.value=!1,ae.value={id:null,first_name:"",last_name:"",email:"",company:null,company_name:"",phone:""},Y.value=!0}function ie(){ee.value=!0;const e=Q.value;let a=null,l=e.company_name||"";var n;e.company&&("object"==typeof e.company?a=e.company.id:36===e.company.length?a=e.company:l=e.company),ae.value=(n=((e,a)=>{for(var l in a||(a={}))P.call(a,l)&&O(e,l,a[l]);if(V)for(var l of V(a))k.call(a,l)&&O(e,l,a[l]);return e})({},e),x(n,w({company:a,company_name:l}))),Y.value=!0}async function oe(){if(ae.value.first_name&&ae.value.last_name){X.value=!0;try{ee.value?(await l.patch(`/items/people/${ae.value.id}`,ae.value),R.value={type:"success",message:"Person aktualisiert!"}):(await l.post("/items/people",ae.value),R.value={type:"success",message:"Person angelegt!"}),Y.value=!1,await ne(),ee.value&&(Q.value=_.value.find(e=>e.id===ae.value.id))}catch(e){R.value={type:"danger",message:e.message}}finally{X.value=!1}}else R.value={type:"danger",message:"Vor- und Nachname sind erforderlich."}}async function se(){if(confirm("Soll diese Person wirklich gelöscht werden?"))try{await l.delete(`/items/people/${Q.value.id}`),R.value={type:"success",message:"Person gelöscht."},Q.value=null,await ne()}catch(e){R.value={type:"danger",message:e.message}}}return i(ne),(e,a)=>{const l=o("v-icon"),n=o("v-list-item-icon"),t=o("v-text-overflow"),i=o("v-list-item-content"),x=o("v-list-item"),w=o("v-divider"),V=o("v-list"),P=o("v-notice"),k=o("v-button"),O=o("v-info"),ne=o("v-input"),re=o("v-select"),de=o("v-drawer"),ue=o("private-view"),ce=s("tooltip");return r(),d(ue,{title:"People Manager"},{navigation:u(()=>[c(V,{nav:""},{default:u(()=>[c(x,{onClick:te,clickable:""},{default:u(()=>[c(n,null,{default:u(()=>[c(l,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:u(()=>[c(t,{text:"Neue Person anlegen"})]),_:1})]),_:1}),c(w),(r(!0),p(m,null,v(_.value,e=>{var a;return r(),d(x,{key:e.id,active:(null==(a=Q.value)?void 0:a.id)===e.id,class:"person-item",clickable:"",onClick:a=>function(e){Q.value=e}(e)},{default:u(()=>[c(n,null,{default:u(()=>[c(l,{name:"person"})]),_:1}),c(i,null,{default:u(()=>[c(t,{text:`${e.first_name} ${e.last_name}`},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),default:u(()=>{return[f("div",j,[R.value?(r(),d(P,{key:0,type:R.value.type,onClose:a[0]||(a[0]=e=>R.value=null),dismissible:""},{default:u(()=>[y(g(R.value.message),1)]),_:1},8,["type"])):h("v-if",!0),Q.value?(r(),p("div",N,[f("header",U,[f("div",E,[f("h1",T,g(Q.value.first_name)+" "+g(Q.value.last_name),1),f("p",z,g(Q.value.email||"Keine E-Mail angegeben"),1)]),f("div",F,[b((r(),d(k,{secondary:"",rounded:"",icon:"",onClick:ie},{default:u(()=>[c(l,{name:"edit"})]),_:1})),[[ce,"Person bearbeiten"]]),b((r(),d(k,{danger:"",rounded:"",icon:"",onClick:se},{default:u(()=>[c(l,{name:"delete"})]),_:1})),[[ce,"Person löschen"]])])]),c(w),f("div",M,[f("div",S,[a[12]||(a[12]=f("span",{class:"label"},"Organisation / Firma",-1)),f("p",A,g((e=Q.value,e?e.company?"object"==typeof e.company?e.company.name:(null==(n=J.value.find(a=>a.id===e.company))?void 0:n.name)||e.company_name:e.company_name||"---":"---")),1)]),f("div",$,[a[13]||(a[13]=f("span",{class:"label"},"Telefon",-1)),f("p",B,g(Q.value.phone||"---"),1)])])])):(r(),p("div",C,[c(O,{title:"Person auswählen",icon:"person",center:""},{default:u(()=>[a[10]||(a[10]=y(" Wähle eine Person in der Navigation aus oder ",-1)),c(k,{"x-small":"",onClick:te},{default:u(()=>[...a[9]||(a[9]=[y("erstelle eine neue Person",-1)])]),_:1}),a[11]||(a[11]=y(". ",-1))]),_:1})]))]),c(de,{modelValue:Y.value,"onUpdate:modelValue":a[7]||(a[7]=e=>Y.value=e),title:ee.value?"Person bearbeiten":"Neue Person anlegen",icon:"person",onCancel:a[8]||(a[8]=e=>Y.value=!1)},{default:u(()=>[f("div",I,[f("div",q,[f("div",D,[a[14]||(a[14]=f("span",{class:"label"},"Vorname",-1)),c(ne,{modelValue:ae.value.first_name,"onUpdate:modelValue":a[1]||(a[1]=e=>ae.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),f("div",K,[a[15]||(a[15]=f("span",{class:"label"},"Nachname",-1)),c(ne,{modelValue:ae.value.last_name,"onUpdate:modelValue":a[2]||(a[2]=e=>ae.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),f("div",L,[a[16]||(a[16]=f("span",{class:"label"},"E-Mail",-1)),c(ne,{modelValue:ae.value.email,"onUpdate:modelValue":a[3]||(a[3]=e=>ae.value.email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),f("div",W,[a[17]||(a[17]=f("span",{class:"label"},"Zentrale Firma",-1)),c(re,{modelValue:ae.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>ae.value.company=e),items:le.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),f("div",Z,[a[18]||(a[18]=f("span",{class:"label"},"Firma (Legacy / Neu)",-1)),c(ne,{modelValue:ae.value.company_name,"onUpdate:modelValue":a[5]||(a[5]=e=>ae.value.company_name=e),placeholder:"z.B. Mintel"},null,8,["modelValue"])]),f("div",G,[a[19]||(a[19]=f("span",{class:"label"},"Telefon",-1)),c(ne,{modelValue:ae.value.phone,"onUpdate:modelValue":a[6]||(a[6]=e=>ae.value.phone=e),placeholder:"+49 ..."},null,8,["modelValue"])])]),f("div",H,[c(k,{primary:"",block:"",loading:X.value,onClick:oe},{default:u(()=>[...a[20]||(a[20]=[y(" Person speichern ",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue","title"])];var e,n}),_:1})}}}),Q=[],R=[];!function(e,a){if(e&&"undefined"!=typeof document){var l,n=!0===a.prepend?"prepend":"append",t=!0===a.singleTag,i="string"==typeof a.container?document.querySelector(a.container):document.getElementsByTagName("head")[0];if(t){var o=Q.indexOf(i);-1===o&&(o=Q.push(i)-1,R[o]={}),l=R[o]&&R[o][n]?R[o][n]:R[o][n]=s()}else l=s();65279===e.charCodeAt(0)&&(e=e.substring(1)),l.styleSheet?l.styleSheet.cssText+=e:l.appendChild(document.createTextNode(e))}function s(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var l=Object.keys(a.attributes),t=0;t{const l=e.__vccOpts||e;for(const[e,n]of a)l[e]=n;return l})(J,[["__scopeId","data-v-a6a3019e"],["__file","module.vue"]])}]});export{X as default}; diff --git a/directus/extensions/people-manager/package.json b/directus/extensions/people-manager/package.json index 8a02f79..a2f9220 100644 --- a/directus/extensions/people-manager/package.json +++ b/directus/extensions/people-manager/package.json @@ -2,7 +2,7 @@ "name": "people-manager", "description": "Custom High-Fidelity People Management for Directus", "icon": "person", - "version": "1.7.12", + "version": "1.8.0", "type": "module", "keywords": [ "directus", diff --git a/directus/uploads/directus-health-file b/directus/uploads/directus-health-file index f317fd0..82eee56 100644 --- a/directus/uploads/directus-health-file +++ b/directus/uploads/directus-health-file @@ -1 +1 @@ -Qy-qP \ No newline at end of file +ofRLH \ No newline at end of file diff --git a/packages/acquisition-manager/index.js b/packages/acquisition-manager/index.js index 533d6a0..1b3967a 100644 --- a/packages/acquisition-manager/index.js +++ b/packages/acquisition-manager/index.js @@ -1 +1 @@ -import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as d,createBlock as r,withCtx as u,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as g,createCommentVNode as y,createElementVNode as b,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const A={class:"content-wrapper"},C={key:0,class:"empty-state"},$={class:"header"},U={class:"header-left"},F={class:"title"},O={class:"subtitle"},P=["href"],E={class:"header-right"},S={class:"sections"},j={class:"main-info"},L={class:"form-grid"},z={class:"field"},q={key:1,class:"value text-subdued"},B={class:"field"},N={class:"value"},D={class:"field full"},M={class:"value text-block"},I={key:0,class:"ai-observations"},T={class:"metrics"},K={class:"page-title"},G={class:"page-url"},R={class:"drawer-content"},W={class:"form-section"},H={class:"field"},J={class:"field"},Q={class:"field"},X={class:"field"},Y={class:"field"},Z={class:"field"},ee={class:"drawer-actions"};var ae=t({__name:"module",setup(a){const t=e(),_=l([]),ae=l(null),te=l(!1),le=l(!1),ne=l(!1),ie=l(!1),se=l(!1),oe=l(null),de=l({company_name:"",website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}),re=l([]),ue=n(()=>re.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function ce(e){const a=re.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ve=n(()=>_.value.find(e=>e.id===ae.value));async function pe(){const[e,a]=await Promise.all([t.get("/items/leads",{params:{sort:"-date_created"}}),t.get("/items/people",{params:{sort:"last_name"}})]);_.value=e.data.data,re.value=a.data.data,!ae.value&&_.value.length>0&&(ae.value=_.value[0].id)}async function me(){if(ae.value){te.value=!0;try{await t.post(`/acquisition/audit/${ae.value}`),oe.value={type:"success",message:"Audit erfolgreich gestartet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{te.value=!1}}}async function fe(){if(ae.value){ne.value=!0;try{await t.post(`/acquisition/audit-email/${ae.value}`),oe.value={type:"success",message:"Audit E-Mail versendet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ne.value=!1}}}async function ge(){if(ae.value){le.value=!0;try{await t.post(`/acquisition/estimate/${ae.value}`),oe.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{le.value=!1}}}async function ye(){if(ae.value){ne.value=!0;try{await t.post(`/acquisition/estimate-email/${ae.value}`),oe.value={type:"success",message:"Angebot erfolgreich versendet!"},await pe()}catch(e){oe.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ne.value=!1}}}function be(){var e;(null==(e=ve.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ve.value.audit_pdf_path}`,"_blank")}async function he(){if(de.value.company_name){se.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&V(e,t,a[t]);return e})({id:crypto.randomUUID()},de.value);await t.post("/items/leads",e),oe.value={type:"success",message:"Lead erfolgreich registriert!"},ie.value=!1,await pe(),ae.value=e.id,de.value={company_name:"",website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}}catch(e){oe.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{se.value=!1}}}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(pe),(e,a)=>{const t=s("v-icon"),l=s("v-list-item-icon"),n=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),V=s("v-notice"),re=s("v-button"),pe=s("v-info"),we=s("v-table"),ke=s("v-input"),Ve=s("v-textarea"),Ae=s("v-select"),Ce=s("v-drawer"),$e=s("private-view"),Ue=o("tooltip");return d(),r($e,{title:"Acquisition Manager"},{navigation:u(()=>[c(k,{nav:""},{default:u(()=>[c(x,{onClick:a[0]||(a[0]=e=>ie.value=!0),clickable:""},{default:u(()=>[c(l,null,{default:u(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:u(()=>[c(n,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(d(!0),v(p,null,m(_.value,e=>(d(),r(x,{key:e.id,active:ae.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(ae.value=t);var t}},{default:u(()=>[c(l,null,{default:u(()=>[c(t,{name:_e(e.status),color:xe(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:u(()=>[c(n,{text:e.company_name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":u(()=>[oe.value?(d(),r(V,{key:0,type:oe.value.type,onClose:a[1]||(a[1]=e=>oe.value=null),dismissible:""},{default:u(()=>[f(g(oe.value.message),1)]),_:1},8,["type"])):y("v-if",!0)]),default:u(()=>{var e;return[b("div",A,[c(V,{type:"success",style:{"margin-bottom":"16px"}},{default:u(()=>[f(" DEBUG: Module Version 1.1.0 - Native Build - "+g((new Date).toISOString()),1)]),_:1}),ve.value?(d(),v(p,{key:1},[b("header",$,[b("div",U,[b("h1",F,g(ve.value.company_name),1),b("p",O,[c(t,{name:"language","x-small":""}),b("a",{href:ve.value.website_url,target:"_blank",class:"url-link"},g(ve.value.website_url.replace(/^https?:\/\//,"")),9,P),f(" · Status: "+g(ve.value.status.toUpperCase()),1)])]),b("div",E,["new"===ve.value.status?(d(),r(re,{key:0,secondary:"",loading:te.value,onClick:me},{default:u(()=>[c(t,{name:"settings_suggest",left:""}),a[15]||(a[15]=f(" Audit starten ",-1))]),_:1},8,["loading"])):y("v-if",!0),"audit_ready"===ve.value.status?(d(),v(p,{key:1},[c(re,{secondary:"",loading:ne.value,onClick:fe},{default:u(()=>[c(t,{name:"mail",left:""}),a[16]||(a[16]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(re,{loading:le.value,onClick:ge},{default:u(()=>[c(t,{name:"picture_as_pdf",left:""}),a[17]||(a[17]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):y("v-if",!0),ve.value.audit_pdf_path?h((d(),r(re,{key:2,secondary:"",icon:"",onClick:be},{default:u(()=>[c(t,{name:"open_in_new"})]),_:1})),[[Ue,"PDF öffnen",void 0,{bottom:!0}]]):y("v-if",!0),ve.value.audit_pdf_path?(d(),r(re,{key:3,primary:"",loading:ne.value,onClick:ye},{default:u(()=>[c(t,{name:"send",left:""}),a[18]||(a[18]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):y("v-if",!0)])]),b("div",S,[b("div",j,[b("div",L,[b("div",z,[a[19]||(a[19]=b("span",{class:"label"},"Kontaktperson",-1)),ve.value.contact_person?(d(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ve.value.contact_person,void(oe.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},g(ce(ve.value.contact_person)),1)):(d(),v("div",q,"Keine Person verknüpft"))]),b("div",B,[a[20]||(a[20]=b("span",{class:"label"},"E-Mail (Legacy)",-1)),b("div",N,g(ve.value.contact_email||"—"),1)]),b("div",D,[a[21]||(a[21]=b("span",{class:"label"},"Briefing / Fokus",-1)),b("div",M,g(ve.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ve.value.ai_state?(d(),v("div",I,[a[22]||(a[22]=b("h3",{class:"section-title"},"AI Observations & Estimation",-1)),b("div",T,[c(pe,{label:"Projekt-Modus",value:ve.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(pe,{label:"Seitenanzahl",value:(null==(e=ve.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ve.value.ai_state.sitemap?(d(),r(we,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ve.value.ai_state.sitemap,class:"observation-table"},{"item.title":u(({item:e})=>[b("span",K,g(e.title),1)]),"item.url":u(({item:e})=>[b("span",G,g(e.url),1)]),_:2},1032,["items"])):y("v-if",!0)])):y("v-if",!0)])],64)):(d(),v("div",C,[c(pe,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:u(()=>[a[13]||(a[13]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(re,{"x-small":"",onClick:a[2]||(a[2]=e=>ie.value=!0)},{default:u(()=>[...a[12]||(a[12]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[14]||(a[14]=f(". ",-1))]),_:1})]))]),c(Ce,{modelValue:ie.value,"onUpdate:modelValue":a[10]||(a[10]=e=>ie.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[11]||(a[11]=e=>ie.value=!1)},{default:u(()=>[b("div",R,[b("div",W,[b("div",H,[a[23]||(a[23]=b("span",{class:"label"},"Firma",-1)),c(ke,{modelValue:de.value.company_name,"onUpdate:modelValue":a[4]||(a[4]=e=>de.value.company_name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),b("div",J,[a[24]||(a[24]=b("span",{class:"label"},"Website URL",-1)),c(ke,{modelValue:de.value.website_url,"onUpdate:modelValue":a[5]||(a[5]=e=>de.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),b("div",Q,[a[25]||(a[25]=b("span",{class:"label"},"Ansprechpartner",-1)),c(ke,{modelValue:de.value.contact_name,"onUpdate:modelValue":a[6]||(a[6]=e=>de.value.contact_name=e),placeholder:"Vorname Nachname"},null,8,["modelValue"])]),b("div",X,[a[26]||(a[26]=b("span",{class:"label"},"E-Mail Adresse",-1)),c(ke,{modelValue:de.value.contact_email,"onUpdate:modelValue":a[7]||(a[7]=e=>de.value.contact_email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),b("div",Y,[a[27]||(a[27]=b("span",{class:"label"},"Briefing / Fokus",-1)),c(Ve,{modelValue:de.value.briefing,"onUpdate:modelValue":a[8]||(a[8]=e=>de.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),b("div",Z,[a[28]||(a[28]=b("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(Ae,{modelValue:de.value.contact_person,"onUpdate:modelValue":a[9]||(a[9]=e=>de.value.contact_person=e),items:ue.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),b("div",ee,[c(re,{primary:"",block:"",loading:se.value,onClick:he},{default:u(()=>[...a[29]||(a[29]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),te=[],le=[];!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=te.indexOf(i);-1===s&&(s=te.push(i)-1,le[s]={}),t=le[s]&&le[s][l]?le[s][l]:le[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})(ae,[["__scopeId","data-v-6a55edd7"],["__file","module.vue"]]),ie=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ne},{path:":id",component:ne,props:!0}]});export{ie as default}; +import{useApi as e,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as t,ref as l,computed as n,onMounted as i,resolveComponent as s,resolveDirective as o,openBlock as r,createBlock as u,withCtx as d,createVNode as c,createElementBlock as v,Fragment as p,renderList as m,createTextVNode as f,toDisplayString as g,createCommentVNode as b,createElementVNode as y,withDirectives as h}from"vue";var _=Object.defineProperty,x=Object.getOwnPropertySymbols,w=Object.prototype.hasOwnProperty,k=Object.prototype.propertyIsEnumerable,V=(e,a,t)=>a in e?_(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const A={class:"content-wrapper"},$={key:0,class:"empty-state"},C={class:"header"},F={class:"header-left"},U={class:"title"},O={class:"subtitle"},j=["href"],P={class:"header-right"},E={class:"sections"},L={class:"main-info"},S={class:"form-grid"},z={class:"field"},B={key:1,class:"value text-subdued"},N={class:"field"},q={class:"value"},D={class:"field full"},M={class:"value text-block"},I={key:0,class:"ai-observations"},T={class:"metrics"},K={class:"page-title"},G={class:"page-url"},R={class:"drawer-content"},W={class:"form-section"},H={class:"field"},Z={class:"field"},J={class:"field"},Q={class:"field"},X={class:"field"},Y={class:"field"},ee={class:"field"},ae={class:"drawer-actions"};var te=t({__name:"module",setup(a){const t=e(),_=l([]),te=l(null),le=l(!1),ne=l(!1),ie=l(!1),se=l(!1),oe=l(!1),re=l(null),ue=l({company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}),de=l([]),ce=l([]),ve=n(()=>de.value.map(e=>({text:e.name,value:e.id}))),pe=n(()=>ce.value.map(e=>({text:`${e.first_name} ${e.last_name}`,value:e.id})));function me(e){var a;return e.company?"object"==typeof e.company?e.company.name:(null==(a=de.value.find(a=>a.id===e.company))?void 0:a.name)||e.company_name:e.company_name}function fe(e){if(!e)return"";if("object"==typeof e)return`${e.first_name} ${e.last_name}`;const a=ce.value.find(a=>a.id===e);return a?`${a.first_name} ${a.last_name}`:e}const ge=n(()=>_.value.find(e=>e.id===te.value));async function be(){const[e,a,l]=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,ce.value=a.data.data,de.value=l.data.data,!te.value&&_.value.length>0&&(te.value=_.value[0].id)}async function ye(){await be()}async function he(){if(te.value){le.value=!0;try{await t.post(`/acquisition/audit/${te.value}`),re.value={type:"success",message:"Audit erfolgreich gestartet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Audit: ${e.message}`}}finally{le.value=!1}}}async function _e(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/audit-email/${te.value}`),re.value={type:"success",message:"Audit E-Mail versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}async function xe(){if(te.value){ne.value=!0;try{await t.post(`/acquisition/estimate/${te.value}`),re.value={type:"success",message:"Angebot (PDF) wurde generiert!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler bei PDF Generierung: ${e.message}`}}finally{ne.value=!1}}}async function we(){if(te.value){ie.value=!0;try{await t.post(`/acquisition/estimate-email/${te.value}`),re.value={type:"success",message:"Angebot erfolgreich versendet!"},await ye()}catch(e){re.value={type:"danger",message:`Fehler beim Versenden: ${e.message}`}}finally{ie.value=!1}}}function ke(){var e;(null==(e=ge.value)?void 0:e.audit_pdf_path)&&window.open(`${window.location.origin}/assets/${ge.value.audit_pdf_path}`,"_blank")}async function Ve(){if(ue.value.company_name||ue.value.company){oe.value=!0;try{const e=((e,a)=>{for(var t in a||(a={}))w.call(a,t)&&V(e,t,a[t]);if(x)for(var t of x(a))k.call(a,t)&&V(e,t,a[t]);return e})({id:crypto.randomUUID()},ue.value);await t.post("/items/leads",e),re.value={type:"success",message:"Lead erfolgreich registriert!"},se.value=!1,await ye(),te.value=e.id,ue.value={company_name:"",company:null,website_url:"",contact_name:"",contact_email:"",contact_person:null,briefing:"",status:"new"}}catch(e){re.value={type:"danger",message:`Fehler beim Speichern: ${e.message}`}}finally{oe.value=!1}}else re.value={type:"danger",message:"Firma oder Firmenname erforderlich."}}function Ae(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(be),(e,a)=>{const t=s("v-icon"),l=s("v-list-item-icon"),n=s("v-text-overflow"),i=s("v-list-item-content"),x=s("v-list-item"),w=s("v-divider"),k=s("v-list"),V=s("v-notice"),de=s("v-button"),ce=s("v-info"),be=s("v-table"),ye=s("v-select"),Ce=s("v-input"),Fe=s("v-textarea"),Ue=s("v-drawer"),Oe=s("private-view"),je=o("tooltip");return r(),u(Oe,{title:"Acquisition Manager"},{navigation:d(()=>[c(k,{nav:""},{default:d(()=>[c(x,{onClick:a[0]||(a[0]=e=>se.value=!0),clickable:""},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:"add",color:"var(--theme--primary)"})]),_:1}),c(i,null,{default:d(()=>[c(n,{text:"Neuen Lead anlegen"})]),_:1})]),_:1}),c(w),(r(!0),v(p,null,m(_.value,e=>(r(),u(x,{key:e.id,active:te.value===e.id,class:"lead-item",clickable:"",onClick:a=>{return t=e.id,void(te.value=t);var t}},{default:d(()=>[c(l,null,{default:d(()=>[c(t,{name:Ae(e.status),color:$e(e.status)},null,8,["name","color"])]),_:2},1024),c(i,null,{default:d(()=>[c(n,{text:me(e)},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"]))),128))]),_:1})]),"title-outer:after":d(()=>[re.value?(r(),u(V,{key:0,type:re.value.type,onClose:a[1]||(a[1]=e=>re.value=null),dismissible:""},{default:d(()=>[f(g(re.value.message),1)]),_:1},8,["type"])):b("v-if",!0)]),default:d(()=>{var e;return[y("div",A,[c(V,{type:"success",style:{"margin-bottom":"16px"}},{default:d(()=>[f(" DEBUG: Module Version 1.1.0 - Native Build - "+g((new Date).toISOString()),1)]),_:1}),ge.value?(r(),v(p,{key:1},[y("header",C,[y("div",F,[y("h1",U,g(me(ge.value)),1),y("p",O,[c(t,{name:"language","x-small":""}),y("a",{href:ge.value.website_url,target:"_blank",class:"url-link"},g(ge.value.website_url.replace(/^https?:\/\//,"")),9,j),f(" · Status: "+g(ge.value.status.toUpperCase()),1)])]),y("div",P,["new"===ge.value.status?(r(),u(de,{key:0,secondary:"",loading:le.value,onClick:he},{default:d(()=>[c(t,{name:"settings_suggest",left:""}),a[16]||(a[16]=f(" Audit starten ",-1))]),_:1},8,["loading"])):b("v-if",!0),"audit_ready"===ge.value.status?(r(),v(p,{key:1},[c(de,{secondary:"",loading:ie.value,onClick:_e},{default:d(()=>[c(t,{name:"mail",left:""}),a[17]||(a[17]=f(" Audit E-Mail ",-1))]),_:1},8,["loading"]),c(de,{loading:ne.value,onClick:xe},{default:d(()=>[c(t,{name:"picture_as_pdf",left:""}),a[18]||(a[18]=f(" PDF Erstellen ",-1))]),_:1},8,["loading"])],64)):b("v-if",!0),ge.value.audit_pdf_path?h((r(),u(de,{key:2,secondary:"",icon:"",onClick:ke},{default:d(()=>[c(t,{name:"open_in_new"})]),_:1})),[[je,"PDF öffnen",void 0,{bottom:!0}]]):b("v-if",!0),ge.value.audit_pdf_path?(r(),u(de,{key:3,primary:"",loading:ie.value,onClick:we},{default:d(()=>[c(t,{name:"send",left:""}),a[19]||(a[19]=f(" Angebot senden ",-1))]),_:1},8,["loading"])):b("v-if",!0)])]),y("div",E,[y("div",L,[y("div",S,[y("div",z,[a[20]||(a[20]=y("span",{class:"label"},"Kontaktperson",-1)),ge.value.contact_person?(r(),v("div",{key:0,class:"value person-link",onClick:a[3]||(a[3]=e=>{return a=ge.value.contact_person,void(re.value={type:"info",message:`Navigiere zu Person: ${a}`});var a})},g(fe(ge.value.contact_person)),1)):(r(),v("div",B,"Keine Person verknüpft"))]),y("div",N,[a[21]||(a[21]=y("span",{class:"label"},"E-Mail (Legacy)",-1)),y("div",q,g(ge.value.contact_email||"—"),1)]),y("div",D,[a[22]||(a[22]=y("span",{class:"label"},"Briefing / Fokus",-1)),y("div",M,g(ge.value.briefing||"Kein Briefing hinterlegt."),1)])])]),c(w),ge.value.ai_state?(r(),v("div",I,[a[23]||(a[23]=y("h3",{class:"section-title"},"AI Observations & Estimation",-1)),y("div",T,[c(ce,{label:"Projekt-Modus",value:ge.value.ai_state.projectType||"Unbekannt"},null,8,["value"]),c(ce,{label:"Seitenanzahl",value:(null==(e=ge.value.ai_state.sitemap)?void 0:e.length)||"0"},null,8,["value"])]),ge.value.ai_state.sitemap?(r(),u(be,{key:0,headers:[{text:"Seite",value:"title"},{text:"URL",value:"url"}],items:ge.value.ai_state.sitemap,class:"observation-table"},{"item.title":d(({item:e})=>[y("span",K,g(e.title),1)]),"item.url":d(({item:e})=>[y("span",G,g(e.url),1)]),_:2},1032,["items"])):b("v-if",!0)])):b("v-if",!0)])],64)):(r(),v("div",$,[c(ce,{title:"Lead auswählen",icon:"auto_awesome",center:""},{default:d(()=>[a[14]||(a[14]=f(" Wähle einen Lead in der Navigation aus oder ",-1)),c(de,{"x-small":"",onClick:a[2]||(a[2]=e=>se.value=!0)},{default:d(()=>[...a[13]||(a[13]=[f("registriere einen neuen Lead",-1)])]),_:1}),a[15]||(a[15]=f(". ",-1))]),_:1})]))]),c(Ue,{modelValue:se.value,"onUpdate:modelValue":a[11]||(a[11]=e=>se.value=e),title:"Neuen Lead registrieren",icon:"person_add",onCancel:a[12]||(a[12]=e=>se.value=!1)},{default:d(()=>[y("div",R,[y("div",W,[y("div",H,[a[24]||(a[24]=y("span",{class:"label"},"Organisation / Firma (Zentral)",-1)),c(ye,{modelValue:ue.value.company,"onUpdate:modelValue":a[4]||(a[4]=e=>ue.value.company=e),items:ve.value,placeholder:"Bestehende Firma auswählen..."},null,8,["modelValue","items"])]),y("div",Z,[a[25]||(a[25]=y("span",{class:"label"},"Organisation / Firma (Legacy / Neu)",-1)),c(Ce,{modelValue:ue.value.company_name,"onUpdate:modelValue":a[5]||(a[5]=e=>ue.value.company_name=e),placeholder:"z.B. Schmidt GmbH",autofocus:""},null,8,["modelValue"])]),y("div",J,[a[26]||(a[26]=y("span",{class:"label"},"Website URL",-1)),c(Ce,{modelValue:ue.value.website_url,"onUpdate:modelValue":a[6]||(a[6]=e=>ue.value.website_url=e),placeholder:"https://..."},null,8,["modelValue"])]),y("div",Q,[a[27]||(a[27]=y("span",{class:"label"},"Ansprechpartner",-1)),c(Ce,{modelValue:ue.value.contact_name,"onUpdate:modelValue":a[7]||(a[7]=e=>ue.value.contact_name=e),placeholder:"Vorname Nachname"},null,8,["modelValue"])]),y("div",X,[a[28]||(a[28]=y("span",{class:"label"},"E-Mail Adresse",-1)),c(Ce,{modelValue:ue.value.contact_email,"onUpdate:modelValue":a[8]||(a[8]=e=>ue.value.contact_email=e),placeholder:"email@beispiel.de",type:"email"},null,8,["modelValue"])]),y("div",Y,[a[29]||(a[29]=y("span",{class:"label"},"Briefing / Fokus",-1)),c(Fe,{modelValue:ue.value.briefing,"onUpdate:modelValue":a[9]||(a[9]=e=>ue.value.briefing=e),placeholder:"Besonderheiten für das Audit..."},null,8,["modelValue"])]),y("div",ee,[a[30]||(a[30]=y("span",{class:"label"},"Kontaktperson (Optional)",-1)),c(ye,{modelValue:ue.value.contact_person,"onUpdate:modelValue":a[10]||(a[10]=e=>ue.value.contact_person=e),items:pe.value,placeholder:"Person auswählen..."},null,8,["modelValue","items"])])]),y("div",ae,[c(de,{primary:"",block:"",loading:oe.value,onClick:Ve},{default:d(()=>[...a[31]||(a[31]=[f("Lead speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"])]}),_:1})}}}),le=[],ne=[];!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=le.indexOf(i);-1===s&&(s=le.push(i)-1,ne[s]={}),t=ne[s]&&ne[s][l]?ne[s][l]:ne[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})(te,[["__scopeId","data-v-c729ebea"],["__file","module.vue"]]),se=a({id:"acquisition-manager",name:"Acquisition",icon:"auto_awesome",routes:[{path:"",component:ie},{path:":id",component:ie,props:!0}]});export{se as default}; diff --git a/packages/acquisition-manager/src/module.vue b/packages/acquisition-manager/src/module.vue index 8e3b483..a7e0ada 100644 --- a/packages/acquisition-manager/src/module.vue +++ b/packages/acquisition-manager/src/module.vue @@ -23,7 +23,7 @@ - + @@ -50,7 +50,7 @@ diff --git a/packages/feedback-commander/src/module.vue b/packages/feedback-commander/src/module.vue index ebf5c00..1d2ee4f 100644 --- a/packages/feedback-commander/src/module.vue +++ b/packages/feedback-commander/src/module.vue @@ -78,7 +78,7 @@
{{ item.text }}