2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
var dt=Object.defineProperty,ut=Object.defineProperties;var ft=Object.getOwnPropertyDescriptors;var N=Object.getOwnPropertySymbols;var pt=Object.prototype.hasOwnProperty,mt=Object.prototype.propertyIsEnumerable;var U=(m,c,s)=>c in m?dt(m,c,{enumerable:!0,configurable:!0,writable:!0,value:s}):m[c]=s,Q=(m,c)=>{for(var s in c||(c={}))pt.call(c,s)&&U(m,s,c[s]);if(N)for(var s of N(c))mt.call(c,s)&&U(m,s,c[s]);return m},j=(m,c)=>ut(m,ft(c));var F=(m,c,s)=>new Promise((z,L)=>{var A=h=>{try{_(s.next(h))}catch(w){L(w)}},$=h=>{try{_(s.throw(h))}catch(w){L(w)}},_=h=>h.done?z(h.value):Promise.resolve(h.value).then(A,$);_((s=s.apply(m,c)).next())});import{bZ as M,b_ as y,au as g,an as x,S as v,ax as C,ac as ht}from"./bootstrap-CW2RsBQq.js";import{b as yt}from"./index-CREMuk4M.js";import{S as O}from"./index-DgcXOzO5.js";import{u as T,_ as D}from"./use-echarts-BU4Mem_i.js";import{m as gt,b9 as S,v as xt,aU as bt,aX as St,x as vt,ad as _t,b2 as Ct,j as t,bJ as o,u as e,ae as f,n as Tt}from"../jse/index-index-Cy8amzIl.js";const Dt={class:"work-order-dashboard"},Lt={class:"metric-content"},wt={class:"metric-icon"},kt={class:"metric-info"},Rt={class:"metric-content"},zt={class:"metric-icon"},At={class:"metric-info"},$t={class:"metric-content"},Mt={class:"metric-icon"},Ot={class:"metric-info"},Wt={class:"metric-content"},Et={class:"metric-icon"},Pt={class:"metric-info"},Qt=gt({name:"CleaningWorkOrderDashboard",__name:"index",setup(m){const c=S(!0),s=S(!0),z=S(),L=S(),A=S(),$=S(),_=S(),h=S(),{renderEcharts:w}=T(z),{renderEcharts:X}=T(L),{renderEcharts:Z}=T(A),{renderEcharts:J}=T($),{renderEcharts:Y}=T(_),{renderEcharts:K}=T(h),p=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=p.value.monthlyTrendData;if(!a){const{trendData:d}=p.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:d.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:d.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(d=>d.split("-")[2]||d),n=a.lastMonth.dates.map(d=>d.split("-")[2]||d),r=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:r,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c",formatter:d=>`${d}日`}}],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}=p.value;return{tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}},formatter:i=>{let n=`${i[0].name}<br/>`;return i.forEach(r=>{n+=`${r.marker} ${r.seriesName}: ${r.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}=p.value,i={待处理:"#faad14",排队中:"#722ed1",已派单:"#1677ff",已到岗:"#13c2c2",已完成:"#52c41a",已取消:"#ff4d4f",已暂停:"#8c8c8c"},n=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:`${n}`,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=>j(Q({},r),{itemStyle:{color:i[r.name]||"#d9d9d9"}}))}]}}function nt(){var q;const{heatmapData:a}=p.value,i=a.hours.map((l,u)=>u),n=a.days.map((l,u)=>u),r=[];for(let l=0;l<a.days.length;l++)for(let u=0;u<24;u++){const R=((q=a.data[l])==null?void 0:q[u])||0;r.push([u,l,R])}const d=Math.max(1,...r.map(l=>l[2]||0)),b=[245,245,245],E=[22,119,255],st=Math.log1p(d);function G(l){if(l<=0)return`rgb(${b.join(",")})`;const u=Math.log1p(l)/st,R=Math.round(b[0]+(E[0]-b[0])*u),P=Math.round(b[1]+(E[1]-b[1])*u),ct=Math.round(b[2]+(E[2]-b[2])*u);return`rgb(${R},${P},${ct})`}const it=r.map(l=>({value:l,itemStyle:{color:G(l[2]||0)}})),H=10,V=[];for(let l=0;l<=H;l++){const u=d*l/H;V.push(G(u))}return{tooltip:{position:"top",formatter:l=>{const u=a.days[l.value[1]]||"",R=a.hours[l.value[0]]||"",P=l.value[2]||0;return`${u} ${R}<br/>工单数: ${P}单`}},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:l=>l%3===0?`${l}:00`:""},axisLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"category",data:n,splitArea:{show:!0},axisLabel:{fontSize:11,color:"#595959",formatter:l=>a.days[l]||""},axisLine:{show:!1},axisTick:{show:!1}},visualMap:{min:0,max:d,calculable:!1,orient:"horizontal",left:"center",bottom:"2%",text:[`${d}`,"0"],textStyle:{fontSize:10,color:"#8c8c8c"},itemWidth:10,itemHeight:80,inRange:{color:V},show:!0},series:[{name:"工单数量",type:"heatmap",data:it,label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.3)"}}}]}}function lt(){const a=[...p.value.functionTypeRanking].toSorted((n,r)=>n.count-r.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 rt(){const a=p.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 r=n[0];return`<span style="color:#8c8c8c">${r.name}</span><br/><span style="font-size:16px;font-weight:600;color:#1677ff">${r.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 B(){return F(this,null,function*(){c.value=!0;try{const a=yield yt();p.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},s.value=!1,yield Tt(),w(et()),X(nt()),Z(at()),J(ot()),Y(lt()),K(rt())}catch(a){p.value=Q({},tt)}finally{c.value=!1}})}let k=null;function I(){W(),B(),k=setInterval(B,3e4)}function W(){k&&(clearInterval(k),k=null)}return xt(I),bt(()=>{k||I()}),St(W),vt(W),(a,i)=>(Ct(),_t("div",Dt,[t(e(v),{spinning:c.value},{default:o(()=>[t(e(M),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(y),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(g),{class:"metric-card metric-card--pending"},{default:o(()=>[f("div",Lt,[f("div",wt,[t(e(x),{icon:"solar:clock-circle-bold-duotone"})]),f("div",kt,[i[0]||(i[0]=f("div",{class:"metric-label"},"待处理工单",-1)),t(e(O),{value:p.value.pendingCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#ff4d4f"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(y),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(g),{class:"metric-card metric-card--progress"},{default:o(()=>[f("div",Rt,[f("div",zt,[t(e(x),{icon:"solar:play-circle-bold-duotone"})]),f("div",At,[i[1]||(i[1]=f("div",{class:"metric-label"},"进行中工单",-1)),t(e(O),{value:p.value.inProgressCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#1677ff"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(y),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(g),{class:"metric-card metric-card--completed"},{default:o(()=>[f("div",$t,[f("div",Mt,[t(e(x),{icon:"solar:check-circle-bold-duotone"})]),f("div",Ot,[i[2]||(i[2]=f("div",{class:"metric-label"},"今日完成",-1)),t(e(O),{value:p.value.completedTodayCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#52c41a"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(y),{xs:24,sm:12,lg:6},{default:o(()=>[t(e(g),{class:"metric-card metric-card--total"},{default:o(()=>[f("div",Wt,[f("div",Et,[t(e(x),{icon:"solar:document-text-bold-duotone"})]),f("div",Pt,[i[3]||(i[3]=f("div",{class:"metric-label"},"累计完成",-1)),t(e(O),{value:p.value.completedTotalCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#722ed1"}},null,8,["value"])])])]),_:1})]),_:1})]),_:1}),t(e(M),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(y),{xs:24,lg:16},{default:o(()=>[t(e(g),{class:"chart-card",title:"工单趋势(当月 vs 上月)"},{extra:o(()=>[t(e(C),{title:"展示当月与上月的新增工单对比"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"trendChartRef",ref:z,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(y),{xs:24,lg:8},{default:o(()=>[t(e(g),{class:"chart-card",title:"时段热力图(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天各时段的工单数量热力分布"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"heatmapChartRef",ref:L,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(M),{gutter:[12,12],class:"mb-3"},{default:o(()=>[t(e(y),{xs:24,lg:16},{default:o(()=>[t(e(g),{class:"chart-card",title:"平均耗时趋势(近7天)"},{extra:o(()=>[t(e(C),{title:"展示平均响应时间和平均完成时间的变化趋势"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"timeTrendChartRef",ref:A,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(y),{xs:24,lg:8},{default:o(()=>[t(e(g),{class:"chart-card",title:"工单状态分布(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天工单的状态占比分布"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"statusChartRef",ref:$,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(M),{gutter:[12,12]},{default:o(()=>[t(e(y),{xs:24,md:12,lg:12},{default:o(()=>[t(e(g),{class:"chart-card",title:"工单排队趋势(近7天)"},{extra:o(()=>[t(e(C),{title:"展示近7天每日排队等待派单的工单数量变化"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"badgeQueueChartRef",ref:h,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(y),{xs:24,md:12,lg:12},{default:o(()=>[t(e(g),{class:"chart-card",title:"区域类型排行"},{extra:o(()=>[t(e(C),{title:"按区域类型统计工单数量排行"},{default:o(()=>[t(e(x),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:o(()=>[t(e(v),{spinning:s.value},{default:o(()=>[t(e(D),{ref_key:"functionTypeRankingChartRef",ref:_,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]))}}),Nt=ht(Qt,[["__scopeId","data-v-328e1280"]]);export{Nt as default};
|