All checks were successful
Monorepo Pipeline / ⚡ Prioritize Release (push) Successful in 6s
Monorepo Pipeline / 🧪 Test (push) Successful in 56s
Monorepo Pipeline / 🧹 Lint (push) Successful in 2m22s
Monorepo Pipeline / 🏗️ Build (push) Successful in 3m51s
Monorepo Pipeline / 🚀 Release (push) Has been skipped
Monorepo Pipeline / 🐳 Build Directus (Base) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Gatekeeper (Product) (push) Has been skipped
Monorepo Pipeline / 🐳 Build Build-Base (push) Has been skipped
Monorepo Pipeline / 🐳 Build Production Runtime (push) Has been skipped
Summary of changes: - Corrected Directus extensions to use 'vue-router' for 'useRouter' instead of '@directus/extensions-sdk' (Fixed runtime crash). - Standardized extension folder structure and moved built extensions to the root 'directus/extensions' directory. - Updated 'scripts/sync-extensions.sh' and 'scripts/validate-extensions.sh' for better extension management. - Added 'scripts/validate-sdk-imports.sh' as a safeguard against future invalid SDK imports. - Integrated import validation into the '.husky/pre-push' hook. - Standardized Docker restart policies and network configurations in 'cms-infra/docker-compose.yml'. - Updated tracked 'data.db' with the correct 'module_bar' settings to ensure extension visibility. - Cleaned up legacy files and consolidated extension package source code. This commit captures the full state of the repository after resolving the 'missing extensions' issue.
2 lines
5.4 KiB
JavaScript
2 lines
5.4 KiB
JavaScript
import{useApi as e,useRouter as t,defineModule as a}from"@directus/extensions-sdk";import{defineComponent as n,ref as s,onMounted as r,resolveComponent as o,openBlock as i,createBlock as d,withCtx as c,createElementVNode as l,createVNode as p,toDisplayString as u,createTextVNode as m}from"vue";const v={class:"dashboard"},f={class:"stats-grid"},g={class:"stat-icon"},b={class:"stat-content"},h={class:"stat-value"},x={class:"stat-icon"},y={class:"stat-content"},w={class:"stat-value"},_={class:"stat-icon"},k={class:"stat-content"},C={class:"stat-value"},z={class:"recent-activity"},S={class:"action-grid"};var O=n({__name:"module",setup(a){const n=e(),O=t(),A=s({companies:0,people:0,leads:0});function N(e){O.push(e)}return r(async function(){try{const[e,t,a]=await Promise.all([n.get("/items/companies?aggregate[count]=*"),n.get("/items/people?aggregate[count]=*"),n.get("/items/leads?aggregate[count]=*")]);A.value={companies:e.data.data[0].count,people:t.data.data[0].count,leads:a.data.data[0].count}}catch(e){console.error("Failed to fetch stats:",e)}}),(e,t)=>{const a=o("v-icon"),n=o("v-button"),s=o("private-view");return i(),d(s,{title:"Overview"},{default:c(()=>[l("div",v,[t[11]||(t[11]=l("header",{class:"dashboard-header"},[l("h1",{class:"title"},"Infrastructure Stack"),l("p",{class:"subtitle"},"Zentrale Schnittstelle für Firmen, Personen und Leads.")],-1)),l("div",f,[l("div",{class:"stat-card",onClick:t[0]||(t[0]=e=>N("/company-manager"))},[l("div",g,[p(a,{name:"business",large:""})]),l("div",b,[t[5]||(t[5]=l("span",{class:"stat-label"},"Firmen",-1)),l("span",h,u(A.value.companies),1)]),p(a,{name:"chevron_right",class:"arrow"})]),l("div",{class:"stat-card",onClick:t[1]||(t[1]=e=>N("/people-manager"))},[l("div",x,[p(a,{name:"person",large:""})]),l("div",y,[t[6]||(t[6]=l("span",{class:"stat-label"},"Personen",-1)),l("span",w,u(A.value.people),1)]),p(a,{name:"chevron_right",class:"arrow"})]),l("div",{class:"stat-card",onClick:t[2]||(t[2]=e=>N("/acquisition-manager"))},[l("div",_,[p(a,{name:"auto_awesome",large:""})]),l("div",k,[t[7]||(t[7]=l("span",{class:"stat-label"},"Leads",-1)),l("span",C,u(A.value.leads),1)]),p(a,{name:"chevron_right",class:"arrow"})])]),l("div",z,[t[10]||(t[10]=l("h2",{class:"section-title"},"Schnellzugriff",-1)),l("div",S,[p(n,{secondary:"",block:"",onClick:t[3]||(t[3]=e=>N("/people-manager?create=true"))},{default:c(()=>[p(a,{name:"person_add",left:""}),t[8]||(t[8]=m(" Neue Person anlegen ",-1))]),_:1}),p(n,{secondary:"",block:"",onClick:t[4]||(t[4]=e=>N("/acquisition-manager?create=true"))},{default:c(()=>[p(a,{name:"add_link",left:""}),t[9]||(t[9]=m(" Neuen Lead registrieren ",-1))]),_:1})])])])]),_:1})}}}),A=[],N=[];!function(e,t){if(e&&"undefined"!=typeof document){var a,n=!0===t.prepend?"prepend":"append",s=!0===t.singleTag,r="string"==typeof t.container?document.querySelector(t.container):document.getElementsByTagName("head")[0];if(s){var o=A.indexOf(r);-1===o&&(o=A.push(r)-1,N[o]={}),a=N[o]&&N[o][n]?N[o][n]:N[o][n]=i()}else a=i();65279===e.charCodeAt(0)&&(e=e.substring(1)),a.styleSheet?a.styleSheet.cssText+=e:a.appendChild(document.createTextNode(e))}function i(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),t.attributes)for(var a=Object.keys(t.attributes),s=0;s<a.length;s++)e.setAttribute(a[s],t.attributes[a[s]]);var o="prepend"===n?"afterbegin":"beforeend";return r.insertAdjacentElement(o,e),e}}("\n.dashboard[data-v-e1e2ebf3] { padding: 40px;\n}\n.dashboard-header[data-v-e1e2ebf3] { margin-bottom: 48px;\n}\n.title[data-v-e1e2ebf3] { font-size: 32px; font-weight: 800; letter-spacing: -0.5px; margin-bottom: 8px;\n}\n.subtitle[data-v-e1e2ebf3] { color: var(--theme--foreground-subdued); font-size: 16px;\n}\n.stats-grid[data-v-e1e2ebf3] { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; margin-bottom: 48px;\n}\n.stat-card[data-v-e1e2ebf3] {\n\tbackground: var(--theme--background-normal);\n\tborder: 1px solid var(--theme--border);\n\tpadding: 24px;\n\tborder-radius: 12px;\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 20px;\n\tcursor: pointer;\n\ttransition: all 0.2s ease;\n\tposition: relative;\n}\n.stat-card[data-v-e1e2ebf3]:hover {\n\tborder-color: var(--theme--primary);\n\ttransform: translateY(-2px);\n\tbox-shadow: 0 8px 16px rgba(0,0,0,0.1);\n}\n.stat-icon[data-v-e1e2ebf3] {\n\twidth: 56px;\n\theight: 56px;\n\tbackground: var(--theme--background-subdued);\n\tborder-radius: 12px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcolor: var(--theme--primary);\n}\n.stat-content[data-v-e1e2ebf3] { display: flex; flex-direction: column;\n}\n.stat-label[data-v-e1e2ebf3] { font-size: 12px; font-weight: 700; text-transform: uppercase; color: var(--theme--foreground-subdued); letter-spacing: 0.5px;\n}\n.stat-value[data-v-e1e2ebf3] { font-size: 28px; font-weight: 800; color: var(--theme--foreground);\n}\n.arrow[data-v-e1e2ebf3] { position: absolute; right: 24px; opacity: 0.2;\n}\n.stat-card:hover .arrow[data-v-e1e2ebf3] { opacity: 1; color: var(--theme--primary);\n}\n.recent-activity[data-v-e1e2ebf3] { max-width: 600px;\n}\n.section-title[data-v-e1e2ebf3] { font-size: 18px; font-weight: 700; margin-bottom: 24px;\n}\n.action-grid[data-v-e1e2ebf3] { display: grid; grid-template-columns: 1fr 1fr; gap: 16px;\n}\n",{});var P=a({id:"unified-dashboard",name:"Overview",icon:"dashboard",routes:[{path:"",component:((e,t)=>{const a=e.__vccOpts||e;for(const[e,n]of t)a[e]=n;return a})(O,[["__scopeId","data-v-e1e2ebf3"],["__file","module.vue"]])}]});export{P as default};
|