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
4.9 KiB
JavaScript
1 line
4.9 KiB
JavaScript
import{D as e,E as t,Et as n,G as r,J as i,Kt as a,M as o,N as s,O as c,P as l,T as u,Xt as d,Yt as f,Z as p,at as m,b as h,g as ee,h as g,st as _,t as v,vt as y,w as b}from"./_plugin-vue_export-helper-Bo3WtfwJ.js";import{o as x}from"./format-C72AoJ2H.js";import{E as te,o as ne,w as S}from"./index-BAQfYU-Q.js";import{t as re}from"./IconFilter-C0e5CP4I.js";import{t as ie}from"./PageHeader-DTO8lja2.js";import{t as ae}from"./SearchField-BMLbKLPW.js";import{t as C}from"./PageSkeleton-DHtB6RUa.js";import{t as w}from"./crm-CooNUbmr.js";import{t as T}from"./CustomerCreateOverlay-BlatCdeJ.js";var E={class:`page customers-page`},D={class:`desktop-page__head desktop-only customers-desk-head`},O={class:`page__scroll page__scroll--with-nav customers-scroll`},k={class:`toolbar`},A={class:`summary-card`},j={class:`summary-card__icon`,"aria-hidden":`true`},M={class:`summary-card__cols`},N={class:`tabs`,role:`tablist`},P=[`aria-selected`,`onClick`],F={class:`tab__text`},I={key:1},L=[`onClick`],R={class:`customer-card__body`},oe={class:`customer-card__top`},z=v(l({__name:`CustomersView`,setup(l){let v=g(),z=ee(),B=w(),V=y(String(v.query.q??``)),H=b(()=>String(v.query.status??`all`)),U=y([]),W=y(!0),G=y(null),K=b(()=>U.value),q=b(()=>v.query.create===`1`),se=b(()=>U.value.filter(e=>e.status===`active`).length),ce=b(()=>U.value.reduce((e,t)=>e+t.totalPurchaseToman,0)),le=[{id:`all`,label:`همه`},{id:`active`,label:`فعال`},{id:`inactive`,label:`غیرفعال`},{id:`new`,label:`جدید`}];async function J(){W.value=!0,G.value=null;try{U.value=await B.loadCustomers({q:V.value||void 0,status:H.value===`all`?void 0:H.value})}catch(e){G.value=e instanceof Error?e.message:`بارگذاری مشتریان ناموفق بود.`,U.value=[]}finally{W.value=!1}}r(J),m([H,V],J);function Y(e){z.replace({path:`/customers`,query:{...e===`all`?{}:{status:e},...V.value?{q:V.value}:{}}})}function X(e){V.value=e,z.replace({path:`/customers`,query:{...H.value===`all`?{}:{status:H.value},...e?{q:e}:{}}})}function ue(e){return e===`active`?`فعال`:e===`inactive`?`غیرفعال`:`جدید`}function Z(e={}){return{...H.value===`all`?{}:{status:H.value},...V.value?{q:V.value}:{},...e}}function Q(){z.push({path:`/customers`,query:{...Z(),create:`1`}})}function $(){z.replace({path:`/customers`,query:Z()})}async function de(e){if(e){await z.replace({path:`/customer`,query:{id:e}});return}$(),await J()}function fe(){let e=[`all`,`active`,`inactive`,`new`],t=e.indexOf(H.value);Y(e[(t<0?0:t+1)%e.length]??`all`)}return(r,l)=>(i(),c(`div`,E,[s(ie,{class:`mobile-only`,title:`مشتریان من`,"show-back":``,centered:``,onBack:l[0]||=e=>n(z).back()},{trailing:_(()=>[u(`button`,{type:`button`,class:`nav-add-btn`,"aria-label":`ثبت مشتری`,onClick:Q},[s(S,{size:22})])]),_:1}),u(`header`,D,[l[2]||=u(`div`,null,[u(`h1`,{class:`desktop-page__title`},`مشتریان من`),u(`p`,{class:`desktop-page__subtitle`},`مدیریت مشتریان و پیگیری خریدها`)],-1),u(`button`,{type:`button`,class:`desk-add-btn`,onClick:Q},[s(S,{size:18}),l[1]||=o(` ثبت مشتری `,-1)])]),u(`div`,O,[u(`div`,k,[s(ae,{"model-value":V.value,placeholder:`جستجو بر اساس نام یا موبایل...`,"onUpdate:modelValue":X},null,8,[`model-value`]),u(`button`,{type:`button`,class:`filter-btn`,"aria-label":`فیلتر وضعیت`,onClick:fe},[s(re,{size:18})])]),u(`section`,A,[u(`div`,j,[s(te,{size:22,color:`#fff`})]),u(`div`,M,[u(`div`,null,[l[3]||=u(`span`,null,`تعداد مشتری فعال`,-1),u(`strong`,null,d(n(x)(se.value)),1)]),l[6]||=u(`span`,{class:`summary-card__divider`,"aria-hidden":`true`},null,-1),u(`div`,null,[l[4]||=u(`span`,null,`مجموع خرید (ریال)`,-1),u(`strong`,null,d(n(x)(ce.value)),1),l[5]||=u(`em`,null,`تومان`,-1)])])]),u(`div`,N,[(i(),c(h,null,p(le,e=>u(`button`,{key:e.id,type:`button`,role:`tab`,class:a([`tab`,{"tab--active":H.value===e.id}]),"aria-selected":H.value===e.id,onClick:t=>Y(e.id)},[u(`span`,F,d(e.label),1)],10,P)),64))]),W.value?(i(),t(C,{key:0,variant:`list`})):G.value?(i(),c(`p`,I,d(G.value),1)):e(``,!0),(i(!0),c(h,null,p(K.value,e=>(i(),c(`button`,{key:e.id,type:`button`,class:`customer-card`,onClick:t=>n(z).push({path:`/customer`,query:{id:e.id}})},[u(`div`,{class:`customer-card__avatar`,style:f({background:e.avatarColor})},d(e.avatarLetter),5),u(`div`,R,[u(`div`,oe,[u(`strong`,null,d(e.name),1)]),u(`p`,null,d(e.phone),1),u(`p`,null,`مجموع خرید: `+d(n(x)(e.totalPurchaseToman))+` تومان`,1)]),u(`span`,{class:a([`status`,{"status--ok":e.status===`active`,"status--off":e.status===`inactive`,"status--new":e.status===`new`}])},d(ue(e.status)),3),s(ne,{size:18,class:`chevron`})],8,L))),128)),l[7]||=u(`section`,{class:`promo`},[u(`div`,null,[u(`strong`,null,`افزایش مشتریان = افزایش سطح شما`),u(`p`,null,`با جذب مشتریان بیشتر به سطح VIP برسید`)])],-1)]),s(T,{open:q.value,onClose:$,onSuccess:de},null,8,[`open`])]))}}),[[`__scopeId`,`data-v-a6283622`]]);export{z as default}; |