Files
accounting/client/dist/assets/CategoryPieChart-DcwJBwPs.js
2026-03-26 01:23:19 +08:00

2 lines
4.0 KiB
JavaScript
Executable File

import{ax as O,e as v,H as f,L as m,P as s,M as _,O as w,Z as u,Y as C,F as k,ab as z,X as B,ag as x,j as $,k as N,a3 as I}from"./vue-Gs2e-20-.js";import{b as g,s as h,_ as F}from"./index-jY687wPe.js";import{i as M}from"./echarts-Bn9PLWWT.js";const Q=O("statistics",()=>{const t=v({initial_balance:0,total_income:0,total_expense:0,current_balance:0,userBalances:[]}),c=v(null),n=v(!1);async function a(){const e=await g.get();t.value=e}async function d(e){const l=await g.update(e);t.value={...t.value,...l},await a()}async function y(e,l){await g.updateUser(e,l),await a()}async function i(e){n.value=!0;try{c.value=await h.monthly(e)}finally{n.value=!1}}async function r(e){return await h.daily(e)}async function b(e){return await h.weekly(e)}async function S(e){return await h.yearly(e)}async function o(e,l){return await h.trend(e,l)}return{balanceInfo:t,monthlyStats:c,loading:n,fetchBalance:a,updateInitialBalance:d,updateUserInitialBalance:y,fetchMonthlyStats:i,fetchDailyStats:r,fetchWeeklyStats:b,fetchYearlyStats:S,fetchTrend:o}}),R={class:"summary-container"},j={class:"summary-card income"},E={class:"card-icon"},T={class:"card-content"},V={class:"card-label"},W={class:"card-amount mono-number"},A={key:0,class:"user-pills"},P={class:"summary-card expense"},U={class:"card-icon"},D={class:"card-content"},Y={class:"card-label"},H={class:"card-amount mono-number"},X={key:0,class:"user-pills"},Z={__name:"SummaryCards",props:{income:{type:Number,default:0},expense:{type:Number,default:0},userStats:{type:Object,default:()=>({})},periodLabel:{type:String,default:"本月"}},setup(t){return(c,n)=>{const a=x("Top"),d=x("el-icon"),y=x("Bottom");return f(),m("div",R,[s("div",j,[s("div",E,[_(d,null,{default:w(()=>[_(a)]),_:1})]),s("div",T,[s("div",V,u(t.periodLabel)+"收入",1),s("div",W,[n[0]||(n[0]=s("span",{class:"symbol"},"¥",-1)),C(u(t.income.toFixed(2)),1)]),Object.keys(t.userStats).length>0?(f(),m("div",A,[(f(!0),m(k,null,z(t.userStats,(i,r)=>(f(),m("span",{key:r,class:"pill"},u(r)+": ¥"+u(i.income.toFixed(0)),1))),128))])):B("",!0)])]),s("div",P,[s("div",U,[_(d,null,{default:w(()=>[_(y)]),_:1})]),s("div",D,[s("div",Y,u(t.periodLabel)+"支出",1),s("div",H,[n[1]||(n[1]=s("span",{class:"symbol"},"¥",-1)),C(u(t.expense.toFixed(2)),1)]),Object.keys(t.userStats).length>0?(f(),m("div",X,[(f(!0),m(k,null,z(t.userStats,(i,r)=>(f(),m("span",{key:r,class:"pill"},u(r)+": ¥"+u(i.expense.toFixed(0)),1))),128))])):B("",!0)])])])}}},ee=F(Z,[["__scopeId","data-v-e3532072"]]),q={__name:"CategoryPieChart",props:{data:{type:Array,default:()=>[]},title:{type:String,default:"支出分类"}},setup(t){const c=t,n=v(null);let a=null;function d(){if(!n.value)return;a||(a=M(n.value));const i=window.innerWidth<=768,r=i?{orient:"horizontal",bottom:0,left:"center",textStyle:{fontSize:11},type:"scroll"}:{orient:"vertical",right:10,top:"center",textStyle:{fontSize:12}},b=i?["35%","55%"]:["40%","70%"],S=i?["50%","45%"]:["40%","55%"];a.setOption({title:{text:c.title,left:"center",textStyle:{fontSize:14,color:"#606266"}},tooltip:{trigger:"item",confine:!0,formatter:o=>{const e=c.data.find(p=>p.name===o.name);let l=`${o.name}: ¥${o.value.toFixed(2)} (${o.percent}%)`;return e&&e.users&&e.users.length>0&&(l+="<br/>",e.users.forEach(p=>{if(p.total>0){const L=o.value>0?(p.total/o.value*100).toFixed(1):"0.0";l+=`&nbsp;&nbsp;${p.user}: ¥${p.total.toFixed(2)} (${L}%)<br/>`}})),l}},legend:r,series:[{type:"pie",radius:b,center:S,avoidLabelOverlap:!0,itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{show:!1},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold"}},data:c.data.map(o=>({name:o.name,value:o.total}))}]},{notMerge:!0})}function y(){a&&(a.resize(),d())}return $(()=>c.data,d,{deep:!0}),N(()=>{d(),window.addEventListener("resize",y)}),I(()=>{a==null||a.dispose(),window.removeEventListener("resize",y)}),(i,r)=>(f(),m("div",{class:"pie-chart card",ref_key:"chartRef",ref:n,style:{height:"100%","min-height":"320px"}},null,512))}},te=F(q,[["__scopeId","data-v-aa9b5da6"]]);export{te as C,ee as S,Q as u};