18 lines
24 KiB
JavaScript
18 lines
24 KiB
JavaScript
import{aO as xe,r as O,c as T,aP as L,_ as de,v as he,o as ue,f as ce,i as X,g as i,w as p,b as t,a as v,j as D,d as k,e as u,F as U,k as f,t as n,af as B,aQ as R,n as oe,Q as ee}from"./index-BUdRbiwj.js";import{u as ke}from"./assets-eZiqmOvX.js";import{F as _e,a as we}from"./FPPageHeader-CTG2L28r.js";import{F as Z}from"./FPCard-qHzcEQAE.js";import{F as be}from"./FPModal-DWGF1LV8.js";import{F}from"./FPBadge-BKY5dPnL.js";import{u as Ce}from"./useUniversalCalendar-2CJQgaXx.js";import{F as De}from"./FPStats-BGfZcDZc.js";import"./useWorkOrders-B61P5JA7.js";import"./useFormAutoSave-Jaawgo91.js";import"./workOrder-jNxj_kjQ.js";import"./usePreventiveMaintenanceDisplay-Bhncwa9c.js";const Ee=xe("workOrders",()=>{const y=O([]),b=O(null),x=O(!1),g=O(null),I=O(0),m=O({status:null,priority:null,assignedTo:null,search:"",dateRange:null}),W=T(()=>{let s=y.value;if(m.value.status&&(s=s.filter(e=>e.status===m.value.status)),m.value.priority&&(s=s.filter(e=>e.priority===m.value.priority)),m.value.assignedTo&&(s=s.filter(e=>{var l;return((l=e.assignedTo)==null?void 0:l.id)===m.value.assignedTo})),m.value.search){const e=m.value.search.toLowerCase();s=s.filter(l=>{var d,_,E;return((d=l.title)==null?void 0:d.toLowerCase().includes(e))||((_=l.description)==null?void 0:_.toLowerCase().includes(e))||((E=l.id)==null?void 0:E.toString().includes(e))})}return s}),A=T(()=>y.value.reduce((s,e)=>(s[e.status]||(s[e.status]=[]),s[e.status].push(e),s),{})),P=T(()=>y.value.reduce((s,e)=>(s[e.priority]||(s[e.priority]=[]),s[e.priority].push(e),s),{})),C=T(()=>{const s=new Date;return y.value.filter(e=>e.dueDate&&new Date(e.dueDate)<s&&e.status!=="COMPLETED")});return{workOrders:y,currentWorkOrder:b,loading:x,error:g,totalCount:I,filters:m,filteredWorkOrders:W,workOrdersByStatus:A,workOrdersByPriority:P,overdueWorkOrders:C,fetchWorkOrders:async(s={})=>{try{x.value=!0,g.value=null;const e=await L.getAll(s);return y.value=e.content||e,I.value=e.totalElements||e.length,e}catch(e){throw g.value=e.message||"Failed to fetch work orders",e}finally{x.value=!1}},fetchWorkOrderById:async s=>{try{x.value=!0,g.value=null;const e=await L.getById(s);b.value=e;const l=y.value.findIndex(d=>d.id===s);return l!==-1&&(y.value[l]=e),e}catch(e){throw g.value=e.message||"Failed to fetch work order",e}finally{x.value=!1}},createWorkOrder:async s=>{try{x.value=!0,g.value=null;const e=await L.create(s);return y.value.unshift(e),I.value+=1,e}catch(e){throw g.value=e.message||"Failed to create work order",e}finally{x.value=!1}},updateWorkOrder:async(s,e)=>{var l;try{x.value=!0,g.value=null;const d=await L.update(s,e),_=y.value.findIndex(E=>E.id===s);return _!==-1&&(y.value[_]=d),((l=b.value)==null?void 0:l.id)===s&&(b.value=d),d}catch(d){throw g.value=d.message||"Failed to update work order",d}finally{x.value=!1}},updateWorkOrderStatus:async(s,e,l="")=>{var d;try{x.value=!0,g.value=null;const _=await L.updateStatus(s,e,l),E=y.value.findIndex(te=>te.id===s);return E!==-1&&(y.value[E]=_),((d=b.value)==null?void 0:d.id)===s&&(b.value=_),_}catch(_){throw g.value=_.message||"Failed to update work order status",_}finally{x.value=!1}},assignWorkOrder:async(s,e)=>{var l;try{x.value=!0,g.value=null;const d=await L.assignWorkOrder(s,e),_=y.value.findIndex(E=>E.id===s);return _!==-1&&(y.value[_]=d),((l=b.value)==null?void 0:l.id)===s&&(b.value=d),d}catch(d){throw g.value=d.message||"Failed to assign work order",d}finally{x.value=!1}},deleteWorkOrder:async s=>{var e;try{return x.value=!0,g.value=null,await L.delete(s),y.value=y.value.filter(l=>l.id!==s),I.value-=1,((e=b.value)==null?void 0:e.id)===s&&(b.value=null),!0}catch(l){throw g.value=l.message||"Failed to delete work order",l}finally{x.value=!1}},setFilters:s=>{m.value={...m.value,...s}},clearFilters:()=>{m.value={status:null,priority:null,assignedTo:null,search:"",dateRange:null}},clearError:()=>{g.value=null}}}),Oe={class:"flex items-center justify-between mb-4"},Pe={class:"flex items-center space-x-2"},Se={class:"mb-6"},Te={class:"flex items-center justify-between mb-3"},Ie={class:"text-sm font-medium text-gray-700"},Me={class:"grid grid-cols-7 gap-1 text-xs"},Ne=["onClick"],We={key:0,class:"absolute bottom-0.5 left-1/2 transform -translate-x-1/2 w-1 h-1 bg-primary-500 rounded-full"},Ae={class:"mb-6"},$e={key:0,class:"text-center py-4"},Le={key:1,class:"space-y-2"},Fe=["onClick"],Be={class:"flex-1 min-w-0"},Re={class:"text-sm font-medium text-gray-900 truncate"},Ve={class:"text-xs text-gray-500"},je={key:0,class:"text-center py-4 text-gray-500 text-sm"},ze={class:"mb-6"},He={key:0,class:"text-center py-4"},Ue={key:1,class:"space-y-2"},Ge=["onClick"],Ye={class:"flex-1 min-w-0"},qe={class:"text-sm font-medium text-gray-900 truncate"},Ke={class:"flex items-center space-x-2 text-xs text-gray-500 mt-1"},Qe={key:0},Je={key:1,class:"truncate"},Xe={class:"flex items-center space-x-2"},Ze={key:0,class:"text-center py-4 text-gray-500 text-sm"},et={key:0,class:"mb-6"},tt={class:"text-sm font-medium text-red-700 mb-3 flex items-center"},st={class:"space-y-2"},rt=["onClick"],ot={class:"flex-1 min-w-0"},at={class:"text-sm font-medium text-red-900 truncate"},nt={class:"flex items-center space-x-2 text-xs text-red-600 mt-1"},lt={key:0,class:"text-center"},it={class:"grid grid-cols-2 gap-3 pt-4 border-t border-gray-200"},dt={class:"text-center"},ut={class:"text-lg font-semibold text-gray-900"},ct={class:"text-center"},vt={class:"text-lg font-semibold text-gray-900"},mt={key:0,class:"space-y-4"},pt={class:"flex items-center space-x-2"},gt={class:"text-sm space-y-2"},ft={key:0},yt={key:1},xt={key:2},ht={key:3},kt={__name:"CalendarWidget",setup(y){const b=he(),{allCalendarEvents:x,upcomingEvents:g,todaysEvents:I,overdueEvents:m,eventStatistics:W,eventTypes:A,loading:P,refreshCalendarData:C}=Ce(),h=O(new Date),V=O(new Date().toISOString().split("T")[0]),c=O(null),$=O(!1),G=["S","M","T","W","T","F","S"],Y=T(()=>h.value.toLocaleDateString("en-US",{month:"long",year:"numeric"})),q=T(()=>{const a=h.value.getFullYear(),r=h.value.getMonth(),M=new Date(a,r,1),S=new Date(M);S.setDate(S.getDate()-M.getDay());const w=[],o=new Date(S),N=new Date;for(let z=0;z<42;z++){const H=o.toISOString().split("T")[0];w.push({date:H,dayNumber:o.getDate(),isCurrentMonth:o.getMonth()===r,isToday:o.toDateString()===N.toDateString(),isSelected:H===V.value}),o.setDate(o.getDate()+1)}return w}),K=()=>{h.value=new Date(h.value.getFullYear(),h.value.getMonth()-1,1)},Q=()=>{h.value=new Date(h.value.getFullYear(),h.value.getMonth()+1,1)},j=a=>{V.value=a},s=a=>x.value.filter(r=>{if(!r||!r.start)return!1;try{return new Date(r.start).toISOString().split("T")[0]===a}catch{return console.warn("Invalid event date:",r.start),!1}}).length,e=a=>{c.value=a,$.value=!0},l=()=>{$.value=!1,c.value=null},d=()=>{if(c.value&&c.value.extendedProps){const a=c.value.extendedProps.type,r=c.value.extendedProps.originalData;a==="WORK_ORDER"&&(r!=null&&r.id)?b.push(`/work-orders?edit=${r.id}`):a==="PREVENTIVE_MAINTENANCE"&&(r!=null&&r.id)&&b.push(`/maintenance/preventive/${r.id}`),l()}},_=async()=>{await C()},E=a=>{if(!a)return"";try{return new Date(a).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit"})}catch{return console.warn("Invalid date for formatting:",a),""}},te=a=>{if(!a)return"";try{return new Date(a).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}catch{return console.warn("Invalid date for formatting:",a),""}},ve=a=>{if(!a)return"";try{const S=new Date(a)-new Date,w=Math.ceil(S/(1e3*60*60*24));return w===0?"Today":w===1?"Tomorrow":w===-1?"Yesterday":w>0?`In ${w} days`:`${Math.abs(w)} days ago`}catch{return console.warn("Invalid date for relative formatting:",a),""}},me=a=>{if(!a)return"";try{const r=new Date(a),S=new Date-r,w=Math.floor(S/(1e3*60*60*24));return w===0?"Due today":w===1?"1 day overdue":`${w} days overdue`}catch{return console.warn("Invalid date for overdue formatting:",a),""}},se=a=>a?a.charAt(0)+a.slice(1).toLowerCase():"N/A",pe=a=>a?a.replace("_"," ").toLowerCase().replace(/\b\w/g,r=>r.toUpperCase()):"N/A",J=a=>{var r;return((r=A[a])==null?void 0:r.label)||a},ge=a=>a==="WORK_ORDER"?"Edit Work Order":a==="PREVENTIVE_MAINTENANCE"?"View Schedule":"View Details",fe=a=>({WORK_ORDER:"primary",PREVENTIVE_MAINTENANCE:"success",ASSET_INSPECTION:"warning",SCHEDULED_DOWNTIME:"error"})[a]||"secondary",re=a=>({LOW:"secondary",MEDIUM:"primary",HIGH:"warning",CRITICAL:"error"})[a]||"secondary",ye=a=>({OPEN:"primary",IN_PROGRESS:"warning",COMPLETED:"success",ON_HOLD:"warning",CANCELLED:"secondary",ACTIVE:"success",PAUSED:"warning",INACTIVE:"secondary"})[a]||"secondary";return ue(async()=>{try{await C()}catch(a){console.error("Failed to initialize calendar data:",a)}}),(a,r)=>{const M=ce("router-link");return i(),X(u(Z),{padding:"lg",class:"calendar-widget"},{default:p(()=>{var S,w;return[t("div",Oe,[r[3]||(r[3]=t("h3",{class:"text-lg font-semibold text-gray-900"},"Upcoming Events",-1)),t("div",Pe,[k(u(U),{variant:"ghost",size:"xs",onClick:_},{default:p(()=>r[1]||(r[1]=[t("svg",{class:"w-4 h-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1)])),_:1,__:[1]}),k(M,{to:"/calendar",class:"text-sm text-primary-600 hover:text-primary-700 font-medium"},{default:p(()=>r[2]||(r[2]=[f(" View All → ",-1)])),_:1,__:[2]})])]),t("div",Se,[t("div",Te,[t("h4",Ie,n(Y.value),1),t("div",{class:"flex items-center space-x-1"},[t("button",{onClick:K,class:"p-1 rounded hover:bg-gray-100 transition-colors"},r[4]||(r[4]=[t("svg",{class:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M15 19l-7-7 7-7"})],-1)])),t("button",{onClick:Q,class:"p-1 rounded hover:bg-gray-100 transition-colors"},r[5]||(r[5]=[t("svg",{class:"w-4 h-4 text-gray-400",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 5l7 7-7 7"})],-1)]))])]),t("div",Me,[(i(),v(B,null,R(G,o=>t("div",{key:o,class:"p-2 text-center text-gray-500 font-medium"},n(o),1)),64)),(i(!0),v(B,null,R(q.value,o=>(i(),v("button",{key:o.date,onClick:N=>j(o.date),class:oe(["p-2 text-center rounded hover:bg-gray-100 transition-colors relative",{"text-gray-400":!o.isCurrentMonth,"bg-primary-100 text-primary-700 font-semibold":o.isToday,"bg-primary-50":o.isSelected,"text-gray-900":o.isCurrentMonth&&!o.isToday}])},[f(n(o.dayNumber)+" ",1),!u(P)&&s(o.date)>0?(i(),v("div",We)):D("",!0)],10,Ne))),128))])]),t("div",Ae,[r[7]||(r[7]=t("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Today's Events",-1)),u(P)?(i(),v("div",$e,r[6]||(r[6]=[t("div",{class:"animate-pulse"},"Loading events...",-1)]))):(i(),v("div",Le,[(i(!0),v(B,null,R(u(I),o=>(i(),v("div",{key:o.id,class:"flex items-center space-x-3 p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors cursor-pointer",onClick:N=>e(o)},[t("div",{class:"w-3 h-3 rounded-full flex-shrink-0",style:ee({backgroundColor:o.borderColor})},null,4),t("div",Be,[t("p",Re,n(o.title),1),t("p",Ve,n(E(o.start))+" • "+n(J(o.extendedProps.type)),1)]),k(u(F),{variant:re(o.extendedProps.priority),size:"xs"},{default:p(()=>[f(n(se(o.extendedProps.priority)),1)]),_:2},1032,["variant"])],8,Fe))),128)),!u(P)&&u(I).length===0?(i(),v("div",je," No events scheduled for today ")):D("",!0)]))]),t("div",ze,[r[10]||(r[10]=t("h4",{class:"text-sm font-medium text-gray-700 mb-3"},"Upcoming This Week",-1)),u(P)?(i(),v("div",He,r[8]||(r[8]=[t("div",{class:"animate-pulse"},"Loading events...",-1)]))):(i(),v("div",Ue,[(i(!0),v(B,null,R(u(g),o=>(i(),v("div",{key:o.id,class:"flex items-start space-x-3 p-3 bg-gray-50 rounded-lg hover:bg-gray-100 transition-colors cursor-pointer",onClick:N=>e(o)},[t("div",{class:"w-3 h-3 rounded-full flex-shrink-0 mt-0.5",style:ee({backgroundColor:o.borderColor})},null,4),t("div",Ye,[t("p",qe,n(o.title),1),t("div",Ke,[t("span",null,n(ve(o.start)),1),r[9]||(r[9]=t("span",null,"•",-1)),t("span",null,n(J(o.extendedProps.type)),1),o.extendedProps.assetName?(i(),v("span",Qe,"•")):D("",!0),o.extendedProps.assetName?(i(),v("span",Je,n(o.extendedProps.assetName),1)):D("",!0)])]),t("div",Xe,[k(u(F),{variant:re(o.extendedProps.priority),size:"xs"},{default:p(()=>[f(n(se(o.extendedProps.priority)),1)]),_:2},1032,["variant"])])],8,Ge))),128)),!u(P)&&u(g).length===0?(i(),v("div",Ze," No upcoming events this week ")):D("",!0)]))]),u(m).length>0?(i(),v("div",et,[t("h4",tt,[r[11]||(r[11]=t("svg",{class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L4.268 16.5c-.77.833.192 2.5 1.732 2.5z"})],-1)),f(" Overdue ("+n(u(m).length)+") ",1)]),t("div",st,[(i(!0),v(B,null,R(u(m).slice(0,3),o=>(i(),v("div",{key:o.id,class:"flex items-start space-x-3 p-3 bg-red-50 border border-red-100 rounded-lg hover:bg-red-100 transition-colors cursor-pointer",onClick:N=>e(o)},[r[14]||(r[14]=t("div",{class:"w-3 h-3 rounded-full flex-shrink-0 mt-0.5 bg-red-500"},null,-1)),t("div",ot,[t("p",at,n(o.title),1),t("div",nt,[t("span",null,n(me(o.start)),1),r[12]||(r[12]=t("span",null,"•",-1)),t("span",null,n(J(o.extendedProps.type)),1)])]),k(u(F),{variant:"error",size:"xs"},{default:p(()=>r[13]||(r[13]=[f("Overdue",-1)])),_:1,__:[13]})],8,rt))),128)),u(m).length>3?(i(),v("div",lt,[k(M,{to:"/calendar?filter=overdue",class:"text-xs text-red-600 hover:text-red-700 font-medium"},{default:p(()=>[f(" View "+n(u(m).length-3)+" more overdue items → ",1)]),_:1})])):D("",!0)])])):D("",!0),t("div",it,[t("div",dt,[t("div",ut,n(u(W).today),1),r[15]||(r[15]=t("div",{class:"text-xs text-gray-500"},"Today",-1))]),t("div",ct,[t("div",vt,n(u(W).upcoming),1),r[16]||(r[16]=t("div",{class:"text-xs text-gray-500"},"This Week",-1))])]),k(u(be),{modelValue:$.value,"onUpdate:modelValue":r[0]||(r[0]=o=>$.value=o),title:((S=c.value)==null?void 0:S.title)||"Event Details",size:"md",onConfirm:d,onCancel:l,"confirm-text":c.value?ge((w=c.value.extendedProps)==null?void 0:w.type):"Close","cancel-text":"Close"},{default:p(()=>{var o,N,z,H,ae,ne,le;return[c.value?(i(),v("div",mt,[t("div",pt,[k(u(F),{variant:fe((o=c.value.extendedProps)==null?void 0:o.type)},{default:p(()=>{var ie;return[f(n(J((ie=c.value.extendedProps)==null?void 0:ie.type)),1)]}),_:1},8,["variant"]),(N=c.value.extendedProps)!=null&&N.priority?(i(),X(u(F),{key:0,variant:re(c.value.extendedProps.priority)},{default:p(()=>[f(n(se(c.value.extendedProps.priority)),1)]),_:1},8,["variant"])):D("",!0),(z=c.value.extendedProps)!=null&&z.status?(i(),X(u(F),{key:1,variant:ye(c.value.extendedProps.status)},{default:p(()=>[f(n(pe(c.value.extendedProps.status)),1)]),_:1},8,["variant"])):D("",!0)]),t("div",gt,[t("div",null,[r[17]||(r[17]=t("strong",null,"Time:",-1)),f(" "+n(te(c.value.start))+" at "+n(E(c.value.start)),1)]),(H=c.value.extendedProps)!=null&&H.description?(i(),v("div",ft,[r[18]||(r[18]=t("strong",null,"Description:",-1)),f(" "+n(c.value.extendedProps.description),1)])):D("",!0),(ae=c.value.extendedProps)!=null&&ae.assetName?(i(),v("div",yt,[r[19]||(r[19]=t("strong",null,"Asset:",-1)),f(" "+n(c.value.extendedProps.assetName),1)])):D("",!0),(ne=c.value.extendedProps)!=null&&ne.location?(i(),v("div",xt,[r[20]||(r[20]=t("strong",null,"Location:",-1)),f(" "+n(c.value.extendedProps.location),1)])):D("",!0),(le=c.value.extendedProps)!=null&&le.frequency?(i(),v("div",ht,[r[21]||(r[21]=t("strong",null,"Frequency:",-1)),f(" "+n(c.value.extendedProps.frequency),1)])):D("",!0)])])):D("",!0)]}),_:1},8,["modelValue","title","confirm-text"])]}),_:1})}}},_t=de(kt,[["__scopeId","data-v-9772e3c3"]]),wt={class:"space-y-8 p-6"},bt={class:"grid grid-cols-1 lg:grid-cols-3 gap-8"},Ct={class:"lg:col-span-2"},Dt={class:"flex items-center justify-between mb-6"},Et={key:0,class:"flex justify-center py-8"},Ot={key:1,class:"text-center py-8 text-gray-500"},Pt={key:2,class:"space-y-4"},St={class:"flex-1"},Tt={class:"font-medium text-gray-900"},It={class:"text-sm text-gray-600 mt-1"},Mt={class:"flex items-center mt-2 space-x-4"},Nt={class:"text-right text-sm text-gray-500"},Wt={class:"mt-1"},At={class:"space-y-6"},$t={class:"grid grid-cols-1 lg:grid-cols-2 gap-8"},Lt={class:"space-y-3"},Ft={class:"space-y-4"},Bt={class:"flex items-center justify-between"},Rt={class:"flex items-center"},Vt={class:"text-sm font-medium mr-2"},jt={class:"w-16 bg-gray-200 rounded-full h-2"},zt={class:"flex items-center justify-between"},Ht={class:"flex items-center"},Ut={class:"text-sm font-medium mr-2"},Gt={class:"w-16 bg-gray-200 rounded-full h-2"},Yt={__name:"DashboardView",setup(y){const b={template:`
|
|
<svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" />
|
|
</svg>
|
|
`},x={template:`
|
|
<svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" />
|
|
</svg>
|
|
`},g={template:`
|
|
<svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.728-.833-2.498 0L4.316 16.5c-.77.833.192 2.5 1.732 2.5z" />
|
|
</svg>
|
|
`},I={template:`
|
|
<svg fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
|
|
</svg>
|
|
`},m=Ee(),W=ke(),A=O(!1),P=O(!1),C=T(()=>{var e;const s=m.workOrders;return{total:s.length,open:s.filter(l=>l.status==="OPEN").length,inProgress:s.filter(l=>l.status==="IN_PROGRESS").length,completed:s.filter(l=>l.status==="COMPLETED").length,critical:s.filter(l=>l.priority==="CRITICAL").length,overdue:((e=m.overdueWorkOrders)==null?void 0:e.length)||0}}),h=T(()=>{const s=W.assets;return{total:s.length,operational:s.filter(e=>e.status==="OPERATIONAL").length,down:s.filter(e=>e.status==="DOWN").length,maintenance:s.filter(e=>e.status==="MAINTENANCE").length}}),V=T(()=>[{name:"Work Orders",value:C.value.total,subtitle:`${C.value.open} open`,icon:b,iconBg:"bg-blue-100",iconColor:"text-blue-600",change:12},{name:"Assets",value:h.value.total,subtitle:`${h.value.operational} operational`,icon:x,iconBg:"bg-green-100",iconColor:"text-green-600",change:5},{name:"Critical Issues",value:C.value.critical,subtitle:"Needs attention",icon:g,iconBg:"bg-red-100",iconColor:"text-red-600",change:-8},{name:"Overdue Tasks",value:C.value.overdue,subtitle:"Past due date",icon:I,iconBg:"bg-yellow-100",iconColor:"text-yellow-600",change:-15}]),c=T(()=>m.workOrders.slice().sort((s,e)=>new Date(e.createdAt)-new Date(s.createdAt)).slice(0,5)),$=s=>({OPEN:"bg-blue-100 text-blue-800",IN_PROGRESS:"bg-yellow-100 text-yellow-800",COMPLETED:"bg-green-100 text-green-800",CANCELLED:"bg-gray-100 text-gray-800"})[s]||"bg-gray-100 text-gray-800",G=s=>({LOW:"bg-gray-100 text-gray-800",MEDIUM:"bg-blue-100 text-blue-800",HIGH:"bg-orange-100 text-orange-800",CRITICAL:"bg-red-100 text-red-800"})[s]||"bg-gray-100 text-gray-800",Y=s=>s.replace("_"," ").toLowerCase().replace(/\b\w/g,e=>e.toUpperCase()),q=s=>s.toLowerCase().replace(/\b\w/g,e=>e.toUpperCase()),K=s=>new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}),Q=async()=>{await j()},j=async()=>{try{A.value=!0,P.value=!0,await Promise.all([m.fetchWorkOrders({page:0,size:20}),W.fetchAssets({page:0,size:10})])}catch(s){console.error("Failed to load dashboard data:",s)}finally{A.value=!1,P.value=!1}};return ue(()=>{j()}),(s,e)=>{const l=ce("router-link");return i(),X(_e,null,{header:p(()=>[k(we,{title:"Dashboard",description:"Overview of your facility management operations",breadcrumbs:[{text:"Dashboard",to:null}]},{actions:p(()=>[k(u(U),{variant:"primary",size:"sm",onClick:Q},{default:p(()=>e[3]||(e[3]=[t("svg",{class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"})],-1),f(" Refresh ",-1)])),_:1,__:[3]})]),stats:p(()=>[k(u(De),{stats:V.value},null,8,["stats"])]),_:1})]),default:p(()=>[t("div",wt,[t("div",bt,[t("div",Ct,[k(u(Z),{padding:"lg"},{default:p(()=>[t("div",Dt,[e[5]||(e[5]=t("h3",{class:"text-lg font-semibold text-gray-900"},"Recent Work Orders",-1)),k(l,{to:"/work-orders",class:"text-sm text-primary-600 hover:text-primary-700 font-medium"},{default:p(()=>e[4]||(e[4]=[f(" View All → ",-1)])),_:1,__:[4]})]),A.value?(i(),v("div",Et,e[6]||(e[6]=[t("div",{class:"animate-spin rounded-full h-8 w-8 border-b-2 border-primary-600"},null,-1)]))):c.value.length===0?(i(),v("div",Ot," No work orders found ")):(i(),v("div",Pt,[(i(!0),v(B,null,R(c.value,d=>(i(),v("div",{key:d.id,class:"flex items-center justify-between p-4 border border-gray-200 rounded hover:bg-gray-50 transition-colors"},[t("div",St,[t("h4",Tt,n(d.title),1),t("p",It,n(d.description),1),t("div",Mt,[t("span",{class:oe([$(d.status),"px-2 py-1 text-xs font-medium rounded"])},n(Y(d.status)),3),t("span",{class:oe([G(d.priority),"px-2 py-1 text-xs font-medium rounded"])},n(q(d.priority)),3)])]),t("div",Nt,[t("p",null,n(K(d.createdAt)),1),t("p",Wt,n(d.assignee||"Unassigned"),1)])]))),128))]))]),_:1})]),t("div",At,[k(_t)])]),t("div",$t,[k(u(Z),{padding:"lg"},{default:p(()=>[e[10]||(e[10]=t("h3",{class:"text-lg font-semibold text-gray-900 mb-4"},"Quick Actions",-1)),t("div",Lt,[k(u(U),{variant:"primary",size:"sm",block:"",onClick:e[0]||(e[0]=()=>s.$router.push("/work-orders/create"))},{default:p(()=>e[7]||(e[7]=[t("svg",{class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),f(" Create Work Order ",-1)])),_:1,__:[7]}),k(u(U),{variant:"secondary",size:"sm",block:"",onClick:e[1]||(e[1]=()=>s.$router.push("/assets"))},{default:p(()=>e[8]||(e[8]=[t("svg",{class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m8-8H4"})],-1),f(" Add Asset ",-1)])),_:1,__:[8]}),k(u(U),{variant:"outline",size:"sm",block:"",onClick:e[2]||(e[2]=()=>s.$router.push("/reports"))},{default:p(()=>e[9]||(e[9]=[t("svg",{class:"w-4 h-4 mr-2",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor"},[t("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"})],-1),f(" View Reports ",-1)])),_:1,__:[9]})])]),_:1,__:[10]}),k(u(Z),{padding:"lg"},{default:p(()=>[e[14]||(e[14]=t("h3",{class:"text-lg font-semibold text-gray-900 mb-4"},"System Status",-1)),t("div",Ft,[t("div",Bt,[e[11]||(e[11]=t("span",{class:"text-sm text-gray-600"},"Assets Operational",-1)),t("div",Rt,[t("span",Vt,n(h.value.total>0?Math.round(h.value.operational/h.value.total*100):0)+"% ",1),t("div",jt,[t("div",{class:"bg-green-500 h-2 rounded-full transition-all duration-300",style:ee({width:`${h.value.total>0?h.value.operational/h.value.total*100:0}%`})},null,4)])])]),t("div",zt,[e[12]||(e[12]=t("span",{class:"text-sm text-gray-600"},"Work Order Completion",-1)),t("div",Ht,[t("span",Ut,n(C.value.total>0?Math.round(C.value.completed/C.value.total*100):0)+"% ",1),t("div",Gt,[t("div",{class:"bg-blue-500 h-2 rounded-full transition-all duration-300",style:ee({width:`${C.value.total>0?C.value.completed/C.value.total*100:0}%`})},null,4)])])]),e[13]||(e[13]=t("div",{class:"flex items-center justify-between"},[t("span",{class:"text-sm text-gray-600"},"System Health"),t("span",{class:"px-2 py-1 bg-green-100 text-green-700 text-xs font-medium rounded"}," Excellent ")],-1))])]),_:1,__:[14]})])])]),_:1})}}},ns=de(Yt,[["__scopeId","data-v-77944288"]]);export{ns as default};
|