Validate sessions against the API, honor configurable base paths, and route unknown pages to 404. Keep development ports stable so user and admin apps cannot be confused. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
import{$ as e,Ct as t,I as n,J as r,N as i,P as a,Q as o,St as s,V as c,X as l,Z as u,_ as d,bt as f,dt as p,et as m,ht as h,i as g,it as _,lt as v,n as y,nt as b,o as x,pt as S,rt as C,st as w,xt as T,y as E,yt as D,z as O}from"./index-B2VD3zy8.js";import{t as k}from"./StatusBadge-D3ThrLrU.js";var ee={class:`sales-chart`},te={key:0,class:`sales-chart__header`},A={key:0,class:`sales-chart__title`},j={key:1,class:`sales-chart__subtitle`},M=[`viewBox`,`aria-label`],N=[`x1`,`x2`,`y1`,`y2`],P=[`points`],F=[`points`],I=[`x1`,`x2`,`y1`,`y2`],L=[`cx`,`cy`],R={class:`sales-chart__tooltip-label`},z={key:1,class:`sales-chart__axis`},B=320,V=120,H=c(_({__name:`SalesAreaChart`,props:{data:{},title:{},subtitle:{},height:{default:160},color:{default:`#0a353c`},unit:{default:`میلیارد تومان`},labels:{}},setup(n){let i=n,a=D(null),o={top:12,right:8,bottom:8,left:8},c=l(()=>Math.max(...i.data,.001)),d=l(()=>{let e=B-o.left-o.right,t=V-o.top-o.bottom,n=e/Math.max(i.data.length-1,1);return i.data.map((e,r)=>({x:o.left+r*n,y:o.top+t-e/c.value*t,value:e,index:r}))}),h=l(()=>d.value.map(e=>`${e.x},${e.y}`).join(` `)),g=l(()=>{let e=V-o.bottom,t=d.value[0],n=d.value[d.value.length-1];return!t||!n?``:`${t.x},${e} ${h.value} ${n.x},${e}`}),_=l(()=>{let e=V-o.top-o.bottom;return[0,.5,1].map(t=>o.top+e*t)}),y=l(()=>a.value===null?null:d.value[a.value]??null);function b(e){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width*B,r=0,i=1/0;d.value.forEach(e=>{let t=Math.abs(e.x-n);t<i&&(i=t,r=e.index)}),a.value=r}function S(){a.value=null}return(i,a)=>(v(),m(`div`,ee,[n.title||n.subtitle?(v(),m(`div`,te,[u(`div`,null,[n.title?(v(),m(`h3`,A,t(n.title),1)):e(``,!0),n.subtitle?(v(),m(`p`,j,t(n.subtitle),1)):e(``,!0)])])):e(``,!0),u(`div`,{class:`sales-chart__body`,style:s({height:`${n.height}px`})},[(v(),m(`svg`,{class:`sales-chart__svg`,viewBox:`0 0 ${B} ${V}`,preserveAspectRatio:`none`,role:`img`,"aria-label":n.title||`نمودار فروش`,onMousemove:b,onMouseleave:S},[(v(!0),m(r,null,p(_.value,(e,t)=>(v(),m(`line`,{key:t,x1:o.left,x2:B-o.right,y1:e,y2:e,class:`sales-chart__grid`},null,8,N))),128)),g.value?(v(),m(`polygon`,{key:0,points:g.value,class:`sales-chart__area`,style:s({fill:`${n.color}22`})},null,12,P)):e(``,!0),u(`polyline`,{points:h.value,class:`sales-chart__line`,style:s({stroke:n.color})},null,12,F),y.value?(v(),m(r,{key:1},[u(`line`,{x1:y.value.x,x2:y.value.x,y1:o.top,y2:V-o.bottom,class:`sales-chart__cursor`},null,8,I),u(`circle`,{cx:y.value.x,cy:y.value.y,r:`4`,class:`sales-chart__dot`,style:s({fill:n.color})},null,12,L)],64)):e(``,!0)],40,M)),y.value?(v(),m(`div`,{key:0,class:`sales-chart__tooltip`,style:s({left:`${y.value.x/B*100}%`})},[u(`span`,R,t(n.labels?.[y.value.index]??`روز ${y.value.index+1}`),1),u(`strong`,null,t(f(x)(y.value.value))+` `+t(n.unit),1)],4)):e(``,!0)],4),n.labels?.length?(v(),m(`div`,z,[(v(!0),m(r,null,p(n.labels,(e,n)=>(v(),m(`span`,{key:n},t(e),1))),128))])):e(``,!0)]))}}),[[`__scopeId`,`data-v-85c70c78`]]),U={info:`var(--color-info-light)`,warning:`var(--color-warning-light)`,purple:`var(--color-purple-light)`,success:`var(--color-success-light)`},W={info:`var(--color-info)`,warning:`var(--color-warning-dark)`,purple:`var(--color-purple)`,success:`var(--color-success)`},G=()=>({newOrders:0,pendingReview:0,pendingCheck:0,finalApproval:0,todaySales:0,todaySalesGrowth:0,monthSales:0});function K(){let e=n(),t=O(),r=D(G()),a=D([]),o=D(Array.from({length:28},()=>0)),s=D([`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`]),c=D([]),u=D(!1),f=l(()=>[{label:`سفارشهای جدید`,value:r.value.newOrders,icon:`cart`,tone:`info`,link:`/orders`},{label:`در انتظار بررسی`,value:r.value.pendingReview,icon:`file`,tone:`warning`,link:`/orders?tab=pending_review`},{label:`بررسی چک`,value:r.value.pendingCheck,icon:`wallet`,tone:`purple`,link:`/orders?tab=pending_check`},{label:`تأیید نهایی شده`,value:r.value.finalApproval,icon:`check-circle`,tone:`success`,link:`/orders?tab=final_approval`}]),p=l(()=>{let e=o.value;if(!e.length)return``;let t=Math.max(...e,.001),n=e.length>1?280/(e.length-1):280;return e.map((e,r)=>`${r*n},${120-e/t*110-5}`).join(` `)});async function m(){u.value=!0;try{let e=await d.get();r.value=e.stats,a.value=(e.recentOrders??[]).map(e=>E(e)),o.value=e.salesChartData?.length?e.salesChartData:Array.from({length:28},()=>0),s.value=e.chartAxisLabels?.length?e.chartAxisLabels:[`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`],c.value=e.checkDeadlines??[]}catch(e){t.error(e instanceof i?e.message:`بارگذاری داشبورد انجام نشد.`)}finally{u.value=!1}}w(()=>{m()});function h(){e.push(`/orders`)}return{checkDeadlines:c,dashboardStats:r,recentOrders:a,chartPoints:p,salesChartData:o,chartAxisLabels:s,statCards:f,loading:u,goOrders:h,loadDashboard:m}}var q={class:`dashboard`},J={class:`dashboard__toolbar`},Y={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},X={class:`dashboard__stats`},Z={class:`admin-stat-card__label`},Q={class:`admin-stat-card__value`},ne={class:`dashboard__sales-card admin-stat-card`},re={class:`dashboard__sales-header`},ie={class:`admin-stat-card__value dashboard__sales-value`},$={class:`dashboard__sales-growth`},ae={class:`dashboard__grid`},oe={class:`dashboard__chart-card admin-card`},se={class:`dashboard__orders-card admin-card`},ce={class:`admin-table-wrap`},le={class:`admin-table admin-table--compact`},ue={class:`dashboard__card-footer`},de={class:`dashboard__checks-card admin-card`},fe={class:`dashboard__deadline-list`},pe={class:`dashboard__deadline-count`},me={class:`dashboard__deadline-amount`},he={class:`dashboard__card-footer`},ge=c(_({__name:`DesktopDashboard`,setup(e){let{checkDeadlines:n,dashboardStats:i,recentOrders:o,salesChartData:c,chartAxisLabels:l,goOrders:d,statCards:_}=K();return(e,x)=>{let w=S(`RouterLink`);return v(),m(`div`,q,[u(`div`,J,[u(`button`,Y,[C(a,{name:`calendar`,size:16}),x[1]||=b(` امروز `,-1)])]),u(`div`,X,[(v(!0),m(r,null,p(f(_),e=>(v(),m(`div`,{key:e.label,class:`admin-stat-card`},[u(`div`,{class:`admin-stat-card__icon`,style:s({background:f(U)[e.tone],color:f(W)[e.tone]})},[C(a,{name:e.icon,size:20},null,8,[`name`])],4),u(`p`,Z,t(e.label),1),u(`p`,Q,t(e.value),1),C(w,{to:e.link,class:`admin-stat-card__link`},{default:h(()=>[...x[2]||=[b(`مشاهده سفارشها`,-1)]]),_:1},8,[`to`])]))),128)),u(`div`,ne,[u(`div`,re,[u(`div`,null,[x[3]||=u(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),u(`p`,ie,t(f(y)(f(i).todaySales)),1),u(`span`,$,` +`+t(f(i).todaySalesGrowth)+`% نسبت به دیروز `,1)]),C(a,{name:`calendar`,size:20,class:`dashboard__sales-icon`})]),x[4]||=u(`svg`,{class:`dashboard__sparkline`,viewBox:`0 0 120 32`,preserveAspectRatio:`none`},[u(`polyline`,{fill:`none`,stroke:`#159660`,"stroke-width":`2`,points:`0,24 20,18 40,22 60,12 80,16 100,8 120,14`})],-1)])]),u(`div`,ae,[u(`div`,oe,[C(H,{title:`فروش ماه جاری`,subtitle:f(y)(f(i).monthSales),data:f(c),labels:f(l),unit:`میلیارد`,height:168},null,8,[`subtitle`,`data`,`labels`])]),u(`div`,se,[x[7]||=u(`div`,{class:`dashboard__card-header`},[u(`h2`,{class:`dashboard__card-title`},`سفارشهای اخیر`)],-1),u(`div`,ce,[u(`table`,le,[x[5]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`شماره سفارش`),u(`th`,null,`مشتری`),u(`th`,null,`شرکت`),u(`th`,null,`وضعیت`),u(`th`,null,`تاریخ ثبت`)])],-1),u(`tbody`,null,[(v(!0),m(r,null,p(f(o),e=>(v(),m(`tr`,{key:e.id},[u(`td`,null,t(e.orderNumber),1),u(`td`,null,t(e.customerName),1),u(`td`,null,t(e.companyName),1),u(`td`,null,[C(k,{status:e.status},null,8,[`status`])]),u(`td`,null,t(f(g)(e.createdAt)),1)]))),128))])])]),u(`div`,ue,[u(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:x[0]||=(...e)=>f(d)&&f(d)(...e)},[x[6]||=b(` مشاهده همه سفارشها `,-1),C(a,{name:`chevron-left`,size:16})])])]),u(`div`,de,[x[9]||=u(`div`,{class:`dashboard__card-header`},[u(`h2`,{class:`dashboard__card-title`},`سررسید چکها`)],-1),u(`ul`,fe,[(v(!0),m(r,null,p(f(n),e=>(v(),m(`li`,{key:e.id,class:`dashboard__deadline-item`},[u(`span`,{class:T([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},t(e.label),3),u(`span`,pe,t(e.count)+` فقره`,1),u(`span`,me,t(f(y)(e.amount)),1)]))),128))]),u(`div`,he,[C(w,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm`},{default:h(()=>[x[8]||=b(` مشاهده همه `,-1),C(a,{name:`chevron-left`,size:16})]),_:1})])])])])}}}),[[`__scopeId`,`data-v-bf2ebdae`]]),_e={class:`compact-dashboard page-shell`},ve={class:`flex justify-end mb-3`},ye={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},be={class:`compact-stats-grid`},xe={class:`admin-stat-card__label`},Se={class:`admin-stat-card__value`},Ce={class:`admin-stat-card col-span-full`},we={class:`admin-stat-card__value`},Te={class:`text-xs font-semibold text-success`},Ee={class:`compact-section-grid`},De={class:`compact-section-card admin-panel`},Oe={class:`compact-section-card admin-panel`},ke={class:`admin-card-list`},Ae={class:`admin-card-item__header`},je={class:`admin-card-item__title`},Me={class:`admin-card-item__meta`},Ne={class:`compact-section-card admin-panel`},Pe={class:`m-0 p-0 list-none flex flex-col gap-2.5`},Fe={class:`mr-auto text-xs`},Ie=_({__name:`CompactDashboard`,setup(e){let{checkDeadlines:n,dashboardStats:i,recentOrders:c,salesChartData:l,chartAxisLabels:d,goOrders:_,statCards:x}=K();return(e,w)=>{let E=S(`RouterLink`);return v(),m(`div`,_e,[u(`div`,ve,[u(`button`,ye,[C(a,{name:`calendar`,size:16}),w[1]||=b(` امروز `,-1)])]),u(`div`,be,[(v(!0),m(r,null,p(f(x),e=>(v(),m(`div`,{key:e.label,class:`admin-stat-card`},[u(`div`,{class:`admin-stat-card__icon`,style:s({background:f(U)[e.tone],color:f(W)[e.tone]})},[C(a,{name:e.icon,size:20},null,8,[`name`])],4),u(`p`,xe,t(e.label),1),u(`p`,Se,t(e.value),1),C(E,{to:e.link,class:`admin-stat-card__link`},{default:h(()=>[...w[2]||=[b(`مشاهده`,-1)]]),_:1},8,[`to`])]))),128)),u(`div`,Ce,[w[3]||=u(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),u(`p`,we,t(f(y)(f(i).todaySales)),1),u(`span`,Te,` +`+t(f(i).todaySalesGrowth)+`% نسبت به دیروز `,1)])]),u(`div`,Ee,[u(`section`,De,[C(H,{title:`فروش ماه جاری`,subtitle:f(y)(f(i).monthSales),data:f(l),labels:f(d),unit:`میلیارد`,height:140},null,8,[`subtitle`,`data`,`labels`])]),u(`section`,Oe,[w[5]||=u(`h2`,{class:`compact-section-card__title`},`سفارشهای اخیر`,-1),u(`div`,ke,[(v(!0),m(r,null,p(f(c),e=>(v(),o(E,{key:e.id,to:`/orders`,class:`admin-card-item block no-underline text-inherit`},{default:h(()=>[u(`div`,Ae,[u(`p`,je,t(e.orderNumber),1),C(k,{status:e.status},null,8,[`status`])]),u(`div`,Me,[u(`span`,null,t(e.customerName),1),u(`span`,null,t(f(g)(e.createdAt)),1)])]),_:2},1024))),128))]),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm inline-flex mt-3`,onClick:w[0]||=(...e)=>f(_)&&f(_)(...e)},[w[4]||=b(` مشاهده همه سفارشها `,-1),C(a,{name:`chevron-left`,size:16})])]),u(`section`,Ne,[w[7]||=u(`h2`,{class:`compact-section-card__title`},`سررسید چکها`,-1),u(`ul`,Pe,[(v(!0),m(r,null,p(f(n),e=>(v(),m(`li`,{key:e.id,class:`flex flex-wrap items-center gap-2 text-sm`},[u(`span`,{class:T([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},t(e.label),3),u(`span`,null,t(e.count)+` فقره`,1),u(`strong`,Fe,t(f(y)(e.amount)),1)]))),128))]),C(E,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm inline-flex mt-3 no-underline`},{default:h(()=>[w[6]||=b(` مشاهده همه `,-1),C(a,{name:`chevron-left`,size:16})]),_:1})])])])}}}),Le=_({__name:`DashboardView`,setup(e){return(e,t)=>(v(),m(r,null,[C(ge,{class:`desktop-only`}),C(Ie,{class:`compact-only`})],64))}});export{Le as default}; |