Some checks failed
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 1s
Monorepo Pipeline / 🧪 Test (push) Successful in 2m2s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m14s
Monorepo Pipeline / 🚀 Release (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been cancelled
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been cancelled
Monorepo Pipeline / 🏗️ Build (push) Has been cancelled
2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
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<l.length;n++)e.setAttribute(l[n],a.attributes[l[n]]);var s="prepend"===t?"afterbegin":"beforeend";return i.insertAdjacentElement(s,e),e}}("\n.user-cell[data-v-3f525746] { display: flex; align-items: center; gap: 12px;\n}\n.user-name[data-v-3f525746] { font-weight: 600;\n}\n.status-date[data-v-3f525746] { font-size: 12px; color: var(--theme--foreground-subdued);\n}\n.drawer-content[data-v-3f525746] { padding: 24px; display: flex; flex-direction: column; gap: 32px;\n}\n.form-section[data-v-3f525746] { display: flex; flex-direction: column; gap: 20px;\n}\n.field[data-v-3f525746] { display: flex; flex-direction: column; gap: 8px;\n}\n.label[data-v-3f525746] { font-size: 12px; font-weight: 700; text-transform: uppercase; color: var(--theme--foreground-subdued); letter-spacing: 0.5px;\n}\n.field-note[data-v-3f525746] { font-size: 11px; color: var(--theme--foreground-subdued); margin-top: 4px;\n}\n.drawer-actions[data-v-3f525746] { margin-top: 24px; display: flex; flex-direction: column; gap: 12px;\n}\n.password-input[data-v-3f525746] textarea {\n\tfont-family: var(--family-monospace);\n\tfont-weight: 800;\n\tcolor: var(--theme--primary) !important;\n\tbackground: var(--theme--background-subdued) !important;\n}\n.clickable-table[data-v-3f525746] tbody tr { cursor: pointer; transition: background-color 0.2s ease;\n}\n.clickable-table[data-v-3f525746] tbody tr:hover { background-color: var(--theme--background-subdued) !important;\n}\n",{});var B=a({id:"customer-manager",name:"Customer Manager",icon:"supervisor_account",routes:[{path:"",component:((e,a)=>{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};
|