1 line
17 KiB
JavaScript
1 line
17 KiB
JavaScript
import{$ as e,At as t,B as n,Dt as r,E as ee,H as i,M as a,U as o,Z as s,c,d as l,g as u,h as d,k as f,l as p,m,r as h,s as g,st as _,t as v,u as y}from"./_plugin-vue_export-helper-QrIvvHC8.js";import{a as te,f as b,m as x,t as S}from"./http-BjLkjdQu.js";import{L as C,T as w,V as T,j as E,o as D,p as O,s as ne,x as re,y as k}from"./index-pv0Ktkd1.js";import{t as ie}from"./AdminPageSkeleton-oWhHYjl4.js";import{t as ae}from"./BaseSwitch-pJwnFBVo.js";import{t as oe}from"./BaseEmptyState-y-wpauXF.js";import{t as A}from"./AdminSelect-DFH4VaRE.js";import{r as j}from"./adminLabels-Cz9ccm1Z.js";import{t as M}from"./ActiveSwitchCell-Cjf03b7q.js";var N={class:`suggestions-panel`},P={key:0,class:`suggestions-panel__loading`},F={class:`suggestions-panel__add`},I={class:`field`},L={key:0,class:`suggestions-panel__picked`},R=[`onClick`],z={class:`field`},B=[`disabled`],V={key:0,class:`suggestions-panel__list`},H={class:`muted`,dir:`ltr`},U={key:0,class:`note`},W={class:`suggestions-panel__actions`},G=[`onClick`],K={key:1,class:`suggestions-panel__empty`},se=v(u({__name:`CustomerSuggestionsPanel`,props:{customerId:{}},setup(i){let s=i,u=te(),p=e(!0),_=e(!1),v=e([]),x=e([]),C=e([]),T=e(``),D=g(()=>x.value.filter(e=>!v.value.some(t=>t.productId===e.id&&t.isActive)).map(e=>({value:e.id,label:`${e.name} (${e.productCode})`})));async function O(){if(s.customerId){p.value=!0;try{let[e,t]=await Promise.all([E.list(s.customerId),w.list()]);v.value=e,x.value=t}catch(e){u.error(e instanceof S?e.message:`بارگذاری پیشنهادها ناموفق بود`)}finally{p.value=!1}}}async function ne(){if(C.value.length){_.value=!0;try{for(let e of C.value)await E.create({customerId:s.customerId,productId:e,note:T.value.trim()||void 0});C.value=[],T.value=``,u.success(`پیشنهادها به صفحه خانه مشتری اضافه شد`),await O()}catch(e){u.error(e instanceof S?e.message:`ثبت پیشنهاد ناموفق بود`)}finally{_.value=!1}}}async function re(e){try{await E.setActive(e.id,!e.isActive),await O()}catch(e){u.error(e instanceof S?e.message:`بهروزرسانی ناموفق بود`)}}function k(e){e&&(C.value.includes(e)||(C.value=[...C.value,e]))}function ie(e){C.value=C.value.filter(t=>t!==e)}return n(()=>s.customerId,()=>{O()}),ee(()=>{O()}),(e,n)=>(f(),l(`section`,N,[n[4]||=c(`header`,{class:`suggestions-panel__head`},[c(`div`,null,[c(`h3`,{class:`suggestions-panel__title`},`پیشنهاد اختصاصی در اپ`),c(`p`,{class:`suggestions-panel__hint`},` محصولات انتخابشده در بخش «پیشنهاد اختصاصی ما برای شما» در صفحه خانه مشتری نمایش داده میشوند. `)])],-1),p.value?(f(),l(`div`,P,`در حال بارگذاری...`)):(f(),l(h,{key:1},[c(`div`,F,[c(`label`,I,[n[1]||=m(` افزودن محصول (کد کالیته) `,-1),d(A,{"model-value":``,options:[{value:``,label:`انتخاب محصول...`},...D.value],"onUpdate:modelValue":k},null,8,[`options`])]),C.value.length?(f(),l(`div`,L,[(f(!0),l(h,null,a(C.value,e=>(f(),l(`span`,{key:e,class:`suggestions-panel__chip`},[m(t(x.value.find(t=>t.id===e)?.productCode||e)+` `,1),c(`button`,{type:`button`,"aria-label":`حذف`,onClick:t=>ie(e)},`×`,8,R)]))),128))])):y(``,!0),c(`label`,z,[n[2]||=m(` یادداشت (اختیاری) `,-1),o(c(`textarea`,{"onUpdate:modelValue":n[0]||=e=>T.value=e,class:`admin-input`,rows:`2`,placeholder:`دلیل پیشنهاد برای مشتری`},null,512),[[b,T.value]])]),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,disabled:!C.value.length||_.value,onClick:ne},` افزودن به صفحه خانه مشتری `,8,B)]),v.value.length?(f(),l(`div`,V,[n[3]||=c(`h4`,{class:`suggestions-panel__sub`},`پیشنهادهای ثبتشده`,-1),c(`ul`,null,[(f(!0),l(h,null,a(v.value,e=>(f(),l(`li`,{key:e.id,class:`suggestions-panel__row`},[c(`div`,null,[c(`strong`,null,t(e.productName),1),c(`span`,H,`(`+t(e.productCode)+`)`,1),e.note?(f(),l(`p`,U,t(e.note),1)):y(``,!0)]),c(`div`,W,[c(`span`,{class:r(e.isActive?`on`:`off`)},t(e.isActive?`فعال`:`غیرفعال`),3),c(`button`,{type:`button`,class:`link`,onClick:t=>re(e)},t(e.isActive?`حذف از خانه`:`فعالسازی`),9,G)])]))),128))])])):(f(),l(`p`,K,`هنوز پیشنهادی برای این مشتری ثبت نشده است.`))],64))]))}}),[[`__scopeId`,`data-v-4182e847`]]),ce={class:`customers-page`},le={class:`admin-page-header`},ue={class:`customers-page__tabs`,role:`tablist`,"aria-label":`نوع کاربر`},de=[`aria-selected`],fe=[`aria-selected`],pe={class:`customers-page__search admin-card`},me={key:2,class:`customers-page__table admin-card desktop-only`},he={class:`admin-table-wrap`},ge={class:`admin-table`},_e={key:0},ve={key:1},ye={key:2},be={key:3},xe={key:4},Se={key:0},Ce={key:1},we={key:2},Te={key:3},Ee={key:4},De={class:`numeric`},Oe={class:`numeric`},ke={class:`status`},Ae={class:`actions`},je=[`onClick`],Me={key:3,class:`compact-only admin-card-list`},Ne={class:`admin-card-item__header`},Pe={class:`admin-card-item__title`},Fe={class:`admin-card-item__header-actions`},Ie=[`onClick`],Le={class:`admin-card-item__meta`},Re={key:0},ze={key:1},Be={key:2},Ve={key:3},He={key:4},Ue={key:0,class:`admin-form__error`,role:`alert`},We={class:`admin-form__field`},Ge={class:`admin-form__row`},Ke={class:`admin-form__field`},qe={class:`admin-form__field`},Je={class:`admin-form__row`},Ye={class:`admin-form__field`},Xe={class:`admin-form__field`},Ze={class:`admin-form__row`},Qe={class:`admin-form__field`},$e={class:`admin-form__field`},et={class:`admin-form__row`},tt={class:`admin-form__field`},nt={key:0,class:`admin-form__field`},rt={key:1,class:`admin-form__field`},it={class:`customers-page__brands`},at=[`checked`,`onChange`],ot={class:`admin-form__field`},st=[`disabled`],ct={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},q=v(u({__name:`CustomersView`,setup(n){let u=e([]),v=e([]),w=e([]),E=e([]),N=e(``),P=e(`customer`),F=e(!0),I=e(null),L=e(null),R=e(``),z=e(!1),B=te();function V(e){if(e==null)return`-`;if(typeof e==`number`)return Number.isFinite(e)?String(e):`-`;let t=e.trim();return!t||t===`—`?`-`:t}function H(e){return e==null||!Number.isFinite(e)?`-`:ne(e)}let U=[{value:`wholesale`,label:`عمدهفروش`},{value:`retail`,label:`خردهفروش`}],W=[{value:`customer`,label:`مشتری`},{value:`agent`,label:`واسطه`}],G={customer:`مشتری`,agent:`واسطه`};function K(e){return G[e===`agent`?`agent`:`customer`]}let q=g(()=>[{value:``,label:`بدون سطح`},...v.value.map(e=>({value:e.id,label:e.label}))]),lt=g(()=>[{value:``,label:`بدون واسطه`},...w.value.filter(e=>e.id!==L.value).map(e=>({value:e.id,label:e.name+(e.agentCode?` (${e.agentCode})`:``)}))]),J=()=>({name:``,phone:``,nationalId:``,customerType:`wholesale`,companyName:``,isActive:!0,levelDefId:``,assignedAgentId:``,brandIds:[],appRole:`customer`,agentCode:``}),Y=s(J()),ut=g(()=>I.value!==null),dt=g(()=>I.value===`edit`?`ویرایش مشتری`:`افزودن مشتری`),ft=g(()=>Y.name.trim()&&Y.phone.trim()&&Y.nationalId.trim()),X=g(()=>{let e=N.value.trim();return e?u.value.filter(t=>t.name.includes(e)||t.phone.includes(e)||t.nationalId.includes(e)||t.companyName.includes(e)):u.value});function pt(e,t){t?Y.brandIds.includes(e)||Y.brandIds.push(e):Y.brandIds=Y.brandIds.filter(t=>t!==e)}async function mt(){F.value=!0;try{u.value=await k.list(void 0,P.value)}catch(e){B.error(e instanceof S?e.message:P.value===`agent`?`بارگذاری واسطهها انجام نشد.`:`بارگذاری مشتریان انجام نشد.`)}finally{F.value=!1}}function Z(e){P.value!==e&&(P.value=e,N.value=``,mt())}async function ht(){try{let[e,t,n]=await Promise.all([re.list(),k.list(void 0,`agent`),O.list()]);v.value=e,w.value=t,E.value=n}catch(e){B.error(e instanceof S?e.message:`بارگذاری اطلاعات کمکی انجام نشد.`)}}ee(()=>{mt(),ht()});function gt(){I.value=`add`,L.value=null,Object.assign(Y,J()),Y.appRole=P.value,R.value=``}function _t(e){I.value=`edit`,L.value=e.id,Y.name=e.name,Y.phone=e.phone,Y.nationalId=e.nationalId,Y.customerType=e.customerType,Y.companyName=e.companyName,Y.isActive=e.isActive,Y.levelDefId=e.levelDefId??``,Y.assignedAgentId=e.assignedAgentId??``,Y.brandIds=[...e.brandIds??[]],Y.appRole=e.appRole===`agent`?`agent`:`customer`,Y.agentCode=e.agentCode??``,R.value=``}function Q(){I.value=null,L.value=null,R.value=``}async function vt(){if(!ft.value){R.value=`نام، تلفن و شناسه ملی الزامی هستند.`;return}z.value=!0;let e={name:Y.name.trim(),phone:Y.phone.trim(),nationalId:Y.nationalId.trim(),customerType:Y.customerType,isActive:Y.isActive,levelDefId:Y.levelDefId||null,assignedAgentId:Y.assignedAgentId||null,brandIds:[...Y.brandIds],appRole:Y.appRole,agentCode:Y.appRole===`agent`&&Y.agentCode.trim()||null};try{if(I.value===`edit`&&L.value){let t=await k.update(L.value,e),n=u.value.findIndex(e=>e.id===L.value);n!==-1&&(u.value[n]={...u.value[n],...t})}else{let t=await k.create(e);u.value.unshift(t)}B.success(I.value===`edit`?`اطلاعات مشتری بهروزرسانی شد.`:`مشتری جدید ثبت شد.`),Q(),e.appRole===`agent`&&ht()}catch(e){B.error(e instanceof S?e.message:`ذخیره مشتری انجام نشد.`)}finally{z.value=!1}}async function $(e,t){await k.setActive(e,t)}function yt(){N.value=``}return(e,n)=>(f(),l(`div`,ce,[c(`div`,le,[n[13]||=c(`div`,null,[c(`h1`,{class:`admin-page-header__title`},`مشتریان و واسطهها`)],-1),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:gt},t(P.value===`agent`?`افزودن واسطه`:`افزودن مشتری`),1)]),c(`div`,ue,[c(`button`,{type:`button`,role:`tab`,class:r([`customers-page__tab`,{"is-active":P.value===`customer`}]),"aria-selected":P.value===`customer`,onClick:n[0]||=e=>Z(`customer`)},` مشتریان `,10,de),c(`button`,{type:`button`,role:`tab`,class:r([`customers-page__tab`,{"is-active":P.value===`agent`}]),"aria-selected":P.value===`agent`,onClick:n[1]||=e=>Z(`agent`)},` واسطهها `,10,fe)]),c(`div`,pe,[d(C,{name:`search`,size:18}),o(c(`input`,{"onUpdate:modelValue":n[2]||=e=>N.value=e,type:`search`,class:`customers-page__search-input`,placeholder:`جستجو در نام، تلفن، شناسه ملی...`},null,512),[[b,N.value]])]),F.value?(f(),p(ie,{key:0,variant:`table`})):X.value.length?(f(),l(`div`,me,[c(`div`,he,[c(`table`,ge,[c(`thead`,null,[c(`tr`,null,[c(`th`,null,t(P.value===`agent`?`نام واسطه`:`نام مشتری`),1),n[14]||=c(`th`,null,`تلفن`,-1),n[15]||=c(`th`,null,`نقش`,-1),P.value===`agent`?(f(),l(`th`,_e,`کد واسطه`)):y(``,!0),P.value===`customer`?(f(),l(`th`,ve,`نوع`)):y(``,!0),P.value===`customer`?(f(),l(`th`,ye,`سطح`)):y(``,!0),P.value===`customer`?(f(),l(`th`,be,`واسطه`)):y(``,!0),P.value===`customer`?(f(),l(`th`,xe,`شرکت`)):y(``,!0),n[16]||=c(`th`,{class:`numeric`},`تعداد سفارش`,-1),n[17]||=c(`th`,{class:`numeric`},`مجموع متراژ`,-1),n[18]||=c(`th`,{class:`status`},`وضعیت`,-1),n[19]||=c(`th`,null,`تاریخ ثبت`,-1),n[20]||=c(`th`,{class:`actions`},`عملیات`,-1)])]),c(`tbody`,null,[(f(!0),l(h,null,a(X.value,e=>(f(),l(`tr`,{key:e.id},[c(`td`,null,t(V(e.name)),1),c(`td`,null,t(V(e.phone)),1),c(`td`,null,t(K(e.appRole)),1),P.value===`agent`?(f(),l(`td`,Se,t(V(e.agentCode)),1)):y(``,!0),P.value===`customer`?(f(),l(`td`,Ce,t(V(_(j)[e.customerType])),1)):y(``,!0),P.value===`customer`?(f(),l(`td`,we,t(V(e.levelLabel)),1)):y(``,!0),P.value===`customer`?(f(),l(`td`,Te,t(V(e.assignedAgentName)),1)):y(``,!0),P.value===`customer`?(f(),l(`td`,Ee,t(V(e.companyName)),1)):y(``,!0),c(`td`,De,t(V(e.orderCount)),1),c(`td`,Oe,t(H(e.totalMeterage)),1),c(`td`,ke,[d(M,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`td`,null,t(V(_(D)(e.registeredAt))),1),c(`td`,Ae,[c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>_t(e)},` ویرایش `,8,je)])]))),128))])])])])):(f(),p(oe,{key:1,class:`admin-card`,icon:`customers`,title:N.value.trim()?`نتیجهای یافت نشد`:P.value===`agent`?`واسطهای ثبت نشده`:`مشتریان ثبت شده`,description:N.value.trim()?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:P.value===`agent`?`برای شروع، اولین واسطه را ثبت کنید.`:`برای شروع، اولین مشتری را ثبت کنید.`},{default:i(()=>[N.value.trim()?(f(),l(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:yt},` پاک کردن جستجو `)):(f(),l(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:gt},t(P.value===`agent`?`افزودن واسطه`:`افزودن مشتری`),1))]),_:1},8,[`title`,`description`])),!F.value&&X.value.length?(f(),l(`div`,Me,[(f(!0),l(h,null,a(X.value,e=>(f(),l(`article`,{key:e.id,class:`admin-card-item`},[c(`div`,Ne,[c(`p`,Pe,t(V(e.name)),1),c(`div`,Fe,[d(M,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`]),c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>_t(e)},` ویرایش `,8,Ie)])]),c(`div`,Le,[c(`span`,null,t(V(e.phone)),1),P.value===`agent`?(f(),l(`span`,Re,`کد: `+t(V(e.agentCode)),1)):y(``,!0),P.value===`customer`?(f(),l(`span`,ze,t(V(_(j)[e.customerType])),1)):y(``,!0),P.value===`customer`?(f(),l(`span`,Be,t(V(e.levelLabel)),1)):y(``,!0),P.value===`customer`?(f(),l(`span`,Ve,`واسطه: `+t(V(e.assignedAgentName)),1)):y(``,!0),P.value===`customer`?(f(),l(`span`,He,t(V(e.companyName)),1)):y(``,!0),c(`span`,null,t(V(e.orderCount))+` سفارش · `+t(H(e.totalMeterage)),1)])]))),128))])):y(``,!0),d(T,{open:ut.value,title:dt.value,size:`lg`,onClose:Q},{footer:i(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Q},`انصراف`),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!ft.value||z.value,onClick:vt},[z.value?(f(),l(`span`,ct)):y(``,!0),m(` `+t(I.value===`edit`?`ذخیره تغییرات`:Y.appRole===`agent`?`ثبت واسطه`:`ثبت مشتری`),1)],8,st)]),default:i(()=>[c(`form`,{class:`admin-form`,onSubmit:x(vt,[`prevent`])},[R.value?(f(),l(`p`,Ue,t(R.value),1)):y(``,!0),c(`div`,We,[n[21]||=c(`label`,{for:`customer-name`},[m(`نام مشتری `),c(`span`,{class:`admin-form__required`},`*`)],-1),o(c(`input`,{id:`customer-name`,"onUpdate:modelValue":n[3]||=e=>Y.name=e,type:`text`,class:`admin-input`},null,512),[[b,Y.name]])]),c(`div`,Ge,[c(`div`,Ke,[n[22]||=c(`label`,{for:`customer-phone`},[m(`تلفن `),c(`span`,{class:`admin-form__required`},`*`)],-1),o(c(`input`,{id:`customer-phone`,"onUpdate:modelValue":n[4]||=e=>Y.phone=e,type:`tel`,class:`admin-input`,inputmode:`tel`,dir:`ltr`},null,512),[[b,Y.phone]])]),c(`div`,qe,[n[23]||=c(`label`,{for:`customer-national-id`},[m(`شناسه ملی `),c(`span`,{class:`admin-form__required`},`*`)],-1),o(c(`input`,{id:`customer-national-id`,"onUpdate:modelValue":n[5]||=e=>Y.nationalId=e,type:`text`,class:`admin-input`,inputmode:`numeric`,dir:`ltr`},null,512),[[b,Y.nationalId]])])]),c(`div`,Je,[c(`div`,Ye,[n[24]||=c(`label`,null,`نوع مشتری`,-1),d(A,{modelValue:Y.customerType,"onUpdate:modelValue":n[6]||=e=>Y.customerType=e,block:``,"aria-label":`نوع مشتری`,options:U},null,8,[`modelValue`])]),c(`div`,Xe,[n[25]||=c(`label`,{for:`customer-company`},`شرکت مرتبط`,-1),o(c(`input`,{id:`customer-company`,"onUpdate:modelValue":n[7]||=e=>Y.companyName=e,type:`text`,class:`admin-input`},null,512),[[b,Y.companyName]])])]),c(`div`,Ze,[c(`div`,Qe,[n[26]||=c(`label`,null,`سطح`,-1),d(A,{modelValue:Y.levelDefId,"onUpdate:modelValue":n[8]||=e=>Y.levelDefId=e,block:``,"aria-label":`سطح مشتری`,options:q.value},null,8,[`modelValue`,`options`])]),c(`div`,$e,[n[27]||=c(`label`,null,`واسطه`,-1),d(A,{modelValue:Y.assignedAgentId,"onUpdate:modelValue":n[9]||=e=>Y.assignedAgentId=e,block:``,"aria-label":`واسطه اختصاصیافته`,options:lt.value},null,8,[`modelValue`,`options`])])]),c(`div`,et,[c(`div`,tt,[n[28]||=c(`label`,null,`نقش در اپ`,-1),d(A,{modelValue:Y.appRole,"onUpdate:modelValue":n[10]||=e=>Y.appRole=e,block:``,"aria-label":`نقش در اپ`,options:W},null,8,[`modelValue`])]),Y.appRole===`agent`?(f(),l(`div`,nt,[n[29]||=c(`label`,{for:`customer-agent-code`},`کد واسطه`,-1),o(c(`input`,{id:`customer-agent-code`,"onUpdate:modelValue":n[11]||=e=>Y.agentCode=e,type:`text`,class:`admin-input`,dir:`ltr`},null,512),[[b,Y.agentCode]])])):y(``,!0)]),E.value.length?(f(),l(`div`,rt,[n[30]||=c(`label`,null,`برندها`,-1),c(`div`,it,[(f(!0),l(h,null,a(E.value,e=>(f(),l(`label`,{key:e.id,class:`customers-page__brand`},[c(`input`,{type:`checkbox`,checked:Y.brandIds.includes(e.id),onChange:t=>pt(e.id,t.target.checked)},null,40,at),c(`span`,null,t(e.name),1)]))),128))])])):y(``,!0),c(`div`,ot,[d(ae,{modelValue:Y.isActive,"onUpdate:modelValue":n[12]||=e=>Y.isActive=e,label:`وضعیت`},null,8,[`modelValue`])]),I.value===`edit`&&L.value&&Y.appRole===`customer`?(f(),p(se,{key:2,"customer-id":L.value},null,8,[`customer-id`])):y(``,!0)],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-db05c8d1`]]);export{q as default}; |