2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
var dt=Object.defineProperty,ut=Object.defineProperties;var ft=Object.getOwnPropertyDescriptors;var j=Object.getOwnPropertySymbols;var pt=Object.prototype.hasOwnProperty,mt=Object.prototype.propertyIsEnumerable;var q=(h,c,l)=>c in h?dt(h,c,{enumerable:!0,configurable:!0,writable:!0,value:l}):h[c]=l,M=(h,c)=>{for(var l in c||(c={}))pt.call(c,l)&&q(h,l,c[l]);if(j)for(var l of j(c))mt.call(c,l)&&q(h,l,c[l]);return h},Q=(h,c)=>ut(h,ft(c));var X=(h,c,l)=>new Promise((z,w)=>{var $=y=>{try{v(l.next(y))}catch(k){w(k)}},E=y=>{try{v(l.throw(y))}catch(k){w(k)}},v=y=>y.done?z(y.value):Promise.resolve(y.value).then($,E);v((l=l.apply(h,c)).next())});import{bZ as O,b_ as g,au as x,an as b,S as _,ax as C,ac as ht}from"./bootstrap-peLAqOBq.js";import{b as yt}from"./index-DPQibudO.js";import{S as gt,a as xt}from"./data-B1c0S7Yi.js";import{S as P}from"./index-CsmeZiyy.js";import{u as D,_ as L}from"./use-echarts-CUydHgm6.js";import{m as bt,b9 as S,v as St,aU as _t,aX as vt,x as Tt,ad as Ct,b2 as Dt,j as t,bJ as o,u as e,ae as p,n as Lt}from"../jse/index-index-fr7m5rpH.js";import"./dict-enum-CaHgMaDZ.js";const wt={class:"work-order-dashboard"},kt={class:"metric-content"},Rt={class:"metric-icon"},At={class:"metric-info"},zt={class:"metric-content"},$t={class:"metric-icon"},Et={class:"metric-info"},Mt={class:"metric-content"},Ot={class:"metric-icon"},Pt={class:"metric-info"},Wt={class:"metric-content"},It={class:"metric-icon"},Qt={class:"metric-info"},Nt=bt({name:"CleaningWorkOrderDashboard",__name:"index",setup(h){const c=S(!0),l=S(!0),z=S(),w=S(),$=S(),E=S(),v=S(),y=S(),{renderEcharts:k}=D(z),{renderEcharts:F}=D(w),{renderEcharts:Z}=D($),{renderEcharts:J}=D(E),{renderEcharts:Y}=D(v),{renderEcharts:K}=D(y),m=S({pendingCount:0,inProgressCount:0,completedTodayCount:0,completedTotalCount:0,trendData:{dates:[],createdData:[],completedData:[]},hourlyDistribution:{hours:[],data:[]},timeTrendData:{dates:[],responseTimeData:[],completionTimeData:[]},statusDistribution:[],heatmapData:{days:[],hours:[],data:[]},functionTypeRanking:[],monthlyTrendData:void 0,badgeQueueStats:void 0}),tt={pendingCount:0,inProgressCount:0,completedTodayCount:0,completedTotalCount:0,trendData:{dates:[],createdData:[],completedData:[]},hourlyDistribution:{hours:[],data:[]},timeTrendData:{dates:[],responseTimeData:[],completionTimeData:[]},statusDistribution:[],heatmapData:{days:[],hours:[],data:[]},functionTypeRanking:[],monthlyTrendData:void 0,badgeQueueStats:void 0};function et(){const a=m.value.monthlyTrendData;if(!a){const{trendData:r}=m.value;return{tooltip:{trigger:"axis"},legend:{data:["新增工单"],top:"5%",textStyle:{color:"#595959"}},grid:{left:"3%",right:"4%",bottom:"3%",top:"15%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:r.dates,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c"}}],yAxis:[{type:"value",name:"工单数量",nameTextStyle:{color:"#8c8c8c"},axisLine:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{lineStyle:{color:"#f0f0f0",type:"dashed"}}}],series:[{name:"新增工单",type:"line",smooth:!0,symbol:"circle",symbolSize:6,data:r.createdData,itemStyle:{color:"#1677ff"},areaStyle:{opacity:.15,color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(22, 119, 255, 0.4)"},{offset:1,color:"rgba(22, 119, 255, 0.05)"}]}}}]}}const i=a.currentMonth.dates.map(r=>r.split("-")[2]||r),n=a.lastMonth.dates.map(r=>r.split("-")[2]||r),u=i.length>=n.length?i:n;return{tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}},legend:{data:["当月新增","上月新增"],top:"5%",textStyle:{color:"#595959"}},grid:{left:"3%",right:"4%",bottom:"3%",top:"15%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:u,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c",formatter:r=>`${r}日`}}],yAxis:[{type:"value",name:"工单数量",nameTextStyle:{color:"#8c8c8c"},axisLine:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{lineStyle:{color:"#f0f0f0",type:"dashed"}}}],series:[{name:"当月新增",type:"line",smooth:!0,symbol:"circle",symbolSize:6,areaStyle:{opacity:.15,color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(22, 119, 255, 0.35)"},{offset:1,color:"rgba(22, 119, 255, 0.03)"}]}},emphasis:{focus:"series"},data:a.currentMonth.createdData,itemStyle:{color:"#1677ff"},lineStyle:{width:2.5}},{name:"上月新增",type:"line",smooth:!0,symbol:"circle",symbolSize:5,lineStyle:{type:"dashed",width:1.5},areaStyle:{opacity:.06,color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(147, 196, 255, 0.25)"},{offset:1,color:"rgba(147, 196, 255, 0.03)"}]}},emphasis:{focus:"series"},data:a.lastMonth.createdData,itemStyle:{color:"#93c4fd"}}]}}function at(){const{timeTrendData:a}=m.value;return{tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}},formatter:i=>{let n=`${i[0].name}<br/>`;return i.forEach(u=>{n+=`${u.marker} ${u.seriesName}: ${u.value}分钟<br/>`}),n}},legend:{data:["平均响应时间","平均完成时间"],top:"5%",textStyle:{color:"#595959"}},grid:{left:"3%",right:"4%",bottom:"3%",top:"15%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:a.dates,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c"}}],yAxis:[{type:"value",name:"响应时间(分钟)",nameTextStyle:{color:"#8c8c8c",fontSize:12},position:"left",axisLine:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{lineStyle:{color:"#f0f0f0",type:"dashed"}}},{type:"value",name:"完成时间(分钟)",nameTextStyle:{color:"#8c8c8c",fontSize:12},position:"right",axisLine:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{show:!1}}],series:[{name:"平均响应时间",type:"line",smooth:!0,symbol:"circle",symbolSize:6,yAxisIndex:0,data:a.responseTimeData,itemStyle:{color:"#1677ff"},lineStyle:{width:2}},{name:"平均完成时间",type:"line",smooth:!0,symbol:"circle",symbolSize:6,yAxisIndex:1,data:a.completionTimeData,itemStyle:{color:"#52c41a"},lineStyle:{width:2}}]}}function ot(){const{statusDistribution:a}=m.value,i=Q(M({},Object.fromEntries(Object.entries(gt).map(([r,d])=>[d,r]))),{待处理:"PENDING",已派单:"DISPATCHED",已到岗:"ARRIVED",进行中:"IN_PROGRESS",已恢复:"RESUMED"}),n=r=>{var T;const d=i[r];return d?(T=xt[d])==null?void 0:T.text:"#d9d9d9"},u=a.reduce((r,d)=>r+d.value,0);return{tooltip:{trigger:"item",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#f0f0f0",borderWidth:1,padding:[8,12],textStyle:{color:"#262626",fontSize:13},formatter:r=>`${`<span style="display:inline-block;width:8px;height:8px;border-radius:50%;background:${r.color};margin-right:6px;"></span>`}${r.name}<br/><span style="font-size:16px;font-weight:600">${r.value}</span> 个 <span style="color:#8c8c8c;margin-left:4px">${r.percent}%</span>`},legend:{orient:"vertical",right:"4%",top:"center",itemWidth:10,itemHeight:10,itemGap:14,icon:"circle",textStyle:{fontSize:12,color:"#595959"}},graphic:[{type:"text",left:"23%",top:"38%",style:{text:`${u}`,fontSize:26,fontWeight:"700",fill:"#262626",textAlign:"center"}},{type:"text",left:"23%",top:"55%",style:{text:"近7天工单",fontSize:11,fill:"#bfbfbf",textAlign:"center"}}],series:[{name:"工单状态分布",type:"pie",radius:["48%","70%"],center:["25%","50%"],avoidLabelOverlap:!1,label:{show:!1},emphasis:{scale:!0,scaleSize:8,label:{show:!1}},itemStyle:{borderColor:"#fff",borderWidth:2,borderRadius:6},data:a.map(r=>Q(M({},r),{itemStyle:{color:n(r.name)}}))}]}}function nt(){var V;const{heatmapData:a}=m.value,i=a.hours.map((s,f)=>f),n=a.days.map((s,f)=>f),u=[];for(let s=0;s<a.days.length;s++)for(let f=0;f<24;f++){const A=((V=a.data[s])==null?void 0:V[f])||0;u.push([f,s,A])}const r=Math.max(1,...u.map(s=>s[2]||0)),d=[245,245,245],T=[22,119,255],lt=Math.log1p(r);function G(s){if(s<=0)return`rgb(${d.join(",")})`;const f=Math.log1p(s)/lt,A=Math.round(d[0]+(T[0]-d[0])*f),I=Math.round(d[1]+(T[1]-d[1])*f),ct=Math.round(d[2]+(T[2]-d[2])*f);return`rgb(${A},${I},${ct})`}const it=u.map(s=>({value:s,itemStyle:{color:G(s[2]||0)}})),H=10,U=[];for(let s=0;s<=H;s++){const f=r*s/H;U.push(G(f))}return{tooltip:{position:"top",formatter:s=>{const f=a.days[s.value[1]]||"",A=a.hours[s.value[0]]||"",I=s.value[2]||0;return`${f} ${A}<br/>工单数: ${I}单`}},grid:{height:"70%",top:"5%",left:"8%",right:"3%",bottom:"20%"},xAxis:{type:"category",data:i,splitArea:{show:!0},axisLabel:{fontSize:9,color:"#8c8c8c",formatter:s=>s%3===0?`${s}:00`:""},axisLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"category",data:n,splitArea:{show:!0},axisLabel:{fontSize:11,color:"#595959",formatter:s=>a.days[s]||""},axisLine:{show:!1},axisTick:{show:!1}},visualMap:{min:0,max:r,calculable:!1,orient:"horizontal",left:"center",bottom:"2%",text:[`${r}`,"0"],textStyle:{fontSize:10,color:"#8c8c8c"},itemWidth:10,itemHeight:80,inRange:{color:U},show:!0},series:[{name:"工单数量",type:"heatmap",data:it,label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.3)"}}}]}}function rt(){const a=[...m.value.functionTypeRanking].toSorted((n,u)=>n.count-u.count);return{grid:{left:"3%",right:"15%",top:"5%",bottom:"3%",containLabel:!0},xAxis:{type:"value",max:"dataMax",axisLabel:{show:!1},splitLine:{show:!1}},yAxis:{type:"category",data:a.map(n=>n.functionType),axisLabel:{fontSize:13,color:"#595959"},axisLine:{show:!1},axisTick:{show:!1}},series:[{type:"bar",data:a.map(n=>({value:n.count,itemStyle:{color:i(n.rate),borderRadius:[0,6,6,0]}})),barWidth:18,label:{show:!0,position:"right",fontSize:13,color:"#262626",fontWeight:500,formatter:n=>`${n.value}单`}}]};function i(n){return n>=95?"#52c41a":n>=90?"#1677ff":n>=85?"#faad14":n>=80?"#ff7a45":"#ff4d4f"}}function st(){const a=m.value.badgeQueueStats;if(!a||a.dates.length===0)return{};const i=Math.max(...a.queueData,1);return{tooltip:{trigger:"axis",backgroundColor:"rgba(255, 255, 255, 0.96)",borderColor:"#f0f0f0",borderWidth:1,padding:[8,12],textStyle:{color:"#262626",fontSize:13},formatter:n=>{const u=n[0];return`<span style="color:#8c8c8c">${u.name}</span><br/><span style="font-size:16px;font-weight:600;color:#1677ff">${u.value}</span> <span style="color:#8c8c8c">个排队</span>`}},grid:{left:"3%",right:"4%",bottom:"3%",top:"15%",containLabel:!0},xAxis:[{type:"category",data:a.dates,axisLine:{lineStyle:{color:"#f0f0f0"}},axisTick:{show:!1},axisLabel:{color:"#8c8c8c",fontSize:11}}],yAxis:[{type:"value",name:"队列数",nameTextStyle:{color:"#8c8c8c",fontSize:12},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{lineStyle:{color:"#f5f5f5",type:"dashed"}}}],series:[{name:"队列数量",type:"bar",barWidth:"40%",data:a.queueData.map(n=>({value:n,itemStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:n===i?"#0958d9":"#1677ff"},{offset:1,color:n===i?"#4096ff":"#91caff"}]},borderRadius:[6,6,0,0]}})),label:{show:!0,position:"top",fontSize:11,fontWeight:"600",color:"#1677ff",formatter:n=>n.value>0?n.value:""},emphasis:{itemStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"#003eb3"},{offset:1,color:"#0958d9"}]}}}}]}}function N(){return X(this,null,function*(){c.value=!0;try{const a=yield yt();m.value={pendingCount:a.pendingCount,inProgressCount:a.inProgressCount,completedTodayCount:a.completedTodayCount,completedTotalCount:a.completedTotalCount,trendData:a.trendData,hourlyDistribution:a.hourlyDistribution,timeTrendData:a.timeTrendData,statusDistribution:a.statusDistribution,heatmapData:a.heatmapData,functionTypeRanking:a.functionTypeRanking,monthlyTrendData:a.monthlyTrendData,badgeQueueStats:a.badgeQueueStats},l.value=!1,yield Lt(),k(et()),F(nt()),Z(at()),J(ot()),Y(rt()),K(st())}catch(a){m.value=M({},tt)}finally{c.value=!1}})}let R=null;function B(){W(),N(),R=setInterval(N,3e4)}function W(){R&&(clearInterval(R),R=null)}return St(B),_t(()=>{R||B()}),vt(W),Tt(W),(a,i)=>(Dt(),Ct("div",wt,[t(e(_),{spinning:c.value},{default:o(()=>[t(e(O),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(g),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(x),{class:"metric-card metric-card--pending"},{default:o(()=>[p("div",kt,[p("div",Rt,[t(e(b),{icon:"solar:clock-circle-bold-duotone"})]),p("div",At,[i[0]||(i[0]=p("div",{class:"metric-label"},"待处理工单",-1)),t(e(P),{value:m.value.pendingCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#ff4d4f"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(g),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(x),{class:"metric-card metric-card--progress"},{default:o(()=>[p("div",zt,[p("div",$t,[t(e(b),{icon:"solar:play-circle-bold-duotone"})]),p("div",Et,[i[1]||(i[1]=p("div",{class:"metric-label"},"进行中工单",-1)),t(e(P),{value:m.value.inProgressCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#1677ff"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(g),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(x),{class:"metric-card metric-card--completed"},{default:o(()=>[p("div",Mt,[p("div",Ot,[t(e(b),{icon:"solar:check-circle-bold-duotone"})]),p("div",Pt,[i[2]||(i[2]=p("div",{class:"metric-label"},"今日完成",-1)),t(e(P),{value:m.value.completedTodayCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#52c41a"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(g),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(x),{class:"metric-card metric-card--total"},{default:o(()=>[p("div",Wt,[p("div",It,[t(e(b),{icon:"solar:document-text-bold-duotone"})]),p("div",Qt,[i[3]||(i[3]=p("div",{class:"metric-label"},"累计完成",-1)),t(e(P),{value:m.value.completedTotalCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#722ed1"}},null,8,["value"])])])]),_:1})]),_:1})]),_:1}),t(e(O),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(g),{xs:24,lg:16},{default:o(()=>[t(e(x),{class:"chart-card",title:"工单趋势(当月 vs 上月)"},{extra:o(()=>[t(e(C),{title:"展示当月与上月的新增工单对比"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"trendChartRef",ref:z,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(g),{xs:24,lg:8},{default:o(()=>[t(e(x),{class:"chart-card",title:"时段热力图(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天各时段的工单数量热力分布"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"heatmapChartRef",ref:w,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(O),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(g),{xs:24,lg:16},{default:o(()=>[t(e(x),{class:"chart-card",title:"平均耗时趋势(近7天)"},{extra:o(()=>[t(e(C),{title:"展示平均响应时间和平均完成时间的变化趋势"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"timeTrendChartRef",ref:$,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(g),{xs:24,lg:8},{default:o(()=>[t(e(x),{class:"chart-card",title:"工单状态分布(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天工单的状态占比分布"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"statusChartRef",ref:E,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(O),{gutter:[12,12]},{default:o(()=>[t(e(g),{xs:24,md:12,lg:12},{default:o(()=>[t(e(x),{class:"chart-card",title:"工单排队趋势(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天每日排队等待派单的工单数量变化"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"badgeQueueChartRef",ref:y,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(g),{xs:24,md:12,lg:12},{default:o(()=>[t(e(x),{class:"chart-card",title:"区域类型排行"},{extra:o(()=>[t(e(C),{title:"按区域类型统计工单数量排行"},{default:o(()=>[t(e(b),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(_),{spinning:l.value},{default:o(()=>[t(e(L),{ref_key:"functionTypeRankingChartRef",ref:v,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]))}}),Ft=ht(Nt,[["__scopeId","data-v-37bd0ab5"]]);export{Ft as default};
|