8 lines
19 KiB
JavaScript
8 lines
19 KiB
JavaScript
import{d as yt,l as gt,m as kt,c as m,a as s,k as xt,b as e,w as a,e as i,f as p,i as ht,h as N,n as wt,p as Ct,r as w,o as u,R as j,T as J,L as St,U as Q,t as c,P as tt,q as Dt,v as At,s as z,x as I,A as st,F as et,y as zt,C as Rt,z as Lt,B as Nt,E as Ot,_ as Et}from"./index-C4s_T2hP.js";import{t as g,f as b}from"./farsi-number-stB7JMN0.js";import{i as at,L as it,A as ot,P as It}from"./index-CbZGMCSS.js";import{T as Tt}from"./ThunderboltOutlined-DP1eBOSO.js";import{P as lt}from"./PlusCircleOutlined-DvvDmI1x.js";import{T as Ft}from"./TeamOutlined-Cc_Yyb--.js";import{G as nt}from"./GiftOutlined-DgNzKaks.js";const $t={class:"dashboard-page"},Pt={class:"page-header-title"},Ut={class:"header-actions"},Bt={class:"quick-actions-bar"},Wt={class:"quick-actions-label"},Vt={class:"quick-actions-list"},Gt={class:"kpi-card-inner"},Mt={class:"kpi-top"},Yt={class:"kpi-icon-box icon-indigo"},qt={class:"kpi-value"},Ht={class:"kpi-sub"},Xt={class:"growth-tag tag-green"},Kt={class:"kpi-card-inner"},Zt={class:"kpi-top"},jt={class:"kpi-icon-box icon-amber"},Jt={class:"kpi-value"},Qt={class:"kpi-sub"},ts={class:"growth-tag tag-amber"},ss={class:"kpi-card-inner"},es={class:"kpi-top"},as={class:"kpi-icon-box icon-emerald"},is={class:"kpi-value"},os={class:"kpi-card-inner"},ls={class:"kpi-top"},ns={class:"kpi-icon-box icon-violet"},ds={class:"kpi-value"},rs={class:"kpi-card-inner"},cs={class:"kpi-top"},ps={class:"kpi-icon-box icon-rose"},us={class:"kpi-value"},fs={class:"kpi-card-inner"},vs={class:"kpi-top"},_s={class:"kpi-icon-box icon-sky"},ms={class:"kpi-value"},bs={key:0,class:"empty-chart-wrap"},ys={class:"section-container",style:{"margin-top":"24px"}},gs={class:"section-header-row"},ks={class:"section-title-wrap"},xs={key:0,class:"badge-count"},hs={key:0},ws={class:"camp-top"},Cs=["title"],Ss={class:"camp-dates"},Ds={class:"date-row"},As={class:"date-val"},zs={class:"date-row"},Rs={class:"date-val"},Ls={class:"camp-metrics"},Ns={class:"metric-item"},Os={class:"metric-val"},Es={class:"metric-item"},Is={class:"metric-val"},Ts={class:"metric-item"},Fs={class:"metric-val"},$s={class:"camp-actions"},Ps={key:1,class:"empty-campaigns-card"},Us={class:"empty-inner"},Bs={class:"section-container",style:{"margin-top":"24px"}},Ws={class:"section-header-row"},Vs={class:"section-title-wrap"},Gs={key:0,class:"badge-count"},Ms={key:0,class:"user-cell"},Ys={class:"user-avatar"},qs={class:"user-info"},Hs={class:"user-mobile"},Xs={key:0,class:"user-name"},Ks={key:1,class:"campaign-cell-title"},Zs={key:2,class:"prize-cell"},js={class:"prize-title-text"},Js={key:0,class:"code-wrapper"},Qs={class:"code-badge"},te={key:1,class:"text-muted"},se={key:5,class:"date-cell"},ee=yt({__name:"DashboardView",setup(ae){const h=ht(),L=N(!0),r=N(null),O=N(null),E=N(null);let k=null,x=null;async function T(){L.value=!0;try{const y=await wt.get("/admin/reports/dashboard");r.value=y.data,await Ct(),dt()}catch(y){console.error("Failed to load dashboard data:",y)}finally{L.value=!1}}function dt(){rt(),ct()}function rt(){var f;if(!O.value||!((f=r.value)!=null&&f.spinsByDay))return;k&&k.dispose(),k=at(O.value);const y=r.value.spinsByDay.map(n=>g(n.date)),t=r.value.spinsByDay.map(n=>n.spins),_=r.value.spinsByDay.map(n=>n.winners);k.setOption({textStyle:{fontFamily:'IRANSans, "IRANSansWeb(FaNum)", Tahoma, sans-serif'},tooltip:{trigger:"axis",backgroundColor:"rgba(15, 23, 42, 0.92)",borderColor:"#334155",textStyle:{color:"#ffffff",fontFamily:"IRANSans"},valueFormatter:n=>b(n)+" مورد"},legend:{data:["تعداد چرخشها","تعداد برندگان"],textStyle:{fontFamily:"IRANSans",color:"#475569"},top:6,left:"center"},grid:{left:"4%",right:"4%",bottom:"6%",top:"16%",containLabel:!0},xAxis:{type:"category",boundaryGap:!1,data:y,axisLabel:{fontFamily:"IRANSans",color:"#64748b",formatter:n=>g(n)},axisLine:{lineStyle:{color:"#cbd5e1"}}},yAxis:{type:"value",axisLabel:{fontFamily:"IRANSans",color:"#64748b",formatter:n=>b(n)},splitLine:{lineStyle:{color:"#f1f5f9",type:"dashed"}}},series:[{name:"تعداد چرخشها",type:"line",smooth:!0,data:t,itemStyle:{color:"#4f46e5"
|
|||
|
|
<div style="text-align: right; padding: 2px 4px;">
|
||
|
|
<div style="font-weight: 600; margin-bottom: 4px;">${n.name}</div>
|
||
|
|
<div>تعداد: <b>${R}</b> (${C}٪)</div>
|
||
|
|
</div>
|
||
|
|
`}},legend:{orient:"horizontal",bottom:0,textStyle:{fontFamily:"IRANSans",color:"#475569",fontSize:11},itemWidth:10,itemHeight:10},series:[{name:"توزیع جوایز",type:"pie",radius:["45%","72%"],center:["50%","45%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:6,borderColor:"#fff",borderWidth:2},label:{show:!1,position:"center"},emphasis:{label:{show:!0,fontSize:14,fontWeight:"bold",fontFamily:"IRANSans",formatter:n=>`${g(n.percent)}٪
|
||
|
|
${n.name}`},itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.15)"}},data:_}]})}function pt(y){y&&(navigator.clipboard.writeText(y),Lt.success("کد جایزه در حافظه کپی شد"))}const F={NEW:{text:"جدید",color:"blue"},PENDING:{text:"در انتظار",color:"warning"},CONTACTED:{text:"تماس گرفتهشده",color:"cyan"},DELIVERED:{text:"تحویل داده شده",color:"success"},ACTIVE_CODE:{text:"کد فعال",color:"purple"},USED:{text:"استفاده شده",color:"green"},CANCELLED:{text:"لغو شده",color:"error"},EXPIRED:{text:"منقضی شده",color:"default"}},$={PHYSICAL:{text:"کالای فیزیکی",color:"blue"},DISCOUNT_CODE:{text:"کد تخفیف",color:"purple"},CREDIT:{text:"اعتبار",color:"cyan"},CASH:{text:"نقدی",color:"gold"},NO_PRIZE:{text:"پوچ",color:"default"},OTHER:{text:"سایر",color:"default"}},ut={CLASSIC_CASINO:"کازینویی کلاسیک",NEON_CYBER:"نئونی سایبر",MINIMAL_FLAT:"مینیمال فلت",LUXURY_GOLD:"طلایی لوکس",PLAYFUL_CARTOON:"کارتونی فانتزی",RUSTIC_WOOD:"چوبی",GALAXY_SPACE:"کهکشانی",CANDY_LAND:"آبنباتی",FIRE_FLAME:"آتشین",CRYSTAL_ICE:"یخی"},ft=[{title:"کاربر برنده",key:"user",width:"22%"},{title:"کمپین",dataIndex:["campaign","title"],key:"campaign",width:"18%"},{title:"جایزه برنده شده",key:"prize",width:"22%"},{title:"کد رهگیری / جایزه",key:"code",width:"15%"},{title:"وضعیت",dataIndex:"status",key:"status",width:"11%"},{title:"زمان برد",dataIndex:"wonAt",key:"wonAt",width:"12%"}];function P(){k==null||k.resize(),x==null||x.resize()}return gt(()=>{T(),window.addEventListener("resize",P)}),kt(()=>{window.removeEventListener("resize",P),k==null||k.dispose(),x==null||x.dispose()}),(y,t)=>{const _=w("a-button"),f=w("a-card"),n=w("a-col"),R=w("a-row"),C=w("a-tag"),vt=w("a-empty"),_t=w("a-tooltip"),mt=w("a-table"),bt=w("a-spin");return u(),m("div",$t,[s("div",Pt,[t[8]||(t[8]=xt('<div class="header-info" data-v-a3028098><div class="title-row" data-v-a3028098><h1 class="title" data-v-a3028098>داشبورد مدیریت و مانیتورینگ</h1><span class="live-badge" data-v-a3028098><span class="pulse-dot" data-v-a3028098></span> سامانه فعال و آنلاین </span></div><p class="subtitle" data-v-a3028098>نمای جامع فعالیت کاربران، ترافیک چرخشها، وضعیت برندگان و کمپینهای جاری</p></div>',1)),s("div",Ut,[e(_,{type:"primary",ghost:"",onClick:T,loading:L.value,class:"refresh-btn"},{icon:a(()=>[e(i(j))]),default:a(()=>[t[7]||(t[7]=p(" بروزرسانی دادهها ",-1))]),_:1},8,["loading"])])]),s("div",Bt,[s("div",Wt,[e(i(Tt),{style:{color:"#4f46e5","margin-left":"6px"}}),t[9]||(t[9]=p(" دسترسیهای سریع: ",-1))]),s("div",Vt,[e(_,{type:"primary",class:"action-btn action-primary",onClick:t[0]||(t[0]=D=>i(h).push("/campaigns/create"))},{icon:a(()=>[e(i(lt))]),default:a(()=>[t[10]||(t[10]=p(" تعریف کمپین جدید ",-1))]),_:1}),e(_,{class:"action-btn",onClick:t[1]||(t[1]=D=>i(h).push("/users"))},{icon:a(()=>[e(i(Ft))]),default:a(()=>[t[11]||(t[11]=p(" مدیریت کاربران ",-1))]),_:1}),e(_,{class:"action-btn",onClick:t[2]||(t[2]=D=>i(h).push("/winners"))},{icon:a(()=>[e(i(J))]),default:a(()=>[t[12]||(t[12]=p(" مدیریت برندگان و هدایا ",-1))]),_:1}),e(_,{class:"action-btn",onClick:t[3]||(t[3]=D=>i(h).push("/reports"))},{icon:a(()=>[e(i(St))]),default:a(()=>[t[13]||(t[13]=p(" گزارشهای تحلیلی و اکسل ",-1))]),_:1})])]),e(bt,{spinning:L.value},{default:a(()=>{var D,U,B,W,V,G;return[e(R,{gutter:[16,16],class:"kpi-row"},{default:a(()=>[e(n,{xs:24,sm:12,md:8,xl:4},{default:a(()=>[e(f,{bordered:!1,class:"kpi-card card-indigo"},{default:a(()=>{var o,l,d,v;return[s("div",Gt,[s("div",Mt,[t[14]||(t[14]=s("span",{class:"kpi-label"},"کل کاربران",-1)),s("div",Yt,[e(i(Q))])]),s("div",qt,c(i(b)(((l=(o=r.value)==null?void 0:o.stats)==null?void 0:l.totalUsers)||0)),1
|