import{_ as ot,p as Pe,q as nt,s as dt,h as m,f as I,E as ee,c as f,a,b as d,w as p,v as ce,r as w,j as H,x as rt,o as u,e as v,y as Z,k as R,t as h,F as U,i as A,n as We,z as pe}from"./index-CMZBZO_O.js";import{b as x}from"./index-B4LtVBBd.js";import{i as Be,L as it}from"./index-Bn9PLWWT.js";const ut={class:"dashboard-page"},ct={class:"page-header",style:{display:"flex","justify-content":"space-between","align-items":"flex-end"}},pt={style:{display:"flex",gap:"12px","align-items":"center"}},_t={class:"filter-bar"},mt={class:"two-col-layout"},vt={class:"table-col"},ft={style:{padding:"10px 40px",background:"rgba(0,0,0,0.2)"}},ht={style:{"margin-bottom":"8px","font-weight":"bold",color:"var(--text-secondary)"}},gt={class:"chart-col"},yt={class:"chart-card"},bt={class:"chart-card",style:{"margin-top":"16px"}},wt={class:"filter-bar"},kt={class:"two-col-layout"},xt={class:"table-col"},Dt={class:"chart-col"},Rt={class:"chart-card"},St={class:"chart-card",style:{"margin-top":"16px"}},Mt={class:"filter-bar"},$t={class:"two-col-layout"},Vt={class:"table-col"},jt={style:{padding:"10px 40px",background:"rgba(0,0,0,0.2)"}},Ct={style:{"margin-bottom":"8px","font-weight":"bold",color:"var(--text-secondary)"}},zt={class:"chart-col"},Lt={class:"chart-card"},Yt={class:"chart-card",style:{"margin-top":"16px"}},Et={class:"filter-bar"},Ut={class:"content-card",style:{"margin-top":"16px","overflow-x":"auto"}},At={key:0,class:"matrix-table"},Ot={class:"row-header"},Ft={class:"total-col"},Nt={class:"filter-bar"},Pt={key:0,class:"content-card",style:{"margin-top":"16px","overflow-x":"auto"}},Wt={class:"card-title"},Bt={key:0,class:"grid-table"},Tt={class:"day-weekday"},Gt=["onClick"],Ht=["title"],Zt={class:"cell-hours"},qt={class:"total-cell"},Kt={key:1,class:"two-col-layout",style:{"margin-top":"16px"}},Xt={class:"table-col",style:{flex:"1.5"}},Jt={class:"content-card",style:{"margin-bottom":"0"}},Qt={class:"card-title"},It=["onClick"],ea={class:"day-header"},ta={class:"day-num"},aa={key:0,class:"weekend-tag"},la={class:"day-body"},sa={key:0,class:"status-badge filled"},oa={key:1,class:"status-badge partial"},na={key:2,class:"status-badge unfilled"},da={class:"chart-col",style:{flex:"1","min-width":"320px"}},ra={class:"content-card"},ia={class:"mini-stats-grid"},ua={class:"mini-stat-item green-glow"},ca={class:"value green-text"},pa={class:"mini-stat-item yellow-glow"},_a={class:"value yellow-text"},ma={class:"mini-stat-item red-glow"},va={class:"value red-text"},fa={class:"mini-stat-item purple-glow"},ha={class:"value purple-text"},ga={class:"content-card",style:{"margin-top":"16px"}},ya={class:"card-title"},ba={__name:"Dashboard",setup(wa){const _e=m("sales"),Ce=m([]),S=m([]),me=m(null),ve=m(null),fe=m(null),he=m(null),ge=m(null),ye=m(null);let M=null,$=null,V=null,j=null,C=null,z=null;const te=m(!1),q=(()=>{const t=new Date,e=new Date;e.setMonth(e.getMonth()-1);const l=s=>String(s).padStart(2,"0"),n=s=>`${s.getFullYear()}-${l(s.getMonth()+1)}-${l(s.getDate())}`;return[n(e),n(t)]})(),F=m(q),L=I({dateRange:q}),ze=m([]),Le=m([]),be=m(!1),ae=H(()=>{const t={};return Le.value.forEach(e=>{t[e.sales_id]||(t[e.sales_id]={sales_id:e.sales_id,sales_name:e.sales_name,projects:new Set,rdMap:{},total_hours:0});const l=t[e.sales_id];l.rdMap[e.rd_id]||(l.rdMap[e.rd_id]={rd_name:e.rd_name,total_hours:0,work_days:0}),l.rdMap[e.rd_id].total_hours+=e.total_hours,l.rdMap[e.rd_id].work_days+=e.work_days}),ze.value.forEach(e=>{t[e.sales_id]||(t[e.sales_id]={sales_id:e.sales_id,sales_name:e.sales_name,projects:new Set,rdMap:{},total_hours:0}),t[e.sales_id].projects.add(e.client_id),t[e.sales_id].total_hours+=e.total_hours}),Object.values(t).map(e=>({sales_name:e.sales_name,project_count:e.projects.size,rd_count:Object.keys(e.rdMap).length,total_hours:Math.round(e.total_hours*10)/10,rdList:Object.values(e.rdMap).sort((l,n)=>n.total_hours-l.total_hours)}))});async function Ye(){be.value=!0;try{const t={};L.dateRange&&(t.start_date=L.dateRange[0],t.end_date=L.dateRange[1]);const[e,l]=await Promise.all([x.getSalesStats(t),x.getSalesDetail(t)]);ze.value=e.data,Le.value=l.data,await ce();const n=ae.value.filter(i=>i.total_hours>0).map(i=>({name:i.sales_name,value:i.total_hours}));P(me,M,"sales",n);const s=ae.value.filter(i=>i.total_hours>0);W(he,j,"sales",s.map(i=>i.sales_name),s.map(i=>i.total_hours))}finally{be.value=!1}}const b=I({dateRange:q,user_id:""}),we=m([]),ke=m(!1),N=H(()=>{const t={};return we.value.forEach(e=>{t[e.user_id]||(t[e.user_id]={name:e.user_name,value:0}),t[e.user_id].value+=e.hours}),Object.values(t).filter(e=>e.value>0)});async function Ee(){ke.value=!0;try{const t={};b.dateRange&&(t.start_date=b.dateRange[0],t.end_date=b.dateRange[1]),b.user_id&&(t.user_id=b.user_id);const e=await x.getRdStats(t);we.value=e.data,await ce(),P(ve,$,"rd",N.value),W(ge,C,"rd",N.value.map(l=>l.name),N.value.map(l=>l.value))}finally{ke.value=!1}}const y=I({dateRange:q,sales_id:""}),K=m([]),xe=m(!1);async function Ue(){xe.value=!0;try{const t={};y.dateRange&&(t.start_date=y.dateRange[0],t.end_date=y.dateRange[1]),y.sales_id&&(t.sales_id=y.sales_id);const[e,l]=await Promise.all([x.getProjectStats(t),x.getProjectDetail(t)]),n={};l.data.forEach(r=>{n[r.client_id]||(n[r.client_id]=[]),n[r.client_id].push(r)}),K.value=e.data.map(r=>(r.rdList=n[r.client_id]||[],r)),await ce();const s=K.value.filter(r=>r.total_hours>0).map(r=>({name:r.client_name,value:r.total_hours}));P(fe,V,"project",s);const i=K.value.filter(r=>r.total_hours>0);W(ye,z,"project",i.map(r=>r.client_name),i.map(r=>r.total_hours))}finally{xe.value=!1}}function P(t,e,l,n){if(!t.value||t.value.clientWidth===0)return;e&&e.dispose();let s=Be(t.value,"dark");l==="sales"&&(M=s),l==="rd"&&($=s),l==="project"&&(V=s),s.setOption({backgroundColor:"transparent",tooltip:{trigger:"item",formatter:"{b}: {c}h ({d}%)",confine:!0},legend:{type:"scroll",bottom:10,textStyle:{color:"#94a3b8"}},series:[{type:"pie",radius:["35%","65%"],center:["50%","45%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:8,borderColor:"#1e293b",borderWidth:2},label:{color:"#f1f5f9",fontSize:13},emphasis:{label:{show:!0,fontSize:16,fontWeight:"bold"},itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0,0,0,0.5)"}},data:n}]})}function W(t,e,l,n,s){if(!t.value||t.value.clientWidth===0)return;e&&e.dispose();let i=Be(t.value,"dark");l==="sales"&&(j=i),l==="rd"&&(C=i),l==="project"&&(z=i),i.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis",formatter:r=>`${r[0].name}: ${r[0].value}h`,confine:!0},grid:{left:"3%",right:"4%",bottom:"15%",containLabel:!0},xAxis:{type:"category",data:n,axisLabel:{color:"#94a3b8",interval:0,rotate:n.length>5?30:0,fontSize:12}},yAxis:{type:"value",name:"工时(h)",axisLabel:{color:"#94a3b8"}},series:[{type:"bar",barMaxWidth:50,data:s,itemStyle:{color:new it(0,0,0,1,[{offset:0,color:"#818cf8"},{offset:1,color:"#4f46e5"}]),borderRadius:[4,4,0,0]},label:{show:!0,position:"top",color:"#f1f5f9",fontSize:12,formatter:"{c}h"},markLine:l==="rd"&&s.length>0?{data:[{type:"average",name:"平均值"}],lineStyle:{type:"dashed",color:"#f59e0b",width:2},label:{formatter:"平均: {c}h",position:"end",color:"#f59e0b",fontWeight:"bold"}}:void 0}]})}function Ae(){M==null||M.resize(),$==null||$.resize(),V==null||V.resize(),j==null||j.resize(),C==null||C.resize(),z==null||z.resize()}async function le(t){try{if(t==="all"){te.value=!0;let r={},k="开始",c="至今";F.value&&F.value.length===2&&(r.start_date=F.value[0],r.end_date=F.value[1],k=r.start_date,c=r.end_date);const g=await x.exportAllExcel(r);De(g.data,`总报表_${k}至${c}.xlsx`),ee.success("全导成功"),te.value=!1;return}let e={},l="开始",n="至今",s="";t==="sales"?(s="销售视角",L.dateRange&&L.dateRange.length===2&&(e.start_date=L.dateRange[0],e.end_date=L.dateRange[1],l=e.start_date,n=e.end_date)):t==="rd"?(s="研发视角",b.dateRange&&b.dateRange.length===2&&(e.start_date=b.dateRange[0],e.end_date=b.dateRange[1],l=e.start_date,n=e.end_date)):t==="project"&&(s="项目视角",y.dateRange&&y.dateRange.length===2&&(e.start_date=y.dateRange[0],e.end_date=y.dateRange[1],l=e.start_date,n=e.end_date),y.sales_id&&(e.sales_id=y.sales_id));const i=await x.exportExcel(t,e);De(i.data,`${s}_${l}至${n}.xlsx`),ee.success("导出成功")}catch{te.value=!1,ee.error("导出失败")}}function De(t,e){const l=URL.createObjectURL(new Blob([t])),n=document.createElement("a");n.href=l,n.download=e,n.click(),URL.revokeObjectURL(l)}Pe(_e,t=>{ce(()=>{if(t==="sales"){const e=ae.value.filter(l=>l.total_hours>0);P(me,M,"sales",e.map(l=>({name:l.sales_name,value:l.total_hours}))),W(he,j,"sales",e.map(l=>l.sales_name),e.map(l=>l.total_hours))}else if(t==="rd")P(ve,$,"rd",N.value),W(ge,C,"rd",N.value.map(e=>e.name),N.value.map(e=>e.value));else if(t==="project"){const e=K.value.filter(l=>l.total_hours>0);P(fe,V,"project",e.map(l=>({name:l.client_name,value:l.total_hours}))),W(ye,z,"project",e.map(l=>l.client_name),e.map(l=>l.total_hours))}else t==="matrix"?Ve():t==="calendar"&&(S.value.length&&!_.user_id&&(_.user_id=S.value[0].id),ne().then(()=>{Y.value==="individual"&&T()}))})}),nt(async()=>{window.addEventListener("resize",Ae);try{const[t,e]=await Promise.all([x.getSalesUsers(),x.getRdUsers()]);Ce.value=t.data,S.value=e.data,S.value.length&&!_.user_id&&(_.user_id=S.value[0].id)}catch{}Ye(),Ee(),Ue(),Ve(),ne().then(()=>{Y.value==="individual"&&T()})}),dt(()=>{window.removeEventListener("resize",Ae),M==null||M.dispose(),$==null||$.dispose(),V==null||V.dispose(),j==null||j.dispose(),C==null||C.dispose(),z==null||z.dispose()});const Y=m("grid"),se=m(!1),oe=m(new Date().toLocaleDateString("sv-SE",{timeZone:"Asia/Shanghai"})),_=I({month:new Date().toLocaleDateString("sv-SE",{timeZone:"Asia/Shanghai"}).substring(0,7),user_id:""}),X=m(new Date),J=m(new Date().toLocaleDateString("sv-SE",{timeZone:"Asia/Shanghai"})),Re=m([]),Se=m([]),Me=m({}),Te=H(()=>{const t=S.value.find(e=>e.id===_.user_id);return t?t.realname:""}),Oe=H(()=>{const[t,e]=_.month.split("-").map(Number),l=new Date(t,e,0).getDate();return Array.from({length:l},(n,s)=>s+1)}),Ge=t=>{const[e,l]=_.month.split("-").map(Number),n=new Date(e,l-1,t);return["日","一","二","三","四","五","六"][n.getDay()]},He=(t,e)=>{var s;const l=`${_.month}-${String(e).padStart(2,"0")}`,n=((s=t.dates[l])==null?void 0:s.hours)||0;return n>0?n:""},Ze=(t,e)=>{var s;const l=`${_.month}-${String(e).padStart(2,"0")}`,n=((s=t.dates[l])==null?void 0:s.hours)||0;return n>=8?"cell-filled":n>0?"cell-partial":l{var s;const l=`${_.month}-${String(e).padStart(2,"0")}`,n=((s=t.dates[l])==null?void 0:s.hours)||0;return n>0?`${t.user_name} 在 ${l} 已填报 ${n}h`:lnew Date(t+"T00:00:00").getDay(),Q=t=>{const e=Ke(t);return e===0||e===6},B=t=>{var e;return((e=Me.value[t])==null?void 0:e.hours)||0},Xe=t=>t>=oe.value||Q(t)?!1:B(t)===0,Fe=H(()=>{var t;return((t=Me.value[J.value])==null?void 0:t.list)||[]});async function ne(){se.value=!0;try{const[t,e]=_.month.split("-"),l=new Date(t,e,0).getDate(),n=`${_.month}-01`,s=`${_.month}-${String(l).padStart(2,"0")}`,i=await x.getRdStats({start_date:n,end_date:s});Re.value=i.data||[],Je()}catch{ee.error("获取填报日历数据失败")}finally{se.value=!1}}function Je(){const t={};S.value.forEach(e=>{t[e.id]={user_id:e.id,user_name:e.realname,dates:{},total_hours:0}}),Re.value.forEach(e=>{const l=e.user_id;t[l]||(t[l]={user_id:l,user_name:e.user_name||"未知研发",dates:{},total_hours:0});const n=e.work_date;t[l].dates[n]||(t[l].dates[n]={hours:0,records:[]}),t[l].dates[n].hours+=e.hours,t[l].dates[n].records.push(e),t[l].total_hours+=e.hours}),Se.value=Object.values(t).map(e=>(e.total_hours=Math.round(e.total_hours*10)/10,e))}function Qe(){ne().then(()=>{Y.value==="individual"&&T()})}function Ie(t){_.user_id=t,Y.value="individual",T()}function T(){if(!_.user_id)return;const t={};Re.value.forEach(s=>{s.user_id===_.user_id&&(t[s.work_date]||(t[s.work_date]={hours:0,list:[]}),t[s.work_date].hours+=s.hours,t[s.work_date].list.push(s))}),Me.value=t;const[e,l]=_.month.split("-").map(Number),n=X.value;(n.getFullYear()!==e||n.getMonth()+1!==l)&&(X.value=new Date(e,l-1,1)),tt()}function et(t){J.value=t}function tt(){const t=new Date().toLocaleDateString("sv-SE",{timeZone:"Asia/Shanghai"});t.startsWith(_.month)?J.value=t:J.value=`${_.month}-01`}Pe(X,t=>{if(t&&Y.value==="individual"){const e=t.getFullYear(),l=String(t.getMonth()+1).padStart(2,"0"),n=`${e}-${l}`;_.month!==n&&(_.month=n,ne().then(()=>{T()}))}});const de=H(()=>{const[t,e]=_.month.split("-").map(Number),l=new Date(t,e,0).getDate();let n=0,s=0,i=0,r=0;for(let k=1;k<=l;k++){const c=`${_.month}-${String(k).padStart(2,"0")}`,g=B(c);r+=g,g>=8?n++:g>0?s++:cc.sub_project?`${c.client_name}-${c.sub_project}`:c.client_name));re.value=[...n].sort();const s={};l.forEach(c=>{const g=c.sub_project?`${c.client_name}-${c.sub_project}`:c.client_name;s[c.user_name]||(s[c.user_name]={}),s[c.user_name][g]=(s[c.user_name][g]||0)+c.hours});const i=Object.entries(s).map(([c,g])=>{const O=Object.values(g).reduce((ue,je)=>ue+je,0);return{label:c,cells:g,total:Math.round(O*10)/10}}),r={};re.value.forEach(c=>{r[c]=Math.round(i.reduce((g,O)=>g+(O.cells[c]||0),0)*10)/10});const k=Math.round(i.reduce((c,g)=>c+g.total,0)*10)/10;i.push({label:"合计",cells:r,total:k}),ie.value=i}finally{$e.value=!1}}async function at(){const t={};let e="开始",l="至今";D.dateRange&&D.dateRange.length===2&&(t.start_date=D.dateRange[0],t.end_date=D.dateRange[1],e=t.start_date,l=t.end_date);const n=await x.exportMatrixExcel(t);De(n.data,`研发工时汇总_${e}至${l}.xlsx`),ee.success("导出成功")}return(t,e)=>{const l=w("el-date-picker"),n=w("el-button"),s=w("el-table-column"),i=w("el-table"),r=w("el-tab-pane"),k=w("el-option"),c=w("el-select"),g=w("el-tag"),O=w("el-empty"),ue=w("el-radio-button"),je=w("el-radio-group"),lt=w("el-calendar"),st=w("el-tabs"),G=rt("loading");return u(),f("div",ut,[a("div",ct,[e[17]||(e[17]=a("div",null,[a("h1",null,"全局统计看板"),a("p",null,"多维度查看工时数据:销售视角 / 研发视角 / 项目视角")],-1)),a("div",pt,[d(l,{modelValue:F.value,"onUpdate:modelValue":e[0]||(e[0]=o=>F.value=o),type:"daterange","range-separator":"至","start-placeholder":"全部时间起","end-placeholder":"全部时间止","value-format":"YYYY-MM-DD",size:"large"},null,8,["modelValue"]),d(n,{type:"success",onClick:e[1]||(e[1]=o=>le("all")),loading:te.value,size:"large"},{default:p(()=>[...e[16]||(e[16]=[v(" 📊 总导出 (All in One) ",-1)])]),_:1},8,["loading"])])]),d(st,{modelValue:_e.value,"onUpdate:modelValue":e[15]||(e[15]=o=>_e.value=o),type:"border-card",class:"dashboard-tabs"},{default:p(()=>[d(r,{label:"📈 销售视角",name:"sales"},{default:p(()=>[a("div",_t,[d(l,{modelValue:L.dateRange,"onUpdate:modelValue":e[2]||(e[2]=o=>L.dateRange=o),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),d(n,{type:"primary",onClick:Ye},{default:p(()=>[...e[18]||(e[18]=[v("查询",-1)])]),_:1}),d(n,{onClick:e[3]||(e[3]=o=>le("sales"))},{default:p(()=>[...e[19]||(e[19]=[v("📥 导出该页",-1)])]),_:1})]),a("div",mt,[a("div",vt,[e[20]||(e[20]=a("div",{class:"section-title"},"📋 销售人员汇总 (点击展开查看研发明细)",-1)),Z((u(),R(i,{data:ae.value,stripe:"",style:{width:"100%"},"row-key":"sales_name"},{default:p(()=>[d(s,{type:"expand"},{default:p(o=>[a("div",ft,[a("div",ht," [ "+h(o.row.sales_name)+" ] 的研发工时消耗明细: ",1),d(i,{data:o.row.rdList,border:"",style:{width:"100%"},size:"small"},{default:p(()=>[d(s,{prop:"rd_name",label:"研发人员",width:"150"}),d(s,{prop:"total_hours",label:"消耗工时(h)",width:"120"}),d(s,{prop:"work_days",label:"工作天数",width:"120"})]),_:1},8,["data"])])]),_:1}),d(s,{prop:"sales_name",label:"销售人员","min-width":"140"}),d(s,{prop:"project_count",label:"项目数","min-width":"100"}),d(s,{prop:"rd_count",label:"涉及研发","min-width":"120"}),d(s,{prop:"total_hours",label:"总消耗工时(h)","min-width":"130",sortable:""})]),_:1},8,["data"])),[[G,be.value]])]),a("div",gt,[a("div",yt,[e[21]||(e[21]=a("div",{class:"chart-title"},"销售占用工时占比(饼图)",-1)),a("div",{ref_key:"salesChartRef",ref:me,class:"big-chart"},null,512)]),a("div",bt,[e[22]||(e[22]=a("div",{class:"chart-title"},"各销售工时对比(柱状图)",-1)),a("div",{ref_key:"salesBarRef",ref:he,class:"big-chart"},null,512)])])])]),_:1}),d(r,{label:"👨‍💻 研发视角",name:"rd"},{default:p(()=>[a("div",wt,[d(l,{modelValue:b.dateRange,"onUpdate:modelValue":e[4]||(e[4]=o=>b.dateRange=o),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),d(c,{modelValue:b.user_id,"onUpdate:modelValue":e[5]||(e[5]=o=>b.user_id=o),placeholder:"全部研发",clearable:"",size:"default",style:{width:"150px"}},{default:p(()=>[(u(!0),f(U,null,A(S.value,o=>(u(),R(k,{key:o.id,label:o.realname,value:o.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),d(n,{type:"primary",onClick:Ee},{default:p(()=>[...e[23]||(e[23]=[v("查询",-1)])]),_:1}),d(n,{onClick:e[6]||(e[6]=o=>le("rd"))},{default:p(()=>[...e[24]||(e[24]=[v("📥 导出该页",-1)])]),_:1})]),a("div",kt,[a("div",xt,[e[25]||(e[25]=a("div",{class:"section-title"},"📋 研发人员填报明细",-1)),Z((u(),R(i,{data:we.value,stripe:"",style:{width:"100%"}},{default:p(()=>[d(s,{prop:"user_name",label:"研发人员","min-width":"120"}),d(s,{prop:"client_name",label:"客户/项目","min-width":"180"}),d(s,{prop:"work_date",label:"日期","min-width":"120"}),d(s,{prop:"hours",label:"工时(h)","min-width":"100"}),d(s,{prop:"remark",label:"备注","min-width":"180"})]),_:1},8,["data"])),[[G,ke.value]])]),a("div",Dt,[a("div",Rt,[e[26]||(e[26]=a("div",{class:"chart-title"},"研发人员工时产出占比(饼图)",-1)),a("div",{ref_key:"rdChartRef",ref:ve,class:"big-chart"},null,512)]),a("div",St,[e[27]||(e[27]=a("div",{class:"chart-title"},"各研发人员工时对比(柱状图)",-1)),a("div",{ref_key:"rdBarRef",ref:ge,class:"big-chart"},null,512)])])])]),_:1}),d(r,{label:"🏢 项目视角",name:"project"},{default:p(()=>[a("div",Mt,[d(l,{modelValue:y.dateRange,"onUpdate:modelValue":e[7]||(e[7]=o=>y.dateRange=o),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default",style:{"margin-right":"12px"}},null,8,["modelValue"]),d(c,{modelValue:y.sales_id,"onUpdate:modelValue":e[8]||(e[8]=o=>y.sales_id=o),clearable:"",placeholder:"全部销售",style:{width:"140px","margin-right":"12px"}},{default:p(()=>[(u(!0),f(U,null,A(Ce.value,o=>(u(),R(k,{key:o.id,label:o.realname,value:o.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),d(n,{type:"primary",onClick:Ue},{default:p(()=>[...e[28]||(e[28]=[v("查询",-1)])]),_:1}),d(n,{onClick:e[9]||(e[9]=o=>le("project"))},{default:p(()=>[...e[29]||(e[29]=[v("📥 导出该页",-1)])]),_:1})]),a("div",$t,[a("div",Vt,[e[30]||(e[30]=a("div",{class:"section-title"},"📋 项目总览 (点击展开查看研发明细)",-1)),Z((u(),R(i,{data:K.value,stripe:"",style:{width:"100%"},"row-key":"client_id"},{default:p(()=>[d(s,{type:"expand"},{default:p(o=>[a("div",jt,[a("div",Ct," [ "+h(o.row.client_name)+" ] 的参与研发明细: ",1),d(i,{data:o.row.rdList,border:"",style:{width:"100%"},size:"small"},{default:p(()=>[d(s,{prop:"rd_name",label:"研发人员",width:"150"}),d(s,{prop:"total_hours",label:"消耗工时(h)",width:"120",sortable:""}),d(s,{prop:"work_days",label:"工作天数",width:"120"}),d(s,{prop:"first_date",label:"首次介入",width:"120"}),d(s,{prop:"last_date",label:"最近介入",width:"120"})]),_:1},8,["data"])])]),_:1}),d(s,{prop:"client_name",label:"客户/项目","min-width":"200"}),d(s,{prop:"sales_name",label:"所属销售","min-width":"120"}),d(s,{prop:"client_status",label:"状态","min-width":"90"},{default:p(({row:o})=>[d(g,{type:o.client_status===1?"success":"info",effect:"dark",round:""},{default:p(()=>[v(h(o.client_status===1?"进行中":"已结算"),1)]),_:2},1032,["type"])]),_:1}),d(s,{prop:"total_hours",label:"总工时(h)","min-width":"110",sortable:""}),d(s,{prop:"rd_count",label:"研发人数","min-width":"100"})]),_:1},8,["data"])),[[G,xe.value]])]),a("div",zt,[a("div",Lt,[e[31]||(e[31]=a("div",{class:"chart-title"},"项目工时分布(饼图)",-1)),a("div",{ref_key:"projectChartRef",ref:fe,class:"big-chart"},null,512)]),a("div",Yt,[e[32]||(e[32]=a("div",{class:"chart-title"},"各项目工时对比(柱状图)",-1)),a("div",{ref_key:"projectBarRef",ref:ye,class:"big-chart"},null,512)])])])]),_:1}),d(r,{label:"📊 研发工时汇总",name:"matrix"},{default:p(()=>[a("div",Et,[d(l,{modelValue:D.dateRange,"onUpdate:modelValue":e[10]||(e[10]=o=>D.dateRange=o),type:"daterange","range-separator":"至","start-placeholder":"开始日期","end-placeholder":"结束日期","value-format":"YYYY-MM-DD",size:"default"},null,8,["modelValue"]),d(n,{type:"primary",onClick:Ve},{default:p(()=>[...e[33]||(e[33]=[v("查询",-1)])]),_:1}),d(n,{onClick:at},{default:p(()=>[...e[34]||(e[34]=[v("📥 导出该页",-1)])]),_:1})]),Z((u(),f("div",Ut,[ie.value.length?(u(),f("table",At,[a("thead",null,[a("tr",null,[e[35]||(e[35]=a("th",{class:"row-header"},"研发人员",-1)),(u(!0),f(U,null,A(re.value,o=>(u(),f("th",{key:o},h(o),1))),128)),e[36]||(e[36]=a("th",{class:"total-col"},"合计",-1))])]),a("tbody",null,[(u(!0),f(U,null,A(ie.value,(o,E)=>(u(),f("tr",{key:E,class:We({"total-row":E===ie.value.length-1})},[a("td",Ot,h(o.label),1),(u(!0),f(U,null,A(re.value,Ne=>(u(),f("td",{key:Ne},h(o.cells[Ne]||"-"),1))),128)),a("td",Ft,h(o.total),1)],2))),128))])])):(u(),R(O,{key:1,description:"暂无工时数据"}))])),[[G,$e.value]])]),_:1}),d(r,{label:"📅 填报日历",name:"calendar"},{default:p(()=>[a("div",Nt,[d(l,{modelValue:_.month,"onUpdate:modelValue":e[11]||(e[11]=o=>_.month=o),type:"month",placeholder:"选择月份","value-format":"YYYY-MM",size:"default",clearable:!1,onChange:Qe,style:{width:"140px","margin-right":"12px"}},null,8,["modelValue"]),d(je,{modelValue:Y.value,"onUpdate:modelValue":e[12]||(e[12]=o=>Y.value=o),size:"default",style:{"margin-right":"12px"}},{default:p(()=>[d(ue,{value:"grid"},{default:p(()=>[...e[37]||(e[37]=[v("全员概览",-1)])]),_:1}),d(ue,{value:"individual"},{default:p(()=>[...e[38]||(e[38]=[v("个人日历",-1)])]),_:1})]),_:1},8,["modelValue"]),Y.value==="individual"?(u(),R(c,{key:0,modelValue:_.user_id,"onUpdate:modelValue":e[13]||(e[13]=o=>_.user_id=o),placeholder:"选择研发人员",size:"default",style:{width:"150px"},onChange:T},{default:p(()=>[(u(!0),f(U,null,A(S.value,o=>(u(),R(k,{key:o.id,label:o.realname,value:o.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])):pe("",!0)]),Y.value==="grid"?Z((u(),f("div",Pt,[a("div",Wt,[a("span",null,"👥 R&D 全员填报状态矩阵 ("+h(_.month)+")",1),e[39]||(e[39]=a("div",{class:"calendar-legends"},[a("span",{class:"legend-item"},[a("span",{class:"dot green"}),v("已满8h")]),a("span",{class:"legend-item"},[a("span",{class:"dot yellow"}),v("未满8h")]),a("span",{class:"legend-item"},[a("span",{class:"dot red"}),v("漏填报")]),a("span",{class:"legend-item"},[a("span",{class:"dot gray"}),v("周末/未到期")])],-1))]),Se.value.length?(u(),f("table",Bt,[a("thead",null,[a("tr",null,[e[40]||(e[40]=a("th",{class:"name-header"},"姓名",-1)),(u(!0),f(U,null,A(Oe.value,o=>(u(),f("th",{key:o,class:"day-col"},[v(h(o)+" ",1),a("span",Tt,h(Ge(o)),1)]))),128)),e[41]||(e[41]=a("th",{class:"total-header"},"累计工时",-1))])]),a("tbody",null,[(u(!0),f(U,null,A(Se.value,o=>(u(),f("tr",{key:o.user_id,class:"grid-row"},[a("td",{class:"name-header clickable",onClick:E=>Ie(o.user_id)},[v(h(o.user_name)+" ",1),e[42]||(e[42]=a("span",{class:"arrow-tip"},"📅",-1))],8,Gt),(u(!0),f(U,null,A(Oe.value,E=>(u(),f("td",{key:E,class:We(["status-cell",Ze(o,E)]),title:qe(o,E)},[a("span",Zt,h(He(o,E)),1)],10,Ht))),128)),a("td",qt,h(o.total_hours)+"h",1)]))),128))])])):(u(),R(O,{key:1,description:"暂无研发人员数据"}))])),[[G,se.value]]):Z((u(),f("div",Kt,[a("div",Xt,[a("div",Jt,[a("div",Qt,[a("span",null,"📅 "+h(Te.value)+" 的个人日历 ("+h(_.month)+")",1),e[43]||(e[43]=a("div",{class:"calendar-legends"},[a("span",{class:"legend-item"},[a("span",{class:"dot green"}),v("已满8h")]),a("span",{class:"legend-item"},[a("span",{class:"dot yellow"}),v("未满8h")]),a("span",{class:"legend-item"},[a("span",{class:"dot red"}),v("漏填")]),a("span",{class:"legend-item"},[a("span",{class:"dot gray"}),v("周末/未到期")])],-1))]),d(lt,{modelValue:X.value,"onUpdate:modelValue":e[14]||(e[14]=o=>X.value=o)},{"date-cell":p(({data:o})=>[a("div",{class:"day-cell-content",onClick:E=>et(o.day)},[a("div",ea,[a("span",ta,h(o.day.split("-")[2]),1),Q(o.day)?(u(),f("span",aa,"休")):pe("",!0)]),a("div",la,[B(o.day)>=8?(u(),f("div",sa,h(B(o.day))+"h ",1)):B(o.day)>0?(u(),f("div",oa,h(B(o.day))+"h ",1)):Xe(o.day)?(u(),f("div",na," 未填报 ")):pe("",!0)])],8,It)]),_:1},8,["modelValue"])])]),a("div",da,[a("div",ra,[e[52]||(e[52]=a("div",{class:"card-title"},"📊 月度数据汇总",-1)),a("div",ia,[a("div",ua,[e[45]||(e[45]=a("div",{class:"label"},"满额填报",-1)),a("div",ca,[v(h(de.value.fullDays),1),e[44]||(e[44]=a("span",{class:"unit"},"天",-1))])]),a("div",pa,[e[47]||(e[47]=a("div",{class:"label"},"部分填报",-1)),a("div",_a,[v(h(de.value.partialDays),1),e[46]||(e[46]=a("span",{class:"unit"},"天",-1))])]),a("div",ma,[e[49]||(e[49]=a("div",{class:"label"},"漏填工作日",-1)),a("div",va,[v(h(de.value.unfilledDays),1),e[48]||(e[48]=a("span",{class:"unit"},"天",-1))])]),a("div",fa,[e[51]||(e[51]=a("div",{class:"label"},"累计总工时",-1)),a("div",ha,[v(h(de.value.totalHours),1),e[50]||(e[50]=a("span",{class:"unit"},"小时",-1))])])])]),a("div",ga,[a("div",ya,"📋 "+h(J.value)+" 工时明细",1),d(i,{data:Fe.value,stripe:"",style:{width:"100%"},size:"small"},{default:p(()=>[d(s,{prop:"client_name",label:"客户/项目","min-width":"130"}),d(s,{prop:"hours",label:"工时",width:"70"}),d(s,{prop:"remark",label:"备注","min-width":"120","show-overflow-tooltip":""})]),_:1},8,["data"]),Fe.value.length?pe("",!0):(u(),R(O,{key:0,description:"当天暂无工时记录","image-size":50}))])])])),[[G,se.value]])]),_:1})]),_:1},8,["modelValue"])])}}},Sa=ot(ba,[["__scopeId","data-v-3831643f"]]);export{Sa as default};