2 lines
12 KiB
JavaScript
2 lines
12 KiB
JavaScript
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 d,openBlock as u,createBlock as r,withCtx as o,createVNode as s,createElementBlock as c,Fragment as v,renderList as m,createTextVNode as f,toDisplayString as p,createCommentVNode as g,createElementVNode as _,withDirectives as b,withModifiers as y}from"vue";var h=Object.defineProperty,x=Object.defineProperties,w=Object.getOwnPropertyDescriptors,k=Object.getOwnPropertySymbols,V=Object.prototype.hasOwnProperty,C=Object.prototype.propertyIsEnumerable,N=(e,a,t)=>a in e?h(e,a,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[a]=t;const M={class:"content-wrapper"},O={key:0,class:"empty-state"},j={class:"header"},F={class:"header-left"},E={class:"title"},z={class:"subtitle"},P={class:"header-right"},U={class:"user-cell"},q={class:"user-name"},S={key:0,class:"status-date"},$={class:"action-buttons"},A={class:"drawer-content"},T={class:"drawer-actions"},Z={class:"drawer-content"},D={class:"drawer-actions"},B={key:0,class:"drawer-content"},I={class:"drawer-actions"};var K=t({__name:"module",setup(a){const t=e(),h=l([]),K=l(null),L=l([]),Q=l(!1),W=l(!1),G=l(null),H=l(null),J=l(!1),R=l(!1),X=l(!1),Y=l(null),ee=l({name:""}),ae=l({first_name:"",last_name:"",email:""}),te=[{text:"Name",value:"name",sortable:!0},{text:"E-Mail",value:"email",sortable:!0},{text:"Zuletzt eingeladen",value:"last_invited",sortable:!0},{text:"",value:"actions",width:60,align:"right"}];async function le(){const e=await t.get("/items/companies",{params:{fields:["id","name"],sort:"name"}});h.value=e.data.data}async function ne(e){K.value=e,Q.value=!0;try{const a=await t.get("/items/client_users",{params:{filter:{company:{_eq:e.id}},fields:["*"],sort:"first_name"}});L.value=a.data.data}finally{Q.value=!1}}async function ie(){if(ee.value.name){W.value=!0;try{await t.post("/items/companies",ee.value),H.value={type:"success",message:"Firma erfolgreich angelegt!"},ee.value.name="",J.value=!1,await le()}catch(e){H.value={type:"danger",message:e.message}}finally{W.value=!1}}}async function de(){if(ae.value.email&&K.value){W.value=!0;try{await t.post("/items/client_users",(e=((e,a)=>{for(var t in a||(a={}))V.call(a,t)&&N(e,t,a[t]);if(k)for(var t of k(a))C.call(a,t)&&N(e,t,a[t]);return e})({},ae.value),a={company:K.value.id},x(e,w(a)))),H.value={type:"success",message:"Mitarbeiter erfolgreich angelegt!"},ae.value={first_name:"",last_name:"",email:""},R.value=!1,await ne(K.value)}catch(e){H.value={type:"danger",message:e.message}}finally{W.value=!1}var e,a}}function ue(e){return new Date(e).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})}function re(e){const a=(null==e?void 0:e.item)||e;a&&a.id&&oe(a)}function oe(e){Y.value=e,X.value=!0}function se(){K.value&&window.open(`/admin/content/companies/${K.value.id}`,"_blank")}return n(()=>{le()}),(e,a)=>{const l=i("v-icon"),n=i("v-list-item-icon"),x=i("v-text-overflow"),w=i("v-list-item-content"),k=i("v-list-item"),V=i("v-divider"),C=i("v-list"),N=i("v-notice"),le=i("v-button"),ce=i("v-info"),ve=i("v-avatar"),me=i("v-chip"),fe=i("v-table"),pe=i("v-input"),ge=i("v-field-template"),_e=i("v-drawer"),be=i("v-list-item-label"),ye=i("v-list-item-hint"),he=i("private-view"),xe=d("tooltip");return u(),r(he,{title:"Customer Manager"},{navigation:o(()=>[s(C,{nav:""},{default:o(()=>[s(k,{onClick:a[0]||(a[0]=e=>J.value=!0),clickable:""},{default:o(()=>[s(n,null,{default:o(()=>[s(l,{name:"add",color:"var(--theme--primary)"})]),_:1}),s(w,null,{default:o(()=>[s(x,{text:"Neue Firma anlegen"})]),_:1})]),_:1}),s(V),(u(!0),c(v,null,m(h.value,e=>{var a;return u(),r(k,{key:e.id,active:(null==(a=K.value)?void 0:a.id)===e.id,class:"company-item",clickable:"",onClick:a=>ne(e)},{default:o(()=>[s(n,null,{default:o(()=>[s(l,{name:"business"})]),_:1}),s(w,null,{default:o(()=>[s(x,{text:e.name},null,8,["text"])]),_:2},1024)]),_:2},1032,["active","onClick"])}),128))]),_:1})]),"title-outer:after":o(()=>[H.value?(u(),r(N,{key:0,type:H.value.type,onClose:a[1]||(a[1]=e=>H.value=null),dismissible:""},{default:o(()=>[f(p(H.value.message),1)]),_:1},8,["type"])):g("v-if",!0)]),default:o(()=>[_("div",M,[K.value?(u(),c(v,{key:1},[_("header",j,[_("div",F,[_("h1",E,p(K.value.name),1),_("p",z,p(L.value.length)+" Kunden-Mitarbeiter",1)]),_("div",P,[b((u(),r(le,{secondary:"",rounded:"",icon:"",onClick:se},{default:o(()=>[s(l,{name:"edit"})]),_:1})),[[xe,"Firma bearbeiten",void 0,{bottom:!0}]]),s(le,{primary:"",onClick:a[3]||(a[3]=e=>R.value=!0)},{default:o(()=>[...a[19]||(a[19]=[f(" Mitarbeiter hinzufügen ",-1)])]),_:1})])]),s(fe,{headers:te,items:L.value,loading:Q.value,class:"clickable-table","fixed-header":"","onClick:row":re},{"item.name":o(({item:e})=>[_("div",U,[s(ve,{name:e.first_name,"x-small":""},null,8,["name"]),_("span",q,p(e.first_name)+" "+p(e.last_name),1)])]),"item.last_invited":o(({item:e})=>[e.last_invited?(u(),c("span",S,p(ue(e.last_invited)),1)):(u(),r(me,{key:1,"x-small":""},{default:o(()=>[...a[20]||(a[20]=[f("Noch nie",-1)])]),_:1}))]),"item.actions":o(({item:e})=>[_("div",$,[b((u(),r(le,{secondary:"",rounded:"",icon:"",onClick:y(a=>oe(e),["stop"])},{default:o(()=>[s(l,{name:"visibility"})]),_:1},8,["onClick"])),[[xe,"Quick-View",void 0,{bottom:!0}]])])]),_:2},1032,["items","loading"])],64)):(u(),c("div",O,[s(ce,{title:"Firmen auswählen",icon:"business",center:""},{default:o(()=>[a[17]||(a[17]=f(" Wähle eine Firma in der Navigation aus oder ",-1)),s(le,{"x-small":"",onClick:a[2]||(a[2]=e=>J.value=!0)},{default:o(()=>[...a[16]||(a[16]=[f("erstelle eine neue Firma",-1)])]),_:1}),a[18]||(a[18]=f(". ",-1))]),_:1})]))]),s(_e,{modelValue:J.value,"onUpdate:modelValue":a[5]||(a[5]=e=>J.value=e),title:"Neue Firma anlegen",icon:"business",onCancel:a[6]||(a[6]=e=>J.value=!1)},{default:o(()=>[_("div",A,[s(ge,{label:"Firmenname",required:""},{default:o(()=>[s(pe,{modelValue:ee.value.name,"onUpdate:modelValue":a[4]||(a[4]=e=>ee.value.name=e),placeholder:"z.B. KLZ Cables",autofocus:""},null,8,["modelValue"])]),_:1}),_("div",T,[s(le,{primary:"",block:"",loading:W.value,onClick:ie},{default:o(()=>[...a[21]||(a[21]=[f("Firma speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"]),s(_e,{modelValue:R.value,"onUpdate:modelValue":a[10]||(a[10]=e=>R.value=e),title:"Neuen Mitarbeiter anlegen",icon:"person_add",onCancel:a[11]||(a[11]=e=>R.value=!1)},{default:o(()=>[_("div",Z,[s(ge,{label:"Vorname",required:""},{default:o(()=>[s(pe,{modelValue:ae.value.first_name,"onUpdate:modelValue":a[7]||(a[7]=e=>ae.value.first_name=e),placeholder:"Vorname",autofocus:""},null,8,["modelValue"])]),_:1}),s(ge,{label:"Nachname",required:""},{default:o(()=>[s(pe,{modelValue:ae.value.last_name,"onUpdate:modelValue":a[8]||(a[8]=e=>ae.value.last_name=e),placeholder:"Nachname"},null,8,["modelValue"])]),_:1}),s(ge,{label:"E-Mail",required:""},{default:o(()=>[s(pe,{modelValue:ae.value.email,"onUpdate:modelValue":a[9]||(a[9]=e=>ae.value.email=e),placeholder:"E-Mail Adresse",type:"email"},null,8,["modelValue"])]),_:1}),_("div",D,[s(le,{primary:"",block:"",loading:W.value,onClick:de},{default:o(()=>[...a[22]||(a[22]=[f("Mitarbeiter speichern",-1)])]),_:1},8,["loading"])])])]),_:1},8,["modelValue"]),s(_e,{modelValue:X.value,"onUpdate:modelValue":a[14]||(a[14]=e=>X.value=e),title:Y.value?`${Y.value.first_name} ${Y.value.last_name}`:"Mitarbeiter",icon:"person",onCancel:a[15]||(a[15]=e=>X.value=!1)},{default:o(()=>[Y.value?(u(),c("div",B,[s(C,null,{default:o(()=>[s(k,null,{default:o(()=>[s(w,null,{default:o(()=>[s(be,null,{default:o(()=>[...a[23]||(a[23]=[f("Name",-1)])]),_:1}),s(ye,null,{default:o(()=>[f(p(Y.value.first_name)+" "+p(Y.value.last_name),1)]),_:1})]),_:1})]),_:1}),s(k,{divider:""},{default:o(()=>[s(w,null,{default:o(()=>[s(be,null,{default:o(()=>[...a[24]||(a[24]=[f("E-Mail",-1)])]),_:1}),s(ye,null,{default:o(()=>[f(p(Y.value.email),1)]),_:1})]),_:1})]),_:1}),s(k,{divider:""},{default:o(()=>[s(w,null,{default:o(()=>[s(be,null,{default:o(()=>[...a[25]||(a[25]=[f("Temporäres Passwort",-1)])]),_:1}),s(ye,{class:"password-text"},{default:o(()=>[f(p(Y.value.temporary_password||"Noch nicht generiert"),1)]),_:1})]),_:1})]),_:1}),s(k,{divider:""},{default:o(()=>[s(w,null,{default:o(()=>[s(be,null,{default:o(()=>[...a[26]||(a[26]=[f("Zuletzt eingeladen",-1)])]),_:1}),s(ye,null,{default:o(()=>[f(p(Y.value.last_invited?ue(Y.value.last_invited):"Nie"),1)]),_:1})]),_:1})]),_:1})]),_:1}),_("div",I,[s(le,{primary:"",block:"",loading:G.value===Y.value.id,onClick:a[12]||(a[12]=e=>async function(e){var a,l,n,i,d;G.value=e.id;try{await t.post("/flows/trigger/33443f6b-cec7-4668-9607-f33ea674d501",[e.id]),H.value={type:"success",message:`Zugangsdaten für ${e.first_name} wurden versendet. 📧`},await ne(K.value),(null==(a=Y.value)?void 0:a.id)===e.id&&(Y.value=L.value.find(a=>a.id===e.id))}catch(e){console.error("Failed to trigger invite flow",e),H.value={type:"danger",message:`Fehler beim Senden: ${(null==(d=null==(i=null==(n=null==(l=e.response)?void 0:l.data)?void 0:n.errors)?void 0:i[0])?void 0:d.message)||e.message}`}}finally{G.value=null}}(Y.value))},{default:o(()=>[...a[27]||(a[27]=[f(" Zugangsdaten generieren & senden ",-1)])]),_:1},8,["loading"]),s(le,{secondary:"",block:"",onClick:a[13]||(a[13]=e=>{var a;(a=Y.value)&&a.id&&window.open(`/admin/content/client_users/${a.id}`,"_blank")})},{default:o(()=>[...a[28]||(a[28]=[f(" Vollständiges Profil öffnen ",-1)])]),_:1})])])):g("v-if",!0)]),_:1},8,["modelValue","title"])]),_:1})}}}),L=[],Q=[];!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 d=L.indexOf(i);-1===d&&(d=L.push(i)-1,Q[d]={}),t=Q[d]&&Q[d][l]?Q[d][l]:Q[d][l]=u()}else t=u();65279===e.charCodeAt(0)&&(e=e.substring(1)),t.styleSheet?t.styleSheet.cssText+=e:t.appendChild(document.createTextNode(e))}function u(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),a.attributes)for(var t=Object.keys(a.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],a.attributes[t[n]]);var d="prepend"===l?"afterbegin":"beforeend";return i.insertAdjacentElement(d,e),e}}("\n.content-wrapper[data-v-1ad61722] {\n\tpadding: 32px;\n\theight: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n.company-item[data-v-1ad61722] {\n\tcursor: pointer;\n}\n.header[data-v-1ad61722] {\n\tmargin-bottom: 24px;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-end;\n}\n.header-right[data-v-1ad61722] {\n\tdisplay: flex;\n\tgap: 12px;\n}\n.title[data-v-1ad61722] {\n\tfont-size: 24px;\n\tfont-weight: 800;\n\tmargin-bottom: 4px;\n}\n.subtitle[data-v-1ad61722] {\n\tcolor: var(--theme--foreground-subdued);\n\tfont-size: 14px;\n}\n.empty-state[data-v-1ad61722] {\n\theight: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n.user-cell[data-v-1ad61722] {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n}\n.user-name[data-v-1ad61722] {\n\tfont-weight: 600;\n}\n.status-date[data-v-1ad61722] {\n\tfont-size: 12px;\n\tcolor: var(--theme--foreground-subdued);\n}\n.action-buttons[data-v-1ad61722] {\n\tdisplay: flex;\n\tgap: 8px;\n\tjustify-content: flex-end;\n}\n.drawer-content[data-v-1ad61722] {\n\tpadding: 24px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 24px;\n}\n.drawer-actions[data-v-1ad61722] {\n\tmargin-top: 24px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n}\n.password-text[data-v-1ad61722] {\n\tfont-family: var(--family-monospace);\n\tbackground: var(--theme--background-subdued);\n\tpadding: 4px 8px;\n\tborder-radius: 4px;\n\tfont-weight: 600;\n\tcolor: var(--theme--primary);\n}\n.clickable-table[data-v-1ad61722] tbody tr {\n\tcursor: pointer;\n\ttransition: background-color 0.2s ease;\n}\n.clickable-table[data-v-1ad61722] tbody tr:hover {\n\tbackground-color: var(--theme--background-subdued) !important;\n}\n[data-v-1ad61722] .v-list-item {\n\tcursor: pointer !important;\n}\n",{});var W=a({id:"customer-manager",name:"Customer Manager",icon:"supervisor_account",routes:[{path:"",component:((e,a)=>{const t=e.__vccOpts||e;for(const[e,l]of a)t[e]=l;return t})(K,[["__scopeId","data-v-1ad61722"],["__file","module.vue"]])}]});export{W as default};
|