This commit is contained in:
2026-09-30 09:54:04 +03:30
parent 38d6b0d978
commit 9cf546bf8e
75 changed files with 872 additions and 56 deletions
@@ -1 +1 @@
import{D as e,G as t,K as n,M as r,Pt as i,U as a,_ as o,d as s,f as c,g as l,l as u,nt as d,o as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{s as g,u as _}from"./BasicIcon-ba1FsUKx.js";import{t as v}from"./http-CU_N-R2R.js";import{r as y,t as b}from"./index-BSpFi5xB.js";import{t as x}from"./addresses-tV-zgZYG.js";import{t as S}from"./catalogRequests-COPPKp3x.js";var C=`درخواست دریافت فیزیکی کالیته برای شما ثبت شد و به زودی همکاران ما برای شما خواهند آورد`;function w(){let e=S(),t=b(),n=d(!1),r=d(!1),i=d(null),a=d(``);function o(){r.value=!1,i.value=null,a.value=``}async function s(n,r){let i=await e.create({items:[{productId:n.id,productName:n.name,productCode:n.code,quantity:1}],note:`آدرس: ${r}`});return i.success?(t.show(C),!0):(a.value=i.message,!1)}async function c(e){a.value=``;let t=``;try{let e=await x.list();t=(e.find(e=>e.isDefault)??e[0])?.text.trim()??``}catch{t=``}if(t){n.value=!0;try{await s(e,t)}finally{n.value=!1}return}i.value=e,r.value=!0}async function l(e){let t=e.trim();if(!t)return a.value=`آدرس الزامی است.`,!1;let r=i.value;if(!r)return!1;a.value=``,n.value=!0;try{await x.create({text:t});let e=await s(r,t);return e&&o(),e}catch(e){return a.value=e instanceof v||e instanceof Error?e.message:`ذخیره آدرس ناموفق بود.`,!1}finally{n.value=!1}}return{requesting:n,addressModalOpen:r,addressError:a,requestCatalog:c,submitAddressAndRequest:l,closeAddressModal:o}}var T={class:`dialog card address-modal`},E={class:`address-modal__field`},D={key:0,class:`address-modal__error`},O={class:`dialog-actions address-modal__actions`},k=p(h({__name:`AddressCompletionModal`,props:{open:{type:Boolean},loading:{type:Boolean},error:{}},emits:[`close`,`submit`],setup(p,{emit:h}){let v=p,b=h,x=d(``);a(()=>v.open,e=>{e&&(x.value=``)});function S(e){e.key===`Escape`&&v.open&&b(`close`)}a(()=>v.open,e=>{document.body.style.overflow=e?`hidden`:``,e?window.addEventListener(`keydown`,S):window.removeEventListener(`keydown`,S)},{immediate:!0}),e(()=>{document.body.style.overflow=``,window.removeEventListener(`keydown`,S)});function C(){b(`submit`,x.value)}return(e,a)=>(r(),m(f,{to:`body`},[p.open?(r(),c(`div`,{key:0,class:`dialog-overlay address-modal-overlay`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`address-modal-title`,onClick:a[2]||=_(e=>b(`close`),[`self`])},[u(`div`,T,[a[5]||=u(`h3`,{id:`address-modal-title`,class:`address-modal__title`},`تکمیل آدرس`,-1),a[6]||=u(`p`,{class:`address-modal__hint`},` برای ارسال کالیته فیزیکی، آدرس محل فعالیت خود را وارد کنید. این آدرس در اطلاعات کاربری شما ذخیره می‌شود. `,-1),u(`label`,E,[a[3]||=u(`span`,{class:`form-label`},`آدرس`,-1),n(u(`textarea`,{"onUpdate:modelValue":a[0]||=e=>x.value=e,class:`address-modal__textarea`,rows:`3`,maxlength:`500`,placeholder:`آدرس کامل محل فعالیت`},null,512),[[g,x.value]])]),p.error?(r(),c(`p`,D,i(p.error),1)):s(``,!0),u(`div`,O,[o(y,{variant:`outline`,disabled:p.loading,onClick:a[1]||=e=>b(`close`)},{default:t(()=>[...a[4]||=[l(` انصراف `,-1)]]),_:1},8,[`disabled`]),o(y,{disabled:p.loading,onClick:C},{default:t(()=>[l(i(p.loading?`در حال ثبت...`:`ثبت درخواست`),1)]),_:1},8,[`disabled`])])])])):s(``,!0)]))}}),[[`__scopeId`,`data-v-0a7c2418`]]);export{w as n,k as t};
import{D as e,G as t,K as n,M as r,Pt as i,U as a,_ as o,d as s,f as c,g as l,l as u,nt as d,o as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{s as g,u as _}from"./BasicIcon-ba1FsUKx.js";import{t as v}from"./http-CU_N-R2R.js";import{r as y,t as b}from"./index-BPUhS8CY.js";import{t as x}from"./addresses-tV-zgZYG.js";import{t as S}from"./catalogRequests-COPPKp3x.js";var C=`درخواست دریافت فیزیکی کالیته برای شما ثبت شد و به زودی همکاران ما برای شما خواهند آورد`;function w(){let e=S(),t=b(),n=d(!1),r=d(!1),i=d(null),a=d(``);function o(){r.value=!1,i.value=null,a.value=``}async function s(n,r){let i=await e.create({items:[{productId:n.id,productName:n.name,productCode:n.code,quantity:1}],note:`آدرس: ${r}`});return i.success?(t.show(C),!0):(a.value=i.message,!1)}async function c(e){a.value=``;let t=``;try{let e=await x.list();t=(e.find(e=>e.isDefault)??e[0])?.text.trim()??``}catch{t=``}if(t){n.value=!0;try{await s(e,t)}finally{n.value=!1}return}i.value=e,r.value=!0}async function l(e){let t=e.trim();if(!t)return a.value=`آدرس الزامی است.`,!1;let r=i.value;if(!r)return!1;a.value=``,n.value=!0;try{await x.create({text:t});let e=await s(r,t);return e&&o(),e}catch(e){return a.value=e instanceof v||e instanceof Error?e.message:`ذخیره آدرس ناموفق بود.`,!1}finally{n.value=!1}}return{requesting:n,addressModalOpen:r,addressError:a,requestCatalog:c,submitAddressAndRequest:l,closeAddressModal:o}}var T={class:`dialog card address-modal`},E={class:`address-modal__field`},D={key:0,class:`address-modal__error`},O={class:`dialog-actions address-modal__actions`},k=p(h({__name:`AddressCompletionModal`,props:{open:{type:Boolean},loading:{type:Boolean},error:{}},emits:[`close`,`submit`],setup(p,{emit:h}){let v=p,b=h,x=d(``);a(()=>v.open,e=>{e&&(x.value=``)});function S(e){e.key===`Escape`&&v.open&&b(`close`)}a(()=>v.open,e=>{document.body.style.overflow=e?`hidden`:``,e?window.addEventListener(`keydown`,S):window.removeEventListener(`keydown`,S)},{immediate:!0}),e(()=>{document.body.style.overflow=``,window.removeEventListener(`keydown`,S)});function C(){b(`submit`,x.value)}return(e,a)=>(r(),m(f,{to:`body`},[p.open?(r(),c(`div`,{key:0,class:`dialog-overlay address-modal-overlay`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`address-modal-title`,onClick:a[2]||=_(e=>b(`close`),[`self`])},[u(`div`,T,[a[5]||=u(`h3`,{id:`address-modal-title`,class:`address-modal__title`},`تکمیل آدرس`,-1),a[6]||=u(`p`,{class:`address-modal__hint`},` برای ارسال کالیته فیزیکی، آدرس محل فعالیت خود را وارد کنید. این آدرس در اطلاعات کاربری شما ذخیره می‌شود. `,-1),u(`label`,E,[a[3]||=u(`span`,{class:`form-label`},`آدرس`,-1),n(u(`textarea`,{"onUpdate:modelValue":a[0]||=e=>x.value=e,class:`address-modal__textarea`,rows:`3`,maxlength:`500`,placeholder:`آدرس کامل محل فعالیت`},null,512),[[g,x.value]])]),p.error?(r(),c(`p`,D,i(p.error),1)):s(``,!0),u(`div`,O,[o(y,{variant:`outline`,disabled:p.loading,onClick:a[1]||=e=>b(`close`)},{default:t(()=>[...a[4]||=[l(` انصراف `,-1)]]),_:1},8,[`disabled`]),o(y,{disabled:p.loading,onClick:C},{default:t(()=>[l(i(p.loading?`در حال ثبت...`:`ثبت درخواست`),1)]),_:1},8,[`disabled`])])])])):s(``,!0)]))}}),[[`__scopeId`,`data-v-0a7c2418`]]);export{w as n,k as t};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{I as e,M as t,_ as n,d as r,f as i,l as a,t as o,ut as s,v as c}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as l}from"./index-BSpFi5xB.js";import{t as u}from"./IconChevronBack-DytWz6TD.js";import{t as d}from"./nademitex-auth-logo-CQhPwje_.js";var f={class:`auth-shell`},p={class:`auth-shell__body`},m={class:`auth-shell__brand`},h=[`src`],g=o(c({__name:`AuthShell`,props:{backTo:{}},setup(o){let c=l();return(l,g)=>(t(),i(`div`,f,[o.backTo?(t(),i(`button`,{key:0,type:`button`,class:`auth-shell__back`,"aria-label":`بازگشت`,onClick:g[0]||=e=>s(c).push(o.backTo)},[n(u,{size:22,color:`#1e293b`})])):r(``,!0),a(`div`,p,[a(`div`,m,[a(`img`,{class:`auth-shell__logo`,src:s(d),alt:`Nademi Tex`,draggable:`false`},null,8,h)]),e(l.$slots,`default`,{},void 0,!0)])]))}}),[[`__scopeId`,`data-v-3dfa06a5`]]);export{g as t};
import{I as e,M as t,_ as n,d as r,f as i,l as a,t as o,ut as s,v as c}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as l}from"./index-BPUhS8CY.js";import{t as u}from"./IconChevronBack-DytWz6TD.js";import{t as d}from"./nademitex-auth-logo-CQhPwje_.js";var f={class:`auth-shell`},p={class:`auth-shell__body`},m={class:`auth-shell__brand`},h=[`src`],g=o(c({__name:`AuthShell`,props:{backTo:{}},setup(o){let c=l();return(l,g)=>(t(),i(`div`,f,[o.backTo?(t(),i(`button`,{key:0,type:`button`,class:`auth-shell__back`,"aria-label":`بازگشت`,onClick:g[0]||=e=>s(c).push(o.backTo)},[n(u,{size:22,color:`#1e293b`})])):r(``,!0),a(`div`,p,[a(`div`,m,[a(`img`,{class:`auth-shell__logo`,src:s(d),alt:`Nademi Tex`,draggable:`false`},null,8,h)]),e(l.$slots,`default`,{},void 0,!0)])]))}}),[[`__scopeId`,`data-v-3dfa06a5`]]);export{g as t};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{F as e,G as t,M as n,Pt as r,U as i,_ as a,c as o,f as s,g as c,i as l,l as u,nt as ee,t as te,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as m}from"./BasicIcon-ba1FsUKx.js";import{i as ne,n as re}from"./format-C72AoJ2H.js";import{t as ie}from"./catalog-DvXpKfLO.js";import{A as ae,f as oe,r as h}from"./index-BSpFi5xB.js";import{t as se}from"./PageHeader-DpR4Zxvt.js";import{t as ce}from"./useRequirePricedOrder-CQ0zBqU7.js";var g=p({__name:`IconSuccessCircle`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(e){return(t,r)=>(n(),d(m,{icon:`vuesax-linear:tick-circle`,size:e.size,"stroke-width":e.strokeWidth,color:e.color},null,8,[`size`,`stroke-width`,`color`]))}}),le={class:`page cash-mobile-page mobile-only`},ue={class:`cash-page__scroll page__scroll`},_={class:`cash-page__success cash-page__success--done`},v={class:`cash-page__success-title`},y={class:`cash-page__success-subtitle`},b={class:`accounts-panel`},x={class:`accounts-panel__title`},S={class:`bank-card__head`},C={class:`bank-card__name`},w={class:`bank-card__icon`,"aria-hidden":`true`},T={class:`bank-card__field`},E={class:`bank-card__value`,dir:`ltr`},D={class:`bank-card__field`},O={class:`bank-card__value`,dir:`ltr`},k={class:`cash-page__footer`},A={class:`desktop-checkout-shell cash-desktop-page desktop-only`},j={class:`desktop-page__head`},M={class:`desktop-page__subtitle`},N={class:`cash-page__success cash-page__success--done`},P={class:`cash-page__success-title`},F={class:`accounts-panel`},I={class:`accounts-panel__title`},de={class:`desktop-grid-2`},L={class:`bank-card__head`},R={class:`bank-card__name`},z={class:`bank-card__icon`,"aria-hidden":`true`},B={class:`bank-card__field`},V={class:`bank-card__value`,dir:`ltr`},H={class:`bank-card__field`},fe={class:`bank-card__value`,dir:`ltr`},pe={class:`cash-desktop-page__actions`},U=te(p({__name:`CashSettlementView`,setup(te){let d=ae(),p=oe(),m=ie(),U=ee([]),{orderId:W,order:G}=ce(),K=o(()=>G.value?.companyName??``);i(W,async e=>{e&&!p.getOrderById(e)&&await p.fetchOrder(e)},{immediate:!0}),i(()=>G.value?.id,async e=>{if(!e||!G.value){U.value=[];return}m.companies.length||await m.loadCompanies(),U.value=await p.getBankAccountsForOrder(G.value)},{immediate:!0});let q=o(()=>G.value?.finalAmount?re(G.value.finalAmount):`—`),J=o(()=>{let e=G.value?.cashInvoiceExpiresAt;return e?`مهلت پرداخت این فاکتور تا ${ne(e)} است.`:`مبلغ فاکتور را به یکی از حساب‌های زیر واریز و رسید را ثبت کنید.`}),Y=o(()=>{let e=K.value.replace(/^شرکت\s+/u,``);return e?`شماره حساب‌های واریز — ${e}`:`شماره حساب‌های واریز`});function X(e){return e.replace(/\D/g,``).replace(/(\d{4})(?=\d)/g,`$1 `).trim()}function Z(e){return e.replace(/\s/g,``).toUpperCase().replace(/(.{4})/g,`$1 `).trim()}function Q(){d.replace(`/orders/${W.value}?track=1`)}function $(){d.replace(`/orders/${W.value}?track=1&receipt=1`)}return(i,o)=>(n(),s(l,null,[u(`div`,le,[a(se,{title:`تسویه نقدی`,"show-back":``,centered:``,onBack:o[0]||=e=>f(d).push(`/orders/${f(W)}`)}),u(`div`,ue,[u(`div`,_,[a(g,{size:56}),u(`p`,v,`مبلغ قابل پرداخت `+r(q.value),1),u(`p`,y,r(J.value),1)]),u(`section`,b,[u(`h2`,x,r(Y.value),1),(n(!0),s(l,null,e(U.value,e=>(n(),s(`article`,{key:e.id,class:`bank-card`},[u(`div`,S,[u(`span`,C,r(e.bankName),1),u(`span`,w,r(e.bankName.charAt(0)),1)]),u(`div`,T,[o[1]||=u(`span`,{class:`bank-card__label`},`شماره کارت`,-1),u(`strong`,E,r(X(e.cardNumber)),1)]),u(`div`,D,[o[2]||=u(`span`,{class:`bank-card__label`},`شماره شبا`,-1),u(`strong`,O,r(Z(e.iban)),1)])]))),128))])]),u(`div`,k,[a(h,{variant:`outline`,block:``,onClick:Q},{default:t(()=>[...o[3]||=[c(`مشاهده سفارش`,-1)]]),_:1}),a(h,{block:``,class:`cash-page__submit`,onClick:$},{default:t(()=>[...o[4]||=[c(` ثبت رسید پرداخت `,-1)]]),_:1})])]),u(`div`,A,[u(`header`,j,[o[5]||=u(`h1`,{class:`desktop-page__title`},`تسویه نقدی`,-1),u(`p`,M,r(J.value),1)]),u(`div`,N,[a(g,{size:56}),u(`p`,P,`مبلغ قابل پرداخت `+r(q.value),1)]),u(`section`,F,[u(`h2`,I,r(Y.value),1),u(`div`,de,[(n(!0),s(l,null,e(U.value,e=>(n(),s(`article`,{key:e.id,class:`bank-card`},[u(`div`,L,[u(`span`,R,r(e.bankName),1),u(`span`,z,r(e.bankName.charAt(0)),1)]),u(`div`,B,[o[6]||=u(`span`,{class:`bank-card__label`},`شماره کارت`,-1),u(`strong`,V,r(X(e.cardNumber)),1)]),u(`div`,H,[o[7]||=u(`span`,{class:`bank-card__label`},`شماره شبا`,-1),u(`strong`,fe,r(Z(e.iban)),1)])]))),128))])]),u(`div`,pe,[a(h,{variant:`outline`,class:`desktop-btn-compact`,onClick:Q},{default:t(()=>[...o[8]||=[c(` مشاهده سفارش `,-1)]]),_:1}),a(h,{class:`desktop-btn-compact`,onClick:$},{default:t(()=>[...o[9]||=[c(` ثبت رسید پرداخت `,-1)]]),_:1})])])],64))}}),[[`__scopeId`,`data-v-c299caf6`]]);export{U as default};
import{F as e,G as t,M as n,Pt as r,U as i,_ as a,c as o,f as s,g as c,i as l,l as u,nt as ee,t as te,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as m}from"./BasicIcon-ba1FsUKx.js";import{i as ne,n as re}from"./format-C72AoJ2H.js";import{t as ie}from"./catalog-DvXpKfLO.js";import{A as ae,f as oe,r as h}from"./index-BPUhS8CY.js";import{t as se}from"./PageHeader-CG1ktltl.js";import{t as ce}from"./useRequirePricedOrder-XmwhrUqA.js";var g=p({__name:`IconSuccessCircle`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(e){return(t,r)=>(n(),d(m,{icon:`vuesax-linear:tick-circle`,size:e.size,"stroke-width":e.strokeWidth,color:e.color},null,8,[`size`,`stroke-width`,`color`]))}}),le={class:`page cash-mobile-page mobile-only`},ue={class:`cash-page__scroll page__scroll`},_={class:`cash-page__success cash-page__success--done`},v={class:`cash-page__success-title`},y={class:`cash-page__success-subtitle`},b={class:`accounts-panel`},x={class:`accounts-panel__title`},S={class:`bank-card__head`},C={class:`bank-card__name`},w={class:`bank-card__icon`,"aria-hidden":`true`},T={class:`bank-card__field`},E={class:`bank-card__value`,dir:`ltr`},D={class:`bank-card__field`},O={class:`bank-card__value`,dir:`ltr`},k={class:`cash-page__footer`},A={class:`desktop-checkout-shell cash-desktop-page desktop-only`},j={class:`desktop-page__head`},M={class:`desktop-page__subtitle`},N={class:`cash-page__success cash-page__success--done`},P={class:`cash-page__success-title`},F={class:`accounts-panel`},I={class:`accounts-panel__title`},de={class:`desktop-grid-2`},L={class:`bank-card__head`},R={class:`bank-card__name`},z={class:`bank-card__icon`,"aria-hidden":`true`},B={class:`bank-card__field`},V={class:`bank-card__value`,dir:`ltr`},H={class:`bank-card__field`},fe={class:`bank-card__value`,dir:`ltr`},pe={class:`cash-desktop-page__actions`},U=te(p({__name:`CashSettlementView`,setup(te){let d=ae(),p=oe(),m=ie(),U=ee([]),{orderId:W,order:G}=ce(),K=o(()=>G.value?.companyName??``);i(W,async e=>{e&&!p.getOrderById(e)&&await p.fetchOrder(e)},{immediate:!0}),i(()=>G.value?.id,async e=>{if(!e||!G.value){U.value=[];return}m.companies.length||await m.loadCompanies(),U.value=await p.getBankAccountsForOrder(G.value)},{immediate:!0});let q=o(()=>G.value?.finalAmount?re(G.value.finalAmount):`—`),J=o(()=>{let e=G.value?.cashInvoiceExpiresAt;return e?`مهلت پرداخت این فاکتور تا ${ne(e)} است.`:`مبلغ فاکتور را به یکی از حساب‌های زیر واریز و رسید را ثبت کنید.`}),Y=o(()=>{let e=K.value.replace(/^شرکت\s+/u,``);return e?`شماره حساب‌های واریز — ${e}`:`شماره حساب‌های واریز`});function X(e){return e.replace(/\D/g,``).replace(/(\d{4})(?=\d)/g,`$1 `).trim()}function Z(e){return e.replace(/\s/g,``).toUpperCase().replace(/(.{4})/g,`$1 `).trim()}function Q(){d.replace(`/orders/${W.value}?track=1`)}function $(){d.replace(`/orders/${W.value}?track=1&receipt=1`)}return(i,o)=>(n(),s(l,null,[u(`div`,le,[a(se,{title:`تسویه نقدی`,"show-back":``,centered:``,onBack:o[0]||=e=>f(d).push(`/orders/${f(W)}`)}),u(`div`,ue,[u(`div`,_,[a(g,{size:56}),u(`p`,v,`مبلغ قابل پرداخت `+r(q.value),1),u(`p`,y,r(J.value),1)]),u(`section`,b,[u(`h2`,x,r(Y.value),1),(n(!0),s(l,null,e(U.value,e=>(n(),s(`article`,{key:e.id,class:`bank-card`},[u(`div`,S,[u(`span`,C,r(e.bankName),1),u(`span`,w,r(e.bankName.charAt(0)),1)]),u(`div`,T,[o[1]||=u(`span`,{class:`bank-card__label`},`شماره کارت`,-1),u(`strong`,E,r(X(e.cardNumber)),1)]),u(`div`,D,[o[2]||=u(`span`,{class:`bank-card__label`},`شماره شبا`,-1),u(`strong`,O,r(Z(e.iban)),1)])]))),128))])]),u(`div`,k,[a(h,{variant:`outline`,block:``,onClick:Q},{default:t(()=>[...o[3]||=[c(`مشاهده سفارش`,-1)]]),_:1}),a(h,{block:``,class:`cash-page__submit`,onClick:$},{default:t(()=>[...o[4]||=[c(` ثبت رسید پرداخت `,-1)]]),_:1})])]),u(`div`,A,[u(`header`,j,[o[5]||=u(`h1`,{class:`desktop-page__title`},`تسویه نقدی`,-1),u(`p`,M,r(J.value),1)]),u(`div`,N,[a(g,{size:56}),u(`p`,P,`مبلغ قابل پرداخت `+r(q.value),1)]),u(`section`,F,[u(`h2`,I,r(Y.value),1),u(`div`,de,[(n(!0),s(l,null,e(U.value,e=>(n(),s(`article`,{key:e.id,class:`bank-card`},[u(`div`,L,[u(`span`,R,r(e.bankName),1),u(`span`,z,r(e.bankName.charAt(0)),1)]),u(`div`,B,[o[6]||=u(`span`,{class:`bank-card__label`},`شماره کارت`,-1),u(`strong`,V,r(X(e.cardNumber)),1)]),u(`div`,H,[o[7]||=u(`span`,{class:`bank-card__label`},`شماره شبا`,-1),u(`strong`,fe,r(Z(e.iban)),1)])]))),128))])]),u(`div`,pe,[a(h,{variant:`outline`,class:`desktop-btn-compact`,onClick:Q},{default:t(()=>[...o[8]||=[c(` مشاهده سفارش `,-1)]]),_:1}),a(h,{class:`desktop-btn-compact`,onClick:$},{default:t(()=>[...o[9]||=[c(` ثبت رسید پرداخت `,-1)]]),_:1})])])],64))}}),[[`__scopeId`,`data-v-c299caf6`]]);export{U as default};
@@ -1 +1 @@
import{F as e,M as t,Pt as n,U as r,_ as i,c as a,f as o,i as s,k as c,l,nt as u,t as d,u as f,ut as p,v as m}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as h}from"./catalog-DvXpKfLO.js";import{A as g,C as _,k as v}from"./index-BSpFi5xB.js";import{t as y}from"./EmptyState-DYhkpGhZ.js";import{t as b}from"./PageHeader-DpR4Zxvt.js";import{t as x}from"./SearchField-dVDn9y5S.js";import{t as S}from"./PageSkeleton-DYdjm4l9.js";import{t as C}from"./catalogNavigation-BwOBRghQ.js";var w={class:`page catalog-list-page`},T={class:`catalog-list-page__desk-head desktop-only`},E={class:`page__scroll page__scroll--with-nav catalog-list-page__scroll`},D={key:1,class:`catalog-list`},O=[`onClick`],k={class:`catalog-card__icon`},A={class:`catalog-card__info`},j={class:`catalog-card__count`},M=d(m({__name:`CatalogListView`,setup(d){let m=v(),M=g(),N=h(),P=u(!0),F=a(()=>m.params.companyId),I=a(()=>N.getCompany(F.value)),L=u(``),R=a(()=>N.fetchCatalogs(F.value,L.value));async function z(){P.value=!0,N.getCompany(F.value)||await N.loadCompanies(),await N.loadCatalogs(F.value),P.value=!1}c(z),r(F,z);function B(e){C(M,e)}function V(e){let t=N.getCatalog(e);return t?.productCount==null?N.fetchProducts(e).length:t.productCount}return(r,a)=>(t(),o(`div`,w,[i(b,{class:`mobile-only`,title:I.value?.name??`کالیته‌ها`,subtitle:`کالیته مورد نظر را انتخاب کنید`,"show-back":``,centered:``,onBack:a[0]||=e=>p(M).push(`/catalogs`)},null,8,[`title`]),l(`header`,T,[l(`h1`,null,n(I.value?.name??`کالیته‌ها`),1),a[2]||=l(`p`,null,`کالیته مورد نظر را انتخاب کنید`,-1)]),i(x,{modelValue:L.value,"onUpdate:modelValue":a[1]||=e=>L.value=e,placeholder:`جستجو بر اساس کد یا نام کالیته...`,class:`catalog-list-page__search`},null,8,[`modelValue`]),l(`div`,E,[P.value?(t(),f(S,{key:0,variant:`cards`,rows:5})):R.value.length>0?(t(),o(`div`,D,[(t(!0),o(s,null,e(R.value,e=>(t(),o(`button`,{key:e.id,type:`button`,class:`catalog-card`,onClick:t=>B(e.id)},[l(`span`,k,[i(_,{size:22})]),l(`div`,A,[l(`h3`,null,`کالیته کد `+n(e.code),1),l(`p`,null,n(e.name),1)]),l(`span`,j,n(V(e.id))+` محصول`,1)],8,O))),128))])):(t(),f(y,{key:2,variant:L.value?`search`:`catalogs`,message:L.value?`با این جستجو کالیته‌ای پیدا نشد`:`برای این شرکت هنوز کالیته‌ای ثبت نشده است`},null,8,[`variant`,`message`]))])]))}}),[[`__scopeId`,`data-v-a8edb49d`]]);export{M as default};
import{F as e,M as t,Pt as n,U as r,_ as i,c as a,f as o,i as s,k as c,l,nt as u,t as d,u as f,ut as p,v as m}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as h}from"./catalog-DvXpKfLO.js";import{A as g,C as _,k as v}from"./index-BPUhS8CY.js";import{t as y}from"./EmptyState-DYhkpGhZ.js";import{t as b}from"./PageHeader-CG1ktltl.js";import{t as x}from"./SearchField-dVDn9y5S.js";import{t as S}from"./PageSkeleton-DYdjm4l9.js";import{t as C}from"./catalogNavigation--EF0Gjvi.js";var w={class:`page catalog-list-page`},T={class:`catalog-list-page__desk-head desktop-only`},E={class:`page__scroll page__scroll--with-nav catalog-list-page__scroll`},D={key:1,class:`catalog-list`},O=[`onClick`],k={class:`catalog-card__icon`},A={class:`catalog-card__info`},j={class:`catalog-card__count`},M=d(m({__name:`CatalogListView`,setup(d){let m=v(),M=g(),N=h(),P=u(!0),F=a(()=>m.params.companyId),I=a(()=>N.getCompany(F.value)),L=u(``),R=a(()=>N.fetchCatalogs(F.value,L.value));async function z(){P.value=!0,N.getCompany(F.value)||await N.loadCompanies(),await N.loadCatalogs(F.value),P.value=!1}c(z),r(F,z);function B(e){C(M,e)}function V(e){let t=N.getCatalog(e);return t?.productCount==null?N.fetchProducts(e).length:t.productCount}return(r,a)=>(t(),o(`div`,w,[i(b,{class:`mobile-only`,title:I.value?.name??`کالیته‌ها`,subtitle:`کالیته مورد نظر را انتخاب کنید`,"show-back":``,centered:``,onBack:a[0]||=e=>p(M).push(`/catalogs`)},null,8,[`title`]),l(`header`,T,[l(`h1`,null,n(I.value?.name??`کالیته‌ها`),1),a[2]||=l(`p`,null,`کالیته مورد نظر را انتخاب کنید`,-1)]),i(x,{modelValue:L.value,"onUpdate:modelValue":a[1]||=e=>L.value=e,placeholder:`جستجو بر اساس کد یا نام کالیته...`,class:`catalog-list-page__search`},null,8,[`modelValue`]),l(`div`,E,[P.value?(t(),f(S,{key:0,variant:`cards`,rows:5})):R.value.length>0?(t(),o(`div`,D,[(t(!0),o(s,null,e(R.value,e=>(t(),o(`button`,{key:e.id,type:`button`,class:`catalog-card`,onClick:t=>B(e.id)},[l(`span`,k,[i(_,{size:22})]),l(`div`,A,[l(`h3`,null,`کالیته کد `+n(e.code),1),l(`p`,null,n(e.name),1)]),l(`span`,j,n(V(e.id))+` محصول`,1)],8,O))),128))])):(t(),f(y,{key:2,variant:L.value?`search`:`catalogs`,message:L.value?`با این جستجو کالیته‌ای پیدا نشد`:`برای این شرکت هنوز کالیته‌ای ثبت نشده است`},null,8,[`variant`,`message`]))])]))}}),[[`__scopeId`,`data-v-a8edb49d`]]);export{M as default};
@@ -1 +1 @@
import{M as e,_ as t,f as n,k as r,v as i}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as a,k as o}from"./index-BSpFi5xB.js";import{t as s}from"./PageSkeleton-DYdjm4l9.js";import{t as c}from"./catalogNavigation-BwOBRghQ.js";var l={class:`page`},u=i({__name:`CatalogProductRedirectView`,setup(i){let u=o(),d=a();return r(()=>{c(d,String(u.params.catalogId??``))}),(r,i)=>(e(),n(`div`,l,[t(s,{variant:`detail`})]))}});export{u as default};
import{M as e,_ as t,f as n,k as r,v as i}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as a,k as o}from"./index-BPUhS8CY.js";import{t as s}from"./PageSkeleton-DYdjm4l9.js";import{t as c}from"./catalogNavigation--EF0Gjvi.js";var l={class:`page`},u=i({__name:`CatalogProductRedirectView`,setup(i){let u=o(),d=a();return r(()=>{c(d,String(u.params.catalogId??``))}),(r,i)=>(e(),n(`div`,l,[t(s,{variant:`detail`})]))}});export{u as default};
@@ -1 +1 @@
import{F as e,M as t,Pt as n,_ as r,d as i,f as a,i as o,k as s,l as c,t as l,ut as u,v as d}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{o as f}from"./format-C72AoJ2H.js";import{A as p}from"./index-BSpFi5xB.js";import{t as m}from"./PageHeader-DpR4Zxvt.js";import{t as h}from"./catalogRequests-COPPKp3x.js";var g={class:`page catalog-requests-page`},_={class:`desktop-page__head desktop-only catalog-requests-desk-head`},v={class:`page__scroll page__scroll--with-nav body`},y={key:0,class:`empty`},b={class:`card__top`},x={class:`badge`},S={key:0,class:`note`},C=l(d({__name:`CatalogRequestsView`,setup(l){let d=p(),C=h();return s(()=>C.hydrate()),(s,l)=>(t(),a(`div`,g,[r(m,{class:`mobile-only`,title:`وضعیت کالیته‌ها`,"show-back":``,centered:``,onBack:l[0]||=e=>u(d).push(`/catalogs`)}),c(`header`,_,[l[3]||=c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`وضعیت کالیته‌ها`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری درخواست‌های کالیته ثبت‌شده`)],-1),c(`button`,{type:`button`,class:`desk-new-btn`,onClick:l[1]||=e=>u(d).push(`/categories`)},` درخواست کالیته جدید `)]),c(`div`,v,[c(`button`,{type:`button`,class:`new-btn mobile-only`,onClick:l[2]||=e=>u(d).push(`/categories`)},` درخواست کالیته جدید `),u(C).sorted.length?i(``,!0):(t(),a(`p`,y,`هنوز درخواستی ثبت نکرده‌اید.`)),(t(!0),a(o,null,e(u(C).sorted,r=>(t(),a(`article`,{key:r.id,class:`card`},[c(`div`,b,[c(`strong`,null,`درخواست `+n(r.id.slice(-6)),1),c(`span`,x,n(u(C).statusLabel(r.status)),1)]),c(`p`,null,n(r.createdAt.slice(0,10)),1),c(`p`,null,n(u(f)(r.items.length))+` قلم`,1),c(`ul`,null,[(t(!0),a(o,null,e(r.items,e=>(t(),a(`li`,{key:e.productId},n(e.productName)+` × `+n(u(f)(e.quantity)),1))),128))]),r.note?(t(),a(`p`,S,n(r.note),1)):i(``,!0)]))),128))])]))}}),[[`__scopeId`,`data-v-9ea8c789`]]);export{C as default};
import{F as e,M as t,Pt as n,_ as r,d as i,f as a,i as o,k as s,l as c,t as l,ut as u,v as d}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{o as f}from"./format-C72AoJ2H.js";import{A as p}from"./index-BPUhS8CY.js";import{t as m}from"./PageHeader-CG1ktltl.js";import{t as h}from"./catalogRequests-COPPKp3x.js";var g={class:`page catalog-requests-page`},_={class:`desktop-page__head desktop-only catalog-requests-desk-head`},v={class:`page__scroll page__scroll--with-nav body`},y={key:0,class:`empty`},b={class:`card__top`},x={class:`badge`},S={key:0,class:`note`},C=l(d({__name:`CatalogRequestsView`,setup(l){let d=p(),C=h();return s(()=>C.hydrate()),(s,l)=>(t(),a(`div`,g,[r(m,{class:`mobile-only`,title:`وضعیت کالیته‌ها`,"show-back":``,centered:``,onBack:l[0]||=e=>u(d).push(`/catalogs`)}),c(`header`,_,[l[3]||=c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`وضعیت کالیته‌ها`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری درخواست‌های کالیته ثبت‌شده`)],-1),c(`button`,{type:`button`,class:`desk-new-btn`,onClick:l[1]||=e=>u(d).push(`/categories`)},` درخواست کالیته جدید `)]),c(`div`,v,[c(`button`,{type:`button`,class:`new-btn mobile-only`,onClick:l[2]||=e=>u(d).push(`/categories`)},` درخواست کالیته جدید `),u(C).sorted.length?i(``,!0):(t(),a(`p`,y,`هنوز درخواستی ثبت نکرده‌اید.`)),(t(!0),a(o,null,e(u(C).sorted,r=>(t(),a(`article`,{key:r.id,class:`card`},[c(`div`,b,[c(`strong`,null,`درخواست `+n(r.id.slice(-6)),1),c(`span`,x,n(u(C).statusLabel(r.status)),1)]),c(`p`,null,n(r.createdAt.slice(0,10)),1),c(`p`,null,n(u(f)(r.items.length))+` قلم`,1),c(`ul`,null,[(t(!0),a(o,null,e(r.items,e=>(t(),a(`li`,{key:e.productId},n(e.productName)+` × `+n(u(f)(e.quantity)),1))),128))]),r.note?(t(),a(`p`,S,n(r.note),1)):i(``,!0)]))),128))])]))}}),[[`__scopeId`,`data-v-9ea8c789`]]);export{C as default};
@@ -1 +1 @@
import{At as e,F as t,M as n,Nt as r,Pt as i,_ as a,c as o,d as s,f as c,i as l,k as u,l as d,nt as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{o as _}from"./format-C72AoJ2H.js";import{t as v}from"./catalog-DvXpKfLO.js";import{A as y,a as b,k as x}from"./index-BSpFi5xB.js";import{t as S}from"./IconChevronBack-DytWz6TD.js";import{t as ee}from"./SearchField-dVDn9y5S.js";import{t as te}from"./PageSkeleton-DYdjm4l9.js";import{i as ne,n as C,r as w,t as T}from"./catalogNavigation-BwOBRghQ.js";import{t as E}from"./crm-Bj4T2PId.js";import{t as D}from"./IconSearch-BS6uiAhj.js";import{t as O}from"./useGoBack-aBY3TtNx.js";var k={class:`page calite-hub`},A={class:`calite-hub__nav`},j={class:`calite-hub__nav-end`},M={class:`page__scroll page__scroll--with-nav calite-hub__scroll`},N={class:`calite-hub__chips`,role:`tablist`,"aria-label":`مرتب‌سازی کالیته‌ها`},P=[`onClick`],F={key:1,class:`calite-hub__empty`},I={key:2,class:`calite-hub__list`},L=[`onClick`],R={key:0,class:`calite-card__badge`},re={class:`calite-card__copy`,dir:`rtl`},z={class:`mr-4 text-white`},B={class:`text-lg font-bold`},V={class:`text-md`},H={class:`text-xs mt-4`},U=p(g({__name:`CatalogsHubView`,setup(p){let g=x(),U=y(),{goBack:W}=O(`/`),G=v(),K=E(),q=f([]),J=f([]),Y=f(!0),X=f(``),Z=f(null),Q=f(`all`),ie=[{id:`all`,label:`همه`},{id:`newest`,label:`جدیدترین`},{id:`popular`,label:`محبوب‌ترین`},{id:`season`,label:`بر اساس فصل`}],ae=o(()=>{let e=C(q.value,J.value);return e.length?e:ne}),$=o(()=>w(ae.value,Q.value,X.value));u(async()=>{try{let e=await G.loadCompanies(),[t,n]=await Promise.all([Promise.all(e.map(e=>G.loadCatalogs(e.id))),K.loadBrowseProducts().catch(()=>[])]);q.value=t.flat(),J.value=n;let r=String(g.query.id??``);r&&q.value.some(e=>e.id===r)&&await T(U,r,J.value)}catch{q.value=[]}finally{Y.value=!1}});function oe(e){T(U,e,J.value)}function se(){Z.value?.focus()}function ce(e){let t=e.season===`winter`?`مناسب زمستان`:e.season===`summer`?`مناسب تابستان`:`مناسب چهار فصل`;return`${_(e.patternCount)} طرح • ${t}`}return(o,u)=>(n(),c(`div`,k,[d(`header`,A,[d(`button`,{type:`button`,class:`icon-btn mobile-only`,"aria-label":`بازگشت`,onClick:u[0]||=(...e)=>h(W)&&h(W)(...e)},[a(S,{size:20})]),u[2]||=d(`h1`,null,`کالیته‌ها`,-1),d(`div`,j,[a(b,{variant:`inline`,class:`mobile-only`}),d(`button`,{type:`button`,class:`icon-btn mobile-only`,"aria-label":`جستجو`,onClick:se},[a(D,{size:20})])])]),d(`div`,M,[u[4]||=d(`p`,{class:`calite-hub__lead`},`مجموعه‌ای از بهترین پارچه‌ها، در یک نگاه`,-1),a(ee,{ref_key:`searchFieldRef`,ref:Z,modelValue:X.value,"onUpdate:modelValue":u[1]||=e=>X.value=e,class:`calite-hub__search`,placeholder:`جستجوی نام کالیته...`},null,8,[`modelValue`]),d(`div`,N,[(n(),c(l,null,t(ie,t=>d(`button`,{key:t.id,type:`button`,class:e([`calite-chip`,{"is-on":Q.value===t.id}]),onClick:e=>Q.value=t.id},i(t.label),11,P)),64))]),Y.value?(n(),m(te,{key:0,variant:`cards`,rows:4})):$.value.length?(n(),c(`div`,I,[(n(!0),c(l,null,t($.value,e=>(n(),c(`button`,{key:e.id,type:`button`,class:`calite-card`,dir:`ltr`,onClick:t=>oe(e.id)},[d(`span`,{class:`calite-card__photo`,style:r(e.imageUrl?{backgroundImage:`url(${e.imageUrl})`}:void 0)},null,4),e.badge?(n(),c(`span`,R,i(e.badge===`new`?`جدید`:`پرفروش`),1)):s(``,!0),d(`div`,re,[u[3]||=d(`svg`,{class:`calite-card__arrow`,width:`12`,height:`16`,viewBox:`0 0 8 12`,fill:`none`,"aria-hidden":`true`},[d(`path`,{d:`M1.5 1.5 6 6l-4.5 4.5`,stroke:`#fff`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1),d(`div`,z,[d(`div`,B,i(e.title),1),d(`div`,V,i(e.subtitle),1),d(`div`,H,i(ce(e)),1)])])],8,L))),128))])):(n(),c(`p`,F,`کالیته‌ای یافت نشد.`))])]))}}),[[`__scopeId`,`data-v-daa79410`]]);export{U as default};
import{At as e,F as t,M as n,Nt as r,Pt as i,_ as a,c as o,d as s,f as c,i as l,k as u,l as d,nt as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{o as _}from"./format-C72AoJ2H.js";import{t as v}from"./catalog-DvXpKfLO.js";import{A as y,a as b,k as x}from"./index-BPUhS8CY.js";import{t as S}from"./IconChevronBack-DytWz6TD.js";import{t as ee}from"./SearchField-dVDn9y5S.js";import{t as te}from"./PageSkeleton-DYdjm4l9.js";import{i as ne,n as C,r as w,t as T}from"./catalogNavigation--EF0Gjvi.js";import{t as E}from"./crm-BKPKhzCX.js";import{t as D}from"./IconSearch-BS6uiAhj.js";import{t as O}from"./useGoBack-BkqOD93C.js";var k={class:`page calite-hub`},A={class:`calite-hub__nav`},j={class:`calite-hub__nav-end`},M={class:`page__scroll page__scroll--with-nav calite-hub__scroll`},N={class:`calite-hub__chips`,role:`tablist`,"aria-label":`مرتب‌سازی کالیته‌ها`},P=[`onClick`],F={key:1,class:`calite-hub__empty`},I={key:2,class:`calite-hub__list`},L=[`onClick`],R={key:0,class:`calite-card__badge`},re={class:`calite-card__copy`,dir:`rtl`},z={class:`mr-4 text-white`},B={class:`text-lg font-bold`},V={class:`text-md`},H={class:`text-xs mt-4`},U=p(g({__name:`CatalogsHubView`,setup(p){let g=x(),U=y(),{goBack:W}=O(`/`),G=v(),K=E(),q=f([]),J=f([]),Y=f(!0),X=f(``),Z=f(null),Q=f(`all`),ie=[{id:`all`,label:`همه`},{id:`newest`,label:`جدیدترین`},{id:`popular`,label:`محبوب‌ترین`},{id:`season`,label:`بر اساس فصل`}],ae=o(()=>{let e=C(q.value,J.value);return e.length?e:ne}),$=o(()=>w(ae.value,Q.value,X.value));u(async()=>{try{let e=await G.loadCompanies(),[t,n]=await Promise.all([Promise.all(e.map(e=>G.loadCatalogs(e.id))),K.loadBrowseProducts().catch(()=>[])]);q.value=t.flat(),J.value=n;let r=String(g.query.id??``);r&&q.value.some(e=>e.id===r)&&await T(U,r,J.value)}catch{q.value=[]}finally{Y.value=!1}});function oe(e){T(U,e,J.value)}function se(){Z.value?.focus()}function ce(e){let t=e.season===`winter`?`مناسب زمستان`:e.season===`summer`?`مناسب تابستان`:`مناسب چهار فصل`;return`${_(e.patternCount)} طرح • ${t}`}return(o,u)=>(n(),c(`div`,k,[d(`header`,A,[d(`button`,{type:`button`,class:`icon-btn mobile-only`,"aria-label":`بازگشت`,onClick:u[0]||=(...e)=>h(W)&&h(W)(...e)},[a(S,{size:20})]),u[2]||=d(`h1`,null,`کالیته‌ها`,-1),d(`div`,j,[a(b,{variant:`inline`,class:`mobile-only`}),d(`button`,{type:`button`,class:`icon-btn mobile-only`,"aria-label":`جستجو`,onClick:se},[a(D,{size:20})])])]),d(`div`,M,[u[4]||=d(`p`,{class:`calite-hub__lead`},`مجموعه‌ای از بهترین پارچه‌ها، در یک نگاه`,-1),a(ee,{ref_key:`searchFieldRef`,ref:Z,modelValue:X.value,"onUpdate:modelValue":u[1]||=e=>X.value=e,class:`calite-hub__search`,placeholder:`جستجوی نام کالیته...`},null,8,[`modelValue`]),d(`div`,N,[(n(),c(l,null,t(ie,t=>d(`button`,{key:t.id,type:`button`,class:e([`calite-chip`,{"is-on":Q.value===t.id}]),onClick:e=>Q.value=t.id},i(t.label),11,P)),64))]),Y.value?(n(),m(te,{key:0,variant:`cards`,rows:4})):$.value.length?(n(),c(`div`,I,[(n(!0),c(l,null,t($.value,e=>(n(),c(`button`,{key:e.id,type:`button`,class:`calite-card`,dir:`ltr`,onClick:t=>oe(e.id)},[d(`span`,{class:`calite-card__photo`,style:r(e.imageUrl?{backgroundImage:`url(${e.imageUrl})`}:void 0)},null,4),e.badge?(n(),c(`span`,R,i(e.badge===`new`?`جدید`:`پرفروش`),1)):s(``,!0),d(`div`,re,[u[3]||=d(`svg`,{class:`calite-card__arrow`,width:`12`,height:`16`,viewBox:`0 0 8 12`,fill:`none`,"aria-hidden":`true`},[d(`path`,{d:`M1.5 1.5 6 6l-4.5 4.5`,stroke:`#fff`,"stroke-width":`1.4`,"stroke-linecap":`round`,"stroke-linejoin":`round`})],-1),d(`div`,z,[d(`div`,B,i(e.title),1),d(`div`,V,i(e.subtitle),1),d(`div`,H,i(ce(e)),1)])])],8,L))),128))])):(n(),c(`p`,F,`کالیته‌ای یافت نشد.`))])]))}}),[[`__scopeId`,`data-v-daa79410`]]);export{U as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{M as e,Pt as t,U as n,_ as r,c as i,f as a,l as o,t as s,ut as c,v as l}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as u}from"./format-C72AoJ2H.js";import{A as d,f,x as p}from"./index-BSpFi5xB.js";import{t as m}from"./PageHeader-DpR4Zxvt.js";import{t as h}from"./useRequirePricedOrder-CQ0zBqU7.js";import{t as g}from"./IconEditPen-Dwk_zEXe.js";var _={class:`page check-mode-page`},v={class:`page__scroll check-mode-page__scroll`},y={class:`check-mode-invoice`},b={class:`check-mode-invoice__value`},x={class:`mode-options`},S={class:`mode-card__icon`},C={class:`mode-card__icon`},w=s(l({__name:`CheckModeSelectView`,setup(s){let l=d(),w=f(),{orderId:T,order:E}=h(),D=i(()=>E.value?.finalAmount?u(E.value.finalAmount):`—`);n(T,async e=>{e&&(w.getOrderById(e)||await w.fetchOrder(e),w.draftOrderId!==e&&w.startCheckDraft(e))},{immediate:!0});function O(e){w.setCheckMode(e),l.push(`/orders/${T.value}/check-form`)}return(n,i)=>(e(),a(`div`,_,[r(m,{title:`تسویه چکی`,subtitle:`بر اساس مبلغ فاکتور، نحوه ثبت چک را انتخاب کنید`,"show-back":``,centered:``,onBack:i[0]||=e=>c(l).push(`/orders/${c(T)}`)}),o(`div`,v,[o(`div`,y,[i[3]||=o(`span`,{class:`check-mode-invoice__label`},`مبلغ فاکتور`,-1),o(`strong`,b,t(D.value),1)]),o(`div`,x,[o(`button`,{type:`button`,class:`mode-card`,onClick:i[1]||=e=>O(`full`)},[o(`span`,S,[r(p,{size:36})]),i[4]||=o(`h3`,{class:`mode-card__title`},`ثبت کامل (پیشنهادی)`,-1),i[5]||=o(`p`,{class:`mode-card__desc`},`وارد کردن همه اطلاعات چک`,-1)]),o(`button`,{type:`button`,class:`mode-card`,onClick:i[2]||=e=>O(`brief`)},[o(`span`,C,[r(g,{size:36})]),i[6]||=o(`h3`,{class:`mode-card__title`},`ثبت مختصر`,-1),i[7]||=o(`p`,{class:`mode-card__desc`},`وارد کردن حداقل اطلاعات`,-1)])])])]))}}),[[`__scopeId`,`data-v-680065b0`]]);export{w as default};
import{M as e,Pt as t,U as n,_ as r,c as i,f as a,l as o,t as s,ut as c,v as l}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as u}from"./format-C72AoJ2H.js";import{A as d,f,x as p}from"./index-BPUhS8CY.js";import{t as m}from"./PageHeader-CG1ktltl.js";import{t as h}from"./useRequirePricedOrder-XmwhrUqA.js";import{t as g}from"./IconEditPen-Dwk_zEXe.js";var _={class:`page check-mode-page`},v={class:`page__scroll check-mode-page__scroll`},y={class:`check-mode-invoice`},b={class:`check-mode-invoice__value`},x={class:`mode-options`},S={class:`mode-card__icon`},C={class:`mode-card__icon`},w=s(l({__name:`CheckModeSelectView`,setup(s){let l=d(),w=f(),{orderId:T,order:E}=h(),D=i(()=>E.value?.finalAmount?u(E.value.finalAmount):`—`);n(T,async e=>{e&&(w.getOrderById(e)||await w.fetchOrder(e),w.draftOrderId!==e&&w.startCheckDraft(e))},{immediate:!0});function O(e){w.setCheckMode(e),l.push(`/orders/${T.value}/check-form`)}return(n,i)=>(e(),a(`div`,_,[r(m,{title:`تسویه چکی`,subtitle:`بر اساس مبلغ فاکتور، نحوه ثبت چک را انتخاب کنید`,"show-back":``,centered:``,onBack:i[0]||=e=>c(l).push(`/orders/${c(T)}`)}),o(`div`,v,[o(`div`,y,[i[3]||=o(`span`,{class:`check-mode-invoice__label`},`مبلغ فاکتور`,-1),o(`strong`,b,t(D.value),1)]),o(`div`,x,[o(`button`,{type:`button`,class:`mode-card`,onClick:i[1]||=e=>O(`full`)},[o(`span`,S,[r(p,{size:36})]),i[4]||=o(`h3`,{class:`mode-card__title`},`ثبت کامل (پیشنهادی)`,-1),i[5]||=o(`p`,{class:`mode-card__desc`},`وارد کردن همه اطلاعات چک`,-1)]),o(`button`,{type:`button`,class:`mode-card`,onClick:i[2]||=e=>O(`brief`)},[o(`span`,C,[r(g,{size:36})]),i[6]||=o(`h3`,{class:`mode-card__title`},`ثبت مختصر`,-1),i[7]||=o(`p`,{class:`mode-card__desc`},`وارد کردن حداقل اطلاعات`,-1)])])])]))}}),[[`__scopeId`,`data-v-680065b0`]]);export{w as default};
@@ -1 +1 @@
import{D as e,G as t,M as n,Pt as r,U as i,_ as a,c as o,d as s,f as c,g as l,l as u,nt as d,o as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as g,u as _}from"./BasicIcon-ba1FsUKx.js";import{l as v}from"./format-C72AoJ2H.js";import{a as y}from"./validation-Duyyve7l.js";import{t as b}from"./http-CU_N-R2R.js";import{l as x,r as S}from"./index-BSpFi5xB.js";import{t as C}from"./FormErrorBanner-Ud1D04xf.js";import{n as w,r as T,t as E}from"./formErrors-DglFjYkZ.js";import{t as D}from"./crm-Bj4T2PId.js";import{t as O}from"./BaseInput-CpE3bVJZ.js";var k={class:`customer-create-form`},A={key:0,class:`customer-create-form__intro`},j={class:`customer-create-form__fields`},M=p(h({__name:`CustomerCreateForm`,props:{customerId:{},initial:{}},emits:[`success`],setup(e,{expose:o,emit:f}){let p=e,m=f,h=x(),g=D(),_=d(``),M=d(``),N=d(``),P=d(``),F=d({}),I=d(``),L=d(!1),R=()=>!!p.customerId;function z(e){_.value=e?.firstName??``,M.value=e?.lastName??``,N.value=e?.phone??``,P.value=e?.businessName??``,F.value={},I.value=``}i(()=>p.initial,e=>z(e),{immediate:!0});function B(e){F.value=w(F.value,e),T(F.value)||(I.value=``)}async function V(){if(F.value={},I.value=``,!h.isAgent){I.value=`فقط واسطه می‌تواند مشتری به لیست خود اضافه کند.`;return}let e=v(N.value),t={};if(_.value.trim()||(t.firstName=`نام الزامی است.`),M.value.trim()||(t.lastName=`نام خانوادگی الزامی است.`),y(e)||(t.phone=`شماره موبایل معتبر نیست.`),T(t)){F.value=t,I.value=E;return}let n={firstName:_.value.trim(),lastName:M.value.trim(),phone:e,businessName:P.value.trim()||void 0};L.value=!0;try{if(R()&&p.customerId){let e=await g.updateCustomer(p.customerId,n);m(`success`,e?.id??p.customerId);return}let e=await g.registerCustomer(n);m(`success`,e?.id)}catch(e){I.value=e instanceof b||e instanceof Error?e.message:R()?`ویرایش مشتری ناموفق بود.`:`ثبت مشتری ناموفق بود.`}finally{L.value=!1}}return o({submit:V,saving:L}),(e,i)=>(n(),c(`div`,k,[R()?s(``,!0):(n(),c(`p`,A,` مشتری به لیست شما اضافه می‌شود و بعد از ورود با همین شماره، سفارش‌هایش به حساب شما وصل می‌ماند. `)),a(C,{message:I.value},null,8,[`message`]),u(`div`,j,[a(O,{modelValue:_.value,"onUpdate:modelValue":[i[0]||=e=>_.value=e,i[1]||=e=>B(`firstName`)],label:`نام`,placeholder:`نام مشتری`,error:F.value.firstName},null,8,[`modelValue`,`error`]),a(O,{modelValue:M.value,"onUpdate:modelValue":[i[2]||=e=>M.value=e,i[3]||=e=>B(`lastName`)],label:`نام خانوادگی`,placeholder:`نام خانوادگی`,error:F.value.lastName},null,8,[`modelValue`,`error`]),a(O,{modelValue:N.value,"onUpdate:modelValue":[i[4]||=e=>N.value=e,i[5]||=e=>B(`phone`)],label:`شماره موبایل`,type:`tel`,inputmode:`tel`,dir:`ltr`,placeholder:`۰۹۱۲۳۴۵۶۷۸۹`,error:F.value.phone},null,8,[`modelValue`,`error`]),a(O,{modelValue:P.value,"onUpdate:modelValue":i[6]||=e=>P.value=e,label:`نام فروشگاه یا برند (اختیاری)`,placeholder:`مثلاً بوتیک رز`},null,8,[`modelValue`])]),a(S,{block:``,loading:L.value,disabled:L.value,onClick:V},{default:t(()=>[l(r(R()?`ذخیره تغییرات`:`ثبت مشتری`),1)]),_:1},8,[`loading`,`disabled`])]))}}),[[`__scopeId`,`data-v-4f911c6f`]]),N={class:`customer-create-sheet`},P={class:`customer-create-sheet__head`},F={id:`customer-create-title`},I=p(h({__name:`CustomerCreateOverlay`,props:{open:{type:Boolean},customerId:{},initial:{},title:{}},emits:[`close`,`success`],setup(l,{emit:d}){let p=l,h=o(()=>p.title??(p.customerId?`ویرایش مشتری`:`افزودن مشتری`)),v=d;function y(){v(`close`)}function b(e){v(`success`,e)}function x(e){e.key===`Escape`&&p.open&&y()}return i(()=>p.open,e=>{document.body.style.overflow=e?`hidden`:``,e?window.addEventListener(`keydown`,x):window.removeEventListener(`keydown`,x)},{immediate:!0}),e(()=>{document.body.style.overflow=``,window.removeEventListener(`keydown`,x)}),(e,i)=>(n(),m(f,{to:`body`},[a(g,{name:`customer-create-sheet`},{default:t(()=>[l.open?(n(),c(`div`,{key:0,class:`customer-create-overlay`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`customer-create-title`,onClick:_(y,[`self`])},[u(`div`,N,[i[0]||=u(`div`,{class:`customer-create-sheet__handle`,"aria-hidden":`true`},null,-1),u(`header`,P,[u(`h2`,F,r(h.value),1),u(`button`,{type:`button`,class:`customer-create-sheet__close`,"aria-label":`بستن`,onClick:y},` × `)]),a(M,{"customer-id":l.customerId,initial:l.initial,onSuccess:b},null,8,[`customer-id`,`initial`])])])):s(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-ac91feb8`]]);export{I as t};
import{D as e,G as t,M as n,Pt as r,U as i,_ as a,c as o,d as s,f as c,g as l,l as u,nt as d,o as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as g,u as _}from"./BasicIcon-ba1FsUKx.js";import{l as v}from"./format-C72AoJ2H.js";import{a as y}from"./validation-Duyyve7l.js";import{t as b}from"./http-CU_N-R2R.js";import{l as x,r as S}from"./index-BPUhS8CY.js";import{t as C}from"./FormErrorBanner-Ud1D04xf.js";import{n as w,r as T,t as E}from"./formErrors-DglFjYkZ.js";import{t as D}from"./crm-BKPKhzCX.js";import{t as O}from"./BaseInput-CpE3bVJZ.js";var k={class:`customer-create-form`},A={key:0,class:`customer-create-form__intro`},j={class:`customer-create-form__fields`},M=p(h({__name:`CustomerCreateForm`,props:{customerId:{},initial:{}},emits:[`success`],setup(e,{expose:o,emit:f}){let p=e,m=f,h=x(),g=D(),_=d(``),M=d(``),N=d(``),P=d(``),F=d({}),I=d(``),L=d(!1),R=()=>!!p.customerId;function z(e){_.value=e?.firstName??``,M.value=e?.lastName??``,N.value=e?.phone??``,P.value=e?.businessName??``,F.value={},I.value=``}i(()=>p.initial,e=>z(e),{immediate:!0});function B(e){F.value=w(F.value,e),T(F.value)||(I.value=``)}async function V(){if(F.value={},I.value=``,!h.isAgent){I.value=`فقط واسطه می‌تواند مشتری به لیست خود اضافه کند.`;return}let e=v(N.value),t={};if(_.value.trim()||(t.firstName=`نام الزامی است.`),M.value.trim()||(t.lastName=`نام خانوادگی الزامی است.`),y(e)||(t.phone=`شماره موبایل معتبر نیست.`),T(t)){F.value=t,I.value=E;return}let n={firstName:_.value.trim(),lastName:M.value.trim(),phone:e,businessName:P.value.trim()||void 0};L.value=!0;try{if(R()&&p.customerId){let e=await g.updateCustomer(p.customerId,n);m(`success`,e?.id??p.customerId);return}let e=await g.registerCustomer(n);m(`success`,e?.id)}catch(e){I.value=e instanceof b||e instanceof Error?e.message:R()?`ویرایش مشتری ناموفق بود.`:`ثبت مشتری ناموفق بود.`}finally{L.value=!1}}return o({submit:V,saving:L}),(e,i)=>(n(),c(`div`,k,[R()?s(``,!0):(n(),c(`p`,A,` مشتری به لیست شما اضافه می‌شود و بعد از ورود با همین شماره، سفارش‌هایش به حساب شما وصل می‌ماند. `)),a(C,{message:I.value},null,8,[`message`]),u(`div`,j,[a(O,{modelValue:_.value,"onUpdate:modelValue":[i[0]||=e=>_.value=e,i[1]||=e=>B(`firstName`)],label:`نام`,placeholder:`نام مشتری`,error:F.value.firstName},null,8,[`modelValue`,`error`]),a(O,{modelValue:M.value,"onUpdate:modelValue":[i[2]||=e=>M.value=e,i[3]||=e=>B(`lastName`)],label:`نام خانوادگی`,placeholder:`نام خانوادگی`,error:F.value.lastName},null,8,[`modelValue`,`error`]),a(O,{modelValue:N.value,"onUpdate:modelValue":[i[4]||=e=>N.value=e,i[5]||=e=>B(`phone`)],label:`شماره موبایل`,type:`tel`,inputmode:`tel`,dir:`ltr`,placeholder:`۰۹۱۲۳۴۵۶۷۸۹`,error:F.value.phone},null,8,[`modelValue`,`error`]),a(O,{modelValue:P.value,"onUpdate:modelValue":i[6]||=e=>P.value=e,label:`نام فروشگاه یا برند (اختیاری)`,placeholder:`مثلاً بوتیک رز`},null,8,[`modelValue`])]),a(S,{block:``,loading:L.value,disabled:L.value,onClick:V},{default:t(()=>[l(r(R()?`ذخیره تغییرات`:`ثبت مشتری`),1)]),_:1},8,[`loading`,`disabled`])]))}}),[[`__scopeId`,`data-v-4f911c6f`]]),N={class:`customer-create-sheet`},P={class:`customer-create-sheet__head`},F={id:`customer-create-title`},I=p(h({__name:`CustomerCreateOverlay`,props:{open:{type:Boolean},customerId:{},initial:{},title:{}},emits:[`close`,`success`],setup(l,{emit:d}){let p=l,h=o(()=>p.title??(p.customerId?`ویرایش مشتری`:`افزودن مشتری`)),v=d;function y(){v(`close`)}function b(e){v(`success`,e)}function x(e){e.key===`Escape`&&p.open&&y()}return i(()=>p.open,e=>{document.body.style.overflow=e?`hidden`:``,e?window.addEventListener(`keydown`,x):window.removeEventListener(`keydown`,x)},{immediate:!0}),e(()=>{document.body.style.overflow=``,window.removeEventListener(`keydown`,x)}),(e,i)=>(n(),m(f,{to:`body`},[a(g,{name:`customer-create-sheet`},{default:t(()=>[l.open?(n(),c(`div`,{key:0,class:`customer-create-overlay`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`customer-create-title`,onClick:_(y,[`self`])},[u(`div`,N,[i[0]||=u(`div`,{class:`customer-create-sheet__handle`,"aria-hidden":`true`},null,-1),u(`header`,P,[u(`h2`,F,r(h.value),1),u(`button`,{type:`button`,class:`customer-create-sheet__close`,"aria-label":`بستن`,onClick:y},` × `)]),a(M,{"customer-id":l.customerId,initial:l.initial,onSuccess:b},null,8,[`customer-id`,`initial`])])])):s(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-ac91feb8`]]);export{I as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{F as e,M as t,Nt as n,Pt as r,_ as i,d as a,f as o,g as s,i as c,k as l,l as u,nt as d,t as f,u as p,ut as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as g}from"./BasicIcon-ba1FsUKx.js";import{o as _}from"./format-C72AoJ2H.js";import{A as v,s as y,u as b}from"./index-BSpFi5xB.js";import{t as x}from"./PageHeader-DpR4Zxvt.js";import{t as S}from"./PageSkeleton-DYdjm4l9.js";import{t as C}from"./crm-Bj4T2PId.js";import{t as w}from"./IconBookmark-CQq-TOS-.js";import{n as T,t as E}from"./colorSwatch-BgOH1LE5.js";var D={class:`page favorites-page`},O={class:`page__scroll page__scroll--with-nav body`},k={key:1},A={key:2,class:`empty`},j=[`onClick`],M={class:`product-item__body`},N={class:`product-item__head`},P={class:`product-item__title`},F={key:0,class:`new-tag`},I=[`onClick`],L={class:`product-item__specs`},R={key:0,class:`swatches`},z=[`onClick`],B=f(h({__name:`FavoritesView`,setup(f){let h={summer:`تابستانه`,winter:`زمستانه`,all_season:`چهارفصل`},B=v(),V=b(),H=C(),U=d([]),W=d(!0),G=d(null);l(async()=>{W.value=!0;try{await V.hydrate();let e=await H.loadBrowseProducts(),t=new Set(V.ids);U.value=e.filter(e=>t.has(e.id))}catch(e){G.value=e instanceof Error?e.message:`بارگذاری علاقه‌مندی‌ها ناموفق بود.`}finally{W.value=!1}});function K(e){return h[e]??`—`}function q(e){return E(e.colors,e.colorImages,e.imageUrls,0,e.imageUrl)}function J(e){B.push({path:`/product`,query:{id:e}})}async function Y(e){await V.toggle(e),U.value=U.value.filter(t=>t.id!==e)}return(l,d)=>(t(),o(`div`,D,[i(x,{class:`mobile-only`,title:`علاقه‌مندی‌ها`,"show-back":``,centered:``,onBack:d[0]||=e=>m(B).back()}),d[2]||=u(`header`,{class:`desktop-page__head desktop-only`},[u(`h1`,{class:`desktop-page__title`},`علاقه‌مندی‌ها`),u(`p`,{class:`desktop-page__subtitle`},`محصولات ذخیره‌شده برای دسترسی سریع`)],-1),u(`div`,O,[W.value?(t(),p(S,{key:0,variant:`grid`})):G.value?(t(),o(`p`,k,r(G.value),1)):U.value.length?a(``,!0):(t(),o(`p`,A,`هنوز محصولی ذخیره نکرده‌اید.`)),(t(!0),o(c,null,e(U.value,l=>(t(),o(`article`,{key:l.id,class:`product-item`,onClick:e=>J(l.id)},[u(`div`,{class:`product-item__image`,style:n(q(l)?{backgroundImage:`url(${q(l)})`}:m(T)(l.colors[0]??``))},null,4),u(`div`,M,[u(`div`,N,[u(`div`,P,[u(`strong`,null,r(l.name),1),l.isNew?(t(),o(`span`,F,`جدید`)):a(``,!0)]),u(`button`,{type:`button`,class:`bookmark`,"aria-label":`حذف از علاقه‌مندی‌ها`,onClick:g(e=>Y(l.id),[`stop`])},[i(w,{size:18,filled:``,color:`var(--color-primary)`})],8,I)]),u(`ul`,L,[u(`li`,null,`عرض: `+r(m(_)(l.widthCm))+` سانتی‌متر`,1),u(`li`,null,`ترکیب: `+r(l.composition||`—`),1),u(`li`,null,`مناسب: `+r(K(l.season)),1)]),l.colors.length?(t(),o(`div`,R,[(t(!0),o(c,null,e(l.colors.slice(0,6),(e,r)=>(t(),o(`span`,{key:r,class:`swatch`,style:n(m(T)(e,l.colorImages?.[r]||l.imageUrls?.[r]))},null,4))),128))])):a(``,!0),u(`button`,{type:`button`,class:`details-link`,onClick:g(e=>J(l.id),[`stop`])},[d[1]||=s(` مشاهده جزئیات `,-1),i(y,{size:14})],8,z)])],8,j))),128))])]))}}),[[`__scopeId`,`data-v-cc481a5f`]]);export{B as default};
import{F as e,M as t,Nt as n,Pt as r,_ as i,d as a,f as o,g as s,i as c,k as l,l as u,nt as d,t as f,u as p,ut as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as g}from"./BasicIcon-ba1FsUKx.js";import{o as _}from"./format-C72AoJ2H.js";import{A as v,s as y,u as b}from"./index-BPUhS8CY.js";import{t as x}from"./PageHeader-CG1ktltl.js";import{t as S}from"./PageSkeleton-DYdjm4l9.js";import{t as C}from"./crm-BKPKhzCX.js";import{t as w}from"./IconBookmark-CQq-TOS-.js";import{n as T,t as E}from"./colorSwatch-BgOH1LE5.js";var D={class:`page favorites-page`},O={class:`page__scroll page__scroll--with-nav body`},k={key:1},A={key:2,class:`empty`},j=[`onClick`],M={class:`product-item__body`},N={class:`product-item__head`},P={class:`product-item__title`},F={key:0,class:`new-tag`},I=[`onClick`],L={class:`product-item__specs`},R={key:0,class:`swatches`},z=[`onClick`],B=f(h({__name:`FavoritesView`,setup(f){let h={summer:`تابستانه`,winter:`زمستانه`,all_season:`چهارفصل`},B=v(),V=b(),H=C(),U=d([]),W=d(!0),G=d(null);l(async()=>{W.value=!0;try{await V.hydrate();let e=await H.loadBrowseProducts(),t=new Set(V.ids);U.value=e.filter(e=>t.has(e.id))}catch(e){G.value=e instanceof Error?e.message:`بارگذاری علاقه‌مندی‌ها ناموفق بود.`}finally{W.value=!1}});function K(e){return h[e]??`—`}function q(e){return E(e.colors,e.colorImages,e.imageUrls,0,e.imageUrl)}function J(e){B.push({path:`/product`,query:{id:e}})}async function Y(e){await V.toggle(e),U.value=U.value.filter(t=>t.id!==e)}return(l,d)=>(t(),o(`div`,D,[i(x,{class:`mobile-only`,title:`علاقه‌مندی‌ها`,"show-back":``,centered:``,onBack:d[0]||=e=>m(B).back()}),d[2]||=u(`header`,{class:`desktop-page__head desktop-only`},[u(`h1`,{class:`desktop-page__title`},`علاقه‌مندی‌ها`),u(`p`,{class:`desktop-page__subtitle`},`محصولات ذخیره‌شده برای دسترسی سریع`)],-1),u(`div`,O,[W.value?(t(),p(S,{key:0,variant:`grid`})):G.value?(t(),o(`p`,k,r(G.value),1)):U.value.length?a(``,!0):(t(),o(`p`,A,`هنوز محصولی ذخیره نکرده‌اید.`)),(t(!0),o(c,null,e(U.value,l=>(t(),o(`article`,{key:l.id,class:`product-item`,onClick:e=>J(l.id)},[u(`div`,{class:`product-item__image`,style:n(q(l)?{backgroundImage:`url(${q(l)})`}:m(T)(l.colors[0]??``))},null,4),u(`div`,M,[u(`div`,N,[u(`div`,P,[u(`strong`,null,r(l.name),1),l.isNew?(t(),o(`span`,F,`جدید`)):a(``,!0)]),u(`button`,{type:`button`,class:`bookmark`,"aria-label":`حذف از علاقه‌مندی‌ها`,onClick:g(e=>Y(l.id),[`stop`])},[i(w,{size:18,filled:``,color:`var(--color-primary)`})],8,I)]),u(`ul`,L,[u(`li`,null,`عرض: `+r(m(_)(l.widthCm))+` سانتی‌متر`,1),u(`li`,null,`ترکیب: `+r(l.composition||`—`),1),u(`li`,null,`مناسب: `+r(K(l.season)),1)]),l.colors.length?(t(),o(`div`,R,[(t(!0),o(c,null,e(l.colors.slice(0,6),(e,r)=>(t(),o(`span`,{key:r,class:`swatch`,style:n(m(T)(e,l.colorImages?.[r]||l.imageUrls?.[r]))},null,4))),128))])):a(``,!0),u(`button`,{type:`button`,class:`details-link`,onClick:g(e=>J(l.id),[`stop`])},[d[1]||=s(` مشاهده جزئیات `,-1),i(y,{size:14})],8,z)])],8,j))),128))])]))}}),[[`__scopeId`,`data-v-cc481a5f`]]);export{B as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{M as e,Pt as t,_ as n,c as r,f as i,g as a,i as o,k as s,l as c,nt as l,t as u,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as m,o as h}from"./format-C72AoJ2H.js";import{A as g}from"./index-BSpFi5xB.js";import{t as _}from"./PageHeader-DpR4Zxvt.js";import{t as v}from"./PageSkeleton-DYdjm4l9.js";import{t as y}from"./catalogRequests-COPPKp3x.js";import{t as b}from"./SimpleStatusTimeline-C5IzJmCG.js";var x=[{id:`registered`,label:`درخواست کالیته ثبت شد`},{id:`ready_to_ship`,label:`آماده ارسال`},{id:`shipped`,label:`ارسال شد`},{id:`returned`,label:`تحویل گرفته شد`},{id:`cancelled`,label:`درخواست لغو شد`}],S={new:0,approved:0,ready_to_ship:1,delivered:2,returned:3,cancelled:4};function C(e){return e.serverStatus?e.serverStatus:{submitted:`new`,reviewing:`approved`,preparing:`ready_to_ship`,shipped:`delivered`,delivered:`returned`,new:`new`,approved:`approved`,ready_to_ship:`ready_to_ship`,returned:`returned`,cancelled:`cancelled`}[e.status]??`new`}function w(e){return S[C(e)]??0}function T(e){let t=C(e),n=m(e.createdAt),r=e.updatedAt?m(e.updatedAt):null;return{registered:n,ready_to_ship:[`ready_to_ship`,`delivered`,`returned`].includes(t)?r:null,shipped:[`delivered`,`returned`].includes(t)?r:null,returned:t===`returned`?r:null,cancelled:t===`cancelled`?r:null}}var E={class:`page latest-status-page`},D={class:`page__scroll page__scroll--with-nav body`},O={class:`summary-card`},k={class:`summary-card__value`},A={class:`summary-card__meta`},j={key:2,class:`empty-cta`},M=u(p({__name:`LatestCatalogRequestStatusView`,setup(u){let p=g(),m=y(),S=l(!0),C=r(()=>m.sorted.length?m.sorted[0]:null),M=r(()=>C.value?w(C.value):0),N=r(()=>C.value?T(C.value):{});s(async()=>{S.value=!0,await m.hydrate(),S.value=!1});function P(){p.push(`/categories`)}return(r,s)=>(e(),i(`div`,E,[n(_,{class:`mobile-only`,title:`آخرین درخواست کالیته`,"show-back":``,centered:``,onBack:s[0]||=e=>f(p).push(`/`)}),s[4]||=c(`header`,{class:`desktop-page__head desktop-only`},[c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`آخرین درخواست کالیته`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین درخواست کالیته`)])],-1),c(`div`,D,[S.value?(e(),d(v,{key:0})):C.value?(e(),i(o,{key:1},[c(`article`,O,[s[2]||=c(`p`,{class:`summary-card__label`},`درخواست`,-1),c(`strong`,k,t(C.value.id.slice(-8)),1),c(`p`,A,t(f(h)(C.value.items.length))+` قلم کالیته `,1)]),n(b,{steps:f(x),"current-index":M.value,timestamps:N.value},null,8,[`steps`,`current-index`,`timestamps`]),c(`button`,{type:`button`,class:`detail-link`,onClick:s[1]||=e=>f(p).push(`/catalog-requests`)},` مشاهده همه درخواست‌ها `)],64)):(e(),i(`div`,j,[s[3]||=a(` شما هیچ کالیته ای درخواست نکرده اید، جهت درخواست کالیته و مشاهده فیزیکی پارچه ها کلیک کنید `,-1),c(`button`,{type:`button`,class:`desk-new-btn`,onClick:P},` مشاهده محصولات `)]))])]))}}),[[`__scopeId`,`data-v-ceeabf36`]]);export{M as default};
import{M as e,Pt as t,_ as n,c as r,f as i,g as a,i as o,k as s,l as c,nt as l,t as u,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as m,o as h}from"./format-C72AoJ2H.js";import{A as g}from"./index-BPUhS8CY.js";import{t as _}from"./PageHeader-CG1ktltl.js";import{t as v}from"./PageSkeleton-DYdjm4l9.js";import{t as y}from"./catalogRequests-COPPKp3x.js";import{t as b}from"./SimpleStatusTimeline-C5IzJmCG.js";var x=[{id:`registered`,label:`درخواست کالیته ثبت شد`},{id:`ready_to_ship`,label:`آماده ارسال`},{id:`shipped`,label:`ارسال شد`},{id:`returned`,label:`تحویل گرفته شد`},{id:`cancelled`,label:`درخواست لغو شد`}],S={new:0,approved:0,ready_to_ship:1,delivered:2,returned:3,cancelled:4};function C(e){return e.serverStatus?e.serverStatus:{submitted:`new`,reviewing:`approved`,preparing:`ready_to_ship`,shipped:`delivered`,delivered:`returned`,new:`new`,approved:`approved`,ready_to_ship:`ready_to_ship`,returned:`returned`,cancelled:`cancelled`}[e.status]??`new`}function w(e){return S[C(e)]??0}function T(e){let t=C(e),n=m(e.createdAt),r=e.updatedAt?m(e.updatedAt):null;return{registered:n,ready_to_ship:[`ready_to_ship`,`delivered`,`returned`].includes(t)?r:null,shipped:[`delivered`,`returned`].includes(t)?r:null,returned:t===`returned`?r:null,cancelled:t===`cancelled`?r:null}}var E={class:`page latest-status-page`},D={class:`page__scroll page__scroll--with-nav body`},O={class:`summary-card`},k={class:`summary-card__value`},A={class:`summary-card__meta`},j={key:2,class:`empty-cta`},M=u(p({__name:`LatestCatalogRequestStatusView`,setup(u){let p=g(),m=y(),S=l(!0),C=r(()=>m.sorted.length?m.sorted[0]:null),M=r(()=>C.value?w(C.value):0),N=r(()=>C.value?T(C.value):{});s(async()=>{S.value=!0,await m.hydrate(),S.value=!1});function P(){p.push(`/categories`)}return(r,s)=>(e(),i(`div`,E,[n(_,{class:`mobile-only`,title:`آخرین درخواست کالیته`,"show-back":``,centered:``,onBack:s[0]||=e=>f(p).push(`/`)}),s[4]||=c(`header`,{class:`desktop-page__head desktop-only`},[c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`آخرین درخواست کالیته`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین درخواست کالیته`)])],-1),c(`div`,D,[S.value?(e(),d(v,{key:0})):C.value?(e(),i(o,{key:1},[c(`article`,O,[s[2]||=c(`p`,{class:`summary-card__label`},`درخواست`,-1),c(`strong`,k,t(C.value.id.slice(-8)),1),c(`p`,A,t(f(h)(C.value.items.length))+` قلم کالیته `,1)]),n(b,{steps:f(x),"current-index":M.value,timestamps:N.value},null,8,[`steps`,`current-index`,`timestamps`]),c(`button`,{type:`button`,class:`detail-link`,onClick:s[1]||=e=>f(p).push(`/catalog-requests`)},` مشاهده همه درخواست‌ها `)],64)):(e(),i(`div`,j,[s[3]||=a(` شما هیچ کالیته ای درخواست نکرده اید، جهت درخواست کالیته و مشاهده فیزیکی پارچه ها کلیک کنید `,-1),c(`button`,{type:`button`,class:`desk-new-btn`,onClick:P},` مشاهده محصولات `)]))])]))}}),[[`__scopeId`,`data-v-ceeabf36`]]);export{M as default};
@@ -1 +1 @@
import{M as e,Pt as t,_ as n,c as r,d as i,f as a,i as o,k as s,l as c,nt as l,t as u,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as m,n as h}from"./format-C72AoJ2H.js";import{A as g,f as _,l as v}from"./index-BSpFi5xB.js";import{t as y}from"./PageHeader-DpR4Zxvt.js";import{t as b}from"./PageSkeleton-DYdjm4l9.js";import{t as x}from"./SimpleStatusTimeline-C5IzJmCG.js";var S=[{id:`registered`,label:`سفارش ثبت شد`},{id:`priced`,label:`قیمت گذاری انجام شد`},{id:`proforma_sent`,label:`پیش فاکتور ارسال شد`},{id:`proforma_confirmed`,label:`پیش فاکتور تایید شد`},{id:`invoice_sent`,label:`فاکتور ارسال شد`},{id:`shipped`,label:`بار ارسال شد`},{id:`delivered`,label:`بار توسط شما تحویل گرفته شد`}],C={submitted:0,awaiting_review:1,pricing:1,needs_correction:1,awaiting_settlement:2,awaiting_settlement_fix:2,cash_in_progress:2,cash_invoice_issued:2,awaiting_cash_payment:2,cash_payment_submitted:2,check_in_progress:2,awaiting_cash_confirmation:3,awaiting_check_review:3,check_needs_fix:3,check_rejected:3,checks_approved:3,cash_confirmed:3,final_approved:4,preparing:4,ready_to_ship:4,shipped:5,delivered:6,expired:2,cancelled:0,rejected:1},w={registered:[`submitted`],priced:[`pricing`,`awaiting_review`,`needs_correction`],proforma_sent:[`awaiting_settlement`,`awaiting_settlement_fix`,`cash_in_progress`,`cash_invoice_issued`,`awaiting_cash_payment`,`cash_payment_submitted`,`check_in_progress`],proforma_confirmed:[`awaiting_cash_confirmation`,`awaiting_check_review`,`check_needs_fix`,`check_rejected`,`checks_approved`,`cash_confirmed`],invoice_sent:[`final_approved`,`preparing`,`ready_to_ship`],shipped:[`shipped`],delivered:[`delivered`]};function T(e){return C[e]??0}function E(e){let t={};for(let n of S){if(n.id===`registered`){t[n.id]=m(e.createdAt);continue}let r=w[n.id]??[],i=[...e.statusHistory].reverse().find(e=>r.includes(e.toStatus));t[n.id]=i?m(i.changedAt):null}return t}var D={class:`page latest-status-page`},O={class:`page__scroll page__scroll--with-nav body`},k={class:`summary-card`},A={class:`summary-card__value`},j={key:0,class:`summary-card__meta`},M=u(p({__name:`LatestOrderStatusView`,setup(u){let p=g(),m=_(),C=v(),w=l(!0),M=r(()=>{let e=m.userOrders(C.user?.id??``);return e.length?e[0]:null}),N=r(()=>M.value?T(M.value.status):0),P=r(()=>M.value?E(M.value):{});s(async()=>{w.value=!0,await m.hydrate(),w.value=!1});function F(){p.push(`/categories`)}return(r,s)=>(e(),a(`div`,D,[n(y,{class:`mobile-only`,title:`آخرین وضعیت سفارش`,"show-back":``,centered:``,onBack:s[0]||=e=>f(p).push(`/`)}),s[3]||=c(`header`,{class:`desktop-page__head desktop-only`},[c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`آخرین وضعیت سفارش`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین سفارش ثبت‌شده`)])],-1),c(`div`,O,[w.value?(e(),d(b,{key:0})):M.value?(e(),a(o,{key:1},[c(`article`,k,[s[2]||=c(`p`,{class:`summary-card__label`},`سفارش شماره`,-1),c(`strong`,A,t(M.value.orderNumber),1),M.value.finalAmount?(e(),a(`p`,j,t(f(h)(M.value.finalAmount)),1)):i(``,!0)]),n(x,{steps:f(S),"current-index":N.value,timestamps:P.value},null,8,[`steps`,`current-index`,`timestamps`]),c(`button`,{type:`button`,class:`detail-link`,onClick:s[1]||=e=>f(p).push(`/orders/${M.value.id}`)},` مشاهده جزئیات سفارش `)],64)):(e(),a(`button`,{key:2,type:`button`,class:`empty-cta`,onClick:F},` سفارشی ثبت نکرده اید. لطفا جهت مشاهده محصولات کلیک کنید `))])]))}}),[[`__scopeId`,`data-v-030bc575`]]);export{M as default};
import{M as e,Pt as t,_ as n,c as r,d as i,f as a,i as o,k as s,l as c,nt as l,t as u,u as d,ut as f,v as p}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as m,n as h}from"./format-C72AoJ2H.js";import{A as g,f as _,l as v}from"./index-BPUhS8CY.js";import{t as y}from"./PageHeader-CG1ktltl.js";import{t as b}from"./PageSkeleton-DYdjm4l9.js";import{t as x}from"./SimpleStatusTimeline-C5IzJmCG.js";var S=[{id:`registered`,label:`سفارش ثبت شد`},{id:`priced`,label:`قیمت گذاری انجام شد`},{id:`proforma_sent`,label:`پیش فاکتور ارسال شد`},{id:`proforma_confirmed`,label:`پیش فاکتور تایید شد`},{id:`invoice_sent`,label:`فاکتور ارسال شد`},{id:`shipped`,label:`بار ارسال شد`},{id:`delivered`,label:`بار توسط شما تحویل گرفته شد`}],C={submitted:0,awaiting_review:1,pricing:1,needs_correction:1,awaiting_settlement:2,awaiting_settlement_fix:2,cash_in_progress:2,cash_invoice_issued:2,awaiting_cash_payment:2,cash_payment_submitted:2,check_in_progress:2,awaiting_cash_confirmation:3,awaiting_check_review:3,check_needs_fix:3,check_rejected:3,checks_approved:3,cash_confirmed:3,final_approved:4,preparing:4,ready_to_ship:4,shipped:5,delivered:6,expired:2,cancelled:0,rejected:1},w={registered:[`submitted`],priced:[`pricing`,`awaiting_review`,`needs_correction`],proforma_sent:[`awaiting_settlement`,`awaiting_settlement_fix`,`cash_in_progress`,`cash_invoice_issued`,`awaiting_cash_payment`,`cash_payment_submitted`,`check_in_progress`],proforma_confirmed:[`awaiting_cash_confirmation`,`awaiting_check_review`,`check_needs_fix`,`check_rejected`,`checks_approved`,`cash_confirmed`],invoice_sent:[`final_approved`,`preparing`,`ready_to_ship`],shipped:[`shipped`],delivered:[`delivered`]};function T(e){return C[e]??0}function E(e){let t={};for(let n of S){if(n.id===`registered`){t[n.id]=m(e.createdAt);continue}let r=w[n.id]??[],i=[...e.statusHistory].reverse().find(e=>r.includes(e.toStatus));t[n.id]=i?m(i.changedAt):null}return t}var D={class:`page latest-status-page`},O={class:`page__scroll page__scroll--with-nav body`},k={class:`summary-card`},A={class:`summary-card__value`},j={key:0,class:`summary-card__meta`},M=u(p({__name:`LatestOrderStatusView`,setup(u){let p=g(),m=_(),C=v(),w=l(!0),M=r(()=>{let e=m.userOrders(C.user?.id??``);return e.length?e[0]:null}),N=r(()=>M.value?T(M.value.status):0),P=r(()=>M.value?E(M.value):{});s(async()=>{w.value=!0,await m.hydrate(),w.value=!1});function F(){p.push(`/categories`)}return(r,s)=>(e(),a(`div`,D,[n(y,{class:`mobile-only`,title:`آخرین وضعیت سفارش`,"show-back":``,centered:``,onBack:s[0]||=e=>f(p).push(`/`)}),s[3]||=c(`header`,{class:`desktop-page__head desktop-only`},[c(`div`,null,[c(`h1`,{class:`desktop-page__title`},`آخرین وضعیت سفارش`),c(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین سفارش ثبت‌شده`)])],-1),c(`div`,O,[w.value?(e(),d(b,{key:0})):M.value?(e(),a(o,{key:1},[c(`article`,k,[s[2]||=c(`p`,{class:`summary-card__label`},`سفارش شماره`,-1),c(`strong`,A,t(M.value.orderNumber),1),M.value.finalAmount?(e(),a(`p`,j,t(f(h)(M.value.finalAmount)),1)):i(``,!0)]),n(x,{steps:f(S),"current-index":N.value,timestamps:P.value},null,8,[`steps`,`current-index`,`timestamps`]),c(`button`,{type:`button`,class:`detail-link`,onClick:s[1]||=e=>f(p).push(`/orders/${M.value.id}`)},` مشاهده جزئیات سفارش `)],64)):(e(),a(`button`,{key:2,type:`button`,class:`empty-cta`,onClick:F},` سفارشی ثبت نکرده اید. لطفا جهت مشاهده محصولات کلیک کنید `))])]))}}),[[`__scopeId`,`data-v-030bc575`]]);export{M as default};
@@ -1 +1 @@
import{At as e,G as t,L as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,l as u,nt as d,t as f,u as p,ut as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as g}from"./BasicIcon-ba1FsUKx.js";import{d as _,l as v}from"./format-C72AoJ2H.js";import{a as y}from"./validation-Duyyve7l.js";import{A as b,l as x}from"./index-BSpFi5xB.js";import{t as S}from"./AuthShell-BzzMWHUA.js";import{t as C}from"./FormErrorBanner-Ud1D04xf.js";import{t as w}from"./IconPhone-Jt4M7S8Q.js";import{n as T,r as E,t as D}from"./formErrors-DglFjYkZ.js";var O=[`value`,`aria-invalid`],k={key:0,class:`auth-error`},A=[`disabled`],j=f(h({__name:`LoginView`,setup(f){let h=b(),j=x(),M=d(``),N=d({}),P=d(``),F=o(()=>M.value?_(M.value):``);function I(e){return e?y(e)?``:`شماره موبایل معتبر نیست. (مثال: ۰۹۱۲۱۲۳۴۵۶۷)`:`شماره موبایل را وارد کنید.`}function L(){N.value=T(N.value,`phone`),E(N.value)||(P.value=``)}function R(e){M.value=v(e),L()}function z(){if(!M.value)return;let e=I(M.value);e&&(N.value={...N.value,phone:e})}async function B(){N.value={},P.value=``;let e=v(M.value);M.value=e;let t=I(e);if(t){N.value={phone:t},P.value=D;return}let n=await j.requestOtp(e,{isRegister:!1});n.success?h.push({name:`otp`,query:{phone:e,mode:`login`}}):P.value=n.message??`خطا در ارسال کد تأیید.`}return(o,d)=>{let f=n(`RouterLink`);return r(),p(S,{"back-to":`/welcome`},{default:t(()=>[d[3]||=u(`h1`,{class:`auth-title`},`به نادمی تکس خوش آمدید`,-1),d[4]||=u(`p`,{class:`auth-lead`},`برای ادامه، وارد حساب کاربری خود شوید`,-1),u(`form`,{class:`auth-form`,onSubmit:g(B,[`prevent`])},[a(C,{message:P.value},null,8,[`message`]),u(`label`,{class:e([`auth-field`,{"is-invalid":!!N.value.phone}])},[a(w,{size:18,color:`#64748b`}),u(`input`,{value:F.value,type:`tel`,inputmode:`numeric`,autocomplete:`tel`,maxlength:`11`,placeholder:`شماره موبایل`,"aria-invalid":!!N.value.phone,"aria-label":`شماره موبایل`,onInput:d[0]||=e=>R(e.target.value),onBlur:z},null,40,O)],2),N.value.phone?(r(),c(`p`,k,i(N.value.phone),1)):s(``,!0),u(`button`,{class:`auth-submit`,type:`submit`,disabled:m(j).loading},i(m(j).loading?`در حال ارسال…`:`ورود`),9,A),d[2]||=u(`p`,{class:`auth-or`},[u(`span`,null,`یا`)],-1),a(f,{class:`auth-outline`,to:`/register`},{default:t(()=>[...d[1]||=[l(`ثبت‌نام در نادمی تکس`,-1)]]),_:1})],32)]),_:1})}}}),[[`__scopeId`,`data-v-5764ebe1`]]);export{j as default};
import{At as e,G as t,L as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,l as u,nt as d,t as f,u as p,ut as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as g}from"./BasicIcon-ba1FsUKx.js";import{d as _,l as v}from"./format-C72AoJ2H.js";import{a as y}from"./validation-Duyyve7l.js";import{A as b,l as x}from"./index-BPUhS8CY.js";import{t as S}from"./AuthShell-CmEncS1b.js";import{t as C}from"./FormErrorBanner-Ud1D04xf.js";import{t as w}from"./IconPhone-Jt4M7S8Q.js";import{n as T,r as E,t as D}from"./formErrors-DglFjYkZ.js";var O=[`value`,`aria-invalid`],k={key:0,class:`auth-error`},A=[`disabled`],j=f(h({__name:`LoginView`,setup(f){let h=b(),j=x(),M=d(``),N=d({}),P=d(``),F=o(()=>M.value?_(M.value):``);function I(e){return e?y(e)?``:`شماره موبایل معتبر نیست. (مثال: ۰۹۱۲۱۲۳۴۵۶۷)`:`شماره موبایل را وارد کنید.`}function L(){N.value=T(N.value,`phone`),E(N.value)||(P.value=``)}function R(e){M.value=v(e),L()}function z(){if(!M.value)return;let e=I(M.value);e&&(N.value={...N.value,phone:e})}async function B(){N.value={},P.value=``;let e=v(M.value);M.value=e;let t=I(e);if(t){N.value={phone:t},P.value=D;return}let n=await j.requestOtp(e,{isRegister:!1});n.success?h.push({name:`otp`,query:{phone:e,mode:`login`}}):P.value=n.message??`خطا در ارسال کد تأیید.`}return(o,d)=>{let f=n(`RouterLink`);return r(),p(S,{"back-to":`/welcome`},{default:t(()=>[d[3]||=u(`h1`,{class:`auth-title`},`به نادمی تکس خوش آمدید`,-1),d[4]||=u(`p`,{class:`auth-lead`},`برای ادامه، وارد حساب کاربری خود شوید`,-1),u(`form`,{class:`auth-form`,onSubmit:g(B,[`prevent`])},[a(C,{message:P.value},null,8,[`message`]),u(`label`,{class:e([`auth-field`,{"is-invalid":!!N.value.phone}])},[a(w,{size:18,color:`#64748b`}),u(`input`,{value:F.value,type:`tel`,inputmode:`numeric`,autocomplete:`tel`,maxlength:`11`,placeholder:`شماره موبایل`,"aria-invalid":!!N.value.phone,"aria-label":`شماره موبایل`,onInput:d[0]||=e=>R(e.target.value),onBlur:z},null,40,O)],2),N.value.phone?(r(),c(`p`,k,i(N.value.phone),1)):s(``,!0),u(`button`,{class:`auth-submit`,type:`submit`,disabled:m(j).loading},i(m(j).loading?`در حال ارسال…`:`ورود`),9,A),d[2]||=u(`p`,{class:`auth-or`},[u(`span`,null,`یا`)],-1),a(f,{class:`auth-outline`,to:`/register`},{default:t(()=>[...d[1]||=[l(`ثبت‌نام در نادمی تکس`,-1)]]),_:1})],32)]),_:1})}}}),[[`__scopeId`,`data-v-5764ebe1`]]);export{j as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{G as e,M as t,Pt as n,_ as r,c as i,d as a,f as o,g as s,l as c,t as l,ut as u,v as d}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{a as f}from"./format-C72AoJ2H.js";import{A as p,f as m,k as h,r as g}from"./index-BSpFi5xB.js";import{t as _}from"./PageHeader-DpR4Zxvt.js";import{t as v}from"./useGoBack-aBY3TtNx.js";var y={class:`page success-page`},b={class:`page__scroll success-page__scroll`},x={key:0,class:`card mb-4`},S={class:`info-row`},C={class:`info-row`},w={class:`info-row`},T=l(d({__name:`OrderSuccessView`,setup(l){let d=h(),T=p(),{goBack:E}=v(`/orders`),D=m(),O=i(()=>D.getOrderById(d.params.id));return(i,l)=>(t(),o(`div`,y,[r(_,{title:`ثبت موفق`,"show-back":``,centered:``,onBack:u(E)},null,8,[`onBack`]),c(`div`,b,[l[8]||=c(`div`,{class:`success-icon`},`✓`,-1),l[9]||=c(`h1`,{class:`page-title text-center`},`سفارش ثبت شد`,-1),l[10]||=c(`p`,{class:`text-center text-muted mb-4`},` سفارش شما با موفقیت ثبت شد. کارشناسان ما سفارش را بررسی و قیمت‌گذاری می‌کنند و به‌محض صدور فاکتور، از طریق پیامک و پنل کاربری به شما اطلاع می‌دهیم تا روش تسویه را انتخاب کنید. `,-1),O.value?(t(),o(`div`,x,[c(`div`,S,[l[2]||=c(`span`,null,`شماره سفارش:`,-1),c(`strong`,null,n(O.value.orderNumber),1)]),c(`div`,C,[l[3]||=c(`span`,null,`تأمین‌کننده:`,-1),c(`span`,null,n(O.value.companyName),1)]),c(`div`,w,[l[4]||=c(`span`,null,`متراژ:`,-1),c(`span`,null,n(u(f)(O.value.totalMeterage)),1)]),l[5]||=c(`div`,{class:`info-row`},[c(`span`,null,`وضعیت:`),c(`span`,null,`در انتظار قیمت‌گذاری`)],-1)])):a(``,!0),r(g,{block:``,onClick:l[0]||=e=>u(T).replace(`/orders/${O.value?.id}`)},{default:e(()=>[...l[6]||=[s(` مشاهده جزئیات سفارش `,-1)]]),_:1}),r(g,{block:``,variant:`outline`,class:`mt-2`,onClick:l[1]||=e=>u(T).replace(`/`)},{default:e(()=>[...l[7]||=[s(` بازگشت به خانه `,-1)]]),_:1})])]))}}),[[`__scopeId`,`data-v-bb2e861d`]]);export{T as default};
import{G as e,M as t,Pt as n,_ as r,c as i,d as a,f as o,g as s,l as c,t as l,ut as u,v as d}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{a as f}from"./format-C72AoJ2H.js";import{A as p,f as m,k as h,r as g}from"./index-BPUhS8CY.js";import{t as _}from"./PageHeader-CG1ktltl.js";import{t as v}from"./useGoBack-BkqOD93C.js";var y={class:`page success-page`},b={class:`page__scroll success-page__scroll`},x={key:0,class:`card mb-4`},S={class:`info-row`},C={class:`info-row`},w={class:`info-row`},T=l(d({__name:`OrderSuccessView`,setup(l){let d=h(),T=p(),{goBack:E}=v(`/orders`),D=m(),O=i(()=>D.getOrderById(d.params.id));return(i,l)=>(t(),o(`div`,y,[r(_,{title:`ثبت موفق`,"show-back":``,centered:``,onBack:u(E)},null,8,[`onBack`]),c(`div`,b,[l[8]||=c(`div`,{class:`success-icon`},`✓`,-1),l[9]||=c(`h1`,{class:`page-title text-center`},`سفارش ثبت شد`,-1),l[10]||=c(`p`,{class:`text-center text-muted mb-4`},` سفارش شما با موفقیت ثبت شد. کارشناسان ما سفارش را بررسی و قیمت‌گذاری می‌کنند و به‌محض صدور فاکتور، از طریق پیامک و پنل کاربری به شما اطلاع می‌دهیم تا روش تسویه را انتخاب کنید. `,-1),O.value?(t(),o(`div`,x,[c(`div`,S,[l[2]||=c(`span`,null,`شماره سفارش:`,-1),c(`strong`,null,n(O.value.orderNumber),1)]),c(`div`,C,[l[3]||=c(`span`,null,`تأمین‌کننده:`,-1),c(`span`,null,n(O.value.companyName),1)]),c(`div`,w,[l[4]||=c(`span`,null,`متراژ:`,-1),c(`span`,null,n(u(f)(O.value.totalMeterage)),1)]),l[5]||=c(`div`,{class:`info-row`},[c(`span`,null,`وضعیت:`),c(`span`,null,`در انتظار قیمت‌گذاری`)],-1)])):a(``,!0),r(g,{block:``,onClick:l[0]||=e=>u(T).replace(`/orders/${O.value?.id}`)},{default:e(()=>[...l[6]||=[s(` مشاهده جزئیات سفارش `,-1)]]),_:1}),r(g,{block:``,variant:`outline`,class:`mt-2`,onClick:l[1]||=e=>u(T).replace(`/`)},{default:e(()=>[...l[7]||=[s(` بازگشت به خانه `,-1)]]),_:1})])]))}}),[[`__scopeId`,`data-v-bb2e861d`]]);export{T as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{At as e,E as t,F as n,G as r,M as i,Pt as a,_ as o,c as s,d as c,f as l,g as u,i as d,k as f,l as p,nt as m,t as h,u as g,ut as _,v}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as y}from"./BasicIcon-ba1FsUKx.js";import{l as b}from"./dist-U-AqZ6hP.js";import{d as x,l as S,t as C}from"./format-C72AoJ2H.js";import{A as w,g as T,k as E,l as ee}from"./index-BSpFi5xB.js";import{t as te}from"./AuthShell-BzzMWHUA.js";import{t as ne}from"./FormErrorBanner-Ud1D04xf.js";import{n as re,r as D,t as O}from"./formErrors-DglFjYkZ.js";var k={class:`auth-lead`},A={dir:`ltr`},ie={class:`otp-row`,dir:`ltr`,role:`group`,"aria-label":`کد تأیید`},ae=[`id`,`value`,`aria-label`,`onInput`,`onKeydown`,`onPaste`],j={key:0,class:`auth-error`},M=[`disabled`],N=[`disabled`],P=4,F=60,I=h(v({__name:`OtpView`,setup(h){let v=E(),I=w(),L=ee(),R=s(()=>{let e=v.query.phone,t=Array.isArray(e)?e[0]:e;return S(typeof t==`string`?t:``)}),z=s(()=>v.query.mode===`register`),B=m(Array.from({length:P},()=>``)),V=m([]),H=m({}),U=m(``),W=m(F),G=s(()=>B.value.join(``)),K=s(()=>W.value<=0&&!L.loading),q=s(()=>x(String(W.value))),{pause:oe,resume:se}=b(()=>{if(W.value<=1){W.value=0,oe();return}--W.value},1e3,{immediate:!1});function J(){H.value=re(H.value,`code`),D(H.value)||(U.value=``)}function ce(e,t){V.value[t]=e}function Y(e){let n=Math.max(0,Math.min(3,e));t(()=>V.value[n]?.focus())}function X(){W.value=F,se()}function Z(e,t=0){let n=C(e).slice(0,P-t);if(!n)return t;let r=[...B.value],i=t;for(let e of n){if(i>=P)break;r[i]=e,i+=1}return B.value=r,J(),Math.min(i,3)}function Q(){G.value.length===P&&!L.loading&&$()}function le(e,t){let n=t.target,r=C(n.value);if(r.length>1){let t=Z(r,e);n.value=B.value[e]??``,Y(t),Q();return}let i=r.slice(-1);B.value[e]=i,n.value=i,J(),i&&e<3?Y(e+1):i&&Q()}function ue(e,t){if(t.key===`Backspace`){if(B.value[e]){B.value[e]=``,J();return}e>0&&(B.value[e-1]=``,J(),Y(e-1));return}if(t.key===`ArrowLeft`){t.preventDefault(),Y(e-1);return}t.key===`ArrowRight`&&(t.preventDefault(),Y(e+1))}function de(e,t){t.preventDefault(),Y(Z(t.clipboardData?.getData(`text`)??``,e)),Q()}function fe(e){return e?x(e):``}async function $(){if(L.loading)return;H.value={},U.value=``;let e={};if(G.value.length<P&&(e.code=`کد تأیید را کامل وارد کنید.`),D(e)){H.value=e,U.value=O;return}let t=await L.confirmOtp(R.value,C(G.value));t.success?I.replace(`/`):(U.value=t.message??`کد تأیید نامعتبر است.`,B.value=Array.from({length:P},()=>``),Y(0))}async function pe(){if(!K.value)return;U.value=``,H.value={};let e=z.value?T():null;if(z.value&&!e){U.value=`برای ارسال مجدد کد، نام و نام خانوادگی لازم است. لطفاً دوباره ثبت‌نام را شروع کنید.`;return}let t=await L.requestOtp(R.value,{isRegister:z.value,firstName:e?.firstName,lastName:e?.lastName});t.success?(B.value=Array.from({length:P},()=>``),X(),Y(0)):U.value=t.message??`خطا در ارسال مجدد کد.`}function me(){I.replace({name:z.value?`register`:`login`})}return f(()=>{if(!R.value){I.replace({name:`login`});return}X(),Y(0)}),(t,s)=>(i(),g(te,{"back-to":z.value?`/register`:`/login`},{default:r(()=>[s[2]||=p(`h1`,{class:`auth-title`},`کد تأیید`,-1),p(`p`,k,[s[0]||=u(` کد ارسال‌شده به `,-1),p(`span`,A,a(_(x)(R.value)),1),s[1]||=u(` را وارد کنید `,-1)]),p(`form`,{class:`auth-form`,onSubmit:y($,[`prevent`])},[o(ne,{message:U.value},null,8,[`message`]),p(`div`,ie,[(i(!0),l(d,null,n(B.value,(t,n)=>(i(),l(`input`,{id:`otp-${n}`,key:n,ref_for:!0,ref:e=>ce(e,n),class:e([`otp-box`,{"is-invalid":H.value.code}]),type:`text`,inputmode:`numeric`,autocomplete:`one-time-code`,maxlength:`1`,value:fe(t),"aria-label":`رقم ${_(x)(String(n+1))}`,onInput:e=>le(n,e),onKeydown:e=>ue(n,e),onPaste:e=>de(n,e)},null,42,ae))),128))]),H.value.code?(i(),l(`p`,j,a(H.value.code),1)):c(``,!0),p(`button`,{class:`otp-resend`,type:`button`,disabled:!K.value,onClick:pe},[K.value?(i(),l(d,{key:0},[u(`ارسال مجدد کد`)],64)):(i(),l(d,{key:1},[u(`ارسال مجدد کد (`+a(q.value)+` ثانیه)`,1)],64))],8,M),p(`button`,{class:`auth-submit`,type:`submit`,disabled:_(L).loading},a(_(L).loading?`در حال بررسی…`:`تأیید`),9,N),p(`button`,{type:`button`,class:`otp-edit`,onClick:me},`ویرایش شماره`)],32)]),_:1},8,[`back-to`]))}}),[[`__scopeId`,`data-v-27df1667`]]);export{I as default};
import{At as e,E as t,F as n,G as r,M as i,Pt as a,_ as o,c as s,d as c,f as l,g as u,i as d,k as f,l as p,nt as m,t as h,u as g,ut as _,v}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{u as y}from"./BasicIcon-ba1FsUKx.js";import{l as b}from"./dist-U-AqZ6hP.js";import{d as x,l as S,t as C}from"./format-C72AoJ2H.js";import{A as w,g as T,k as E,l as ee}from"./index-BPUhS8CY.js";import{t as te}from"./AuthShell-CmEncS1b.js";import{t as ne}from"./FormErrorBanner-Ud1D04xf.js";import{n as re,r as D,t as O}from"./formErrors-DglFjYkZ.js";var k={class:`auth-lead`},A={dir:`ltr`},ie={class:`otp-row`,dir:`ltr`,role:`group`,"aria-label":`کد تأیید`},ae=[`id`,`value`,`aria-label`,`onInput`,`onKeydown`,`onPaste`],j={key:0,class:`auth-error`},M=[`disabled`],N=[`disabled`],P=4,F=60,I=h(v({__name:`OtpView`,setup(h){let v=E(),I=w(),L=ee(),R=s(()=>{let e=v.query.phone,t=Array.isArray(e)?e[0]:e;return S(typeof t==`string`?t:``)}),z=s(()=>v.query.mode===`register`),B=m(Array.from({length:P},()=>``)),V=m([]),H=m({}),U=m(``),W=m(F),G=s(()=>B.value.join(``)),K=s(()=>W.value<=0&&!L.loading),q=s(()=>x(String(W.value))),{pause:oe,resume:se}=b(()=>{if(W.value<=1){W.value=0,oe();return}--W.value},1e3,{immediate:!1});function J(){H.value=re(H.value,`code`),D(H.value)||(U.value=``)}function ce(e,t){V.value[t]=e}function Y(e){let n=Math.max(0,Math.min(3,e));t(()=>V.value[n]?.focus())}function X(){W.value=F,se()}function Z(e,t=0){let n=C(e).slice(0,P-t);if(!n)return t;let r=[...B.value],i=t;for(let e of n){if(i>=P)break;r[i]=e,i+=1}return B.value=r,J(),Math.min(i,3)}function Q(){G.value.length===P&&!L.loading&&$()}function le(e,t){let n=t.target,r=C(n.value);if(r.length>1){let t=Z(r,e);n.value=B.value[e]??``,Y(t),Q();return}let i=r.slice(-1);B.value[e]=i,n.value=i,J(),i&&e<3?Y(e+1):i&&Q()}function ue(e,t){if(t.key===`Backspace`){if(B.value[e]){B.value[e]=``,J();return}e>0&&(B.value[e-1]=``,J(),Y(e-1));return}if(t.key===`ArrowLeft`){t.preventDefault(),Y(e-1);return}t.key===`ArrowRight`&&(t.preventDefault(),Y(e+1))}function de(e,t){t.preventDefault(),Y(Z(t.clipboardData?.getData(`text`)??``,e)),Q()}function fe(e){return e?x(e):``}async function $(){if(L.loading)return;H.value={},U.value=``;let e={};if(G.value.length<P&&(e.code=`کد تأیید را کامل وارد کنید.`),D(e)){H.value=e,U.value=O;return}let t=await L.confirmOtp(R.value,C(G.value));t.success?I.replace(`/`):(U.value=t.message??`کد تأیید نامعتبر است.`,B.value=Array.from({length:P},()=>``),Y(0))}async function pe(){if(!K.value)return;U.value=``,H.value={};let e=z.value?T():null;if(z.value&&!e){U.value=`برای ارسال مجدد کد، نام و نام خانوادگی لازم است. لطفاً دوباره ثبت‌نام را شروع کنید.`;return}let t=await L.requestOtp(R.value,{isRegister:z.value,firstName:e?.firstName,lastName:e?.lastName});t.success?(B.value=Array.from({length:P},()=>``),X(),Y(0)):U.value=t.message??`خطا در ارسال مجدد کد.`}function me(){I.replace({name:z.value?`register`:`login`})}return f(()=>{if(!R.value){I.replace({name:`login`});return}X(),Y(0)}),(t,s)=>(i(),g(te,{"back-to":z.value?`/register`:`/login`},{default:r(()=>[s[2]||=p(`h1`,{class:`auth-title`},`کد تأیید`,-1),p(`p`,k,[s[0]||=u(` کد ارسال‌شده به `,-1),p(`span`,A,a(_(x)(R.value)),1),s[1]||=u(` را وارد کنید `,-1)]),p(`form`,{class:`auth-form`,onSubmit:y($,[`prevent`])},[o(ne,{message:U.value},null,8,[`message`]),p(`div`,ie,[(i(!0),l(d,null,n(B.value,(t,n)=>(i(),l(`input`,{id:`otp-${n}`,key:n,ref_for:!0,ref:e=>ce(e,n),class:e([`otp-box`,{"is-invalid":H.value.code}]),type:`text`,inputmode:`numeric`,autocomplete:`one-time-code`,maxlength:`1`,value:fe(t),"aria-label":`رقم ${_(x)(String(n+1))}`,onInput:e=>le(n,e),onKeydown:e=>ue(n,e),onPaste:e=>de(n,e)},null,42,ae))),128))]),H.value.code?(i(),l(`p`,j,a(H.value.code),1)):c(``,!0),p(`button`,{class:`otp-resend`,type:`button`,disabled:!K.value,onClick:pe},[K.value?(i(),l(d,{key:0},[u(`ارسال مجدد کد`)],64)):(i(),l(d,{key:1},[u(`ارسال مجدد کد (`+a(q.value)+` ثانیه)`,1)],64))],8,M),p(`button`,{class:`auth-submit`,type:`submit`,disabled:_(L).loading},a(_(L).loading?`در حال بررسی…`:`تأیید`),9,N),p(`button`,{type:`button`,class:`otp-edit`,onClick:me},`ویرایش شماره`)],32)]),_:1},8,[`back-to`]))}}),[[`__scopeId`,`data-v-27df1667`]]);export{I as default};
@@ -1 +1 @@
import{I as e,M as t,Pt as n,T as r,_ as i,d as a,f as o,i as s,l as c,t as l,v as u}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{a as d}from"./index-BSpFi5xB.js";import{t as f}from"./IconChevronBack-DytWz6TD.js";var p={key:1,class:`nav-btn`},m={class:`page-nav__title`},h={class:`page-nav__trailing`},g={key:0,class:`page-nav__subtitle`},_={class:`header-text`},v={class:`page-title`},y={key:0,class:`page-subtitle`},b={class:`page-header__trailing`},x=l(u({inheritAttrs:!1,__name:`PageHeader`,props:{title:{},subtitle:{},showBack:{type:Boolean},centered:{type:Boolean}},emits:[`back`],setup(l){return(u,x)=>l.centered?(t(),o(s,{key:0},[c(`header`,r({class:`page-nav`},u.$attrs),[l.showBack?(t(),o(`button`,{key:0,type:`button`,class:`nav-btn`,"aria-label":`بازگشت`,onClick:x[0]||=e=>u.$emit(`back`)},[i(f,{size:20})])):(t(),o(`span`,p)),c(`h1`,m,n(l.title),1),c(`div`,h,[e(u.$slots,`trailing`,{},void 0,!0),i(d,{variant:`inline`,class:`mobile-only`})])],16),l.subtitle?(t(),o(`p`,g,n(l.subtitle),1)):a(``,!0)],64)):(t(),o(`header`,r({key:1,class:`page-header`},u.$attrs),[l.showBack?(t(),o(`button`,{key:0,type:`button`,class:`back-btn`,"aria-label":`بازگشت`,onClick:x[1]||=e=>u.$emit(`back`)},[i(f,{size:20})])):a(``,!0),c(`div`,_,[c(`h1`,v,n(l.title),1),l.subtitle?(t(),o(`p`,y,n(l.subtitle),1)):a(``,!0)]),c(`div`,b,[e(u.$slots,`trailing`,{},void 0,!0),i(d,{variant:`inline`,class:`mobile-only`})])],16))}}),[[`__scopeId`,`data-v-c4a68159`]]);export{x as t};
import{I as e,M as t,Pt as n,T as r,_ as i,d as a,f as o,i as s,l as c,t as l,v as u}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{a as d}from"./index-BPUhS8CY.js";import{t as f}from"./IconChevronBack-DytWz6TD.js";var p={key:1,class:`nav-btn`},m={class:`page-nav__title`},h={class:`page-nav__trailing`},g={key:0,class:`page-nav__subtitle`},_={class:`header-text`},v={class:`page-title`},y={key:0,class:`page-subtitle`},b={class:`page-header__trailing`},x=l(u({inheritAttrs:!1,__name:`PageHeader`,props:{title:{},subtitle:{},showBack:{type:Boolean},centered:{type:Boolean}},emits:[`back`],setup(l){return(u,x)=>l.centered?(t(),o(s,{key:0},[c(`header`,r({class:`page-nav`},u.$attrs),[l.showBack?(t(),o(`button`,{key:0,type:`button`,class:`nav-btn`,"aria-label":`بازگشت`,onClick:x[0]||=e=>u.$emit(`back`)},[i(f,{size:20})])):(t(),o(`span`,p)),c(`h1`,m,n(l.title),1),c(`div`,h,[e(u.$slots,`trailing`,{},void 0,!0),i(d,{variant:`inline`,class:`mobile-only`})])],16),l.subtitle?(t(),o(`p`,g,n(l.subtitle),1)):a(``,!0)],64)):(t(),o(`header`,r({key:1,class:`page-header`},u.$attrs),[l.showBack?(t(),o(`button`,{key:0,type:`button`,class:`back-btn`,"aria-label":`بازگشت`,onClick:x[1]||=e=>u.$emit(`back`)},[i(f,{size:20})])):a(``,!0),c(`div`,_,[c(`h1`,v,n(l.title),1),l.subtitle?(t(),o(`p`,y,n(l.subtitle),1)):a(``,!0)]),c(`div`,b,[e(u.$slots,`trailing`,{},void 0,!0),i(d,{variant:`inline`,class:`mobile-only`})])],16))}}),[[`__scopeId`,`data-v-c4a68159`]]);export{x as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{t as e}from"./CheckListView-CtMGWM5e.js";import{M as t,u as n,v as r}from"./_plugin-vue_export-helper-1xMDlcEE.js";var i=r({__name:`ProfileChecksView`,setup(r){return(r,i)=>(t(),n(e))}});export{i as default};
import{t as e}from"./CheckListView-CdyymO5t.js";import{M as t,u as n,v as r}from"./_plugin-vue_export-helper-1xMDlcEE.js";var i=r({__name:`ProfileChecksView`,setup(r){return(r,i)=>(t(),n(e))}});export{i as default};
@@ -1 +1 @@
import{At as e,F as t,G as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,i as u,l as d,nt as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as _}from"./BasicIcon-ba1FsUKx.js";import{u as v}from"./dist-U-AqZ6hP.js";import{A as y,f as b,l as x,o as S,r as C}from"./index-BSpFi5xB.js";import{t as w}from"./ProfileSubpageLayout-CBTu0mQq.js";var T={class:`settings-page`},E={class:`settings-links`,"aria-label":`حساب کاربری`},D={class:`settings-link__icon`,"aria-hidden":`true`},O={class:`settings-link__icon`,"aria-hidden":`true`},k={class:`settings-link__label`},A={key:0},j={class:`display-fieldset`},M={class:`display-grid`,role:`radiogroup`,"aria-label":`حالت نمایش`},N=[`aria-checked`,`onClick`],P={class:`theme-card__icon`,"aria-hidden":`true`},F={class:`theme-card__body`},I={class:`theme-card__label`},L={class:`theme-card__desc`},R={class:`theme-card__check`,"aria-hidden":`true`},z={key:0,class:`display-saved`},B=p(g({__name:`ProfileDisplayView`,setup(p){let g=y(),B=x(),V=b(),H=S(),U=f(!1),{start:W}=v(()=>{U.value=!1},2e3),G=[{value:`light`,label:`روشن`,description:`پس‌زمینه روشن و کنتراست بالا`,icon:`vuesax-linear:sun-1`},{value:`dark`,label:`تاریک`,description:`مناسب استفاده در شب`,icon:`vuesax-linear:moon`},{value:`system`,label:`سیستم`,description:`هم‌تراز با تنظیمات دستگاه`,icon:`vuesax-linear:mobile`}],K=o(()=>V.draftChecks.length);function q(){U.value=!0,W()}function J(){B.logout(),g.replace(`/welcome`)}return(o,f)=>(r(),m(w,{title:`تنظیمات`,subtitle:`نمایش، حساب کاربری و خروج`},{default:n(()=>[d(`div`,T,[d(`nav`,E,[d(`button`,{type:`button`,class:`settings-link`,onClick:f[0]||=e=>h(g).push(`/profile/edit`)},[d(`span`,D,[a(_,{icon:`vuesax-linear:profile-circle`,size:20,"stroke-width":1.5})]),f[2]||=d(`span`,{class:`settings-link__label`},`اطلاعات کاربری`,-1),a(_,{class:`settings-link__chevron`,icon:`vuesax-linear:arrow-left-1`,size:16,"stroke-width":1.5})]),d(`button`,{type:`button`,class:`settings-link`,onClick:f[1]||=e=>h(g).push(`/profile/checks`)},[d(`span`,O,[a(_,{icon:`vuesax-linear:card`,size:20,"stroke-width":1.5})]),d(`span`,k,[f[3]||=l(` لیست چک‌ها `,-1),K.value?(r(),c(`em`,A,`(`+i(K.value)+`)`,1)):s(``,!0)]),a(_,{class:`settings-link__chevron`,icon:`vuesax-linear:arrow-left-1`,size:16,"stroke-width":1.5})])]),d(`fieldset`,j,[f[4]||=d(`legend`,{class:`display-fieldset__legend`},`حالت نمایش`,-1),d(`div`,M,[(r(),c(u,null,t(G,t=>d(`button`,{key:t.value,type:`button`,class:e([`theme-card`,{"theme-card--active":h(H).preference===t.value}]),role:`radio`,"aria-checked":h(H).preference===t.value,onClick:e=>h(H).preference=t.value},[d(`span`,P,[a(_,{icon:t.icon,size:26,"stroke-width":1.5},null,8,[`icon`])]),d(`span`,F,[d(`strong`,I,i(t.label),1),d(`span`,L,i(t.description),1)]),d(`span`,R,[h(H).preference===t.value?(r(),m(_,{key:0,icon:`vuesax-linear:tick-circle`,size:20,"stroke-width":1.75})):s(``,!0)])],10,N)),64))])]),a(C,{block:``,onClick:q},{default:n(()=>[...f[5]||=[l(`ذخیره تنظیمات`,-1)]]),_:1}),U.value?(r(),c(`p`,z,`تنظیمات نمایش ذخیره شد ✓`)):s(``,!0),d(`button`,{type:`button`,class:`settings-logout`,onClick:J},`خروج`)])]),_:1}))}}),[[`__scopeId`,`data-v-f16dc950`]]);export{B as default};
import{At as e,F as t,G as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,i as u,l as d,nt as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as _}from"./BasicIcon-ba1FsUKx.js";import{u as v}from"./dist-U-AqZ6hP.js";import{A as y,f as b,l as x,o as S,r as C}from"./index-BPUhS8CY.js";import{t as w}from"./ProfileSubpageLayout-Bj7iaKP1.js";var T={class:`settings-page`},E={class:`settings-links`,"aria-label":`حساب کاربری`},D={class:`settings-link__icon`,"aria-hidden":`true`},O={class:`settings-link__icon`,"aria-hidden":`true`},k={class:`settings-link__label`},A={key:0},j={class:`display-fieldset`},M={class:`display-grid`,role:`radiogroup`,"aria-label":`حالت نمایش`},N=[`aria-checked`,`onClick`],P={class:`theme-card__icon`,"aria-hidden":`true`},F={class:`theme-card__body`},I={class:`theme-card__label`},L={class:`theme-card__desc`},R={class:`theme-card__check`,"aria-hidden":`true`},z={key:0,class:`display-saved`},B=p(g({__name:`ProfileDisplayView`,setup(p){let g=y(),B=x(),V=b(),H=S(),U=f(!1),{start:W}=v(()=>{U.value=!1},2e3),G=[{value:`light`,label:`روشن`,description:`پس‌زمینه روشن و کنتراست بالا`,icon:`vuesax-linear:sun-1`},{value:`dark`,label:`تاریک`,description:`مناسب استفاده در شب`,icon:`vuesax-linear:moon`},{value:`system`,label:`سیستم`,description:`هم‌تراز با تنظیمات دستگاه`,icon:`vuesax-linear:mobile`}],K=o(()=>V.draftChecks.length);function q(){U.value=!0,W()}function J(){B.logout(),g.replace(`/welcome`)}return(o,f)=>(r(),m(w,{title:`تنظیمات`,subtitle:`نمایش، حساب کاربری و خروج`},{default:n(()=>[d(`div`,T,[d(`nav`,E,[d(`button`,{type:`button`,class:`settings-link`,onClick:f[0]||=e=>h(g).push(`/profile/edit`)},[d(`span`,D,[a(_,{icon:`vuesax-linear:profile-circle`,size:20,"stroke-width":1.5})]),f[2]||=d(`span`,{class:`settings-link__label`},`اطلاعات کاربری`,-1),a(_,{class:`settings-link__chevron`,icon:`vuesax-linear:arrow-left-1`,size:16,"stroke-width":1.5})]),d(`button`,{type:`button`,class:`settings-link`,onClick:f[1]||=e=>h(g).push(`/profile/checks`)},[d(`span`,O,[a(_,{icon:`vuesax-linear:card`,size:20,"stroke-width":1.5})]),d(`span`,k,[f[3]||=l(` لیست چک‌ها `,-1),K.value?(r(),c(`em`,A,`(`+i(K.value)+`)`,1)):s(``,!0)]),a(_,{class:`settings-link__chevron`,icon:`vuesax-linear:arrow-left-1`,size:16,"stroke-width":1.5})])]),d(`fieldset`,j,[f[4]||=d(`legend`,{class:`display-fieldset__legend`},`حالت نمایش`,-1),d(`div`,M,[(r(),c(u,null,t(G,t=>d(`button`,{key:t.value,type:`button`,class:e([`theme-card`,{"theme-card--active":h(H).preference===t.value}]),role:`radio`,"aria-checked":h(H).preference===t.value,onClick:e=>h(H).preference=t.value},[d(`span`,P,[a(_,{icon:t.icon,size:26,"stroke-width":1.5},null,8,[`icon`])]),d(`span`,F,[d(`strong`,I,i(t.label),1),d(`span`,L,i(t.description),1)]),d(`span`,R,[h(H).preference===t.value?(r(),m(_,{key:0,icon:`vuesax-linear:tick-circle`,size:20,"stroke-width":1.75})):s(``,!0)])],10,N)),64))])]),a(C,{block:``,onClick:q},{default:n(()=>[...f[5]||=[l(`ذخیره تنظیمات`,-1)]]),_:1}),U.value?(r(),c(`p`,z,`تنظیمات نمایش ذخیره شد ✓`)):s(``,!0),d(`button`,{type:`button`,class:`settings-logout`,onClick:J},`خروج`)])]),_:1}))}}),[[`__scopeId`,`data-v-f16dc950`]]);export{B as default};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{At as e,F as t,G as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,i as u,k as d,l as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as _}from"./BasicIcon-ba1FsUKx.js";import{i as v}from"./format-C72AoJ2H.js";import{A as y,d as b,r as x}from"./index-BSpFi5xB.js";import{t as S}from"./EmptyState-DYhkpGhZ.js";import{t as C}from"./ProfileSubpageLayout-CBTu0mQq.js";var w={key:0,class:`notif-box`},T={class:`notif-box__head`},E={class:`notif-box__count`},D=[`onClick`],O={class:`notif-row__icon`,"aria-hidden":`true`},k={class:`notif-row__body`},A={class:`notif-row__title-row`},j={class:`notif-row__title`},M={key:0,class:`notif-row__dot`,"aria-label":`خوانده‌نشده`},N={class:`notif-row__text`},P={class:`notif-row__time`},F=p(g({__name:`ProfileNotificationsView`,setup(p){let g=y(),F=b(),I=o(()=>F.items),L=o(()=>F.hasUnread),R={info:`vuesax-linear:information`,success:`vuesax-linear:tick-circle`,warning:`vuesax-linear:timer`,danger:`vuesax-linear:close-circle`};d(()=>{F.hydrate()});async function z(e){await F.markRead(e.id),e.link&&g.push(e.link)}return(o,d)=>(r(),m(C,{title:`اعلان‌ها`,subtitle:`سفارش‌ها، پیشنهاد محصول و سایر اعلان‌ها`},{default:n(()=>[I.value.length?(r(),c(`div`,w,[f(`div`,T,[f(`span`,E,i(L.value?`${h(F).unreadCount} اعلان خوانده‌نشده`:`همه خوانده شده`),1),L.value?(r(),m(x,{key:0,variant:`outline`,class:`notif-box__mark`,onClick:d[0]||=e=>h(F).markAllRead()},{default:n(()=>[...d[2]||=[l(` خواندن همه `,-1)]]),_:1})):s(``,!0)]),(r(!0),c(u,null,t(I.value,t=>(r(),c(`button`,{key:t.id,type:`button`,class:e([`notif-row`,[`notif-row--${t.tone}`,{"notif-row--unread":!t.isRead}]]),onClick:e=>z(t)},[f(`span`,O,[a(_,{icon:R[t.tone],size:22,"stroke-width":1.5},null,8,[`icon`])]),f(`span`,k,[f(`span`,A,[f(`strong`,j,i(t.title),1),t.isRead?s(``,!0):(r(),c(`span`,M))]),f(`span`,N,i(t.body),1),f(`span`,P,i(h(v)(t.sentAt)),1)])],10,D))),128))])):(r(),m(S,{key:1,icon:`vuesax-linear:notification-bing`,title:`اعلانی ندارید`,message:`وقتی فاکتور سفارشتان صادر شود، پیشنهاد محصولی برایتان ثبت شود یا وضعیت پرداخت تغییر کند، همین‌جا خبردار می‌شوید.`},{default:n(()=>[a(x,{variant:`outline`,onClick:d[1]||=e=>h(g).push(`/orders`)},{default:n(()=>[...d[3]||=[l(`سفارش‌های من`,-1)]]),_:1})]),_:1}))]),_:1}))}}),[[`__scopeId`,`data-v-7e884b50`]]);export{F as default};
import{At as e,F as t,G as n,M as r,Pt as i,_ as a,c as o,d as s,f as c,g as l,i as u,k as d,l as f,t as p,u as m,ut as h,v as g}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as _}from"./BasicIcon-ba1FsUKx.js";import{i as v}from"./format-C72AoJ2H.js";import{A as y,d as b,r as x}from"./index-BPUhS8CY.js";import{t as S}from"./EmptyState-DYhkpGhZ.js";import{t as C}from"./ProfileSubpageLayout-Bj7iaKP1.js";var w={key:0,class:`notif-box`},T={class:`notif-box__head`},E={class:`notif-box__count`},D=[`onClick`],O={class:`notif-row__icon`,"aria-hidden":`true`},k={class:`notif-row__body`},A={class:`notif-row__title-row`},j={class:`notif-row__title`},M={key:0,class:`notif-row__dot`,"aria-label":`خوانده‌نشده`},N={class:`notif-row__text`},P={class:`notif-row__time`},F=p(g({__name:`ProfileNotificationsView`,setup(p){let g=y(),F=b(),I=o(()=>F.items),L=o(()=>F.hasUnread),R={info:`vuesax-linear:information`,success:`vuesax-linear:tick-circle`,warning:`vuesax-linear:timer`,danger:`vuesax-linear:close-circle`};d(()=>{F.hydrate()});async function z(e){await F.markRead(e.id),e.link&&g.push(e.link)}return(o,d)=>(r(),m(C,{title:`اعلان‌ها`,subtitle:`سفارش‌ها، پیشنهاد محصول و سایر اعلان‌ها`},{default:n(()=>[I.value.length?(r(),c(`div`,w,[f(`div`,T,[f(`span`,E,i(L.value?`${h(F).unreadCount} اعلان خوانده‌نشده`:`همه خوانده شده`),1),L.value?(r(),m(x,{key:0,variant:`outline`,class:`notif-box__mark`,onClick:d[0]||=e=>h(F).markAllRead()},{default:n(()=>[...d[2]||=[l(` خواندن همه `,-1)]]),_:1})):s(``,!0)]),(r(!0),c(u,null,t(I.value,t=>(r(),c(`button`,{key:t.id,type:`button`,class:e([`notif-row`,[`notif-row--${t.tone}`,{"notif-row--unread":!t.isRead}]]),onClick:e=>z(t)},[f(`span`,O,[a(_,{icon:R[t.tone],size:22,"stroke-width":1.5},null,8,[`icon`])]),f(`span`,k,[f(`span`,A,[f(`strong`,j,i(t.title),1),t.isRead?s(``,!0):(r(),c(`span`,M))]),f(`span`,N,i(t.body),1),f(`span`,P,i(h(v)(t.sentAt)),1)])],10,D))),128))])):(r(),m(S,{key:1,icon:`vuesax-linear:notification-bing`,title:`اعلانی ندارید`,message:`وقتی فاکتور سفارشتان صادر شود، پیشنهاد محصولی برایتان ثبت شود یا وضعیت پرداخت تغییر کند، همین‌جا خبردار می‌شوید.`},{default:n(()=>[a(x,{variant:`outline`,onClick:d[1]||=e=>h(g).push(`/orders`)},{default:n(()=>[...d[3]||=[l(`سفارش‌های من`,-1)]]),_:1})]),_:1}))]),_:1}))}}),[[`__scopeId`,`data-v-7e884b50`]]);export{F as default};
@@ -1 +1 @@
import{G as e,M as t,_ as n,d as r,f as i,g as a,l as o,nt as s,t as c,u as l,v as u}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{r as d}from"./index-BSpFi5xB.js";import{t as f}from"./FormErrorBanner-Ud1D04xf.js";import{n as p,r as m,t as h}from"./formErrors-DglFjYkZ.js";import{t as g}from"./BaseInput-CpE3bVJZ.js";import{t as _}from"./ProfileSubpageLayout-CBTu0mQq.js";var v={class:`settings-form`},y={key:0,class:`settings-form__saved`},b=c(u({__name:`ProfileSecurityView`,setup(c){let u=s(``),b=s(``),x=s(``),S=s({}),C=s(``),w=s(!1);function T(e){S.value=p(S.value,e),m(S.value)||(C.value=``)}function E(){S.value={},C.value=``,w.value=!1;let e={};if(u.value||(e.currentPassword=`رمز فعلی الزامی است.`),b.value.length<6&&(e.newPassword=`رمز جدید باید حداقل ۶ کاراکتر باشد.`),x.value!==b.value&&(e.confirmPassword=`تکرار رمز با رمز جدید یکسان نیست.`),m(e)){S.value=e,C.value=h;return}u.value=``,b.value=``,x.value=``,w.value=!0,setTimeout(()=>{w.value=!1},2e3)}return(s,c)=>(t(),l(_,{title:`امنیت حساب`,subtitle:`تغییر رمز عبور و تنظیمات ورود`},{default:e(()=>[n(f,{message:C.value},null,8,[`message`]),o(`div`,v,[n(g,{modelValue:u.value,"onUpdate:modelValue":[c[0]||=e=>u.value=e,c[1]||=e=>T(`currentPassword`)],type:`password`,label:`رمز عبور فعلی`,error:S.value.currentPassword},null,8,[`modelValue`,`error`]),n(g,{modelValue:b.value,"onUpdate:modelValue":[c[2]||=e=>b.value=e,c[3]||=e=>T(`newPassword`)],type:`password`,label:`رمز عبور جدید`,error:S.value.newPassword},null,8,[`modelValue`,`error`]),n(g,{modelValue:x.value,"onUpdate:modelValue":[c[4]||=e=>x.value=e,c[5]||=e=>T(`confirmPassword`)],type:`password`,label:`تکرار رمز عبور جدید`,error:S.value.confirmPassword},null,8,[`modelValue`,`error`]),n(d,{block:``,onClick:E},{default:e(()=>[...c[6]||=[a(`ذخیره رمز جدید`,-1)]]),_:1}),w.value?(t(),i(`p`,y,`رمز عبور با موفقیت تغییر کرد ✓`)):r(``,!0)])]),_:1}))}}),[[`__scopeId`,`data-v-074827a2`]]);export{b as default};
import{G as e,M as t,_ as n,d as r,f as i,g as a,l as o,nt as s,t as c,u as l,v as u}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{r as d}from"./index-BPUhS8CY.js";import{t as f}from"./FormErrorBanner-Ud1D04xf.js";import{n as p,r as m,t as h}from"./formErrors-DglFjYkZ.js";import{t as g}from"./BaseInput-CpE3bVJZ.js";import{t as _}from"./ProfileSubpageLayout-Bj7iaKP1.js";var v={class:`settings-form`},y={key:0,class:`settings-form__saved`},b=c(u({__name:`ProfileSecurityView`,setup(c){let u=s(``),b=s(``),x=s(``),S=s({}),C=s(``),w=s(!1);function T(e){S.value=p(S.value,e),m(S.value)||(C.value=``)}function E(){S.value={},C.value=``,w.value=!1;let e={};if(u.value||(e.currentPassword=`رمز فعلی الزامی است.`),b.value.length<6&&(e.newPassword=`رمز جدید باید حداقل ۶ کاراکتر باشد.`),x.value!==b.value&&(e.confirmPassword=`تکرار رمز با رمز جدید یکسان نیست.`),m(e)){S.value=e,C.value=h;return}u.value=``,b.value=``,x.value=``,w.value=!0,setTimeout(()=>{w.value=!1},2e3)}return(s,c)=>(t(),l(_,{title:`امنیت حساب`,subtitle:`تغییر رمز عبور و تنظیمات ورود`},{default:e(()=>[n(f,{message:C.value},null,8,[`message`]),o(`div`,v,[n(g,{modelValue:u.value,"onUpdate:modelValue":[c[0]||=e=>u.value=e,c[1]||=e=>T(`currentPassword`)],type:`password`,label:`رمز عبور فعلی`,error:S.value.currentPassword},null,8,[`modelValue`,`error`]),n(g,{modelValue:b.value,"onUpdate:modelValue":[c[2]||=e=>b.value=e,c[3]||=e=>T(`newPassword`)],type:`password`,label:`رمز عبور جدید`,error:S.value.newPassword},null,8,[`modelValue`,`error`]),n(g,{modelValue:x.value,"onUpdate:modelValue":[c[4]||=e=>x.value=e,c[5]||=e=>T(`confirmPassword`)],type:`password`,label:`تکرار رمز عبور جدید`,error:S.value.confirmPassword},null,8,[`modelValue`,`error`]),n(d,{block:``,onClick:E},{default:e(()=>[...c[6]||=[a(`ذخیره رمز جدید`,-1)]]),_:1}),w.value?(t(),i(`p`,y,`رمز عبور با موفقیت تغییر کرد ✓`)):r(``,!0)])]),_:1}))}}),[[`__scopeId`,`data-v-074827a2`]]);export{b as default};
@@ -1 +1 @@
import{I as e,M as t,Pt as n,_ as r,d as i,f as a,i as o,l as s,t as c,v as l}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as u}from"./index-BSpFi5xB.js";import{t as d}from"./IconChevronBack-DytWz6TD.js";var f={class:`page profile-subpage mobile-only`},p={class:`page__scroll page__scroll--with-nav`},m={class:`profile-subpage__card card`},h={class:`profile-subpage__nav`},g={class:`profile-subpage__title`},_={type:`button`,class:`nav-btn nav-btn--ghost`,"aria-hidden":`true`,tabindex:`-1`},v={class:`desktop-page profile-subpage-desktop desktop-only`},y={class:`desktop-page__head profile-subpage-desktop__head`},b={class:`desktop-page__title`},x={key:0,class:`desktop-page__subtitle`},S={class:`profile-subpage-desktop__panel card`},C=c(l({__name:`ProfileSubpageLayout`,props:{title:{},subtitle:{}},setup(c){let l=u();function C(){l.push(`/profile`)}return(l,u)=>(t(),a(o,null,[s(`div`,f,[s(`div`,p,[s(`div`,m,[s(`header`,h,[s(`button`,{type:`button`,class:`nav-btn`,"aria-label":`بازگشت`,onClick:C},[r(d,{size:20})]),s(`h1`,g,n(c.title),1),s(`button`,_,[r(d,{size:18,class:`nav-btn__flip`})])]),e(l.$slots,`default`,{},void 0,!0)])])]),s(`div`,v,[s(`header`,y,[s(`h1`,b,n(c.title),1),c.subtitle?(t(),a(`p`,x,n(c.subtitle),1)):i(``,!0)]),s(`section`,S,[e(l.$slots,`default`,{},void 0,!0)])])],64))}}),[[`__scopeId`,`data-v-e7684fde`]]);export{C as t};
import{I as e,M as t,Pt as n,_ as r,d as i,f as a,i as o,l as s,t as c,v as l}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as u}from"./index-BPUhS8CY.js";import{t as d}from"./IconChevronBack-DytWz6TD.js";var f={class:`page profile-subpage mobile-only`},p={class:`page__scroll page__scroll--with-nav`},m={class:`profile-subpage__card card`},h={class:`profile-subpage__nav`},g={class:`profile-subpage__title`},_={type:`button`,class:`nav-btn nav-btn--ghost`,"aria-hidden":`true`,tabindex:`-1`},v={class:`desktop-page profile-subpage-desktop desktop-only`},y={class:`desktop-page__head profile-subpage-desktop__head`},b={class:`desktop-page__title`},x={key:0,class:`desktop-page__subtitle`},S={class:`profile-subpage-desktop__panel card`},C=c(l({__name:`ProfileSubpageLayout`,props:{title:{},subtitle:{}},setup(c){let l=u();function C(){l.push(`/profile`)}return(l,u)=>(t(),a(o,null,[s(`div`,f,[s(`div`,p,[s(`div`,m,[s(`header`,h,[s(`button`,{type:`button`,class:`nav-btn`,"aria-label":`بازگشت`,onClick:C},[r(d,{size:20})]),s(`h1`,g,n(c.title),1),s(`button`,_,[r(d,{size:18,class:`nav-btn__flip`})])]),e(l.$slots,`default`,{},void 0,!0)])])]),s(`div`,v,[s(`header`,y,[s(`h1`,b,n(c.title),1),c.subtitle?(t(),a(`p`,x,n(c.subtitle),1)):i(``,!0)]),s(`section`,S,[e(l.$slots,`default`,{},void 0,!0)])])],64))}}),[[`__scopeId`,`data-v-e7684fde`]]);export{C as t};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +1 @@
.stock-alerts-error[data-v-c1c726c4]{color:var(--color-danger);margin:0 0 12px;font-size:.8125rem}.stock-alerts-empty[data-v-c1c726c4]{text-align:center;color:var(--color-text-muted);flex-direction:column;align-items:center;gap:10px;padding:32px 16px;display:flex}.stock-alerts-empty__hint[data-v-c1c726c4]{max-width:280px;margin:0;font-size:.8125rem;line-height:1.6}.stock-alerts-section[data-v-c1c726c4]{margin-bottom:20px}.stock-alerts-section__title[data-v-c1c726c4]{color:var(--color-text-muted);margin:0 0 10px;font-size:.875rem;font-weight:700}.stock-alerts-list[data-v-c1c726c4]{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.stock-alert-card[data-v-c1c726c4]{border:1px solid var(--color-border);background:var(--color-elevated);border-radius:14px;align-items:stretch;gap:8px;padding:10px;display:flex}.stock-alert-card--muted[data-v-c1c726c4]{opacity:.88}.stock-alert-card__main[data-v-c1c726c4]{text-align:start;cursor:pointer;min-width:0;color:inherit;font:inherit;background:0 0;border:none;flex:1;gap:12px;padding:0;display:flex}.stock-alert-card__thumb[data-v-c1c726c4]{background:var(--color-bg) center / cover no-repeat;border:1px solid var(--color-border);border-radius:10px;flex-shrink:0;width:56px;height:56px}.stock-alert-card__thumb--empty[data-v-c1c726c4]{background:var(--color-primary-soft)}.stock-alert-card__body[data-v-c1c726c4]{flex-direction:column;gap:4px;min-width:0;display:flex}.stock-alert-card__badge[data-v-c1c726c4]{background:var(--color-bg);color:var(--color-text-muted);border-radius:999px;align-self:flex-start;padding:2px 8px;font-size:.6875rem;font-weight:700}.stock-alert-card__badge--active[data-v-c1c726c4]{background:var(--color-primary-soft);color:var(--color-primary)}.stock-alert-card__badge--done[data-v-c1c726c4]{color:var(--color-success-dark,#15803d);background:#22c55e26}.stock-alert-card__name[data-v-c1c726c4]{font-size:.9375rem;line-height:1.35}.stock-alert-card__meta[data-v-c1c726c4]{color:var(--color-text-muted);margin:0;font-size:.75rem;line-height:1.5}.stock-alert-card__cancel[data-v-c1c726c4]{color:var(--color-danger);font:inherit;cursor:pointer;background:0 0;border:none;flex-shrink:0;align-self:center;padding:8px;font-size:.8125rem;font-weight:600}
+1
View File
@@ -0,0 +1 @@
import{At as e,F as t,G as n,M as r,Nt as i,Pt as a,_ as ee,c as o,d as s,f as c,g as l,i as u,k as d,l as f,nt as p,t as m,u as h,ut as g,v as _}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as v,o as y}from"./format-C72AoJ2H.js";import{t as b}from"./http-CU_N-R2R.js";import{A as x,r as S,t as C}from"./index-BPUhS8CY.js";import{t as te}from"./PageSkeleton-DYdjm4l9.js";import{a as ne,i as re,n as w,t as ie}from"./useStockNotify-DeMc7Vja.js";import{t as ae}from"./ProfileSubpageLayout-Bj7iaKP1.js";var T={key:0,class:`stock-alerts-error`},E={key:0,class:`stock-alerts-empty`},D={key:0,class:`stock-alerts-section`},O={class:`stock-alerts-section__title`},k={class:`stock-alerts-list`},A=[`onClick`],j={class:`stock-alert-card__body`},M={class:`stock-alert-card__badge stock-alert-card__badge--active`},N={class:`stock-alert-card__name`},P={class:`stock-alert-card__meta`},F={dir:`ltr`},I={class:`stock-alert-card__meta`},L={key:0},R=[`disabled`,`onClick`],z={key:1,class:`stock-alerts-section`},B={class:`stock-alerts-list`},V=[`onClick`],H={class:`stock-alert-card__body`},U={class:`stock-alert-card__name`},W={class:`stock-alert-card__meta`},G=m(_({__name:`StockAlertsView`,setup(m){let _=x(),G=C(),K=p([]),q=p(!0),J=p(``),Y=p(null),X=o(()=>K.value.filter(e=>e.active)),Z=o(()=>K.value.filter(e=>!e.active));async function Q(){q.value=!0,J.value=``;try{K.value=await ne()}catch(e){J.value=e instanceof b||e instanceof Error?e.message:`بارگذاری درخواست‌ها ناموفق بود.`}finally{q.value=!1}}d(Q);function $(e){_.push({path:`/product`,query:{id:e.productId}})}async function oe(e){if(!(!e.active||Y.value)){Y.value=e.id;try{await re(e.productId),G.show(`درخواست خبر موجودی لغو شد.`,{tone:`success`}),await Q()}catch(e){G.show(e instanceof b||e instanceof Error?e.message:`لغو درخواست ناموفق بود.`,{tone:`error`})}finally{Y.value=null}}}return(o,d)=>(r(),h(ae,{title:`خبر موجودی`,subtitle:`وقتی محصول ناموجود دوباره موجود شود، در اعلان‌ها مطلع می‌شوید`},{default:n(()=>[J.value?(r(),c(`p`,T,a(J.value),1)):s(``,!0),q.value?(r(),h(te,{key:1,variant:`list`})):(r(),c(u,{key:2},[K.value.length?(r(),c(u,{key:1},[X.value.length?(r(),c(`section`,D,[f(`h2`,O,`فعال (`+a(g(y)(X.value.length))+`)`,1),f(`ul`,k,[(r(!0),c(u,null,t(X.value,t=>(r(),c(`li`,{key:t.id,class:`stock-alert-card`},[f(`button`,{type:`button`,class:`stock-alert-card__main`,onClick:e=>$(t)},[f(`span`,{class:e([`stock-alert-card__thumb`,{"stock-alert-card__thumb--empty":!t.imageUrl}]),style:i(t.imageUrl?{backgroundImage:`url(${t.imageUrl})`}:void 0)},null,6),f(`div`,j,[f(`span`,M,a(g(w)(t)),1),f(`strong`,N,a(t.productName),1),f(`p`,P,[l(` کالیته `+a(t.catalogCode)+` · `+a(t.color)+` `,1),f(`span`,F,`(`+a(t.productCode)+`)`,1)]),f(`p`,I,[l(` ثبت: `+a(g(v)(t.createdAt))+` `,1),g(ie)(t.stock)?(r(),c(`span`,L,` · موجودی: ۰`)):s(``,!0)])])],8,A),f(`button`,{type:`button`,class:`stock-alert-card__cancel`,disabled:Y.value===t.id,onClick:e=>oe(t)},` لغو `,8,R)]))),128))])])):s(``,!0),Z.value.length?(r(),c(`section`,z,[d[4]||=f(`h2`,{class:`stock-alerts-section__title`},`تاریخچه`,-1),f(`ul`,B,[(r(!0),c(u,null,t(Z.value,t=>(r(),c(`li`,{key:t.id,class:`stock-alert-card stock-alert-card--muted`},[f(`button`,{type:`button`,class:`stock-alert-card__main`,onClick:e=>$(t)},[f(`span`,{class:e([`stock-alert-card__thumb`,{"stock-alert-card__thumb--empty":!t.imageUrl}]),style:i(t.imageUrl?{backgroundImage:`url(${t.imageUrl})`}:void 0)},null,6),f(`div`,H,[f(`span`,{class:e([`stock-alert-card__badge`,{"stock-alert-card__badge--done":!!t.notifiedAt}])},a(g(w)(t)),3),f(`strong`,U,a(t.productName),1),f(`p`,W,a(t.notifiedAt?`اطلاع: ${g(v)(t.notifiedAt)}`:g(v)(t.createdAt)),1)])],8,V)]))),128))])])):s(``,!0)],64)):(r(),c(`div`,E,[d[2]||=f(`p`,null,`هنوز درخواستی ثبت نکرده‌اید.`,-1),d[3]||=f(`p`,{class:`stock-alerts-empty__hint`},` در صفحهٔ محصول ناموجود، دکمه «خبرم کن» را بزنید. `,-1),ee(S,{size:`sm`,variant:`outline`,onClick:d[0]||=e=>g(_).push(`/products`)},{default:n(()=>[...d[1]||=[l(` مشاهده محصولات `,-1)]]),_:1})]))],64))]),_:1}))}}),[[`__scopeId`,`data-v-c1c726c4`]]);export{G as default};
@@ -1 +1 @@
import{At as e,D as t,F as n,M as r,Pt as i,f as a,i as o,k as s,l as c,nt as l,t as u,ut as d,v as f}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as p}from"./index-BSpFi5xB.js";import{t as m}from"./nademitex-auth-logo-CQhPwje_.js";var h=`/assets/login-fabric-CSZOoxR9.jpg`,g=`/assets/fabric-slide-2-BWGo09Th.jpg`,_=`/assets/fabric-slide-3-CyMWKjFB.jpg`,v=`/assets/fabric-slide-4-UycLZic-.jpg`,y=[`src`],b={class:`welcome__brand`},x=[`src`],S={class:`welcome__copy`},C={class:`welcome__dots`,role:`tablist`,"aria-label":`اسلایدها`},w=[`aria-label`,`onClick`],T=u(f({__name:`WelcomeView`,setup(u){let f=p(),T=[{image:h,title:`پارچه، برای ایده‌های بزرگ`,lead:`انتخاب بهتر، تأمین سریع‌تر، همراه حرفه‌ای شما در مسیر تولید پوشاک`},{image:g,title:`پارچه، برای ایده‌های بزرگ`,lead:`از کت و شلوار تا مانتو؛ بافتی که طرح شما را کامل می‌کند`},{image:_,title:`پارچه، برای ایده‌های بزرگ`,lead:`کتان، پنبه و فاستونی؛ موجودی عمده برای مزون و تولیدکننده`},{image:v,title:`پارچه، برای ایده‌های بزرگ`,lead:`کالیته را ببینید، رنگ را لمس کنید، بعد سفارش دهید`}],E=l(0),D=0,O=0;function k(e){E.value=(e+T.length)%T.length}function A(e){O=e.changedTouches[0]?.clientX??0}function j(e){let t=(e.changedTouches[0]?.clientX??0)-O;Math.abs(t)<40||k(E.value+(t<0?1:-1))}return s(()=>{D=window.setInterval(()=>k(E.value+1),4500)}),t(()=>window.clearInterval(D)),(t,s)=>(r(),a(`div`,{class:`welcome`,onTouchstartPassive:A,onTouchendPassive:j},[(r(),a(o,null,n(T,(t,n)=>c(`img`,{key:t.lead,class:e([`welcome__photo`,{"is-on":n===E.value}]),src:t.image,alt:``},null,10,y)),64)),s[1]||=c(`div`,{class:`welcome__shade`},null,-1),c(`header`,b,[c(`img`,{class:`welcome__logo`,src:d(m),alt:`Nademi Tex`,draggable:`false`},null,8,x)]),c(`div`,S,[c(`h1`,null,i(T[E.value]?.title),1),c(`p`,null,i(T[E.value]?.lead),1),c(`div`,C,[(r(),a(o,null,n(T,(t,n)=>c(`button`,{key:t.lead,type:`button`,class:e({"is-on":n===E.value}),"aria-label":`اسلاید ${n+1}`,onClick:e=>k(n)},null,10,w)),64))])]),c(`button`,{type:`button`,class:`welcome__cta`,onClick:s[0]||=e=>d(f).push(`/login`)},`ورود / ثبت‌نام`)],32))}}),[[`__scopeId`,`data-v-34e03d54`]]);export{T as default};
import{At as e,D as t,F as n,M as r,Pt as i,f as a,i as o,k as s,l as c,nt as l,t as u,ut as d,v as f}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as p}from"./index-BPUhS8CY.js";import{t as m}from"./nademitex-auth-logo-CQhPwje_.js";var h=`/assets/login-fabric-CSZOoxR9.jpg`,g=`/assets/fabric-slide-2-BWGo09Th.jpg`,_=`/assets/fabric-slide-3-CyMWKjFB.jpg`,v=`/assets/fabric-slide-4-UycLZic-.jpg`,y=[`src`],b={class:`welcome__brand`},x=[`src`],S={class:`welcome__copy`},C={class:`welcome__dots`,role:`tablist`,"aria-label":`اسلایدها`},w=[`aria-label`,`onClick`],T=u(f({__name:`WelcomeView`,setup(u){let f=p(),T=[{image:h,title:`پارچه، برای ایده‌های بزرگ`,lead:`انتخاب بهتر، تأمین سریع‌تر، همراه حرفه‌ای شما در مسیر تولید پوشاک`},{image:g,title:`پارچه، برای ایده‌های بزرگ`,lead:`از کت و شلوار تا مانتو؛ بافتی که طرح شما را کامل می‌کند`},{image:_,title:`پارچه، برای ایده‌های بزرگ`,lead:`کتان، پنبه و فاستونی؛ موجودی عمده برای مزون و تولیدکننده`},{image:v,title:`پارچه، برای ایده‌های بزرگ`,lead:`کالیته را ببینید، رنگ را لمس کنید، بعد سفارش دهید`}],E=l(0),D=0,O=0;function k(e){E.value=(e+T.length)%T.length}function A(e){O=e.changedTouches[0]?.clientX??0}function j(e){let t=(e.changedTouches[0]?.clientX??0)-O;Math.abs(t)<40||k(E.value+(t<0?1:-1))}return s(()=>{D=window.setInterval(()=>k(E.value+1),4500)}),t(()=>window.clearInterval(D)),(t,s)=>(r(),a(`div`,{class:`welcome`,onTouchstartPassive:A,onTouchendPassive:j},[(r(),a(o,null,n(T,(t,n)=>c(`img`,{key:t.lead,class:e([`welcome__photo`,{"is-on":n===E.value}]),src:t.image,alt:``},null,10,y)),64)),s[1]||=c(`div`,{class:`welcome__shade`},null,-1),c(`header`,b,[c(`img`,{class:`welcome__logo`,src:d(m),alt:`Nademi Tex`,draggable:`false`},null,8,x)]),c(`div`,S,[c(`h1`,null,i(T[E.value]?.title),1),c(`p`,null,i(T[E.value]?.lead),1),c(`div`,C,[(r(),a(o,null,n(T,(t,n)=>c(`button`,{key:t.lead,type:`button`,class:e({"is-on":n===E.value}),"aria-label":`اسلاید ${n+1}`,onClick:e=>k(n)},null,10,w)),64))])]),c(`button`,{type:`button`,class:`welcome__cta`,onClick:s[0]||=e=>d(f).push(`/login`)},`ورود / ثبت‌نام`)],32))}}),[[`__scopeId`,`data-v-34e03d54`]]);export{T as default};
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
import{M as e,f as t,l as n,u as r,v as i}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as a}from"./BasicIcon-ba1FsUKx.js";import{C as o,D as s,v as c}from"./index-BSpFi5xB.js";import{n as l,t as u}from"./IconDiamond-CCzZ7nPM.js";import{n as d,r as f,t as p}from"./IconWeave-CTypFxhM.js";var m=i({__name:`IconBolt`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,i)=>(e(),r(a,{icon:`vuesax-linear:flash`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),h=i({__name:`IconFeather`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,i)=>(e(),r(a,{icon:`vuesax-linear:pen-add`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),g=i({__name:`IconIdCard`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,i)=>(e(),r(a,{icon:`vuesax-linear:personalcard`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),_=[`width`,`height`],v=[`stroke`,`stroke-width`],y=[`stroke`,`stroke-width`],b=i({__name:`IconShirt`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(r){return(i,a)=>(e(),t(`svg`,{width:r.size,height:r.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[n(`path`,{d:`M8.25 5.25 12 7.75l3.75-2.5 2.25 2.75L16 9.5V18.5a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V9.5L6 8l2.25-2.75Z`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,v),n(`path`,{d:`M12 7.75V18.5`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,y)],8,_))}}),x=[`width`,`height`],S=[`stroke`,`stroke-width`],C=[`stroke`,`stroke-width`],w=[`stroke`,`stroke-width`],T=[`stroke`,`stroke-width`],E=i({__name:`IconSuit`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(r){return(i,a)=>(e(),t(`svg`,{width:r.size,height:r.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[n(`path`,{d:`M7.5 5.5h9l2 3v10.5a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1V8.5l2-3Z`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,S),n(`path`,{d:`M12 5.5v13`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,C),n(`path`,{d:`M7.5 9 12 11.75 16.5 9`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,w),n(`path`,{d:`M10.25 5.5V4a1.75 1.75 0 0 1 3.5 0v1.5`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,T)],8,x))}}),D=[`width`,`height`],O=[`stroke`,`stroke-width`],k=[`stroke`,`stroke-width`],A=[`stroke`,`stroke-width`],j=i({__name:`IconTrousers`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(r){return(i,a)=>(e(),t(`svg`,{width:r.size,height:r.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[n(`path`,{d:`M8 4.5h8v4.25l-1.75 11H13l-1-9.5-1 9.5H7.75L6 8.75V4.5Z`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,O),n(`path`,{d:`M12 8.75v11`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,k),n(`path`,{d:`M8 7.25h8`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,A)],8,D))}}),M=[`width`,`height`,`stroke`,`stroke-width`],N={bolt:m,feather:h,diamond:u,grid:l,bag:f,"id-card":g,catalog:o,headset:c,home:s,shirt:b,suit:E,trousers:j,ruler:d,composition:i({__name:`IconComposition`,props:{size:{default:22},color:{default:`currentColor`},strokeWidth:{default:1.6}},setup(r){return(i,a)=>(e(),t(`svg`,{width:r.size,height:r.size,viewBox:`0 0 24 24`,fill:`none`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[...a[0]||=[n(`path`,{d:`M12 3.5 20 8v8l-8 4.5L4 16V8l8-4.5Z`},null,-1)]],8,M))}}),weight:f,weave:p},P={shirt:`shirt`,suit:`suit`,trousers:`trousers`};function F(e){return P[e.id]?P[e.id]:e.icon&&N[e.icon]?e.icon:e.icon??`grid`}function I(e,t=u){return e&&N[e]||t}export{F as n,I as t};
@@ -1 +1 @@
import{nt as e}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as t}from"./pinia-BK9B9Wwf.js";import{n,t as r}from"./http-CU_N-R2R.js";var i=[{id:`trousers`,title:`پارچه‌های شلواری`,subtitle:`مشاهده محصولات`},{id:`suit`,title:`پارچه‌های کت‌شلواری`,subtitle:`مشاهده محصولات`},{id:`shirt`,title:`پارچه‌های پیراهنی`,subtitle:`مشاهده محصولات`}],a=[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصل‌های سال`}];function o(){return{usage:i,seasons:a}}var s=`سرویس واسطه روی سرور فعال نیست. پس از migrate و deploy سرور دوباره تلاش کنید.`;async function c(e,t){try{return await n(e,t)}catch(e){throw e instanceof r&&(e.status===404||e.status===501)?new r(e.status,s):e}}async function l(){try{return await n(`/catalog/categories`)}catch{try{return await n(`/products/meta/categories`)}catch{return o()}}}async function u(e){return n(`/products`,{query:{activeOnly:!0,categoryId:e?.categoryId,season:e?.season,catalogId:e?.catalogId,companyId:e?.companyId}})}async function d(e){return n(`/banners`,{query:{slot:e}})}async function f(){return c(`/agent/profile`)}async function p(e){return c(`/agent/customers`,{query:e})}async function m(e){return c(`/agent/customers`,{method:`POST`,body:e})}async function h(e,t){return c(`/agent/customers/${e}`,{method:`PATCH`,body:t})}async function g(e){return c(`/agent/customers/${e}`)}async function _(e){return c(`/agent/meetings`,{method:`POST`,body:e})}async function v(e){return c(`/agent/reminders`,{query:{filter:e}})}async function y(e){return c(`/agent/reminders/${e}`)}async function b(e,t=!0){return c(`/agent/reminders/${e}/complete`,{method:`PATCH`,body:{completed:t}})}async function x(e){return c(`/agent/reminders`,{method:`POST`,body:e})}function S(e){return{id:e.id,name:e.name,code:e.code,categoryId:e.categoryId||e.usageCategory||`other`,season:e.season||`all_season`,widthCm:e.widthCm??150,composition:e.composition??``,weightGrams:e.weightGrams,weaveType:e.weaveType,colors:e.colors?.length?e.colors:[`#6b7280`],colorImages:e.colorImages,tags:e.tags??[],isNew:!!e.isNew,imageUrl:e.imageUrl||e.colorImages?.find(Boolean)||e.imageUrls?.[0],imageUrls:e.imageUrls,subtitle:e.subtitle,rollMeters:e.rollMeters??50,companyId:e.companyId,catalogId:e.catalogId,catalogCode:e.catalogCode,catalogName:e.catalogName,color:e.color,minMeterage:e.minMeterage??30,orderMultiplier:e.orderMultiplier??10,basePrice:e.basePrice??void 0}}var C=t(`crm`,()=>{let t=e(!1),r=e(null),i=e(null),a=e([]),o=e([]),s=e([]),c=e([]),d=e([]);async function C(){let e=await l();return s.value=e.usage,c.value=e.seasons,e}async function w(e){let t=await u(e);return d.value=t.map(S),d.value}async function T(e){return S(await n(`/products/${e}`))}async function E(){return i.value=await f(),i.value}async function D(e){return a.value=await p(e),a.value}async function O(e){return await g(e)}async function k(e){return _(e)}async function A(e){return m(e)}async function j(e,t){return h(e,t)}async function M(e){return o.value=await v(e),o.value}async function N(e){return y(e)}async function P(e){return b(e,!0)}async function F(e){return x(e)}return{loading:t,error:r,agentProfile:i,customers:a,reminders:o,usageCategories:s,seasonCategories:c,browseProducts:d,loadCategories:C,loadBrowseProducts:w,loadProductById:T,loadAgentProfile:E,loadCustomers:D,loadCustomerDetail:O,submitMeeting:k,registerCustomer:A,updateCustomer:j,loadReminders:M,loadReminderDetail:N,markReminderComplete:P,createReminder:F}});export{a,v as i,f as n,i as o,d as r,C as t};
import{nt as e}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as t}from"./pinia-BK9B9Wwf.js";import{n,t as r}from"./http-CU_N-R2R.js";var i=[{id:`trousers`,title:`پارچه‌های شلواری`,subtitle:`مشاهده محصولات`},{id:`suit`,title:`پارچه‌های کت‌شلواری`,subtitle:`مشاهده محصولات`},{id:`shirt`,title:`پارچه‌های پیراهنی`,subtitle:`مشاهده محصولات`}],a=[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصل‌های سال`}];function o(){return{usage:i,seasons:a}}var s=`سرویس واسطه روی سرور فعال نیست. پس از migrate و deploy سرور دوباره تلاش کنید.`;async function c(e,t){try{return await n(e,t)}catch(e){throw e instanceof r&&(e.status===404||e.status===501)?new r(e.status,s):e}}async function l(){try{return await n(`/catalog/categories`)}catch{try{return await n(`/products/meta/categories`)}catch{return o()}}}async function u(e){return n(`/products`,{query:{activeOnly:!0,categoryId:e?.categoryId,season:e?.season,catalogId:e?.catalogId,companyId:e?.companyId}})}async function d(e){return n(`/banners`,{query:{slot:e}})}async function f(){return c(`/agent/profile`)}async function p(e){return c(`/agent/customers`,{query:e})}async function m(e){return c(`/agent/customers`,{method:`POST`,body:e})}async function h(e,t){return c(`/agent/customers/${e}`,{method:`PATCH`,body:t})}async function g(e){return c(`/agent/customers/${e}`)}async function _(e){return c(`/agent/meetings`,{method:`POST`,body:e})}async function v(e){return c(`/agent/reminders`,{query:{filter:e}})}async function y(e){return c(`/agent/reminders/${e}`)}async function b(e,t=!0){return c(`/agent/reminders/${e}/complete`,{method:`PATCH`,body:{completed:t}})}async function x(e){return c(`/agent/reminders`,{method:`POST`,body:e})}function S(e){return{id:e.id,name:e.name,code:e.code,categoryId:e.categoryId||e.usageCategory||`other`,season:e.season||`all_season`,widthCm:e.widthCm??150,composition:e.composition??``,weightGrams:e.weightGrams,weaveType:e.weaveType,colors:e.colors?.length?e.colors:[`#6b7280`],colorImages:e.colorImages,tags:e.tags??[],isNew:!!e.isNew,imageUrl:e.imageUrl||e.colorImages?.find(Boolean)||e.imageUrls?.[0],imageUrls:e.imageUrls,subtitle:e.subtitle,rollMeters:e.rollMeters??50,companyId:e.companyId,catalogId:e.catalogId,catalogCode:e.catalogCode,catalogName:e.catalogName,color:e.color,minMeterage:e.minMeterage??30,orderMultiplier:e.orderMultiplier??10,basePrice:e.basePrice??void 0,stock:e.stock??null}}var C=t(`crm`,()=>{let t=e(!1),r=e(null),i=e(null),a=e([]),o=e([]),s=e([]),c=e([]),d=e([]);async function C(){let e=await l();return s.value=e.usage,c.value=e.seasons,e}async function w(e){let t=await u(e);return d.value=t.map(S),d.value}async function T(e){return S(await n(`/products/${e}`))}async function E(){return i.value=await f(),i.value}async function D(e){return a.value=await p(e),a.value}async function O(e){return await g(e)}async function k(e){return _(e)}async function A(e){return m(e)}async function j(e,t){return h(e,t)}async function M(e){return o.value=await v(e),o.value}async function N(e){return y(e)}async function P(e){return b(e,!0)}async function F(e){return x(e)}return{loading:t,error:r,agentProfile:i,customers:a,reminders:o,usageCategories:s,seasonCategories:c,browseProducts:d,loadCategories:C,loadBrowseProducts:w,loadProductById:T,loadAgentProfile:E,loadCustomers:D,loadCustomerDetail:O,submitMeeting:k,registerCustomer:A,updateCustomer:j,loadReminders:M,loadReminderDetail:N,markReminderComplete:P,createReminder:F}});export{a,v as i,f as n,i as o,d as r,C as t};
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
import{A as e}from"./index-BSpFi5xB.js";function t(t=`/`){let n=e();function r(){if(window.history.length>1){n.back();return}n.push(t)}return{goBack:r}}export{t};
import{A as e}from"./index-BPUhS8CY.js";function t(t=`/`){let n=e();function r(){if(window.history.length>1){n.back();return}n.push(t)}return{goBack:r}}export{t};
@@ -1 +1 @@
import{U as e,c as t}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as n,f as r,k as i}from"./index-BSpFi5xB.js";import{n as a}from"./orderInvoice-DPYzRyAs.js";function o(){let o=i(),s=n(),c=r(),l=t(()=>o.params.id),u=t(()=>c.getOrderById(l.value)),d=t(()=>a(u.value));function f(e){e&&(a(e)||s.replace(`/orders/${e.id}`))}return e(l,async e=>{e&&f(c.getOrderById(e)??await c.fetchOrder(e))},{immediate:!0}),e(u,e=>{f(e)}),{orderId:l,order:u,invoiceReady:d}}export{o as t};
import{U as e,c as t}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{A as n,f as r,k as i}from"./index-BPUhS8CY.js";import{n as a}from"./orderInvoice-DPYzRyAs.js";function o(){let o=i(),s=n(),c=r(),l=t(()=>o.params.id),u=t(()=>c.getOrderById(l.value)),d=t(()=>a(u.value));function f(e){e&&(a(e)||s.replace(`/orders/${e.id}`))}return e(l,async e=>{e&&f(c.getOrderById(e)??await c.fetchOrder(e))},{immediate:!0}),e(u,e=>{f(e)}),{orderId:l,order:u,invoiceReady:d}}export{o as t};
+1
View File
@@ -0,0 +1 @@
import{M as e,f as t,k as n,l as r,nt as i,u as a,v as o}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as s}from"./BasicIcon-ba1FsUKx.js";import{C as c,D as l,v as u}from"./index-BPUhS8CY.js";import{n as d,t as f}from"./IconDiamond-CCzZ7nPM.js";import{r as p}from"./crm-BKPKhzCX.js";import{n as m,r as h,t as g}from"./IconWeave-CTypFxhM.js";var _=o({__name:`IconBolt`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,r)=>(e(),a(s,{icon:`vuesax-linear:flash`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),v=o({__name:`IconFeather`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,r)=>(e(),a(s,{icon:`vuesax-linear:pen-add`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),y=o({__name:`IconIdCard`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(t){return(n,r)=>(e(),a(s,{icon:`vuesax-linear:personalcard`,size:t.size,"stroke-width":t.strokeWidth,color:t.color},null,8,[`size`,`stroke-width`,`color`]))}}),b=[`width`,`height`],x=[`stroke`,`stroke-width`],S=[`stroke`,`stroke-width`],C=o({__name:`IconShirt`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(n){return(i,a)=>(e(),t(`svg`,{width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[r(`path`,{d:`M8.25 5.25 12 7.75l3.75-2.5 2.25 2.75L16 9.5V18.5a1 1 0 0 1-1 1H9a1 1 0 0 1-1-1V9.5L6 8l2.25-2.75Z`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,x),r(`path`,{d:`M12 7.75V18.5`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`},null,8,S)],8,b))}}),w=[`width`,`height`],T=[`stroke`,`stroke-width`],E=[`stroke`,`stroke-width`],D=[`stroke`,`stroke-width`],O=[`stroke`,`stroke-width`],k=o({__name:`IconSuit`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(n){return(i,a)=>(e(),t(`svg`,{width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[r(`path`,{d:`M7.5 5.5h9l2 3v10.5a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1V8.5l2-3Z`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,T),r(`path`,{d:`M12 5.5v13`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`},null,8,E),r(`path`,{d:`M7.5 9 12 11.75 16.5 9`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,D),r(`path`,{d:`M10.25 5.5V4a1.75 1.75 0 0 1 3.5 0v1.5`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`},null,8,O)],8,w))}}),A=[`width`,`height`],j=[`stroke`,`stroke-width`],M=[`stroke`,`stroke-width`],N=[`stroke`,`stroke-width`],P=o({__name:`IconTrousers`,props:{size:{default:24},color:{default:`currentColor`},strokeWidth:{default:1.5}},setup(n){return(i,a)=>(e(),t(`svg`,{width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,"aria-hidden":`true`},[r(`path`,{d:`M8 4.5h8v4.25l-1.75 11H13l-1-9.5-1 9.5H7.75L6 8.75V4.5Z`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,8,j),r(`path`,{d:`M12 8.75v11`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`},null,8,M),r(`path`,{d:`M8 7.25h8`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`},null,8,N)],8,A))}}),F=[`width`,`height`,`stroke`,`stroke-width`],I={bolt:_,feather:v,diamond:f,grid:d,bag:h,"id-card":y,catalog:c,headset:u,home:l,shirt:C,suit:k,trousers:P,ruler:m,composition:o({__name:`IconComposition`,props:{size:{default:22},color:{default:`currentColor`},strokeWidth:{default:1.6}},setup(n){return(i,a)=>(e(),t(`svg`,{width:n.size,height:n.size,viewBox:`0 0 24 24`,fill:`none`,stroke:n.color,"stroke-width":n.strokeWidth,"stroke-linecap":`round`,"stroke-linejoin":`round`,"aria-hidden":`true`},[...a[0]||=[r(`path`,{d:`M12 3.5 20 8v8l-8 4.5L4 16V8l8-4.5Z`},null,-1)]],8,F))}}),weight:h,weave:g},L={shirt:`shirt`,suit:`suit`,trousers:`trousers`};function R(e){return L[e.id]?L[e.id]:e.icon&&I[e.icon]?e.icon:e.icon??`grid`}function z(e,t=f){return e&&I[e]||t}function B(e){let t=i([]),r=i(!0);async function a(){r.value=!0;try{t.value=await p(e)}catch{t.value=[]}finally{r.value=!1}}return n(()=>{a()}),{banners:t,loading:r,reload:a}}export{z as n,R as r,B as t};
+1
View File
@@ -0,0 +1 @@
import{nt as e}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{n as t,t as n}from"./http-CU_N-R2R.js";async function r(){return t(`/stock-alerts`)}async function i(e){return t(`/stock-alerts`,{body:{productId:e}})}async function a(e){return t(`/stock-alerts/${e}/cancel`,{method:`POST`})}function o(e){return e!=null&&e<=0}function s(t){let o=e(!1),s=e(!1),c=e(``);async function l(){let e=t();if(!e){o.value=!1;return}try{let t=await r();o.value=t.some(t=>t.productId===e&&t.active)}catch{o.value=!1}}async function u(){let e=t();if(!(!e||s.value)){s.value=!0,c.value=``;try{return await i(e),o.value=!0,!0}catch(e){return c.value=e instanceof n||e instanceof Error?e.message:`ثبت درخواست خبر موجودی ناموفق بود.`,!1}finally{s.value=!1}}}async function d(){let e=t();if(!(!e||s.value)){s.value=!0,c.value=``;try{return await a(e),o.value=!1,!0}catch(e){return c.value=e instanceof n||e instanceof Error?e.message:`لغو درخواست ناموفق بود.`,!1}finally{s.value=!1}}}return{subscribed:o,loading:s,error:c,refreshSubscription:l,subscribe:u,unsubscribe:d}}function c(e){return e.active?`در انتظار موجودی`:e.notifiedAt?`اطلاع داده شد`:`لغو شده`}export{r as a,a as i,c as n,s as r,o as t};
+1 -1
View File
@@ -11,7 +11,7 @@
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>سامانه سفارش عمده پارچه</title>
<script type="module" crossorigin src="/assets/index-BSpFi5xB.js"></script>
<script type="module" crossorigin src="/assets/index-BPUhS8CY.js"></script>
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-1xMDlcEE.js">
<link rel="modulepreload" crossorigin href="/assets/BasicIcon-ba1FsUKx.js">
<link rel="modulepreload" crossorigin href="/assets/pinia-BK9B9Wwf.js">
+213
View File
@@ -0,0 +1,213 @@
<script setup lang="ts">
import { computed, ref } from 'vue'
import { useRouter } from 'vue-router'
import { useSlotBanners } from '@/composables/useSlotBanners'
const props = withDefaults(
defineProps<{
bannerSlot: string
/** اگر بنری از API نباشد، چیزی رندر نشود */
hideWhenEmpty?: boolean
}>(),
{ hideWhenEmpty: true },
)
const router = useRouter()
const { banners, loading } = useSlotBanners(props.bannerSlot)
const index = ref(0)
const banner = computed(() => banners.value[index.value] ?? null)
const bannerStyle = computed(() => {
const url = banner.value?.imageUrl?.trim()
if (!url) return undefined
return { backgroundImage: `url(${url})` }
})
function goCta() {
const link = banner.value?.ctaLink?.trim()
if (!link) return
if (/^https?:\/\//i.test(link)) {
window.location.assign(link)
return
}
router.push(link)
}
function setSlide(i: number) {
if (!banners.value.length) return
index.value = ((i % banners.value.length) + banners.value.length) % banners.value.length
}
</script>
<template>
<section
v-if="!hideWhenEmpty || banner"
v-show="!loading && banner"
class="slot-banner"
:class="{ 'slot-banner--photo': !!banner?.imageUrl }"
:style="bannerStyle"
:aria-label="banner?.title || 'بنر'"
>
<template v-if="banner">
<div class="slot-banner__content">
<h2 v-if="banner.showTitle !== false && banner.title" class="slot-banner__title">
{{ banner.title }}
</h2>
<p
v-if="banner.showSubtitle !== false && banner.subtitle"
class="slot-banner__tagline"
>
{{ banner.subtitle }}
</p>
<button
v-if="banner.showCta !== false && banner.ctaLabel"
type="button"
class="slot-banner__cta"
@click="goCta"
>
{{ banner.ctaLabel }}
</button>
</div>
<div
v-if="banners.length > 1"
class="slot-banner__dots"
role="tablist"
aria-label="بنرها"
>
<button
v-for="(item, i) in banners"
:key="item.id"
type="button"
class="slot-banner__dot"
:class="{ 'slot-banner__dot--active': i === index }"
:aria-label="item.title"
:aria-selected="i === index"
@click="setSlide(i)"
/>
</div>
</template>
</section>
</template>
<style scoped>
.slot-banner {
position: relative;
isolation: isolate;
flex-shrink: 0;
display: flex;
align-items: flex-end;
justify-content: flex-start;
min-height: 148px;
border-radius: var(--radius-lg);
overflow: hidden;
background:
linear-gradient(100deg, rgba(var(--color-primary-rgb), 0.75), rgba(var(--color-primary-rgb), 0.35)),
#2f3430;
background-size: cover;
background-position: center;
color: #fff;
}
.slot-banner--photo {
min-height: 156px;
aspect-ratio: 2.35 / 1;
max-height: 196px;
}
.slot-banner--photo::before {
content: '';
position: absolute;
inset: 0;
z-index: 0;
background: linear-gradient(
to top,
rgba(0, 0, 0, 0.8) 0%,
rgba(0, 0, 0, 0.48) 34%,
rgba(0, 0, 0, 0.18) 62%,
transparent 88%
);
pointer-events: none;
}
.slot-banner:not(.slot-banner--photo)::before {
content: '';
position: absolute;
inset: 0;
z-index: 0;
background: linear-gradient(
to left,
rgba(0, 0, 0, 0.42) 0%,
rgba(0, 0, 0, 0.18) 42%,
transparent 72%
);
pointer-events: none;
}
.slot-banner__content {
position: relative;
z-index: 1;
width: 100%;
min-width: 0;
padding: 18px 20px;
display: flex;
flex-direction: column;
gap: 6px;
text-align: start;
}
.slot-banner__title {
margin: 0;
font-size: 1.35rem;
font-weight: 700;
line-height: 1.3;
text-shadow: 0 1px 8px rgba(0, 0, 0, 0.45);
}
.slot-banner__tagline {
margin: 0;
font-size: 0.8125rem;
line-height: 1.55;
opacity: 0.96;
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
}
.slot-banner__cta {
align-self: flex-start;
margin-top: 4px;
padding: 8px 14px;
border: none;
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.92);
color: var(--color-primary);
font: inherit;
font-size: 0.8125rem;
font-weight: 700;
cursor: pointer;
}
.slot-banner__dots {
position: absolute;
bottom: 10px;
left: 50%;
transform: translateX(-50%);
z-index: 2;
display: flex;
gap: 6px;
}
.slot-banner__dot {
width: 7px;
height: 7px;
border-radius: 999px;
border: none;
padding: 0;
background: rgba(255, 255, 255, 0.45);
cursor: pointer;
}
.slot-banner__dot--active {
background: #fff;
width: 18px;
}
</style>
+24
View File
@@ -0,0 +1,24 @@
import { onMounted, ref } from 'vue'
import { fetchBanners, type AppBannerDto } from '@/services/agentApi'
export function useSlotBanners(slot: string) {
const banners = ref<AppBannerDto[]>([])
const loading = ref(true)
async function load() {
loading.value = true
try {
banners.value = await fetchBanners(slot)
} catch {
banners.value = []
} finally {
loading.value = false
}
}
onMounted(() => {
void load()
})
return { banners, loading, reload: load }
}
+80
View File
@@ -0,0 +1,80 @@
import { ref } from 'vue'
import {
cancelStockAlert,
fetchMyStockAlerts,
subscribeStockAlert,
type StockAlertRequest,
} from '@/services/stockAlerts'
import { ApiError } from '@/services/http'
export function isProductOutOfStock(stock: number | null | undefined): boolean {
return stock != null && stock <= 0
}
export function useStockNotify(productId: () => string) {
const subscribed = ref(false)
const loading = ref(false)
const error = ref('')
async function refreshSubscription() {
const id = productId()
if (!id) {
subscribed.value = false
return
}
try {
const rows = await fetchMyStockAlerts()
subscribed.value = rows.some((r) => r.productId === id && r.active)
} catch {
subscribed.value = false
}
}
async function subscribe() {
const id = productId()
if (!id || loading.value) return
loading.value = true
error.value = ''
try {
await subscribeStockAlert(id)
subscribed.value = true
return true
} catch (e) {
error.value =
e instanceof ApiError || e instanceof Error
? e.message
: 'ثبت درخواست خبر موجودی ناموفق بود.'
return false
} finally {
loading.value = false
}
}
async function unsubscribe() {
const id = productId()
if (!id || loading.value) return
loading.value = true
error.value = ''
try {
await cancelStockAlert(id)
subscribed.value = false
return true
} catch (e) {
error.value =
e instanceof ApiError || e instanceof Error
? e.message
: 'لغو درخواست ناموفق بود.'
return false
} finally {
loading.value = false
}
}
return { subscribed, loading, error, refreshSubscription, subscribe, unsubscribe }
}
export function stockAlertStatusLabel(row: StockAlertRequest): string {
if (row.active) return 'در انتظار موجودی'
if (row.notifiedAt) return 'اطلاع داده شد'
return 'لغو شده'
}
+6
View File
@@ -233,6 +233,12 @@ const router = createRouter({
component: () => import('@/views/profile/AddressesView.vue'),
meta: { requiresAuth: true },
},
{
path: '/profile/stock-alerts',
name: 'profile-stock-alerts',
component: () => import('@/views/profile/StockAlertsView.vue'),
meta: { requiresAuth: true },
},
{
path: '/profile/security',
name: 'profile-security',
+32
View File
@@ -0,0 +1,32 @@
import { apiRequest } from './http'
export type StockAlertRequest = {
id: string
productId: string
productName: string
productCode: string
catalogCode: string
color: string
stock: number | null
imageUrl: string
active: boolean
createdAt: string
notifiedAt: string | null
}
export async function fetchMyStockAlerts() {
return apiRequest<StockAlertRequest[]>('/stock-alerts')
}
export async function subscribeStockAlert(productId: string) {
return apiRequest<StockAlertRequest>('/stock-alerts', {
body: { productId },
})
}
export async function cancelStockAlert(productId: string) {
return apiRequest<{ productId: string; active: boolean }>(
`/stock-alerts/${productId}/cancel`,
{ method: 'POST' },
)
}
+3
View File
@@ -46,6 +46,7 @@ function mapProduct(p: {
rollMeters?: number
imageUrl?: string
imageUrls?: string[]
stock?: number | null
}): CatalogProductCard {
return {
id: p.id,
@@ -73,6 +74,7 @@ function mapProduct(p: {
minMeterage: p.minMeterage ?? 30,
orderMultiplier: p.orderMultiplier ?? 10,
basePrice: p.basePrice ?? undefined,
stock: p.stock ?? null,
}
}
@@ -132,6 +134,7 @@ export const useCrmStore = defineStore('crm', () => {
rollMeters?: number
imageUrl?: string
imageUrls?: string[]
stock?: number | null
}>(`/products/${id}`)
return mapProduct(p)
}
+1
View File
@@ -112,6 +112,7 @@ export interface CatalogProductCard {
minMeterage?: number
orderMultiplier?: number
basePrice?: number
stock?: number | null
}
export interface HomeBanner {
+6
View File
@@ -14,6 +14,7 @@ import { categoryIconOf, usageCategoryIconKey } from '@/utils/categoryIcons'
import { useGoBack } from '@/composables/useGoBack'
import AuthThemeToggle from '@/components/ui/AuthThemeToggle.vue'
import PageSkeleton from '@/components/ui/PageSkeleton.vue'
import AppSlotBanner from '@/components/banners/AppSlotBanner.vue'
const router = useRouter()
const { goBack } = useGoBack('/')
@@ -75,6 +76,7 @@ function openSeason(id: string) {
<p v-if="error">{{ error }}</p>
<PageSkeleton v-else-if="loading" variant="grid" />
<template v-else>
<AppSlotBanner banner-slot="categories_hero" class="categories-page__hero" />
<section>
<h2 class="block-title">انتخاب بر اساس کاربرد</h2>
<p class="block-sub">دسته موردنظر خود را انتخاب کنید</p>
@@ -219,6 +221,10 @@ function openSeason(id: string) {
color: var(--color-text);
}
.categories-page__hero {
margin-bottom: 4px;
}
.cat-scroll {
padding: 16px var(--page-padding) 24px;
display: flex;
+102 -4
View File
@@ -26,6 +26,9 @@ import {
import { useCatalogRequest } from '@/composables/useCatalogRequest'
import AddressCompletionModal from '@/components/catalogs/AddressCompletionModal.vue'
import ProductOrderModal from '@/components/products/ProductOrderModal.vue'
import IconBell from '@/components/icons/IconBell.vue'
import { isProductOutOfStock, useStockNotify } from '@/composables/useStockNotify'
import { useAppToast } from '@/composables/useAppToast'
const USAGE_CHIP_LABEL: Record<string, string> = {
suit: 'پارچه کت‌شلواری',
@@ -64,8 +67,11 @@ const {
submitAddressAndRequest,
closeAddressModal,
} = useCatalogRequest()
const toast = useAppToast()
const stockNotify = useStockNotify(() => productId.value)
const rollMeters = computed(() => product.value?.rollMeters ?? 50)
const outOfStock = computed(() => isProductOutOfStock(product.value?.stock))
const currentGalleryImage = computed(() => {
const p = product.value
if (!p) return ''
@@ -153,6 +159,7 @@ async function load() {
product.value = await crm.loadProductById(productId.value)
selectedColor.value = 0
rolls.value = minRolls.value
await stockNotify.refreshSubscription()
} catch (e) {
product.value = null
error.value = e instanceof Error ? e.message : 'محصول یافت نشد.'
@@ -190,7 +197,7 @@ function snapMeterage(meters: number, step: number, min: number) {
}
function openOrderModal() {
if (!product.value) return
if (!product.value || outOfStock.value) return
orderModalError.value = ''
orderModalOpen.value = true
}
@@ -274,6 +281,20 @@ function onAddressSubmit(address: string) {
void submitAddressAndRequest(address)
}
async function toggleStockNotify() {
if (stockNotify.subscribed.value) {
const ok = await stockNotify.unsubscribe()
if (ok) toast.show('درخواست خبر موجودی لغو شد.', { tone: 'success' })
return
}
const ok = await stockNotify.subscribe()
if (ok) {
toast.show('درخواست ثبت شد. با موجود شدن محصول اعلان می‌گیرید.', { tone: 'success' })
} else if (stockNotify.error.value) {
toast.show(stockNotify.error.value, { tone: 'error' })
}
}
</script>
<template>
@@ -309,7 +330,10 @@ function onAddressSubmit(address: string) {
<header class="desktop-page__head desktop-only pd-desk-head">
<div>
<h1 class="desktop-page__title">{{ product.name }}</h1>
<p class="desktop-page__subtitle">کد محصول: {{ product.code }}</p>
<p class="desktop-page__subtitle">
کد محصول: {{ product.code }}
<span v-if="outOfStock" class="pd-stock-badge">ناموجود</span>
</p>
</div>
<div class="pd-desk-head__actions">
<button
@@ -488,7 +512,26 @@ function onAddressSubmit(address: string) {
<span>حداقل سفارش</span>
<strong>{{ formatNumber(minRolls) }} طاقه</strong>
</div>
<div class="cart-summary-panel__btn">
<div v-if="outOfStock" class="stock-notify-panel">
<p class="stock-notify-panel__lead">این محصول فعلاً موجود نیست.</p>
<button
type="button"
class="btn-primary"
:disabled="stockNotify.loading.value"
@click="toggleStockNotify"
>
<IconBell :size="18" />
{{ stockNotify.subscribed.value ? 'لغو خبر موجودی' : 'خبرم کن وقتی موجود شد' }}
</button>
<button
type="button"
class="btn-link"
@click="router.push('/profile/stock-alerts')"
>
مشاهده درخواست‌های من
</button>
</div>
<div v-else class="cart-summary-panel__btn">
<button type="button" class="btn-primary" @click="openOrderModal">
<IconCart :size="18" color="#ffffff" />
افزودن به سفارش
@@ -509,7 +552,21 @@ function onAddressSubmit(address: string) {
</div>
<footer class="pd-footer mobile-only sticky-footer">
<div class="pd-footer__primary">
<div v-if="outOfStock" class="pd-footer__primary">
<button
type="button"
class="btn-primary"
:disabled="stockNotify.loading.value"
@click="toggleStockNotify"
>
<IconBell :size="18" color="#ffffff" />
{{ stockNotify.subscribed.value ? 'لغو خبر موجودی' : 'خبرم کن وقتی موجود شد' }}
</button>
<button type="button" class="btn-link pd-footer__link" @click="router.push('/profile/stock-alerts')">
درخواست‌های خبر موجودی
</button>
</div>
<div v-else class="pd-footer__primary">
<button type="button" class="btn-primary" @click="openOrderModal">
<IconCart :size="18" color="#ffffff" />
افزودن به سفارش
@@ -993,6 +1050,47 @@ button.tag--link:hover {
color: var(--color-text-muted);
}
.pd-stock-badge {
display: inline-block;
margin-inline-start: 8px;
padding: 2px 8px;
border-radius: 999px;
font-size: 0.72rem;
font-weight: 700;
color: #b91c1c;
background: rgba(185, 28, 28, 0.12);
vertical-align: middle;
}
.stock-notify-panel {
display: flex;
flex-direction: column;
gap: 10px;
}
.stock-notify-panel__lead {
margin: 0;
font-size: 0.85rem;
color: var(--color-text-muted);
line-height: 1.5;
}
.btn-link {
border: none;
background: none;
padding: 0;
font: inherit;
font-size: 0.8rem;
font-weight: 600;
color: var(--color-primary);
cursor: pointer;
text-align: center;
}
.pd-footer__link {
margin-top: 8px;
}
.empty {
padding: 40px var(--page-padding);
text-align: center;
+52
View File
@@ -16,11 +16,17 @@ import IconDiamond from '@/components/icons/IconDiamond.vue'
import { useFavoritesStore } from '@/stores/favorites'
import { colorSwatchStyle } from '@/utils/colorSwatch'
import { categoryIconOf, usageCategoryIconKey } from '@/utils/categoryIcons'
import { useSlotBanners } from '@/composables/useSlotBanners'
const route = useRoute()
const router = useRouter()
const crm = useCrmStore()
const favorites = useFavoritesStore()
const { banners: productsHeroBanners } = useSlotBanners('products_hero')
const productsHero = computed(() => {
if (categoryId.value || season.value || catalogId.value) return null
return productsHeroBanners.value[0] ?? null
})
const categoryId = computed(() => String(route.query.categoryId ?? ''))
const catalogId = computed(() => String(route.query.catalogId ?? ''))
@@ -77,7 +83,28 @@ function seasonIconKey(item: SeasonCategory) {
return item.icon || (item.id === 'summer' ? 'bolt' : item.id === 'winter' ? 'feather' : 'diamond')
}
function goBannerCta() {
const link = bannerCopy.value.ctaLink?.trim()
if (!link) return
if (/^https?:\/\//i.test(link)) {
window.location.assign(link)
return
}
router.push(link)
}
const bannerCopy = computed(() => {
const hero = productsHero.value
if (hero) {
return {
lead: undefined,
headline: hero.showTitle !== false ? hero.title : undefined,
tagline: hero.showSubtitle !== false ? hero.subtitle || undefined : undefined,
showIcon: false,
ctaLabel: hero.showCta !== false ? hero.ctaLabel || undefined : undefined,
ctaLink: hero.ctaLink || undefined,
}
}
if (categoryId.value) {
const cat = crm.usageCategories.find((c) => c.id === categoryId.value)
const parts = splitCategoryTitle(cat?.title ?? title.value)
@@ -115,6 +142,7 @@ const bannerCopy = computed(() => {
})
const bannerIcon = computed(() => {
if (productsHero.value) return null
if (bannerCopy.value.showIcon === false) return null
if (categoryId.value) {
const cat = crm.usageCategories.find((c) => c.id === categoryId.value)
@@ -128,6 +156,8 @@ const bannerIcon = computed(() => {
})
const bannerImageUrl = computed(() => {
const heroUrl = productsHero.value?.imageUrl?.trim()
if (heroUrl) return heroUrl
if (categoryId.value) {
const cat = crm.usageCategories.find((c) => c.id === categoryId.value)
if (cat?.imageUrl) return cat.imageUrl
@@ -472,6 +502,14 @@ onUnmounted(() => {
</div>
<h2 v-else-if="bannerCopy.headline" class="cat-banner__title">{{ bannerCopy.headline }}</h2>
<p v-if="bannerCopy.tagline" class="cat-banner__tagline">{{ bannerCopy.tagline }}</p>
<button
v-if="bannerCopy.ctaLabel"
type="button"
class="cat-banner__cta"
@click="goBannerCta"
>
{{ bannerCopy.ctaLabel }}
</button>
</div>
<span
v-if="bannerIcon && !bannerImageUrl"
@@ -906,6 +944,20 @@ onUnmounted(() => {
text-shadow: 0 1px 6px rgba(0, 0, 0, 0.45);
}
.cat-banner__cta {
align-self: flex-start;
margin-top: 6px;
padding: 8px 14px;
border: none;
border-radius: var(--radius-sm);
background: rgba(255, 255, 255, 0.92);
color: var(--color-primary);
font: inherit;
font-size: 0.8125rem;
font-weight: 700;
cursor: pointer;
}
.cat-banner__icon-ring {
width: 48px;
height: 48px;
+291
View File
@@ -0,0 +1,291 @@
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import ProfileSubpageLayout from '@/views/profile/components/ProfileSubpageLayout.vue'
import PageSkeleton from '@/components/ui/PageSkeleton.vue'
import BaseButton from '@/components/ui/BaseButton.vue'
import {
cancelStockAlert,
fetchMyStockAlerts,
type StockAlertRequest,
} from '@/services/stockAlerts'
import { stockAlertStatusLabel, isProductOutOfStock } from '@/composables/useStockNotify'
import { useAppToast } from '@/composables/useAppToast'
import { ApiError } from '@/services/http'
import { formatDateTime, formatNumber } from '@/utils/format'
const router = useRouter()
const toast = useAppToast()
const rows = ref<StockAlertRequest[]>([])
const loading = ref(true)
const error = ref('')
const cancellingId = ref<string | null>(null)
const activeRows = computed(() => rows.value.filter((r) => r.active))
const historyRows = computed(() => rows.value.filter((r) => !r.active))
async function load() {
loading.value = true
error.value = ''
try {
rows.value = await fetchMyStockAlerts()
} catch (e) {
error.value =
e instanceof ApiError || e instanceof Error ? e.message : 'بارگذاری درخواست‌ها ناموفق بود.'
} finally {
loading.value = false
}
}
onMounted(load)
function openProduct(row: StockAlertRequest) {
router.push({ path: '/product', query: { id: row.productId } })
}
async function cancel(row: StockAlertRequest) {
if (!row.active || cancellingId.value) return
cancellingId.value = row.id
try {
await cancelStockAlert(row.productId)
toast.show('درخواست خبر موجودی لغو شد.', { tone: 'success' })
await load()
} catch (e) {
toast.show(
e instanceof ApiError || e instanceof Error ? e.message : 'لغو درخواست ناموفق بود.',
{ tone: 'error' },
)
} finally {
cancellingId.value = null
}
}
</script>
<template>
<ProfileSubpageLayout
title="خبر موجودی"
subtitle="وقتی محصول ناموجود دوباره موجود شود، در اعلان‌ها مطلع می‌شوید"
>
<p v-if="error" class="stock-alerts-error">{{ error }}</p>
<PageSkeleton v-if="loading" variant="list" />
<template v-else>
<div v-if="!rows.length" class="stock-alerts-empty">
<p>هنوز درخواستی ثبت نکرده‌اید.</p>
<p class="stock-alerts-empty__hint">
در صفحهٔ محصول ناموجود، دکمه «خبرم کن» را بزنید.
</p>
<BaseButton size="sm" variant="outline" @click="router.push('/products')">
مشاهده محصولات
</BaseButton>
</div>
<template v-else>
<section v-if="activeRows.length" class="stock-alerts-section">
<h2 class="stock-alerts-section__title">فعال ({{ formatNumber(activeRows.length) }})</h2>
<ul class="stock-alerts-list">
<li v-for="row in activeRows" :key="row.id" class="stock-alert-card">
<button type="button" class="stock-alert-card__main" @click="openProduct(row)">
<span
class="stock-alert-card__thumb"
:class="{ 'stock-alert-card__thumb--empty': !row.imageUrl }"
:style="row.imageUrl ? { backgroundImage: `url(${row.imageUrl})` } : undefined"
/>
<div class="stock-alert-card__body">
<span class="stock-alert-card__badge stock-alert-card__badge--active">
{{ stockAlertStatusLabel(row) }}
</span>
<strong class="stock-alert-card__name">{{ row.productName }}</strong>
<p class="stock-alert-card__meta">
کالیته {{ row.catalogCode }} · {{ row.color }}
<span dir="ltr">({{ row.productCode }})</span>
</p>
<p class="stock-alert-card__meta">
ثبت: {{ formatDateTime(row.createdAt) }}
<span v-if="isProductOutOfStock(row.stock)"> · موجودی: ۰</span>
</p>
</div>
</button>
<button
type="button"
class="stock-alert-card__cancel"
:disabled="cancellingId === row.id"
@click="cancel(row)"
>
لغو
</button>
</li>
</ul>
</section>
<section v-if="historyRows.length" class="stock-alerts-section">
<h2 class="stock-alerts-section__title">تاریخچه</h2>
<ul class="stock-alerts-list">
<li
v-for="row in historyRows"
:key="row.id"
class="stock-alert-card stock-alert-card--muted"
>
<button type="button" class="stock-alert-card__main" @click="openProduct(row)">
<span
class="stock-alert-card__thumb"
:class="{ 'stock-alert-card__thumb--empty': !row.imageUrl }"
:style="row.imageUrl ? { backgroundImage: `url(${row.imageUrl})` } : undefined"
/>
<div class="stock-alert-card__body">
<span
class="stock-alert-card__badge"
:class="{ 'stock-alert-card__badge--done': !!row.notifiedAt }"
>
{{ stockAlertStatusLabel(row) }}
</span>
<strong class="stock-alert-card__name">{{ row.productName }}</strong>
<p class="stock-alert-card__meta">
{{ row.notifiedAt ? `اطلاع: ${formatDateTime(row.notifiedAt)}` : formatDateTime(row.createdAt) }}
</p>
</div>
</button>
</li>
</ul>
</section>
</template>
</template>
</ProfileSubpageLayout>
</template>
<style scoped>
.stock-alerts-error {
margin: 0 0 12px;
color: var(--color-danger);
font-size: 0.8125rem;
}
.stock-alerts-empty {
display: flex;
flex-direction: column;
align-items: center;
gap: 10px;
padding: 32px 16px;
text-align: center;
color: var(--color-text-muted);
}
.stock-alerts-empty__hint {
margin: 0;
font-size: 0.8125rem;
line-height: 1.6;
max-width: 280px;
}
.stock-alerts-section {
margin-bottom: 20px;
}
.stock-alerts-section__title {
margin: 0 0 10px;
font-size: 0.875rem;
font-weight: 700;
color: var(--color-text-muted);
}
.stock-alerts-list {
list-style: none;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
gap: 10px;
}
.stock-alert-card {
display: flex;
align-items: stretch;
gap: 8px;
padding: 10px;
border-radius: 14px;
border: 1px solid var(--color-border);
background: var(--color-elevated);
}
.stock-alert-card--muted {
opacity: 0.88;
}
.stock-alert-card__main {
flex: 1;
display: flex;
gap: 12px;
min-width: 0;
border: none;
background: transparent;
padding: 0;
text-align: start;
cursor: pointer;
color: inherit;
font: inherit;
}
.stock-alert-card__thumb {
width: 56px;
height: 56px;
flex-shrink: 0;
border-radius: 10px;
background: var(--color-bg) center / cover no-repeat;
border: 1px solid var(--color-border);
}
.stock-alert-card__thumb--empty {
background: var(--color-primary-soft);
}
.stock-alert-card__body {
min-width: 0;
display: flex;
flex-direction: column;
gap: 4px;
}
.stock-alert-card__badge {
align-self: flex-start;
padding: 2px 8px;
border-radius: 999px;
font-size: 0.6875rem;
font-weight: 700;
background: var(--color-bg);
color: var(--color-text-muted);
}
.stock-alert-card__badge--active {
background: var(--color-primary-soft);
color: var(--color-primary);
}
.stock-alert-card__badge--done {
background: rgba(34, 197, 94, 0.15);
color: var(--color-success-dark, #15803d);
}
.stock-alert-card__name {
font-size: 0.9375rem;
line-height: 1.35;
}
.stock-alert-card__meta {
margin: 0;
font-size: 0.75rem;
color: var(--color-text-muted);
line-height: 1.5;
}
.stock-alert-card__cancel {
flex-shrink: 0;
align-self: center;
border: none;
background: transparent;
color: var(--color-danger);
font: inherit;
font-size: 0.8125rem;
font-weight: 600;
cursor: pointer;
padding: 8px;
}
</style>
@@ -92,6 +92,7 @@ const companyRows = computed(() => [
const quickAccess = [
{ label: 'حساب‌های بانکی', icon: IconCashSettlement },
{ label: 'آدرس‌ها', icon: IconMapPin, path: '/profile/addresses' },
{ label: 'خبر موجودی', icon: IconBell, path: '/profile/stock-alerts' },
{ label: 'حمایت و پشتیبانی', icon: IconHeadset, href: 'tel:02112345678' },
{ label: 'فاکتورهای من', icon: IconOrders, path: '/orders' },
]
@@ -66,6 +66,12 @@ const customerQuickActions: QuickAction[] = [
{ id: 'favorites', label: 'علاقه‌مندی‌ها', to: '/favorites', useHeart: true },
{ id: 'order-status', label: 'وضعیت سفارش', to: '/orders/latest-status', icon: 'vuesax-linear:timer-1' },
{ id: 'addresses', label: 'آدرس‌ها', to: '/profile/addresses', icon: 'vuesax-linear:location' },
{
id: 'stock-alerts',
label: 'خبر موجودی',
to: '/profile/stock-alerts',
icon: 'vuesax-linear:notification',
},
{ id: 'catalog', label: 'درخواست کالیته', to: '/categories', icon: 'vuesax-linear:box-1' },
]