Files
2026-06-04 11:01:29 +08:00

2 lines
6.5 KiB
JavaScript

import{p as H,q as J,c as C,a as i,b as a,w as r,h as d,s as P,r as u,f as L,v as K,o as c,F as q,i as A,k as R,e as f,x as E,t as Q,E as I}from"./index-NywRioUE.js";import{b}from"./index-IKxiqY7O.js";import{i as X}from"./index-Bn9PLWWT.js";const Z={class:"filter-bar"},ee={class:"filter-bar"},ae={class:"filter-bar"},te={class:"content-card",style:{"margin-top":"20px"}},ne={__name:"Dashboard",setup(le){const w=d("sales"),M=d([]),B=d([]),k=d(null);let h=null;const s=L({dateRange:null,sales_id:""}),z=d([]),V=d(!1),n=L({dateRange:null,user_id:""}),F=d([]),x=d(!1),p=L({dateRange:null}),y=d([]),D=d(!1);async function O(){V.value=!0;try{const t={};s.dateRange&&(t.start_date=s.dateRange[0],t.end_date=s.dateRange[1]),s.sales_id&&(t.sales_id=s.sales_id);const e=await b.getSalesStats(t);z.value=e.data}finally{V.value=!1}}async function T(){x.value=!0;try{const t={};n.dateRange&&(t.start_date=n.dateRange[0],t.end_date=n.dateRange[1]),n.user_id&&(t.user_id=n.user_id);const e=await b.getRdStats(t);F.value=e.data}finally{x.value=!1}}async function $(){D.value=!0;try{const t={};p.dateRange&&(t.start_date=p.dateRange[0],t.end_date=p.dateRange[1]);const e=await b.getProjectStats(t);y.value=e.data,await P(),N()}finally{D.value=!1}}function N(){if(!k.value)return;h||(h=X(k.value,"dark"));const t=y.value.filter(e=>e.total_hours>0);h.setOption({backgroundColor:"transparent",tooltip:{trigger:"item",formatter:"{b}: {c}h ({d}%)",appendToBody:!0,confine:!1},legend:{type:"scroll",bottom:0,textStyle:{color:"#94a3b8"}},series:[{type:"pie",radius:["40%","70%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:8,borderColor:"#1e293b",borderWidth:2},label:{color:"#f1f5f9"},data:t.map(e=>({name:e.client_name,value:e.total_hours}))}]})}async function U(t){try{let e={};t==="sales"&&s.dateRange?(e.start_date=s.dateRange[0],e.end_date=s.dateRange[1]):t==="rd"&&n.dateRange?(e.start_date=n.dateRange[0],e.end_date=n.dateRange[1]):t==="project"&&p.dateRange&&(e.start_date=p.dateRange[0],e.end_date=p.dateRange[1]);const v=await b.exportExcel(t,e),g=URL.createObjectURL(new Blob([v.data])),m=document.createElement("a");m.href=g,m.download=`${t}_export.xlsx`,m.click(),URL.revokeObjectURL(g),I.success("导出成功")}catch{I.error("导出失败")}}return H(w,t=>{t==="project"&&y.value.length>0&&P(N)}),J(async()=>{try{const[t,e]=await Promise.all([b.getSalesUsers(),b.getRdUsers()]);M.value=t.data,B.value=e.data}catch{}O(),T(),$()}),(t,e)=>{const v=u("el-date-picker"),g=u("el-option"),m=u("el-select"),_=u("el-button"),o=u("el-table-column"),S=u("el-table"),Y=u("el-tab-pane"),W=u("el-tag"),G=u("el-tabs"),j=K("loading");return c(),C("div",null,[e[16]||(e[16]=i("div",{class:"page-header"},[i("h1",null,"全局统计看板"),i("p",null,"多维度查看工时数据:销售视角 / 研发视角 / 项目视角")],-1)),a(G,{modelValue:w.value,"onUpdate:modelValue":e[8]||(e[8]=l=>w.value=l),type:"border-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)","border-radius":"var(--radius)"}},{default:r(()=>[a(Y,{label:"📈 销售视角",name:"sales"},{default:r(()=>[i("div",Z,[a(v,{modelValue:s.dateRange,"onUpdate:modelValue":e[0]||(e[0]=l=>s.dateRange=l),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),a(m,{modelValue:s.sales_id,"onUpdate:modelValue":e[1]||(e[1]=l=>s.sales_id=l),placeholder:"选择销售",clearable:"",size:"default",style:{width:"150px"}},{default:r(()=>[(c(!0),C(q,null,A(M.value,l=>(c(),R(g,{key:l.id,label:l.realname,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),a(_,{type:"primary",onClick:O},{default:r(()=>[...e[9]||(e[9]=[f("查询",-1)])]),_:1}),a(_,{onClick:e[2]||(e[2]=l=>U("sales"))},{default:r(()=>[...e[10]||(e[10]=[f("📥 导出Excel",-1)])]),_:1})]),E((c(),R(S,{data:z.value,stripe:""},{default:r(()=>[a(o,{prop:"sales_name",label:"销售人员",width:"120"}),a(o,{prop:"client_name",label:"客户/项目",width:"180"}),a(o,{prop:"work_date",label:"日期",width:"120"}),a(o,{prop:"total_hours",label:"工时(h)",width:"100"})]),_:1},8,["data"])),[[j,V.value]])]),_:1}),a(Y,{label:"👨‍💻 研发视角",name:"rd"},{default:r(()=>[i("div",ee,[a(v,{modelValue:n.dateRange,"onUpdate:modelValue":e[3]||(e[3]=l=>n.dateRange=l),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),a(m,{modelValue:n.user_id,"onUpdate:modelValue":e[4]||(e[4]=l=>n.user_id=l),placeholder:"选择研发",clearable:"",size:"default",style:{width:"150px"}},{default:r(()=>[(c(!0),C(q,null,A(B.value,l=>(c(),R(g,{key:l.id,label:l.realname,value:l.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),a(_,{type:"primary",onClick:T},{default:r(()=>[...e[11]||(e[11]=[f("查询",-1)])]),_:1}),a(_,{onClick:e[5]||(e[5]=l=>U("rd"))},{default:r(()=>[...e[12]||(e[12]=[f("📥 导出Excel",-1)])]),_:1})]),E((c(),R(S,{data:F.value,stripe:""},{default:r(()=>[a(o,{prop:"user_name",label:"研发人员",width:"120"}),a(o,{prop:"client_name",label:"客户/项目",width:"180"}),a(o,{prop:"work_date",label:"日期",width:"120"}),a(o,{prop:"hours",label:"工时(h)",width:"100"}),a(o,{prop:"remark",label:"备注","min-width":"150"})]),_:1},8,["data"])),[[j,x.value]])]),_:1}),a(Y,{label:"🏢 项目视角",name:"project"},{default:r(()=>[i("div",ae,[a(v,{modelValue:p.dateRange,"onUpdate:modelValue":e[6]||(e[6]=l=>p.dateRange=l),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),a(_,{type:"primary",onClick:$},{default:r(()=>[...e[13]||(e[13]=[f("查询",-1)])]),_:1}),a(_,{onClick:e[7]||(e[7]=l=>U("project"))},{default:r(()=>[...e[14]||(e[14]=[f("📥 导出Excel",-1)])]),_:1})]),E((c(),R(S,{data:y.value,stripe:""},{default:r(()=>[a(o,{prop:"client_name",label:"客户/项目",width:"200"}),a(o,{prop:"sales_name",label:"所属销售",width:"120"}),a(o,{prop:"client_status",label:"状态",width:"100"},{default:r(({row:l})=>[a(W,{type:l.client_status===1?"success":"info",effect:"dark",round:""},{default:r(()=>[f(Q(l.client_status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),a(o,{prop:"total_hours",label:"总工时(h)",width:"120"}),a(o,{prop:"rd_count",label:"研发人数",width:"100"})]),_:1},8,["data"])),[[j,D.value]]),i("div",te,[e[15]||(e[15]=i("div",{class:"card-title"},"项目工时分布",-1)),i("div",{ref_key:"chartRef",ref:k,class:"chart-container"},null,512)])]),_:1})]),_:1},8,["modelValue"])])}}};export{ne as default};