3 lines
17 KiB
JavaScript
3 lines
17 KiB
JavaScript
var ct=Object.defineProperty,dt=Object.defineProperties;var ft=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var ut=Object.prototype.hasOwnProperty,mt=Object.prototype.propertyIsEnumerable;var tt=(o,n,a)=>n in o?ct(o,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):o[n]=a,X=(o,n)=>{for(var a in n||(n={}))ut.call(n,a)&&tt(o,a,n[a]);if(Z)for(var a of Z(n))mt.call(n,a)&&tt(o,a,n[a]);return o},et=(o,n)=>dt(o,ft(n));var at=(o,n,a)=>new Promise((c,d)=>{var x=l=>{try{m(a.next(l))}catch(g){d(g)}},h=l=>{try{m(a.throw(l))}catch(g){d(g)}},m=l=>l.done?c(l.value):Promise.resolve(l.value).then(x,h);m((a=a.apply(o,n)).next())});import{m as pt,aF as yt,_ as k,r as ht,i as ot,y as gt,j as B,bG as xt,I as vt,cK as Y,l as bt,bO as St,bQ as nt,o as _t,c0 as M,c1 as D,au as w,an as z,S as A,ax as j,ac as Ct}from"./bootstrap-CzaEOGmt.js";import{b as Tt}from"./index-CXvTc5Y5.js";import{j as t,m as K,b9 as C,v as it,Q as Dt,aW as wt,x as kt,ad as Rt,b2 as $t,bJ as i,u as e,ae as y,n as Lt}from"../jse/index-index-BsCxB4ql.js";import{u as I,_ as N}from"./use-echarts-BW2KrvmH.js";const st=o=>{const{value:n,formatter:a,precision:c,decimalSeparator:d,groupSeparator:x="",prefixCls:h}=o;let m;if(typeof a=="function")m=a({value:n});else{const l=String(n),g=l.match(/^(-?)(\d*)(\.(\d+))?$/);if(!g)m=l;else{const S=g[1];let r=g[2]||"0",p=g[4]||"";r=r.replace(/\B(?=(\d{3})+(?!\d))/g,x),typeof c=="number"&&(p=p.padEnd(c,"0").slice(0,c>0?c:0)),p&&(p=`${d}${p}`),m=[t("span",{key:"int",class:`${h}-content-value-int`},[S,r]),p&&t("span",{key:"decimal",class:`${h}-content-value-decimal`},[p])]}}return t("span",{class:`${h}-content-value`},[m])};st.displayName="StatisticNumber";const zt=o=>{const{componentCls:n,marginXXS:a,padding:c,colorTextDescription:d,statisticTitleFontSize:x,colorTextHeading:h,statisticContentFontSize:m,statisticFontFamily:l}=o;return{[`${n}`]:k(k({},ht(o)),{[`${n}-title`]:{marginBottom:a,color:d,fontSize:x},[`${n}-skeleton`]:{paddingTop:c},[`${n}-content`]:{color:h,fontSize:m,fontFamily:l,[`${n}-content-value`]:{display:"inline-block",direction:"ltr"},[`${n}-content-prefix, ${n}-content-suffix`]:{display:"inline-block"},[`${n}-content-prefix`]:{marginInlineEnd:a},[`${n}-content-suffix`]:{marginInlineStart:a}}})}},At=pt("Statistic",o=>{const{fontSizeHeading3:n,fontSize:a,fontFamily:c}=o,d=yt(o,{statisticTitleFontSize:a,statisticContentFontSize:n,statisticFontFamily:c});return[zt(d)]}),lt=()=>({prefixCls:String,decimalSeparator:String,groupSeparator:String,format:String,value:nt([Number,String,Object]),valueStyle:{type:Object,default:void 0},valueRender:St(),formatter:bt(),precision:Number,prefix:Y(),suffix:Y(),title:Y(),loading:vt()}),_=K({compatConfig:{MODE:3},name:"AStatistic",inheritAttrs:!1,props:ot(lt(),{decimalSeparator:".",groupSeparator:",",loading:!1}),slots:Object,setup(o,n){let{slots:a,attrs:c}=n;const{prefixCls:d,direction:x}=gt("statistic",o),[h,m]=At(d);return()=>{var l,g,S,r,p,R,$;const{value:b=0,valueStyle:U,valueRender:O}=o,L=d.value,H=(l=o.title)!==null&&l!==void 0?l:(g=a.title)===null||g===void 0?void 0:g.call(a),P=(S=o.prefix)!==null&&S!==void 0?S:(r=a.prefix)===null||r===void 0?void 0:r.call(a),W=(p=o.suffix)!==null&&p!==void 0?p:(R=a.suffix)===null||R===void 0?void 0:R.call(a),G=($=o.formatter)!==null&&$!==void 0?$:a.formatter;let F=t(st,B({"data-for-update":Date.now()},k(k({},o),{prefixCls:L,value:b,formatter:G})),null);return O&&(F=O(F)),h(t("div",B(B({},c),{},{class:[L,{[`${L}-rtl`]:x.value==="rtl"},c.class,m.value]}),[H&&t("div",{class:`${L}-title`},[H]),t(xt,{paragraph:!1,loading:o.loading},{default:()=>[t("div",{style:U,class:`${L}-content`},[P&&t("span",{class:`${L}-content-prefix`},[P]),F,W&&t("span",{class:`${L}-content-suffix`},[W])])]})]))}}}),Ft=[["Y",1e3*60*60*24*365],["M",1e3*60*60*24*30],["D",1e3*60*60*24],["H",1e3*60*60],["m",1e3*60],["s",1e3],["S",1]];function Et(o,n){let a=o;const c=/\[[^\]]*]/g,d=(n.match(c)||[]).map(l=>l.slice(1,-1)),x=n.replace(c,"[]"),h=Ft.reduce((l,g)=>{let[S,r]=g;if(l.includes(S)){const p=Math.floor(a/r);return a-=p*r,l.replace(new RegExp(`${S}+`,"g"),R=>{const $=R.length;return p.toString().padStart($,"0")})}return l},x);let m=0;return h.replace(c,()=>{const l=d[m];return m+=1,l})}function It(o,n){const{format:a=""}=n,c=new Date(o).getTime(),d=Date.now(),x=Math.max(c-d,0);return Et(x,a)}const Nt=1e3/30;function J(o){return new Date(o).getTime()}const Ot=()=>k(k({},lt()),{value:nt([Number,String,Object]),format:String,onFinish:Function,onChange:Function}),Ht=K({compatConfig:{MODE:3},name:"AStatisticCountdown",props:ot(Ot(),{format:"HH:mm:ss"}),setup(o,n){let{emit:a,slots:c}=n;const d=C(),x=C(),h=()=>{const{value:r}=o;J(r)>=Date.now()?m():l()},m=()=>{if(d.value)return;const r=J(o.value);d.value=setInterval(()=>{x.value.$forceUpdate(),r>Date.now()&&a("change",r-Date.now()),h()},Nt)},l=()=>{const{value:r}=o;d.value&&(clearInterval(d.value),d.value=void 0,J(r)<Date.now()&&a("finish"))},g=r=>{let{value:p,config:R}=r;const{format:$}=o;return It(p,k(k({},R),{format:$}))},S=r=>r;return it(()=>{h()}),Dt(()=>{h()}),wt(()=>{l()}),()=>{const r=o.value;return t(_,B({ref:x},k(k({},_t(o,["onFinish","onChange"])),{value:r,valueRender:S,formatter:g})),c)}}});_.Countdown=Ht;_.install=function(o){return o.component(_.name,_),o.component(_.Countdown.name,_.Countdown),o};_.Countdown;const Pt={class:"work-order-dashboard"},Wt={class:"metric-content"},Mt={class:"metric-icon"},jt={class:"metric-info"},Bt={class:"metric-content"},Ut={class:"metric-icon"},Gt={class:"metric-info"},Vt={class:"metric-content"},Qt={class:"metric-icon"},Xt={class:"metric-info"},Yt={class:"metric-content"},Jt={class:"metric-icon"},Kt={class:"metric-info"},qt=K({name:"CleaningWorkOrderDashboard",__name:"index",setup(o){const n=C(!0),a=C(!0),c=C(),d=C(),x=C(),h=C(),m=C(),l=C(),{renderEcharts:g}=I(c),{renderEcharts:S}=I(d),{renderEcharts:r}=I(x),{renderEcharts:p}=I(h),{renderEcharts:R}=I(m),{renderEcharts:$}=I(l),b=C({pendingCount:0,inProgressCount:0,completedTodayCount:0,completedTotalCount:0,trendData:{dates:[],createdData:[],completedData:[]},hourlyDistribution:{hours:[],data:[]},timeTrendData:{dates:[],responseTimeData:[],completionTimeData:[]},funnelData:[],heatmapData:{days:[],hours:[],data:[]},functionTypeRanking:[]}),U={pendingCount:0,inProgressCount:0,completedTodayCount:0,completedTotalCount:0,trendData:{dates:[],createdData:[],completedData:[]},hourlyDistribution:{hours:[],data:[]},timeTrendData:{dates:[],responseTimeData:[],completionTimeData:[]},funnelData:[],heatmapData:{days:[],hours:[],data:[]},functionTypeRanking:[]};function O(){const{trendData:s}=b.value;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:s.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,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)"}]}},emphasis:{focus:"series"},data:s.createdData,itemStyle:{color:"#1677ff"}},{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(82, 196, 26, 0.4)"},{offset:1,color:"rgba(82, 196, 26, 0.05)"}]}},emphasis:{focus:"series"},data:s.completedData,itemStyle:{color:"#52c41a"}}]}}function L(){const{hourlyDistribution:s}=b.value;return{tooltip:{trigger:"axis",axisPointer:{type:"shadow"},formatter:f=>{const u=f[0];return`${u.name}<br/>工单数: ${u.value}单`}},grid:{left:"3%",right:"4%",bottom:"3%",top:"10%",containLabel:!0},xAxis:[{type:"category",data:s.hours,axisLine:{lineStyle:{color:"#d9d9d9"}},axisLabel:{color:"#8c8c8c",fontSize:11}}],yAxis:[{type:"value",name:"工单数",nameTextStyle:{color:"#8c8c8c",fontSize:12},axisLine:{show:!1},axisLabel:{color:"#8c8c8c"},splitLine:{lineStyle:{color:"#f0f0f0",type:"dashed"}}}],series:[{name:"工单数量",type:"bar",barWidth:"60%",data:s.data,itemStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"#1677ff"},{offset:1,color:"#69b1ff"}]},borderRadius:[4,4,0,0]},emphasis:{itemStyle:{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"#1677ff"},{offset:1,color:"#40a9ff"}]}}}}]}}function H(){const{timeTrendData:s}=b.value;return{tooltip:{trigger:"axis",axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}},formatter:f=>{let u=`${f[0].name}<br/>`;return f.forEach(E=>{u+=`${E.marker} ${E.seriesName}: ${E.value}分钟<br/>`}),u}},legend:{data:["平均响应时间","平均完成时间"],top:"5%",textStyle:{color:"#595959"}},grid:{left:"3%",right:"4%",bottom:"3%",top:"15%",containLabel:!0},xAxis:[{type:"category",boundaryGap:!1,data:s.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:s.responseTimeData,itemStyle:{color:"#1677ff"},lineStyle:{width:2}},{name:"平均完成时间",type:"line",smooth:!0,symbol:"circle",symbolSize:6,yAxisIndex:1,data:s.completionTimeData,itemStyle:{color:"#52c41a"},lineStyle:{width:2}}]}}function P(){const{funnelData:s}=b.value;return{tooltip:{trigger:"item",formatter:"{b}: {c}个 ({d}%)"},series:[{name:"工单处理流程",type:"funnel",left:"10%",top:"5%",bottom:"5%",width:"80%",minSize:"0%",maxSize:"100%",sort:"descending",gap:4,label:{show:!0,position:"inside",formatter:`{b}
|
||
{c}个`,fontSize:13,color:"#fff"},labelLine:{show:!1},itemStyle:{borderColor:"#fff",borderWidth:1},emphasis:{label:{fontSize:15,fontWeight:"bold"}},data:s.map((f,u)=>et(X({},f),{itemStyle:{color:["#1677ff","#40a9ff","#69b1ff","#91caff","#b3d4ff"][u]}}))}]}}function W(){var q;const{heatmapData:s}=b.value,f=s.hours.map((v,T)=>T),u=s.days.map((v,T)=>T),E=[];for(let v=0;v<s.days.length;v++)for(let T=0;T<24;T++){const Q=((q=s.data[v])==null?void 0:q[T])||0;E.push([T,v,Q])}return{tooltip:{position:"top",formatter:v=>{const T=s.days[v.value[1]]||"",Q=s.hours[v.value[0]]||"",rt=v.value[2]||0;return`${T} ${Q}<br/>工单数: ${rt}单`}},grid:{height:"75%",top:"5%",left:"8%",right:"3%",bottom:"15%"},xAxis:{type:"category",data:f,splitArea:{show:!0},axisLabel:{fontSize:9,color:"#8c8c8c",formatter:v=>v%3===0?`${v}:00`:""},axisLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"category",data:u,splitArea:{show:!0},axisLabel:{fontSize:11,color:"#595959",formatter:v=>s.days[v]||""},axisLine:{show:!1},axisTick:{show:!1}},visualMap:{min:0,max:10,calculable:!1,orient:"horizontal",left:"center",bottom:"2%",textStyle:{fontSize:10,color:"#8c8c8c"},itemWidth:8,itemHeight:50,inRange:{color:["#e6f7ff","#bae7ff","#91d5ff","#69c0ff","#40a9ff","#1677ff"]},splitNumber:5,show:!1},series:[{name:"工单数量",type:"heatmap",data:E,label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.3)"}}}]}}function G(){const{functionTypeRanking:s}=b.value;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:s.map(u=>u.functionType),axisLabel:{fontSize:13,color:"#595959"},axisLine:{show:!1},axisTick:{show:!1}},series:[{type:"bar",data:s.map(u=>({value:u.count,itemStyle:{color:f(u.rate),borderRadius:[0,6,6,0]}})),barWidth:18,label:{show:!0,position:"right",fontSize:13,color:"#262626",fontWeight:500,formatter:u=>`${u.value}单`}}]};function f(u){return u>=95?"#52c41a":u>=90?"#1677ff":u>=85?"#faad14":u>=80?"#ff7a45":"#ff4d4f"}}function F(){return at(this,null,function*(){n.value=!0;try{const s=yield Tt();b.value={pendingCount:s.pendingCount,inProgressCount:s.inProgressCount,completedTodayCount:s.completedTodayCount,completedTotalCount:s.completedTotalCount,trendData:s.trendData,hourlyDistribution:s.hourlyDistribution,timeTrendData:s.timeTrendData,funnelData:s.funnelData,heatmapData:s.heatmapData,functionTypeRanking:s.functionTypeRanking},a.value=!1,yield Lt(),g(O()),S(L()),r(H()),p(P()),R(W()),$(G())}catch(s){b.value=X({},U)}finally{n.value=!1}})}let V=null;return it(()=>{F(),V=setInterval(F,3e4)}),kt(()=>{V&&clearInterval(V)}),(s,f)=>($t(),Rt("div",Pt,[t(e(A),{spinning:n.value},{default:i(()=>[t(e(M),{gutter:[12,12],class:"mb-3"},{default:i(()=>[t(e(D),{xs:24,sm:12,lg:6},{default:i(()=>[t(e(w),{class:"metric-card metric-card--pending"},{default:i(()=>[y("div",Wt,[y("div",Mt,[t(e(z),{icon:"solar:clock-circle-bold-duotone"})]),y("div",jt,[f[0]||(f[0]=y("div",{class:"metric-label"},"待处理工单",-1)),t(e(_),{value:b.value.pendingCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#ff4d4f"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(D),{xs:24,sm:12,lg:6},{default:i(()=>[t(e(w),{class:"metric-card metric-card--progress"},{default:i(()=>[y("div",Bt,[y("div",Ut,[t(e(z),{icon:"solar:play-circle-bold-duotone"})]),y("div",Gt,[f[1]||(f[1]=y("div",{class:"metric-label"},"进行中工单",-1)),t(e(_),{value:b.value.inProgressCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#1677ff"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(D),{xs:24,sm:12,lg:6},{default:i(()=>[t(e(w),{class:"metric-card metric-card--completed"},{default:i(()=>[y("div",Vt,[y("div",Qt,[t(e(z),{icon:"solar:check-circle-bold-duotone"})]),y("div",Xt,[f[2]||(f[2]=y("div",{class:"metric-label"},"今日完成",-1)),t(e(_),{value:b.value.completedTodayCount,"value-style":{fontSize:"24px",fontWeight:600,color:"#52c41a"}},null,8,["value"])])])]),_:1})]),_:1}),t(e(D),{xs:24,sm:12,lg:6},{default:i(()=>[t(e(w),{class:"metric-card metric-card--total"},{default:i(()=>[y("div",Yt,[y("div",Jt,[t(e(z),{icon:"solar:document-text-bold-duotone"})]),y("div",Kt,[f[3]||(f[3]=y("div",{class:"metric-label"},"累计完成",-1)),t(e(_),{value:b.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:i(()=>[t(e(D),{xs:24,lg:16},{default:i(()=>[t(e(w),{class:"chart-card",title:"工单趋势(近7天)"},{extra:i(()=>[t(e(j),{title:"展示最近7天的工单新增与完成情况"},{default:i(()=>[t(e(z),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:i(()=>[t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"trendChartRef",ref:c,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(D),{xs:24,lg:8},{default:i(()=>[t(e(w),{class:"chart-card",title:"今日工单时段分布"},{extra:i(()=>[t(e(j),{title:"展示今日24小时各时段的工单数量分布"},{default:i(()=>[t(e(z),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:i(()=>[t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"hourlyChartRef",ref:d,class:"chart-container"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(M),{gutter:[12,12],class:"mb-3"},{default:i(()=>[t(e(D),{xs:24,lg:12},{default:i(()=>[t(e(w),{class:"chart-card",title:"平均耗时趋势(近7天)"},{extra:i(()=>[t(e(j),{title:"展示平均响应时间和平均完成时间的变化趋势"},{default:i(()=>[t(e(z),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:i(()=>[t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"timeTrendChartRef",ref:x,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(D),{xs:24,lg:12},{default:i(()=>[t(e(w),{class:"chart-card",title:"工单处理漏斗"},{extra:i(()=>[t(e(j),{title:"展示工单从创建到完成各环节的转化情况"},{default:i(()=>[t(e(z),{icon:"solar:info-circle-bold-duotone",class:"info-icon"})]),_:1})]),default:i(()=>[t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"funnelChartRef",ref:h,class:"chart-container chart-container--medium"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1}),t(e(M),{gutter:[12,12]},{default:i(()=>[t(e(D),{xs:24,md:12,lg:12},{default:i(()=>[t(e(w),{class:"modern-card modern-card--heatmap"},{default:i(()=>[f[4]||(f[4]=y("div",{class:"modern-header"},[y("span",{class:"modern-title"},"时段热力图(近7天)")],-1)),t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"heatmapChartRef",ref:m,class:"modern-chart"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1}),t(e(D),{xs:24,md:12,lg:12},{default:i(()=>[t(e(w),{class:"modern-card modern-card--ranking"},{default:i(()=>[f[5]||(f[5]=y("div",{class:"modern-header"},[y("span",{class:"modern-title"},"功能类型排行")],-1)),t(e(A),{spinning:a.value},{default:i(()=>[t(e(N),{ref_key:"functionTypeRankingChartRef",ref:l,class:"modern-chart"},null,512)]),_:1},8,["spinning"])]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]))}}),ne=Ct(qt,[["__scopeId","data-v-b202fa51"]]);export{ne as default};
|