feat: redesign user authentication screens

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
2026-09-26 12:17:34 +03:30
co-authored by Copilot
parent d4a03cea0a
commit c0815a931a
89 changed files with 653 additions and 1758 deletions
@@ -1 +1 @@
import{F as e,G as t,K as n,M as r,Pt as i,_ as a,d as o,f as s,g as c,i as l,k as u,l as d,nt as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{s as g}from"./BasicIcon-Bzeb0Iwd.js";import{t as _}from"./http-CU_N-R2R.js";import{n as v}from"./index-WUDoJ6iF.js";import{t as y}from"./addresses-tV-zgZYG.js";import{t as b}from"./ProfileSubpageLayout-BgPHfp3E.js";var x={key:0,class:`addr-error`},S={key:1,class:`addr-muted`},C={key:2,class:`addr-list`},w={key:0,class:`addr-badge`},T={class:`addr-actions`},E=[`onClick`],D=[`onClick`],O={key:3,class:`addr-muted`},k={class:`addr-field`},A={class:`addr-field`},j=p(h({__name:`AddressesView`,setup(p){let h=f([]),j=f(``),M=f(``),N=f(``),P=f(!0),F=f(!1);async function I(){P.value=!0,N.value=``;try{h.value=await y.list()}catch(e){N.value=e instanceof _||e instanceof Error?e.message:`دریافت آدرس‌ها ناموفق بود.`}finally{P.value=!1}}u(I);async function L(){let e=j.value.trim();if(e.length<3||F.value){N.value=`آدرس را کامل‌تر بنویسید.`;return}F.value=!0,N.value=``;try{await y.create({text:e,label:M.value.trim()||void 0}),j.value=``,M.value=``,h.value=await y.list()}catch(e){N.value=e instanceof _||e instanceof Error?e.message:`ذخیره آدرس ناموفق بود.`}finally{F.value=!1}}async function R(e){N.value=``;try{h.value=await y.makeDefault(e)}catch(e){N.value=e instanceof Error?e.message:`تغییر آدرس پیش‌فرض ناموفق بود.`}}async function z(e){N.value=``;try{h.value=await y.remove(e)}catch(e){N.value=e instanceof Error?e.message:`حذف آدرس ناموفق بود.`}}return(u,f)=>(r(),m(b,{title:`آدرس‌ها`,subtitle:`برای ارسال کالیته از آدرس پیش‌فرض استفاده می‌شود`},{default:t(()=>[N.value?(r(),s(`p`,x,i(N.value),1)):o(``,!0),P.value?(r(),s(`p`,S,`در حال دریافت…`)):h.value.length?(r(),s(`ul`,C,[(r(!0),s(l,null,e(h.value,e=>(r(),s(`li`,{key:e.id,class:`addr-item`},[d(`div`,null,[d(`strong`,null,i(e.label||`آدرس`),1),e.isDefault?(r(),s(`span`,w,`پیش‌فرض`)):o(``,!0),d(`p`,null,i(e.text),1)]),d(`div`,T,[e.isDefault?o(``,!0):(r(),s(`button`,{key:0,type:`button`,onClick:t=>R(e.id)},`پیش‌فرض`,8,E)),d(`button`,{type:`button`,class:`addr-remove`,onClick:t=>z(e.id)},`حذف`,8,D)])]))),128))])):(r(),s(`p`,O,`هنوز آدرسی ثبت نشده است.`)),d(`label`,k,[f[2]||=d(`span`,null,`عنوان (اختیاری)`,-1),n(d(`input`,{"onUpdate:modelValue":f[0]||=e=>M.value=e,type:`text`,maxlength:`40`,placeholder:`مثلاً فروشگاه`},null,512),[[g,M.value]])]),d(`label`,A,[f[3]||=d(`span`,null,`آدرس`,-1),n(d(`textarea`,{"onUpdate:modelValue":f[1]||=e=>j.value=e,rows:`3`,maxlength:`500`,placeholder:`آدرس کامل محل فعالیت`},null,512),[[g,j.value]])]),a(v,{loading:F.value,onClick:L},{default:t(()=>[...f[4]||=[c(`افزودن آدرس`,-1)]]),_:1},8,[`loading`])]),_:1}))}}),[[`__scopeId`,`data-v-fb759dd7`]]);export{j as default}; import{F as e,G as t,K as n,M as r,Pt as i,_ as a,d as o,f as s,g as c,i as l,k as u,l as d,nt as f,t as p,u as m,v as h}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{s as g}from"./BasicIcon-Bzeb0Iwd.js";import{t as _}from"./http-CU_N-R2R.js";import{n as v}from"./index-C40q_iVH.js";import{t as y}from"./addresses-tV-zgZYG.js";import{t as b}from"./ProfileSubpageLayout-CxIRBosu.js";var x={key:0,class:`addr-error`},S={key:1,class:`addr-muted`},C={key:2,class:`addr-list`},w={key:0,class:`addr-badge`},T={class:`addr-actions`},E=[`onClick`],D=[`onClick`],O={key:3,class:`addr-muted`},k={class:`addr-field`},A={class:`addr-field`},j=p(h({__name:`AddressesView`,setup(p){let h=f([]),j=f(``),M=f(``),N=f(``),P=f(!0),F=f(!1);async function I(){P.value=!0,N.value=``;try{h.value=await y.list()}catch(e){N.value=e instanceof _||e instanceof Error?e.message:`دریافت آدرس‌ها ناموفق بود.`}finally{P.value=!1}}u(I);async function L(){let e=j.value.trim();if(e.length<3||F.value){N.value=`آدرس را کامل‌تر بنویسید.`;return}F.value=!0,N.value=``;try{await y.create({text:e,label:M.value.trim()||void 0}),j.value=``,M.value=``,h.value=await y.list()}catch(e){N.value=e instanceof _||e instanceof Error?e.message:`ذخیره آدرس ناموفق بود.`}finally{F.value=!1}}async function R(e){N.value=``;try{h.value=await y.makeDefault(e)}catch(e){N.value=e instanceof Error?e.message:`تغییر آدرس پیش‌فرض ناموفق بود.`}}async function z(e){N.value=``;try{h.value=await y.remove(e)}catch(e){N.value=e instanceof Error?e.message:`حذف آدرس ناموفق بود.`}}return(u,f)=>(r(),m(b,{title:`آدرس‌ها`,subtitle:`برای ارسال کالیته از آدرس پیش‌فرض استفاده می‌شود`},{default:t(()=>[N.value?(r(),s(`p`,x,i(N.value),1)):o(``,!0),P.value?(r(),s(`p`,S,`در حال دریافت…`)):h.value.length?(r(),s(`ul`,C,[(r(!0),s(l,null,e(h.value,e=>(r(),s(`li`,{key:e.id,class:`addr-item`},[d(`div`,null,[d(`strong`,null,i(e.label||`آدرس`),1),e.isDefault?(r(),s(`span`,w,`پیش‌فرض`)):o(``,!0),d(`p`,null,i(e.text),1)]),d(`div`,T,[e.isDefault?o(``,!0):(r(),s(`button`,{key:0,type:`button`,onClick:t=>R(e.id)},`پیش‌فرض`,8,E)),d(`button`,{type:`button`,class:`addr-remove`,onClick:t=>z(e.id)},`حذف`,8,D)])]))),128))])):(r(),s(`p`,O,`هنوز آدرسی ثبت نشده است.`)),d(`label`,k,[f[2]||=d(`span`,null,`عنوان (اختیاری)`,-1),n(d(`input`,{"onUpdate:modelValue":f[0]||=e=>M.value=e,type:`text`,maxlength:`40`,placeholder:`مثلاً فروشگاه`},null,512),[[g,M.value]])]),d(`label`,A,[f[3]||=d(`span`,null,`آدرس`,-1),n(d(`textarea`,{"onUpdate:modelValue":f[1]||=e=>j.value=e,rows:`3`,maxlength:`500`,placeholder:`آدرس کامل محل فعالیت`},null,512),[[g,j.value]])]),a(v,{loading:F.value,onClick:L},{default:t(()=>[...f[4]||=[c(`افزودن آدرس`,-1)]]),_:1},8,[`loading`])]),_:1}))}}),[[`__scopeId`,`data-v-fb759dd7`]]);export{j as default};
+1
View File
@@ -0,0 +1 @@
.auth-shell[data-v-3dfa06a5]{color:#1e293b;background:#f9f6f2;height:100%;min-height:100%;position:relative;overflow:auto}.auth-shell__back[data-v-3dfa06a5]{z-index:2;cursor:pointer;background:0 0;border:0;place-items:center;width:40px;height:40px;display:grid;position:absolute;top:14px;right:12px}.auth-shell__body[data-v-3dfa06a5]{z-index:1;box-sizing:border-box;width:100%;max-width:100%;padding:48px 24px 32px;position:relative;overflow-x:hidden}.auth-shell__brand[data-v-3dfa06a5]{text-align:center;margin-bottom:14px}.auth-shell__logo[data-v-3dfa06a5]{object-fit:contain;-webkit-user-select:none;user-select:none;width:auto;height:112px;margin:0 auto;display:block}
+1
View File
@@ -0,0 +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{k as l}from"./index-C40q_iVH.js";import{t as u}from"./IconChevronBack-CDeN0Cbu.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
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-Bzeb0Iwd.js";import{i as ne,n as re}from"./format-C72AoJ2H.js";import{t as ie}from"./catalog-DvXpKfLO.js";import{M as ae,d as oe,n as h}from"./index-WUDoJ6iF.js";import{t as se}from"./PageHeader-DfXduTNr.js";import{t as ce}from"./useRequirePricedOrder-B57-NeD8.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-Bzeb0Iwd.js";import{i as ne,n as re}from"./format-C72AoJ2H.js";import{t as ie}from"./catalog-DvXpKfLO.js";import{d as ae,k as oe,n as h}from"./index-C40q_iVH.js";import{t as se}from"./PageHeader-CNHiRdZv.js";import{t as ce}from"./useRequirePricedOrder-IPmVytkF.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=oe(),p=ae(),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{M as g,T as _,j as v}from"./index-WUDoJ6iF.js";import{t as y}from"./EmptyState-D72g65G-.js";import{t as b}from"./PageHeader-DfXduTNr.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{O as g,S as _,k as v}from"./index-C40q_iVH.js";import{t as y}from"./EmptyState-D72g65G-.js";import{t as b}from"./PageHeader-CNHiRdZv.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=g(),M=v(),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{M as a,j as o}from"./index-WUDoJ6iF.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{O as a,k as o}from"./index-C40q_iVH.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=a(),d=o();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{M as p}from"./index-WUDoJ6iF.js";import{t as m}from"./PageHeader-DfXduTNr.js";import{t as h}from"./catalogRequests-DmXxqAPC.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{k as p}from"./index-C40q_iVH.js";import{t as m}from"./PageHeader-CNHiRdZv.js";import{t as h}from"./catalogRequests-DmXxqAPC.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{M as y,i as b,j as x}from"./index-WUDoJ6iF.js";import{t as S}from"./IconChevronBack-CDeN0Cbu.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-CUp0Xr9R.js";import{t as O}from"./useGoBack-LfBY_1QL.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{O as y,i as b,k as x}from"./index-C40q_iVH.js";import{t as S}from"./IconChevronBack-CDeN0Cbu.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-CUp0Xr9R.js";import{t as O}from"./useGoBack-BMLMruUd.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=y(),U=x(),{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
@@ -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{C as d,M as f,d as p}from"./index-WUDoJ6iF.js";import{t as m}from"./IconEditPen-DkMxper9.js";import{t as h}from"./PageHeader-DfXduTNr.js";import{t as g}from"./useRequirePricedOrder-B57-NeD8.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=f(),w=p(),{orderId:T,order:E}=g(),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(h,{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(d,{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(m,{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{b as d,d as f,k as p}from"./index-C40q_iVH.js";import{t as m}from"./PageHeader-CNHiRdZv.js";import{t as h}from"./useRequirePricedOrder-IPmVytkF.js";import{t as g}from"./IconEditPen-DkMxper9.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=p(),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(d,{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-Bzeb0Iwd.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{c as x,n as S}from"./index-WUDoJ6iF.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-Bzeb0Iwd.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{c as x,n as S}from"./index-C40q_iVH.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};
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-Bzeb0Iwd.js";import{o as _}from"./format-C72AoJ2H.js";import{M as v,l as y,o as b}from"./index-WUDoJ6iF.js";import{t as x}from"./PageHeader-DfXduTNr.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=y(),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(b,{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-Bzeb0Iwd.js";import{o as _}from"./format-C72AoJ2H.js";import{k as v,l as y,o as b}from"./index-C40q_iVH.js";import{t as x}from"./PageHeader-CNHiRdZv.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=y(),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(b,{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,u as t,v as n}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as r}from"./BasicIcon-Bzeb0Iwd.js";var i=n({__name:`IconLayoutGrid`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(n){return(i,a)=>(e(),t(r,{icon:`vuesax-linear:element-3`,size:n.size,"stroke-width":n.strokeWidth,color:n.color},null,8,[`size`,`stroke-width`,`color`]))}});export{i as t}; import{M as e,u as t,v as n}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as r}from"./BasicIcon-Bzeb0Iwd.js";var i=n({__name:`IconLayoutGrid`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(n){return(i,a)=>(e(),t(r,{icon:`vuesax-linear:element-3`,size:n.size,"stroke-width":n.strokeWidth,color:n.color},null,8,[`size`,`stroke-width`,`color`]))}}),a=n({__name:`IconDiamond`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(n){return(i,a)=>(e(),t(r,{icon:`vuesax-linear:diamonds`,size:n.size,"stroke-width":n.strokeWidth,color:n.color},null,8,[`size`,`stroke-width`,`color`]))}});export{i as n,a as t};
-1
View File
@@ -1 +0,0 @@
import{M as e,u as t,v as n}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as r}from"./BasicIcon-Bzeb0Iwd.js";var i=n({__name:`IconDiamond`,props:{size:{default:24},strokeWidth:{default:1.5},color:{default:null}},setup(n){return(i,a)=>(e(),t(r,{icon:`vuesax-linear:diamonds`,size:n.size,"stroke-width":n.strokeWidth,color:n.color},null,8,[`size`,`stroke-width`,`color`]))}});export{i as t};
@@ -1 +1 @@
import{M as e,Pt as t,_ as n,c as r,f as i,i as a,k as o,l as s,nt as c,t as l,u,ut as d,v as f}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as p,o as m}from"./format-C72AoJ2H.js";import{M as h}from"./index-WUDoJ6iF.js";import{t as g}from"./PageHeader-DfXduTNr.js";import{t as _}from"./PageSkeleton-DYdjm4l9.js";import{t as v}from"./catalogRequests-DmXxqAPC.js";import{t as y}from"./SimpleStatusTimeline-BYp_nmbJ.js";var b=[{id:`registered`,label:`درخواست کالیته ثبت شد`},{id:`ready_to_ship`,label:`آماده ارسال`},{id:`shipped`,label:`ارسال شد`},{id:`returned`,label:`تحویل گرفته شد`}],x={new:0,approved:0,ready_to_ship:1,delivered:2,returned:3,cancelled:0};function S(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 C(e){return x[S(e)]??0}function w(e){let t=S(e),n=p(e.createdAt),r=e.updatedAt?p(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}}var T={class:`page latest-status-page`},E={class:`page__scroll page__scroll--with-nav body`},D={class:`summary-card`},O={class:`summary-card__value`},k={class:`summary-card__meta`},A=l(f({__name:`LatestCatalogRequestStatusView`,setup(l){let f=h(),p=v(),x=c(!0),S=r(()=>p.sorted.length?p.sorted[0]:null),A=r(()=>S.value?C(S.value):0),j=r(()=>S.value?w(S.value):{});o(async()=>{x.value=!0,await p.hydrate(),x.value=!1});function M(){f.push(`/categories`)}return(r,o)=>(e(),i(`div`,T,[n(g,{class:`mobile-only`,title:`آخرین درخواست کالیته`,"show-back":``,centered:``,onBack:o[0]||=e=>d(f).push(`/`)}),o[3]||=s(`header`,{class:`desktop-page__head desktop-only`},[s(`div`,null,[s(`h1`,{class:`desktop-page__title`},`آخرین درخواست کالیته`),s(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین درخواست کالیته`)])],-1),s(`div`,E,[x.value?(e(),u(_,{key:0})):S.value?(e(),i(a,{key:1},[s(`article`,D,[o[2]||=s(`p`,{class:`summary-card__label`},`درخواست`,-1),s(`strong`,O,t(S.value.id.slice(-8)),1),s(`p`,k,t(d(m)(S.value.items.length))+` قلم کالیته `,1)]),n(y,{steps:d(b),"current-index":A.value,timestamps:j.value},null,8,[`steps`,`current-index`,`timestamps`]),s(`button`,{type:`button`,class:`detail-link`,onClick:o[1]||=e=>d(f).push(`/catalog-requests`)},` مشاهده همه درخواست‌ها `)],64)):(e(),i(`button`,{key:2,type:`button`,class:`empty-cta`,onClick:M},` شما هیچ کالیته ای درخواست نکرده اید، جهت درخواست کالیته و مشاهده فیزیکی پارچه ها کلیک کنید `))])]))}}),[[`__scopeId`,`data-v-e09a36c6`]]);export{A as default}; import{M as e,Pt as t,_ as n,c as r,f as i,i as a,k as o,l as s,nt as c,t as l,u,ut as d,v as f}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{i as p,o as m}from"./format-C72AoJ2H.js";import{k as h}from"./index-C40q_iVH.js";import{t as g}from"./PageHeader-CNHiRdZv.js";import{t as _}from"./PageSkeleton-DYdjm4l9.js";import{t as v}from"./catalogRequests-DmXxqAPC.js";import{t as y}from"./SimpleStatusTimeline-BYp_nmbJ.js";var b=[{id:`registered`,label:`درخواست کالیته ثبت شد`},{id:`ready_to_ship`,label:`آماده ارسال`},{id:`shipped`,label:`ارسال شد`},{id:`returned`,label:`تحویل گرفته شد`}],x={new:0,approved:0,ready_to_ship:1,delivered:2,returned:3,cancelled:0};function S(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 C(e){return x[S(e)]??0}function w(e){let t=S(e),n=p(e.createdAt),r=e.updatedAt?p(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}}var T={class:`page latest-status-page`},E={class:`page__scroll page__scroll--with-nav body`},D={class:`summary-card`},O={class:`summary-card__value`},k={class:`summary-card__meta`},A=l(f({__name:`LatestCatalogRequestStatusView`,setup(l){let f=h(),p=v(),x=c(!0),S=r(()=>p.sorted.length?p.sorted[0]:null),A=r(()=>S.value?C(S.value):0),j=r(()=>S.value?w(S.value):{});o(async()=>{x.value=!0,await p.hydrate(),x.value=!1});function M(){f.push(`/categories`)}return(r,o)=>(e(),i(`div`,T,[n(g,{class:`mobile-only`,title:`آخرین درخواست کالیته`,"show-back":``,centered:``,onBack:o[0]||=e=>d(f).push(`/`)}),o[3]||=s(`header`,{class:`desktop-page__head desktop-only`},[s(`div`,null,[s(`h1`,{class:`desktop-page__title`},`آخرین درخواست کالیته`),s(`p`,{class:`desktop-page__subtitle`},`پیگیری مراحل آخرین درخواست کالیته`)])],-1),s(`div`,E,[x.value?(e(),u(_,{key:0})):S.value?(e(),i(a,{key:1},[s(`article`,D,[o[2]||=s(`p`,{class:`summary-card__label`},`درخواست`,-1),s(`strong`,O,t(S.value.id.slice(-8)),1),s(`p`,k,t(d(m)(S.value.items.length))+` قلم کالیته `,1)]),n(y,{steps:d(b),"current-index":A.value,timestamps:j.value},null,8,[`steps`,`current-index`,`timestamps`]),s(`button`,{type:`button`,class:`detail-link`,onClick:o[1]||=e=>d(f).push(`/catalog-requests`)},` مشاهده همه درخواست‌ها `)],64)):(e(),i(`button`,{key:2,type:`button`,class:`empty-cta`,onClick:M},` شما هیچ کالیته ای درخواست نکرده اید، جهت درخواست کالیته و مشاهده فیزیکی پارچه ها کلیک کنید `))])]))}}),[[`__scopeId`,`data-v-e09a36c6`]]);export{A 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{M as g,c as _,d as v}from"./index-WUDoJ6iF.js";import{t as y}from"./PageHeader-DfXduTNr.js";import{t as b}from"./PageSkeleton-DYdjm4l9.js";import{t as x}from"./SimpleStatusTimeline-BYp_nmbJ.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=v(),C=_(),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{c as g,d as _,k as v}from"./index-C40q_iVH.js";import{t as y}from"./PageHeader-CNHiRdZv.js";import{t as b}from"./PageSkeleton-DYdjm4l9.js";import{t as x}from"./SimpleStatusTimeline-BYp_nmbJ.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=v(),m=_(),C=g(),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
View File
@@ -0,0 +1 @@
.auth-title[data-v-5764ebe1]{text-align:center;color:#1e293b;margin:0 0 8px;font-size:22px;font-weight:800}.auth-lead[data-v-5764ebe1]{text-align:center;color:#667085;margin:0 0 22px;font-size:13px;line-height:1.7}.auth-form[data-v-5764ebe1]{flex-direction:column;gap:12px;display:flex}.auth-field[data-v-5764ebe1]{background:#fff;border:1px solid #eaecf0;border-radius:14px;align-items:center;gap:8px;height:52px;padding:0 14px;display:flex}.auth-field.is-invalid[data-v-5764ebe1]{border-color:#b42318}.auth-field input[data-v-5764ebe1]{font:inherit;text-align:right;background:0 0;border:0;outline:none;flex:1;font-size:14px}.auth-field input[data-v-5764ebe1]::placeholder{color:#98a2b3}.auth-error[data-v-5764ebe1]{color:#b42318;margin:0;font-size:12px}.auth-submit[data-v-5764ebe1],.auth-outline[data-v-5764ebe1]{height:52px;font:inherit;cursor:pointer;border-radius:14px;place-items:center;font-size:16px;font-weight:700;text-decoration:none;display:grid}.auth-submit[data-v-5764ebe1]{color:#fff;background:#1e293b;border:0}.auth-submit[data-v-5764ebe1]:disabled{opacity:.7}.auth-outline[data-v-5764ebe1]{color:#1e293b;background:0 0;border:1.5px solid #1e293b}.auth-or[data-v-5764ebe1]{color:#98a2b3;align-items:center;gap:12px;margin:4px 0;font-size:13px;display:flex}.auth-or[data-v-5764ebe1]:before,.auth-or[data-v-5764ebe1]:after{content:"";background:#eaecf0;flex:1;height:1px}
File diff suppressed because one or more lines are too long
+1
View File
@@ -0,0 +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-Bzeb0Iwd.js";import{d as _,l as v}from"./format-C72AoJ2H.js";import{a as y}from"./validation-Duyyve7l.js";import{c as b,k as x}from"./index-C40q_iVH.js";import{t as S}from"./AuthShell-D_JIc5Qr.js";import{t as C}from"./FormErrorBanner-Ud1D04xf.js";import{t as w}from"./IconPhone-DymoL1t0.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=x(),j=b(),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
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{M as p,d as m,j as h,n as g}from"./index-WUDoJ6iF.js";import{t as _}from"./PageHeader-DfXduTNr.js";import{t as v}from"./useGoBack-LfBY_1QL.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{O as p,d as m,k as h,n as g}from"./index-C40q_iVH.js";import{t as _}from"./PageHeader-CNHiRdZv.js";import{t as v}from"./useGoBack-BMLMruUd.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=p(),T=h(),{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
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 @@
.auth-title[data-v-27df1667]{text-align:center;color:#1e293b;margin:0 0 8px;font-size:24px;font-weight:800}.auth-lead[data-v-27df1667]{text-align:center;color:#667085;margin:0 0 22px;font-size:13px;line-height:1.8}.auth-form[data-v-27df1667]{flex-direction:column;align-items:stretch;gap:14px;display:flex}.otp-row[data-v-27df1667]{direction:ltr;justify-content:center;gap:10px;display:flex}.otp-box[data-v-27df1667]{text-align:center;width:56px;height:56px;font:inherit;color:#1e293b;background:#fff;border:1px solid #eaecf0;border-radius:14px;font-size:22px;font-weight:700}.otp-box.is-invalid[data-v-27df1667]{border-color:#b42318}.auth-error[data-v-27df1667]{text-align:center;color:#b42318;margin:0;font-size:12px}.otp-resend[data-v-27df1667],.otp-edit[data-v-27df1667]{color:#667085;font:inherit;cursor:pointer;background:0 0;border:0;font-size:13px}.otp-resend[data-v-27df1667]:disabled{cursor:default}.auth-submit[data-v-27df1667]{color:#fff;height:52px;font:inherit;cursor:pointer;background:#1e293b;border:0;border-radius:14px;font-size:16px;font-weight:700}.auth-submit[data-v-27df1667]:disabled{opacity:.7}
-1
View File
@@ -1 +0,0 @@
.otp-page[data-v-95ef2b05]{isolation:isolate;color:#f4ede4;background:#1a1612;height:100%;min-height:100%;position:relative;overflow:hidden}.otp-page__bg[data-v-95ef2b05]{z-index:0;object-fit:cover;object-position:center center;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;inset:0}.otp-page__scroll[data-v-95ef2b05]{z-index:1;overscroll-behavior:contain;height:100%;position:relative;overflow:hidden auto}.otp-page__stage[data-v-95ef2b05]{width:100%;max-width:390px;min-height:100%;padding:calc(10px + env(safe-area-inset-top,0px)) 16px calc(14px + env(safe-area-inset-bottom,0px));box-sizing:border-box;flex-direction:column;margin-inline:auto;display:flex}.otp-top[data-v-95ef2b05]{justify-content:flex-end;align-items:center;min-height:36px;display:flex}.otp-top__back[data-v-95ef2b05]{color:#f3e6d6;cursor:pointer;background:#f4ede424;border:none;border-radius:999px;place-items:center;width:36px;height:36px;display:grid}.otp-brand[data-v-95ef2b05]{text-align:center;color:#f3e6d6;flex-direction:column;align-items:center;margin-top:18px;margin-bottom:18px;display:flex}.otp-brand__fa[data-v-95ef2b05]{margin:12px 0 0;font-size:1.625rem;font-weight:700;line-height:1.25}.otp-brand__en[data-v-95ef2b05]{letter-spacing:.28em;color:#ead7c0;margin:6px 0 0;font-size:.6875rem;font-weight:500}.otp-card[data-v-95ef2b05]{color:#2a2622;background:#f4f1ed;border:none;border-radius:28px;width:100%;margin:0;padding:22px 18px 18px;box-shadow:0 18px 40px #0c0a0838}.otp-card__title[data-v-95ef2b05]{text-align:center;color:#1c1b19;margin:0;font-size:1.0625rem;font-weight:700;line-height:1.5}.otp-card__lead[data-v-95ef2b05]{text-align:center;color:#8a847c;margin:6px 0 0;font-size:.75rem;line-height:1.7}.otp-card[data-v-95ef2b05] .form-error-banner{margin-top:14px;margin-bottom:0}.otp-row[data-v-95ef2b05]{justify-content:center;gap:10px;margin-top:18px;display:flex}.otp-box[data-v-95ef2b05]{color:#1c1b19;text-align:center;width:52px;height:56px;caret-color:var(--color-primary);border:1px solid #e4e0db;border-radius:16px;padding:0;font-family:inherit;font-size:1.25rem;font-weight:700;transition:border-color .15s}.otp-box[data-v-95ef2b05]:focus{border-color:var(--color-primary);outline:none}.otp-box--error[data-v-95ef2b05]{border-color:color-mix(in srgb, var(--color-danger) 55%, #e4e0db)}.otp-card__error[data-v-95ef2b05]{color:var(--color-danger);text-align:center;margin:8px 4px 0;font-size:.75rem}.otp-submit[data-v-95ef2b05]{background:var(--color-primary);width:100%;height:48px;color:var(--color-surface);cursor:pointer;border:none;border-radius:999px;justify-content:center;align-items:center;margin-top:16px;padding:0 44px;font-family:inherit;font-size:.9375rem;font-weight:600;transition:background .15s;display:flex;position:relative}.otp-submit[data-v-95ef2b05]:not(:disabled):hover,.otp-submit[data-v-95ef2b05]:not(:disabled):focus-visible{background:var(--color-primary-hover)}.otp-submit[data-v-95ef2b05]:disabled{opacity:.7;cursor:not-allowed}.otp-submit__chevron[data-v-95ef2b05]{place-items:center;display:grid;position:absolute;inset-inline-end:16px}.otp-submit__spinner[data-v-95ef2b05]{border:2px solid #ffffff47;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite otp-spin-95ef2b05;position:absolute;inset-inline-start:16px}.otp-resend[data-v-95ef2b05]{color:#6f6b66;cursor:pointer;background:0 0;border:1px solid #d8d3cd;border-radius:999px;width:100%;height:48px;margin-top:10px;font-family:inherit;font-size:.875rem;font-weight:500}.otp-resend[data-v-95ef2b05]:disabled{opacity:.7;cursor:not-allowed}.otp-edit[data-v-95ef2b05]{color:#8a847c;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;gap:6px;width:100%;margin-top:14px;font-family:inherit;font-size:.8125rem;display:flex}.otp-spacer[data-v-95ef2b05]{flex:auto;min-height:16px}.otp-watermark[data-v-95ef2b05]{color:#f4ede494;letter-spacing:.2em;text-align:left;direction:ltr;margin:0;padding-bottom:8px;font-size:.625rem;font-weight:600;line-height:1.35}@keyframes otp-spin-95ef2b05{to{transform:rotate(360deg)}}@media (width>=768px){.otp-page[data-v-95ef2b05]{max-width:none;height:100%;min-height:0;margin:0;padding:0;overflow:hidden}}
+1
View File
@@ -0,0 +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-Bzeb0Iwd.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{O as w,c as T,h as E,k as ee}from"./index-C40q_iVH.js";import{t as te}from"./AuthShell-D_JIc5Qr.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=w(),I=ee(),L=T(),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?E():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{i as d}from"./index-WUDoJ6iF.js";import{t as f}from"./IconChevronBack-CDeN0Cbu.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{i as d}from"./index-C40q_iVH.js";import{t as f}from"./IconChevronBack-CDeN0Cbu.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
@@ -1 +1 @@
import{t as e}from"./CheckListView-BweT5VrG.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-CY_LoCUs.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-Bzeb0Iwd.js";import{u as v}from"./dist-U-AqZ6hP.js";import{M as y,a as b,c as x,d as S,n as C}from"./index-WUDoJ6iF.js";import{t as w}from"./ProfileSubpageLayout-BgPHfp3E.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=S(),H=b(),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-Bzeb0Iwd.js";import{u as v}from"./dist-U-AqZ6hP.js";import{a as y,c as b,d as x,k as S,n as C}from"./index-C40q_iVH.js";import{t as w}from"./ProfileSubpageLayout-CxIRBosu.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=S(),B=b(),V=x(),H=y(),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-Bzeb0Iwd.js";import{i as v}from"./format-C72AoJ2H.js";import{M as y,n as b,u as x}from"./index-WUDoJ6iF.js";import{t as S}from"./EmptyState-D72g65G-.js";import{t as C}from"./ProfileSubpageLayout-BgPHfp3E.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=x(),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(b,{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(b,{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-Bzeb0Iwd.js";import{i as v}from"./format-C72AoJ2H.js";import{k as y,n as b,u as x}from"./index-C40q_iVH.js";import{t as S}from"./EmptyState-D72g65G-.js";import{t as C}from"./ProfileSubpageLayout-CxIRBosu.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=x(),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(b,{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(b,{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{n as d}from"./index-WUDoJ6iF.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-BgPHfp3E.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{n as d}from"./index-C40q_iVH.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-CxIRBosu.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{M as u}from"./index-WUDoJ6iF.js";import{t as d}from"./IconChevronBack-CDeN0Cbu.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{k as u}from"./index-C40q_iVH.js";import{t as d}from"./IconChevronBack-CDeN0Cbu.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
+1
View File
@@ -0,0 +1 @@
.auth-title[data-v-6e3d20c2]{text-align:center;color:#1e293b;margin:0 0 8px;font-size:24px;font-weight:800}.auth-lead[data-v-6e3d20c2]{text-align:center;color:#667085;margin:0 0 22px;font-size:13px;line-height:1.7}.auth-form[data-v-6e3d20c2]{box-sizing:border-box;flex-direction:column;gap:12px;width:100%;min-width:0;display:flex}.auth-row[data-v-6e3d20c2]{grid-template-columns:1fr 1fr;gap:10px;width:100%;min-width:0;display:grid}.auth-field[data-v-6e3d20c2]{box-sizing:border-box;background:#fff;border:1px solid #eaecf0;border-radius:14px;align-items:center;gap:8px;width:100%;min-width:0;height:52px;padding:0 14px;display:flex;overflow:hidden}.auth-field.is-invalid[data-v-6e3d20c2]{border-color:#b42318}.auth-field input[data-v-6e3d20c2]{width:100%;min-width:0;font:inherit;text-align:right;color:#1e293b;background:0 0;border:0;outline:none;flex:1 1 0;font-size:14px}.auth-field input[data-v-6e3d20c2]::placeholder{color:#98a2b3}.auth-error[data-v-6e3d20c2]{color:#b42318;margin:-4px 0 0;font-size:12px}.job-label[data-v-6e3d20c2]{color:#1e293b;margin:4px 0 0;font-size:14px;font-weight:700}.job-grid[data-v-6e3d20c2]{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.job-card[data-v-6e3d20c2]{color:#667085;min-height:108px;font:inherit;text-align:center;cursor:pointer;background:#fff;border:1.5px solid #eaecf0;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:10px 6px;font-size:11px;line-height:1.45;display:flex}.job-card__icon[data-v-6e3d20c2]{object-fit:contain;-webkit-user-select:none;user-select:none;width:40px;height:40px;display:block}.job-card.is-on[data-v-6e3d20c2]{color:#1e293b;border-color:#1e293b;font-weight:700}.auth-submit[data-v-6e3d20c2]{color:#fff;height:52px;font:inherit;cursor:pointer;background:#1e293b;border:0;border-radius:14px;margin-top:4px;font-size:16px;font-weight:700}.auth-submit[data-v-6e3d20c2]:disabled{opacity:.7}.terms[data-v-6e3d20c2]{color:#475569;align-items:center;gap:8px;font-size:12px;display:flex}.terms input[data-v-6e3d20c2]{accent-color:#1e293b;flex-shrink:0;width:16px;height:16px}
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 @@
.welcome[data-v-34e03d54]{color:#fff;background:#0f172a;height:100%;min-height:100%;position:relative;overflow:hidden}.welcome__photo[data-v-34e03d54]{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .5s;position:absolute;inset:0}.welcome__photo.is-on[data-v-34e03d54]{opacity:1}.welcome__shade[data-v-34e03d54]{background:linear-gradient(#0f172a26 20%,#0f172ad1 100%);position:absolute;inset:0}.welcome__brand[data-v-34e03d54],.welcome__copy[data-v-34e03d54],.welcome__cta[data-v-34e03d54]{z-index:1;position:relative}.welcome__brand[data-v-34e03d54]{text-align:center;padding-top:14vh}.welcome__logo[data-v-34e03d54]{object-fit:contain;filter:brightness(0)invert();-webkit-user-select:none;user-select:none;width:auto;height:110px;margin:0 auto;display:block}.welcome__copy[data-v-34e03d54]{position:absolute;bottom:108px;left:24px;right:24px}.welcome__copy h1[data-v-34e03d54]{margin:0 0 10px;font-size:32px;font-weight:700;line-height:1.35}.welcome__copy p[data-v-34e03d54]{opacity:.92;margin:0;font-size:14px;line-height:1.8}.welcome__dots[data-v-34e03d54]{gap:6px;margin-top:18px;display:flex}.welcome__dots button[data-v-34e03d54]{background:#ffffff73;border:0;border-radius:999px;width:7px;height:7px;padding:0}.welcome__dots button.is-on[data-v-34e03d54]{background:#fff;width:18px}.welcome__cta[data-v-34e03d54]{color:#fff;height:52px;font:inherit;cursor:pointer;background:#1e293b;border:0;border-radius:14px;font-size:16px;font-weight:700;position:absolute;bottom:28px;left:24px;right:24px}
-1
View File
@@ -1 +0,0 @@
.welcome-page[data-v-443d4085]{isolation:isolate;color:#f4ede4;background:#1a1612;height:100%;min-height:100%;position:relative;overflow:hidden}.welcome-page__bg[data-v-443d4085]{z-index:0;object-fit:cover;object-position:center;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;inset:0}.welcome-page__veil[data-v-443d4085]{z-index:1;pointer-events:none;background:linear-gradient(#0c0a086b 0%,#0c0a0847 42%,#0c0a08b8 100%);position:absolute;inset:0}.welcome-page__scroll[data-v-443d4085]{z-index:2;overscroll-behavior:contain;height:100%;position:relative;overflow:hidden auto}.welcome-page__stage[data-v-443d4085]{width:100%;max-width:390px;min-height:100%;padding:calc(12px + env(safe-area-inset-top,0px)) 20px calc(20px + env(safe-area-inset-bottom,0px));box-sizing:border-box;flex-direction:column;margin-inline:auto;display:flex}.welcome-top[data-v-443d4085]{justify-content:flex-end;min-height:40px;display:flex}.welcome-skip[data-v-443d4085]{color:#f4ede4;height:34px;font:inherit;cursor:pointer;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0c0a0873;border:none;border-radius:999px;padding:0 16px;font-size:.8125rem;font-weight:500}.welcome-brand[data-v-443d4085]{text-align:center;flex-direction:column;align-items:center;margin-top:28px;display:flex}.welcome-brand__fa[data-v-443d4085]{color:#ead7c0;margin:14px 0 0;font-size:1.875rem;font-weight:700;line-height:1.3}.welcome-brand__tag[data-v-443d4085]{color:#f4ede4eb;max-width:16rem;margin:10px 0 0;font-size:.8125rem;font-weight:400;line-height:1.7}.welcome-brand__rule[data-v-443d4085]{background:var(--color-primary);border-radius:1px;width:36px;height:1.5px;margin-top:16px;display:block}.welcome-features[data-v-443d4085]{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:36px 0 0;padding:0;list-style:none;display:grid}.welcome-feature[data-v-443d4085]{text-align:center;flex-direction:column;align-items:center;gap:8px;display:flex}.welcome-feature__icon[data-v-443d4085]{color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#f4ede438;border-radius:999px;place-items:center;width:48px;height:48px;display:grid}.welcome-feature__star[data-v-443d4085]{width:22px;height:22px}.welcome-feature strong[data-v-443d4085]{color:#f4ede4;font-size:.6875rem;font-weight:700;line-height:1.45}.welcome-feature span[data-v-443d4085]{color:#f4ede4b8;font-size:.5625rem;font-weight:400;line-height:1.5}.welcome-spacer[data-v-443d4085]{flex:auto;min-height:28px}.welcome-dots[data-v-443d4085]{justify-content:center;gap:6px;margin-bottom:16px;display:flex}.welcome-dots i[data-v-443d4085]{background:#f4ede447;border-radius:999px;width:6px;height:6px}.welcome-dots i.is-on[data-v-443d4085]{background:#f4ede4}.welcome-cta[data-v-443d4085]{background:linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 65%, transparent) 0%, color-mix(in srgb, var(--color-primary) 42%, transparent) 48%, color-mix(in srgb, var(--color-accent-navy) 48%, transparent) 100%);color:#fff;width:100%;height:52px;font:inherit;cursor:pointer;-webkit-backdrop-filter:blur(10px);border:1px solid #f4ede447;border-radius:999px;justify-content:center;align-items:center;padding:0 44px;font-size:.9375rem;font-weight:600;display:flex;position:relative;box-shadow:inset 0 1px #ffffff1f}.welcome-cta__chevron[data-v-443d4085]{place-items:center;display:grid;position:absolute;inset-inline-end:16px}@media (width>=768px){.welcome-page[data-v-443d4085]{max-width:none;height:100%;min-height:0;margin:0;padding:0;overflow:hidden}.welcome-page__stage[data-v-443d4085]{max-width:390px;padding-block:16px 24px}}@media (width<=359px){.welcome-page__stage[data-v-443d4085]{padding-inline:14px}.welcome-brand__fa[data-v-443d4085]{font-size:1.625rem}.welcome-feature__icon[data-v-443d4085]{width:42px;height:42px}}
-1
View File
@@ -1 +0,0 @@
import{F as e,M as t,Pt as n,_ as r,f as i,i as a,l as o,t as s,u as c,ut as l,v as u}from"./_plugin-vue_export-helper-1xMDlcEE.js";import{t as d}from"./BasicIcon-Bzeb0Iwd.js";import{M as f,_ as p,o as m}from"./index-WUDoJ6iF.js";import{t as h}from"./login-fabric-CzrIXTnD.js";var g={class:`page welcome-page`},_=[`src`],v={class:`welcome-page__scroll`},y={class:`welcome-page__stage`},b={class:`welcome-brand`},x={class:`welcome-features`},S={class:`welcome-feature__icon`,"aria-hidden":`true`},C={key:0,class:`welcome-feature__star`,viewBox:`0 0 24 24`,fill:`none`},w={class:`welcome-cta__chevron`,"aria-hidden":`true`},T=s(u({__name:`WelcomeView`,setup(s){let u=f(),T=[{icon:`star`,title:`همراه همیشگی کسب‌وکارتان`,subtitle:`با خدمات ویژه مشتریان`},{icon:`vuesax-linear:truck-time`,title:`سفارش عمده`,subtitle:`مستقیم از تولیدکننده`},{icon:`vuesax-linear:element-3`,title:`تنوع بی‌نظیر محصولات`,subtitle:`از کلاسیک تا مدرن`}];function E(){let e=typeof u.currentRoute.value.query.redirect==`string`?u.currentRoute.value.query.redirect:void 0;u.push({name:`login`,query:e?{redirect:e}:void 0})}return(s,u)=>(t(),i(`div`,g,[o(`img`,{class:`welcome-page__bg`,src:l(h),alt:``},null,8,_),u[7]||=o(`div`,{class:`welcome-page__veil`,"aria-hidden":`true`},null,-1),o(`div`,v,[o(`div`,y,[o(`header`,{class:`welcome-top`},[o(`button`,{type:`button`,class:`welcome-skip`,onClick:E},`رد شدن`)]),o(`div`,b,[r(p,{size:88}),u[0]||=o(`h1`,{class:`welcome-brand__fa`},`نادمی تکس`,-1),u[1]||=o(`p`,{class:`welcome-brand__tag`},`انتخاب حرفه‌ای، شروع یک همکاری ماندگار`,-1),u[2]||=o(`span`,{class:`welcome-brand__rule`,"aria-hidden":`true`},null,-1)]),o(`ul`,x,[(t(),i(a,null,e(T,e=>o(`li`,{key:e.title,class:`welcome-feature`},[o(`span`,S,[e.icon===`star`?(t(),i(`svg`,C,[...u[3]||=[o(`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,stroke:`#fff`,"stroke-width":`1.5`,"stroke-linejoin":`round`},null,-1)]])):(t(),c(d,{key:1,icon:e.icon,size:22,color:`#ffffff`},null,8,[`icon`]))]),o(`strong`,null,n(e.title),1),o(`span`,null,n(e.subtitle),1)])),64))]),u[5]||=o(`div`,{class:`welcome-spacer`,"aria-hidden":`true`},null,-1),u[6]||=o(`div`,{class:`welcome-dots`,"aria-hidden":`true`},[o(`i`,{class:`is-on`}),o(`i`),o(`i`),o(`i`)],-1),o(`button`,{type:`button`,class:`welcome-cta`,onClick:E},[u[4]||=o(`span`,null,`ورود / ثبت‌نام`,-1),o(`span`,w,[r(m,{size:18,color:`#ffffff`})])])])])]))}}),[[`__scopeId`,`data-v-443d4085`]]);export{T as default};
+1
View File
@@ -0,0 +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{k as p}from"./index-C40q_iVH.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};
+1
View File
@@ -0,0 +1 @@
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-Bzeb0Iwd.js";import{E as o,S as s,_ as c}from"./index-C40q_iVH.js";import{n as l,t as u}from"./IconDiamond-Dn-fHb3u.js";import{t as d}from"./IconShoppingBag-BHoZiOex.js";var f=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`]))}}),p=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`]))}}),m=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`]))}}),h=[`width`,`height`],g=[`stroke`,`stroke-width`],_=[`stroke`,`stroke-width`],v=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,g),n(`path`,{d:`M12 7.75V18.5`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,_)],8,h))}}),y=[`width`,`height`],b=[`stroke`,`stroke-width`],x=[`stroke`,`stroke-width`],S=[`stroke`,`stroke-width`],C=[`stroke`,`stroke-width`],w=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,b),n(`path`,{d:`M12 5.5v13`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,x),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,S),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,C)],8,y))}}),T=[`width`,`height`],E=[`stroke`,`stroke-width`],D=[`stroke`,`stroke-width`],O=[`stroke`,`stroke-width`],k={bolt:f,feather:p,diamond:u,grid:l,bag:d,"id-card":m,catalog:s,headset:c,home:o,shirt:v,suit:w,trousers: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,E),n(`path`,{d:`M12 8.75v11`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,D),n(`path`,{d:`M8 7.25h8`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,O)],8,T))}})},A={shirt:`shirt`,suit:`suit`,trousers:`trousers`};function j(e){return A[e.id]?A[e.id]:e.icon&&k[e.icon]?e.icon:e.icon??`grid`}function M(e,t=u){return e&&k[e]||t}export{j as n,M as t};
-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-Bzeb0Iwd.js";import{T as o,k as s,v as c}from"./index-WUDoJ6iF.js";import{t as l}from"./IconDiamond-bOGfMf7j.js";import{t as u}from"./IconLayoutGrid-CTmPrZXE.js";import{t as d}from"./IconShoppingBag-BHoZiOex.js";var f=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`]))}}),p=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`]))}}),m=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`]))}}),h=[`width`,`height`],g=[`stroke`,`stroke-width`],_=[`stroke`,`stroke-width`],v=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,g),n(`path`,{d:`M12 7.75V18.5`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,_)],8,h))}}),y=[`width`,`height`],b=[`stroke`,`stroke-width`],x=[`stroke`,`stroke-width`],S=[`stroke`,`stroke-width`],C=[`stroke`,`stroke-width`],w=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,b),n(`path`,{d:`M12 5.5v13`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,x),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,S),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,C)],8,y))}}),T=[`width`,`height`],E=[`stroke`,`stroke-width`],D=[`stroke`,`stroke-width`],O=[`stroke`,`stroke-width`],k={bolt:f,feather:p,diamond:l,grid:u,bag:d,"id-card":m,catalog:o,headset:c,home:s,shirt:v,suit:w,trousers: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,E),n(`path`,{d:`M12 8.75v11`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,D),n(`path`,{d:`M8 7.25h8`,stroke:r.color,"stroke-width":r.strokeWidth,"stroke-linecap":`round`},null,8,O)],8,T))}})},A={shirt:`shirt`,suit:`suit`,trousers:`trousers`};function j(e){return A[e.id]?A[e.id]:e.icon&&k[e.icon]?e.icon:e.icon??`grid`}function M(e,t=l){return e&&k[e]||t}export{j as n,M as t};
Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

-1
View File
@@ -1 +0,0 @@
var e=`/assets/login-fabric-CSZOoxR9.jpg`;export{e as t};
Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

+1
View File
@@ -0,0 +1 @@
var e=`/assets/nademitex-auth-logo-OHeojn8M.png`;export{e as t};
Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

@@ -1 +1 @@
import{M as e}from"./index-WUDoJ6iF.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{k as e}from"./index-C40q_iVH.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{M as n,d as r,j as i}from"./index-WUDoJ6iF.js";import{n as a}from"./orderInvoice-B0L1Aeuk.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{O as n,d as r,k as i}from"./index-C40q_iVH.js";import{n as a}from"./orderInvoice-B0L1Aeuk.js";function o(){let o=n(),s=i(),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 -1
View File
@@ -11,7 +11,7 @@
<meta name="mobile-web-app-capable" content="yes"> <meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
<title>سامانه سفارش عمده پارچه</title> <title>سامانه سفارش عمده پارچه</title>
<script type="module" crossorigin src="/assets/index-WUDoJ6iF.js"></script> <script type="module" crossorigin src="/assets/index-C40q_iVH.js"></script>
<link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-1xMDlcEE.js"> <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-1xMDlcEE.js">
<link rel="modulepreload" crossorigin href="/assets/BasicIcon-Bzeb0Iwd.js"> <link rel="modulepreload" crossorigin href="/assets/BasicIcon-Bzeb0Iwd.js">
<link rel="modulepreload" crossorigin href="/assets/pinia-BK9B9Wwf.js"> <link rel="modulepreload" crossorigin href="/assets/pinia-BK9B9Wwf.js">
Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
<rect x="12" y="12" width="40" height="40" rx="2" stroke="#445066" stroke-width="2.4"/>
<path d="M18 22c4 3 8-3 12 0s8-3 12 0" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
<path d="M18 30c4 3 8-3 12 0s8-3 12 0" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
<path d="M18 38c4 3 8-3 12 0s8-3 12 0" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
<path d="M18 46c4 3 8-3 12 0s8-3 12 0" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
<path d="M6 54V30L16 36V28L26 34V22H34L42 12V22H54V54H6Z" stroke="#445066" stroke-width="2.4" stroke-linejoin="round"/>
<path d="M48 22V10H54V22" stroke="#445066" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M54 12H60" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
<path d="M16 54V44M26 54V44M38 54V44" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

+7
View File
@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
<circle cx="32" cy="10" r="4.5" stroke="#445066" stroke-width="2.4"/>
<path d="M32 14.5V20" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
<path d="M18 50L24 28h16l6 22" stroke="#445066" stroke-width="2.4" stroke-linejoin="round"/>
<path d="M24 28c0-4 3.5-7 8-7s8 3 8 7" stroke="#445066" stroke-width="2.4"/>
<path d="M32 50v6M22 58h20" stroke="#445066" stroke-width="2.4" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

+81
View File
@@ -0,0 +1,81 @@
<script setup lang="ts">
import { useRouter } from 'vue-router'
import IconChevronBack from '@/components/icons/IconChevronBack.vue'
import logoUrl from '@/assets/images/nademitex-auth-logo.png'
defineProps<{
backTo?: string
}>()
const router = useRouter()
</script>
<template>
<div class="auth-shell">
<button
v-if="backTo"
type="button"
class="auth-shell__back"
aria-label="بازگشت"
@click="router.push(backTo)"
>
<IconChevronBack :size="22" color="#1e293b" />
</button>
<div class="auth-shell__body">
<div class="auth-shell__brand">
<img class="auth-shell__logo" :src="logoUrl" alt="Nademi Tex" draggable="false" />
</div>
<slot />
</div>
</div>
</template>
<style scoped>
.auth-shell {
position: relative;
height: 100%;
min-height: 100%;
overflow: auto;
background: #f9f6f2;
color: #1e293b;
}
.auth-shell__back {
position: absolute;
z-index: 2;
top: 14px;
right: 12px;
width: 40px;
height: 40px;
border: 0;
background: transparent;
display: grid;
place-items: center;
cursor: pointer;
}
.auth-shell__body {
position: relative;
z-index: 1;
padding: 48px 24px 32px;
width: 100%;
max-width: 100%;
box-sizing: border-box;
overflow-x: hidden;
}
.auth-shell__brand {
margin-bottom: 14px;
text-align: center;
}
.auth-shell__logo {
display: block;
width: auto;
height: 112px;
margin: 0 auto;
object-fit: contain;
user-select: none;
}
</style>
+20
View File
@@ -0,0 +1,20 @@
<script setup lang="ts">
import waveUrl from '@/assets/images/auth-wave.png'
</script>
<template>
<img class="auth-wave" :src="waveUrl" alt="" draggable="false" />
</template>
<style scoped>
.auth-wave {
position: absolute;
top: 0;
right: 0;
width: min(70vw, 270px);
height: auto;
pointer-events: none;
user-select: none;
z-index: 0;
}
</style>
+1 -1
View File
@@ -11,7 +11,7 @@ export type PendingRegister = {
export const JOB_CATEGORY_OPTIONS: Array<{ id: JobCategory; label: string }> = [ export const JOB_CATEGORY_OPTIONS: Array<{ id: JobCategory; label: string }> = [
{ id: 'garment_producer', label: 'تولیدکننده پوشاک عمده' }, { id: 'garment_producer', label: 'تولیدکننده پوشاک عمده' },
{ id: 'atelier', label: 'مزون' }, { id: 'atelier', label: 'مزون' },
{ id: 'fabric_wholesaler', label: 'عمده‌فروش پارچه' }, { id: 'fabric_wholesaler', label: 'فروشنده عمده پارچه' },
] ]
export function getPendingRegister(): PendingRegister | null { export function getPendingRegister(): PendingRegister | null {
+79 -469
View File
@@ -1,13 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, ref } from 'vue' import { computed, ref } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import AuthShell from '@/components/auth/AuthShell.vue'
import FormErrorBanner from '@/components/ui/FormErrorBanner.vue' import FormErrorBanner from '@/components/ui/FormErrorBanner.vue'
import IconChevronLeft from '@/components/icons/IconChevronLeft.vue'
import IconHeadset from '@/components/icons/IconHeadset.vue'
import IconPhone from '@/components/icons/IconPhone.vue' import IconPhone from '@/components/icons/IconPhone.vue'
import IconQemashMark from '@/components/icons/IconQemashMark.vue'
import { getPublicContact, telHref } from '@/services/settings'
import { normalizePhone, toPersianDigits } from '@/utils/format' import { normalizePhone, toPersianDigits } from '@/utils/format'
import { validatePhone } from '@/utils/validation' import { validatePhone } from '@/utils/validation'
import { import {
@@ -16,15 +13,10 @@ import {
hasFieldErrors, hasFieldErrors,
type FieldErrors, type FieldErrors,
} from '@/utils/formErrors' } from '@/utils/formErrors'
import fabricUrl from '@/assets/images/login-fabric.jpg'
import fabricUrl2 from '@/assets/images/login-fabric2.png'
const router = useRouter() const router = useRouter()
const auth = useAuthStore() const auth = useAuthStore()
const supportPhone = ref<string | null>(null)
const supportHref = computed(() => telHref(supportPhone.value))
const phone = ref('') const phone = ref('')
const fieldErrors = ref<FieldErrors>({}) const fieldErrors = ref<FieldErrors>({})
const formError = ref('') const formError = ref('')
@@ -76,500 +68,118 @@ async function submit() {
formError.value = result.message ?? 'خطا در ارسال کد تأیید.' formError.value = result.message ?? 'خطا در ارسال کد تأیید.'
} }
} }
onMounted(async () => {
try {
const contact = await getPublicContact()
supportPhone.value = contact.supportPhone
} catch {
supportPhone.value = null
}
})
</script> </script>
<template> <template>
<div class="page login-page"> <AuthShell back-to="/welcome">
<img class="login-page__bg" :src="fabricUrl" alt="" /> <h1 class="auth-title">به نادمی تکس خوش آمدید</h1>
<!-- <img class="login-page__fabric" :src="fabricUrl2" alt="" />--> <p class="auth-lead">برای ادامه، وارد حساب کاربری خود شوید</p>
<div class="login-page__scroll"> <form class="auth-form" @submit.prevent="submit">
<div class="login-page__stage"> <FormErrorBanner :message="formError" />
<header class="login-top">
<p class="login-top__welcome">به دنیای پارچه خوش آمدید</p>
</header>
<div class="login-brand"> <label class="auth-field" :class="{ 'is-invalid': Boolean(fieldErrors.phone) }">
<IconQemashMark :size="78" /> <IconPhone :size="18" color="#64748b" />
<h1 class="login-brand__fa">نادمی تکس</h1> <input
<p class="login-brand__en">NADEMITEX</p> :value="displayPhone"
<p class="login-brand__tag">انتخاب حرفه‌ای‌ها</p> type="tel"
</div> inputmode="numeric"
autocomplete="tel"
maxlength="11"
placeholder="شماره موبایل"
:aria-invalid="Boolean(fieldErrors.phone)"
aria-label="شماره موبایل"
@input="onPhoneInput(($event.target as HTMLInputElement).value)"
@blur="onPhoneBlur"
/>
</label>
<p v-if="fieldErrors.phone" class="auth-error">{{ fieldErrors.phone }}</p>
<form class="login-card" @submit.prevent="submit"> <button class="auth-submit" type="submit" :disabled="auth.loading">
<h2 class="login-card__title">ورود به حساب کاربری</h2> {{ auth.loading ? 'در حال ارسال…' : 'ورود' }}
<p class="login-card__lead">برای ادامه، شماره موبایل خود را وارد کنید.</p> </button>
<FormErrorBanner :message="formError" /> <p class="auth-or"><span>یا</span></p>
<div class="phone-field" dir="ltr" :class="{ 'is-invalid': Boolean(fieldErrors.phone) }"> <RouterLink class="auth-outline" to="/register">ثبت‌نام در نادمی تکس</RouterLink>
<span class="phone-field__locale" aria-hidden="true"> </form>
<svg class="iran-flag" viewBox="0 0 21 15" xmlns="http://www.w3.org/2000/svg"> </AuthShell>
<rect width="21" height="5" fill="#239F40" />
<rect y="5" width="21" height="5" fill="#fff" />
<rect y="10" width="21" height="5" fill="#DA0001" />
<circle cx="10.5" cy="7.5" r="1.35" fill="#DA0001" />
</svg>
<svg class="phone-field__caret" viewBox="0 0 10 6" fill="none">
<path
d="M1 1.2 5 5l4-3.8"
stroke="currentColor"
stroke-width="1.3"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</span>
<input
class="phone-field__input"
:value="displayPhone"
type="tel"
inputmode="numeric"
autocomplete="tel"
dir="rtl"
maxlength="11"
placeholder="شماره موبایل"
:aria-invalid="Boolean(fieldErrors.phone)"
aria-label="شماره موبایل"
@input="onPhoneInput(($event.target as HTMLInputElement).value)"
@blur="onPhoneBlur"
/>
</div>
<p v-if="fieldErrors.phone" class="phone-field__error">{{ fieldErrors.phone }}</p>
<button class="login-submit" type="submit" :disabled="auth.loading">
<span v-if="auth.loading" class="login-submit__spinner" aria-hidden="true" />
<span class="login-submit__chevron" aria-hidden="true">
<IconChevronLeft :size="18" color="#F4EDE4" />
</span>
<span>دریافت کد تأیید</span>
</button>
<p class="login-register">
حساب کاربری ندارید؟
<RouterLink to="/register">ثبت‌نام کنید</RouterLink>
</p>
<div class="login-or" role="separator">
<span>یا</span>
</div>
<div class="login-help">
<a
class="login-help__item"
:href="supportHref"
:class="{ 'is-disabled': !supportHref }"
:aria-disabled="!supportHref"
>
<span class="login-help__icon">
<IconHeadset :size="22" color="#3A3936" />
</span>
پشتیبانی
</a>
<a
class="login-help__item"
:href="supportHref"
:class="{ 'is-disabled': !supportHref }"
:aria-disabled="!supportHref"
>
<span class="login-help__icon">
<IconPhone :size="22" color="#3A3936" />
</span>
تماس با ما
</a>
</div>
<p class="login-card__foot">پارچه، آغاز یک اعتماد ماندگار…</p>
</form>
<div class="login-spacer" aria-hidden="true" />
<p class="login-watermark">MORE<br />THAN<br />FABRIC</p>
</div>
</div>
</div>
</template> </template>
<style scoped> <style scoped>
.login-page { .auth-title {
position: relative; margin: 0 0 8px;
isolation: isolate;
height: 100%;
min-height: 100%;
color: #f4ede4;
background: #1a1612;
overflow: hidden;
}
.login-page__bg {
position: absolute;
inset: 0;
z-index: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center center;
pointer-events: none;
user-select: none;
}
/* پارچه پایین صفحه — پشت باکس لاگین، نه روی آن */
.login-page__fabric {
position: absolute;
left: 0;
right: 0;
bottom: 0;
z-index: 3;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center bottom;
pointer-events: none;
user-select: none;
}
.login-page__scroll {
position: relative;
z-index: 1;
height: 100%;
overflow-x: hidden;
overflow-y: auto;
overscroll-behavior: contain;
}
.login-page__stage {
display: flex;
flex-direction: column;
min-height: 100%;
width: 100%;
max-width: 360px;
margin-inline: auto;
padding: calc(10px + env(safe-area-inset-top, 0px)) 16px
calc(14px + env(safe-area-inset-bottom, 0px));
}
.login-top {
display: flex;
align-items: center;
justify-content: flex-start;
min-height: 36px;
}
.login-top__welcome {
color: #f3e6d6;
font-size: 0.75rem;
font-weight: 400;
line-height: 1.6;
}
.login-brand {
display: flex;
flex-direction: column;
align-items: center;
text-align: center; text-align: center;
margin-top: 28px; font-size: 22px;
margin-bottom: 20px; font-weight: 800;
color: #f3e6d6; color: #1e293b;
} }
.auth-lead {
.login-brand__fa { margin: 0 0 22px;
margin: 14px 0 0;
font-size: 1.75rem;
font-weight: 700;
line-height: 1.25;
letter-spacing: -0.02em;
}
.login-brand__en {
margin: 6px 0 0;
font-size: 0.6875rem;
font-weight: 500;
letter-spacing: 0.28em;
color: #ead7c0;
}
.login-brand__tag {
margin: 10px 0 0;
font-size: 0.875rem;
font-weight: 400;
color: #efe2d2;
}
.login-card {
width: 100%;
margin: 0;
padding: 22px 18px 16px;
border: none;
border-radius: 28px;
background: #ebe4dc;
box-shadow: 0 18px 40px rgba(12, 10, 8, 0.22);
color: #2a2622;
}
.login-card__title {
margin: 0;
text-align: center; text-align: center;
font-size: 1.0625rem; color: #667085;
font-weight: 700; font-size: 13px;
line-height: 1.5;
color: #1c1b19;
}
.login-card__lead {
margin: 6px 0 0;
text-align: center;
font-size: 0.75rem;
line-height: 1.7; line-height: 1.7;
color: #8a847c;
} }
.auth-form { display: flex; flex-direction: column; gap: 12px; }
.login-card :deep(.form-error-banner) { .auth-field {
margin-top: 14px;
margin-bottom: 0;
}
.phone-field {
display: flex; display: flex;
flex-direction: row;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
height: 48px; height: 52px;
margin-top: 18px; padding: 0 14px;
padding: 0 8px 0 14px; border: 1px solid #eaecf0;
border: 1px solid #e4e0db;
border-radius: 14px; border-radius: 14px;
background: #fff;
} }
.auth-field.is-invalid { border-color: #b42318; }
.phone-field.is-invalid { .auth-field input {
border-color: color-mix(in srgb, var(--color-danger) 55%, #e4e0db);
}
.phone-field__locale {
display: inline-flex;
align-items: center;
gap: 4px;
color: #9a9590;
flex-shrink: 0;
}
.iran-flag {
width: 22px;
height: 16px;
border-radius: 2px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.06);
overflow: hidden;
}
.phone-field__caret {
width: 10px;
height: 6px;
}
.phone-field__input {
flex: 1; flex: 1;
min-width: 0; border: 0;
height: 100%;
border: none;
background: transparent; background: transparent;
color: #2a2622; font: inherit;
font-family: inherit; font-size: 14px;
font-size: 0.9375rem; text-align: right;
letter-spacing: 0.04em;
text-align: start;
outline: none; outline: none;
} }
.auth-field input::placeholder { color: #98a2b3; }
.phone-field__input::placeholder { .auth-error { margin: 0; color: #b42318; font-size: 12px; }
color: #b0aaa3; .auth-submit,
} .auth-outline {
.phone-field__error {
margin: 8px 4px 0;
color: var(--color-danger);
font-size: 0.75rem;
line-height: 1.5;
}
.login-submit {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 48px;
margin-top: 12px;
padding: 0 44px;
border: none;
border-radius: 999px;
background: var(--color-primary);
color: var(--color-surface);
font-family: inherit;
font-size: 0.9375rem;
font-weight: 600;
cursor: pointer;
transition: background 0.15s ease;
}
.login-submit:not(:disabled):hover,
.login-submit:not(:disabled):focus-visible {
background: var(--color-primary-hover);
}
.login-submit:focus-visible {
outline: 2px solid var(--color-primary);
outline-offset: 2px;
}
.login-submit:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.login-submit__chevron {
position: absolute;
inset-inline-end: 16px;
display: grid; display: grid;
place-items: center; place-items: center;
} height: 52px;
border-radius: 14px;
.login-submit__spinner { font: inherit;
position: absolute; font-size: 16px;
inset-inline-start: 16px;
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, 0.28);
border-top-color: #fff;
border-radius: 50%;
animation: login-spin 0.6s linear infinite;
}
.login-register {
margin: 12px 0 0;
text-align: center;
font-size: 0.8125rem;
line-height: 1.6;
color: #8a847c;
}
.login-register a {
font-weight: 700; font-weight: 700;
color: var(--color-primary);
text-decoration: none; text-decoration: none;
cursor: pointer;
} }
.auth-submit {
.login-or { border: 0;
background: #1e293b;
color: #fff;
}
.auth-submit:disabled { opacity: 0.7; }
.auth-outline {
border: 1.5px solid #1e293b;
color: #1e293b;
background: transparent;
}
.auth-or {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 12px; gap: 12px;
margin: 16px 4px 14px; margin: 4px 0;
color: #9a9590; color: #98a2b3;
font-size: 0.75rem; font-size: 13px;
} }
.auth-or::before,
.login-or::before, .auth-or::after {
.login-or::after { content: "";
content: '';
flex: 1; flex: 1;
height: 1px; height: 1px;
background: #e6e1db; background: #eaecf0;
}
.login-help {
display: flex;
justify-content: center;
gap: 48px;
}
.login-help__item {
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
color: #6f6b66;
font-size: 0.75rem;
text-decoration: none;
}
.login-help__item.is-disabled {
pointer-events: none;
}
.login-help__icon {
width: 52px;
height: 52px;
border: 1px solid #d8d3cd;
border-radius: 50%;
display: grid;
place-items: center;
background: transparent;
}
.login-card__foot {
margin: 18px 0 2px;
text-align: center;
font-size: 0.75rem;
line-height: 1.7;
color: #8a847c;
}
.login-spacer {
flex: 1 1 auto;
min-height: 16px;
}
.login-watermark {
margin: 0;
padding-bottom: 8px;
color: rgba(244, 237, 228, 0.58);
font-size: 0.625rem;
font-weight: 600;
letter-spacing: 0.2em;
line-height: 1.35;
text-align: left;
direction: ltr;
}
@keyframes login-spin {
to {
transform: rotate(360deg);
}
}
@media (max-width: 359px) {
.login-page__stage {
padding-inline: 12px;
}
.login-brand {
margin-top: 16px;
margin-bottom: 14px;
}
.login-brand__fa {
font-size: 1.5rem;
}
.login-help {
gap: 36px;
}
}
@media (min-width: 768px) {
.login-page {
padding: 0;
max-width: none;
margin: 0;
height: 100%;
min-height: 0;
overflow: hidden;
}
} }
</style> </style>
+58 -365
View File
@@ -3,11 +3,8 @@ import { ref, computed, onMounted, nextTick } from 'vue'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { useIntervalFn } from '@vueuse/core' import { useIntervalFn } from '@vueuse/core'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import AuthShell from '@/components/auth/AuthShell.vue'
import FormErrorBanner from '@/components/ui/FormErrorBanner.vue' import FormErrorBanner from '@/components/ui/FormErrorBanner.vue'
import IconEditPen from '@/components/icons/IconEditPen.vue'
import IconChevronBack from '@/components/icons/IconChevronBack.vue'
import IconChevronLeft from '@/components/icons/IconChevronLeft.vue'
import IconQemashMark from '@/components/icons/IconQemashMark.vue'
import { toPersianDigits, extractNumericString, normalizePhone } from '@/utils/format' import { toPersianDigits, extractNumericString, normalizePhone } from '@/utils/format'
import { import {
FORM_VALIDATION_SUMMARY, FORM_VALIDATION_SUMMARY,
@@ -16,7 +13,6 @@ import {
type FieldErrors, type FieldErrors,
} from '@/utils/formErrors' } from '@/utils/formErrors'
import { getPendingRegister } from '@/utils/pendingRegister' import { getPendingRegister } from '@/utils/pendingRegister'
import fabricUrl from '@/assets/images/login-fabric.jpg'
const OTP_LENGTH = 4 const OTP_LENGTH = 4
const RESEND_SECONDS = 60 const RESEND_SECONDS = 60
@@ -39,12 +35,7 @@ const secondsLeft = ref(RESEND_SECONDS)
const code = computed(() => digits.value.join('')) const code = computed(() => digits.value.join(''))
const canResend = computed(() => secondsLeft.value <= 0 && !auth.loading) const canResend = computed(() => secondsLeft.value <= 0 && !auth.loading)
const timerLabel = computed(() => { const timerLabel = computed(() => toPersianDigits(String(secondsLeft.value)))
const minutes = Math.floor(secondsLeft.value / 60)
const seconds = secondsLeft.value % 60
const formatted = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`
return toPersianDigits(formatted)
})
const { pause, resume } = useIntervalFn( const { pause, resume } = useIntervalFn(
() => { () => {
@@ -232,368 +223,70 @@ onMounted(() => {
</script> </script>
<template> <template>
<div class="page otp-page"> <AuthShell :back-to="isRegister ? '/register' : '/login'">
<img class="otp-page__bg" :src="fabricUrl" alt="" /> <h1 class="auth-title">کد تأیید</h1>
<p class="auth-lead">
کد ارسال‌شده به
<span dir="ltr">{{ toPersianDigits(phone) }}</span>
را وارد کنید
</p>
<div class="otp-page__scroll"> <form class="auth-form" @submit.prevent="submit">
<div class="otp-page__stage"> <FormErrorBanner :message="formError" />
<header class="otp-top">
<button
type="button"
class="otp-top__back"
aria-label="بازگشت"
@click="router.push(isRegister ? '/register' : '/login')"
>
<IconChevronBack :size="20" />
</button>
</header>
<div class="otp-brand"> <div class="otp-row" dir="ltr" role="group" aria-label="کد تأیید">
<IconQemashMark :size="72" /> <input
<h1 class="otp-brand__fa">نادمی تکس</h1> v-for="(digit, index) in digits"
<p class="otp-brand__en">NADEMITEX</p> :id="`otp-${index}`"
</div> :key="index"
:ref="(el) => setInputRef(el, index)"
<form class="otp-card" @submit.prevent="submit"> class="otp-box"
<h2 class="otp-card__title">تأیید موبایل</h2> :class="{ 'is-invalid': fieldErrors.code }"
<p class="otp-card__lead"> type="text"
کد ارسال‌شده به inputmode="numeric"
<span dir="ltr">{{ toPersianDigits(phone) }}</span> autocomplete="one-time-code"
را وارد کنید. maxlength="1"
</p> :value="displayDigit(digit)"
:aria-label="`رقم ${toPersianDigits(String(index + 1))}`"
<FormErrorBanner :message="formError" /> @input="onDigitInput(index, $event)"
@keydown="onDigitKeydown(index, $event)"
<div @paste="onDigitPaste(index, $event)"
class="otp-row" />
dir="ltr"
role="group"
aria-label="کد تأیید"
>
<input
v-for="(digit, index) in digits"
:id="`otp-${index}`"
:key="index"
:ref="(el) => setInputRef(el, index)"
class="otp-box"
:class="{ 'otp-box--error': fieldErrors.code }"
type="text"
inputmode="numeric"
autocomplete="one-time-code"
maxlength="1"
:value="displayDigit(digit)"
:aria-label="`رقم ${toPersianDigits(String(index + 1))}`"
@input="onDigitInput(index, $event)"
@keydown="onDigitKeydown(index, $event)"
@paste="onDigitPaste(index, $event)"
/>
</div>
<p v-if="fieldErrors.code" class="otp-card__error">{{ fieldErrors.code }}</p>
<button class="otp-submit" type="submit" :disabled="auth.loading">
<span v-if="auth.loading" class="otp-submit__spinner" aria-hidden="true" />
<span class="otp-submit__chevron" aria-hidden="true">
<IconChevronLeft :size="18" color="#F4EDE4" />
</span>
<span>تأیید و ورود</span>
</button>
<button
class="otp-resend"
type="button"
:disabled="!canResend"
@click="resend"
>
<template v-if="canResend">ارسال مجدد کد</template>
<template v-else>ارسال مجدد کد ({{ timerLabel }})</template>
</button>
<button type="button" class="otp-edit" @click="changePhone">
<span dir="ltr">{{ toPersianDigits(phone) }}</span>
<span>ویرایش شماره</span>
<IconEditPen :size="16" :stroke-width="1.5" />
</button>
</form>
<div class="otp-spacer" aria-hidden="true" />
<p class="otp-watermark">MORE<br />THAN<br />FABRIC</p>
</div> </div>
</div> <p v-if="fieldErrors.code" class="auth-error">{{ fieldErrors.code }}</p>
</div>
<button class="otp-resend" type="button" :disabled="!canResend" @click="resend">
<template v-if="canResend">ارسال مجدد کد</template>
<template v-else>ارسال مجدد کد ({{ timerLabel }} ثانیه)</template>
</button>
<button class="auth-submit" type="submit" :disabled="auth.loading">
{{ auth.loading ? 'در حال بررسی…' : 'تأیید' }}
</button>
<button type="button" class="otp-edit" @click="changePhone">ویرایش شماره</button>
</form>
</AuthShell>
</template> </template>
<style scoped> <style scoped>
.otp-page { .auth-title { margin: 0 0 8px; text-align: center; font-size: 24px; font-weight: 800; color: #1e293b; }
position: relative; .auth-lead { margin: 0 0 22px; text-align: center; color: #667085; font-size: 13px; line-height: 1.8; }
isolation: isolate; .auth-form { display: flex; flex-direction: column; gap: 14px; align-items: stretch; }
height: 100%; .otp-row { display: flex; justify-content: center; gap: 10px; direction: ltr; }
min-height: 100%;
color: #f4ede4;
background: #1a1612;
overflow: hidden;
}
.otp-page__bg {
position: absolute;
inset: 0;
z-index: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center center;
pointer-events: none;
user-select: none;
}
.otp-page__scroll {
position: relative;
z-index: 1;
height: 100%;
overflow-x: hidden;
overflow-y: auto;
overscroll-behavior: contain;
}
.otp-page__stage {
display: flex;
flex-direction: column;
min-height: 100%;
width: 100%;
max-width: 390px;
margin-inline: auto;
padding: calc(10px + env(safe-area-inset-top, 0px)) 16px
calc(14px + env(safe-area-inset-bottom, 0px));
box-sizing: border-box;
}
.otp-top {
display: flex;
align-items: center;
justify-content: flex-end;
min-height: 36px;
}
.otp-top__back {
width: 36px;
height: 36px;
border: none;
border-radius: 999px;
background: rgba(244, 237, 228, 0.14);
color: #f3e6d6;
display: grid;
place-items: center;
cursor: pointer;
}
.otp-brand {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin-top: 18px;
margin-bottom: 18px;
color: #f3e6d6;
}
.otp-brand__fa {
margin: 12px 0 0;
font-size: 1.625rem;
font-weight: 700;
line-height: 1.25;
}
.otp-brand__en {
margin: 6px 0 0;
font-size: 0.6875rem;
font-weight: 500;
letter-spacing: 0.28em;
color: #ead7c0;
}
.otp-card {
width: 100%;
margin: 0;
padding: 22px 18px 18px;
border: none;
border-radius: 28px;
background: #f4f1ed;
box-shadow: 0 18px 40px rgba(12, 10, 8, 0.22);
color: #2a2622;
}
.otp-card__title {
margin: 0;
text-align: center;
font-size: 1.0625rem;
font-weight: 700;
line-height: 1.5;
color: #1c1b19;
}
.otp-card__lead {
margin: 6px 0 0;
text-align: center;
font-size: 0.75rem;
line-height: 1.7;
color: #8a847c;
}
.otp-card :deep(.form-error-banner) {
margin-top: 14px;
margin-bottom: 0;
}
.otp-row {
display: flex;
justify-content: center;
gap: 10px;
margin-top: 18px;
}
.otp-box { .otp-box {
width: 52px; width: 56px; height: 56px; border: 1px solid #eaecf0; border-radius: 14px;
height: 56px; background: #fff; text-align: center; font: inherit; font-size: 22px; font-weight: 700; color: #1e293b;
padding: 0;
border: 1px solid #e4e0db;
border-radius: 16px;
color: #1c1b19;
font-family: inherit;
font-size: 1.25rem;
font-weight: 700;
text-align: center;
caret-color: var(--color-primary);
transition: border-color 0.15s;
} }
.otp-box.is-invalid { border-color: #b42318; }
.otp-box:focus { .auth-error { margin: 0; text-align: center; color: #b42318; font-size: 12px; }
outline: none; .otp-resend, .otp-edit {
border-color: var(--color-primary); border: 0; background: transparent; color: #667085; font: inherit; font-size: 13px; cursor: pointer;
} }
.otp-resend:disabled { cursor: default; }
.otp-box--error { .auth-submit {
border-color: color-mix(in srgb, var(--color-danger) 55%, #e4e0db); height: 52px; border: 0; border-radius: 14px; background: #1e293b; color: #fff;
} font: inherit; font-size: 16px; font-weight: 700; cursor: pointer;
.otp-card__error {
margin: 8px 4px 0;
color: var(--color-danger);
font-size: 0.75rem;
text-align: center;
}
.otp-submit {
position: relative;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 48px;
margin-top: 16px;
padding: 0 44px;
border: none;
border-radius: 999px;
background: var(--color-primary);
color: var(--color-surface);
font-family: inherit;
font-size: 0.9375rem;
font-weight: 600;
cursor: pointer;
transition: background 0.15s ease;
}
.otp-submit:not(:disabled):hover,
.otp-submit:not(:disabled):focus-visible {
background: var(--color-primary-hover);
}
.otp-submit:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.otp-submit__chevron {
position: absolute;
inset-inline-end: 16px;
display: grid;
place-items: center;
}
.otp-submit__spinner {
position: absolute;
inset-inline-start: 16px;
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, 0.28);
border-top-color: #fff;
border-radius: 50%;
animation: otp-spin 0.6s linear infinite;
}
.otp-resend {
width: 100%;
height: 48px;
margin-top: 10px;
border: 1px solid #d8d3cd;
border-radius: 999px;
background: transparent;
color: #6f6b66;
font-family: inherit;
font-size: 0.875rem;
font-weight: 500;
cursor: pointer;
}
.otp-resend:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.otp-edit {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
width: 100%;
margin-top: 14px;
border: none;
background: transparent;
color: #8a847c;
font-family: inherit;
font-size: 0.8125rem;
cursor: pointer;
}
.otp-spacer {
flex: 1 1 auto;
min-height: 16px;
}
.otp-watermark {
margin: 0;
padding-bottom: 8px;
color: rgba(244, 237, 228, 0.58);
font-size: 0.625rem;
font-weight: 600;
letter-spacing: 0.2em;
line-height: 1.35;
text-align: left;
direction: ltr;
}
@keyframes otp-spin {
to {
transform: rotate(360deg);
}
}
@media (min-width: 768px) {
.otp-page {
padding: 0;
max-width: none;
margin: 0;
height: 100%;
min-height: 0;
overflow: hidden;
}
} }
.auth-submit:disabled { opacity: 0.7; }
</style> </style>
+200 -591
View File
@@ -1,15 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref } from 'vue' import { computed, ref } from 'vue'
import { onClickOutside } from '@vueuse/core'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useAuthStore } from '@/stores/auth' import { useAuthStore } from '@/stores/auth'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue' import AuthShell from '@/components/auth/AuthShell.vue'
import FormErrorBanner from '@/components/ui/FormErrorBanner.vue' import FormErrorBanner from '@/components/ui/FormErrorBanner.vue'
import IconChevronLeft from '@/components/icons/IconChevronLeft.vue'
import IconDiamond from '@/components/icons/IconDiamond.vue'
import IconPhone from '@/components/icons/IconPhone.vue' import IconPhone from '@/components/icons/IconPhone.vue'
import IconProfile from '@/components/icons/IconProfile.vue' import IconProfile from '@/components/icons/IconProfile.vue'
import IconVerified from '@/components/icons/IconVerified.vue'
import { normalizePhone, toPersianDigits } from '@/utils/format' import { normalizePhone, toPersianDigits } from '@/utils/format'
import { validatePhone } from '@/utils/validation' import { validatePhone } from '@/utils/validation'
import { import {
@@ -23,7 +19,15 @@ import {
setPendingRegister, setPendingRegister,
type JobCategory, type JobCategory,
} from '@/utils/pendingRegister' } from '@/utils/pendingRegister'
import cardUrl from '@/assets/images/register-card.jpg' import jobIconFactory from '@/assets/images/job-icon-factory.png'
import jobIconMannequin from '@/assets/images/job-icon-mannequin.png'
import jobIconFabric from '@/assets/images/job-icon-fabric.png'
const JOB_ICONS: Record<JobCategory, string> = {
garment_producer: jobIconFactory,
atelier: jobIconMannequin,
fabric_wholesaler: jobIconFabric,
}
const router = useRouter() const router = useRouter()
const auth = useAuthStore() const auth = useAuthStore()
@@ -31,25 +35,15 @@ const auth = useAuthStore()
const firstName = ref('') const firstName = ref('')
const lastName = ref('') const lastName = ref('')
const phone = ref('') const phone = ref('')
const jobCategory = ref<JobCategory | ''>('') const jobCategory = ref<JobCategory | ''>('garment_producer')
const acceptedTerms = ref(true) const acceptedTerms = ref(true)
const jobOpen = ref(false)
const jobRoot = ref<HTMLElement | null>(null)
const fieldErrors = ref<FieldErrors>({}) const fieldErrors = ref<FieldErrors>({})
const formError = ref('') const formError = ref('')
const displayPhone = computed(() => (phone.value ? toPersianDigits(phone.value) : '')) const displayPhone = computed(() => (phone.value ? toPersianDigits(phone.value) : ''))
const selectedJobLabel = computed(
() => JOB_CATEGORY_OPTIONS.find((opt) => opt.id === jobCategory.value)?.label ?? 'دسته‌بندی شغلی',
)
onClickOutside(jobRoot, () => {
jobOpen.value = false
})
function selectJob(id: JobCategory) { function selectJob(id: JobCategory) {
jobCategory.value = id jobCategory.value = id
jobOpen.value = false
clearField('jobCategory') clearField('jobCategory')
} }
@@ -70,21 +64,11 @@ async function submit() {
const normalized = normalizePhone(phone.value) const normalized = normalizePhone(phone.value)
const errors: FieldErrors = {} const errors: FieldErrors = {}
if (!firstName.value.trim()) { if (!firstName.value.trim()) errors.firstName = 'نام الزامی است.'
errors.firstName = 'نام الزامی است.' if (!lastName.value.trim()) errors.lastName = 'نام خانوادگی الزامی است.'
} if (!validatePhone(normalized)) errors.phone = 'شماره موبایل معتبر نیست.'
if (!lastName.value.trim()) { if (!jobCategory.value) errors.jobCategory = 'دسته شغلی را انتخاب کنید.'
errors.lastName = 'نام خانوادگی الزامی است.' if (!acceptedTerms.value) errors.terms = 'پذیرش قوانین برای ثبت‌نام لازم است.'
}
if (!validatePhone(normalized)) {
errors.phone = 'شماره موبایل معتبر نیست.'
}
if (!jobCategory.value) {
errors.jobCategory = 'دسته‌بندی شغلی الزامی است.'
}
if (!acceptedTerms.value) {
errors.terms = 'پذیرش قوانین برای ثبت‌نام لازم است.'
}
if (hasFieldErrors(errors)) { if (hasFieldErrors(errors)) {
fieldErrors.value = errors fieldErrors.value = errors
@@ -113,607 +97,232 @@ async function submit() {
</script> </script>
<template> <template>
<div class="page register-page"> <AuthShell back-to="/login">
<div class="register-page__scroll"> <h1 class="auth-title">ثبت‌نام</h1>
<div class="register-page__stage"> <p class="auth-lead">برای ساخت حساب کاربری، اطلاعات زیر را وارد کنید</p>
<header class="register-top">
<p class="register-top__welcome">همراه ما باشید</p>
<button
type="button"
class="register-top__back"
aria-label="بازگشت"
@click="router.push('/login')"
>
<IconChevronLeft :size="20" color="#2A2622" />
</button>
</header>
<h1 class="register-title">ثبت‌نام در نادمی تکس</h1> <form class="auth-form" @submit.prevent="submit">
<p class="register-lead">با چند مرحله ساده، عضوی از خانواده ما شوید.</p> <FormErrorBanner :message="formError" />
<form class="register-form" @submit.prevent="submit"> <div class="auth-row">
<FormErrorBanner :message="formError" /> <label class="auth-field" :class="{ 'is-invalid': fieldErrors.firstName }">
<IconProfile :size="18" color="#98a2b3" />
<label class="reg-field" :class="{ 'is-invalid': Boolean(fieldErrors.firstName) }"> <input
<!-- <span class="reg-field__meta">--> v-model="firstName"
<IconProfile :size="18" color="#8A847C" /> type="text"
<!-- <span>نام</span>--> autocomplete="given-name"
<!-- </span>--> placeholder="نام"
<input @input="clearField('firstName')"
v-model="firstName" />
class="reg-field__input" </label>
type="text" <label class="auth-field" :class="{ 'is-invalid': fieldErrors.lastName }">
autocomplete="given-name" <input
@input="clearField('firstName')" v-model="lastName"
placeholder="نام" type="text"
/> autocomplete="family-name"
</label> placeholder="نام خانوادگی"
<p v-if="fieldErrors.firstName" class="reg-field__error">{{ fieldErrors.firstName }}</p> @input="clearField('lastName')"
/>
<label class="reg-field" :class="{ 'is-invalid': Boolean(fieldErrors.lastName) }"> </label>
<!-- <span class="reg-field__meta">-->
<IconProfile :size="18" color="#8A847C" />
<!-- <span>نام خانوادگی</span>-->
<!-- </span>-->
<input
v-model="lastName"
class="reg-field__input"
type="text"
dir="rtl"
autocomplete="family-name"
@input="clearField('lastName')"
placeholder="نام خانوادگی"
/>
</label>
<p v-if="fieldErrors.lastName" class="reg-field__error">{{ fieldErrors.lastName }}</p>
<label class="reg-field" :class="{ 'is-invalid': Boolean(fieldErrors.phone) }">
<!-- <span class="reg-field__meta">-->
<IconPhone :size="18" color="#8A847C" />
<!-- <span>شماره موبایل</span>-->
<!-- </span>-->
<span class="reg-field__phone" dir="ltr">
<span class="reg-field__locale" aria-hidden="true">
<svg class="iran-flag" viewBox="0 0 21 15" xmlns="http://www.w3.org/2000/svg">
<rect width="21" height="5" fill="#239F40" />
<rect y="5" width="21" height="5" fill="#fff" />
<rect y="10" width="21" height="5" fill="#DA0001" />
<circle cx="10.5" cy="7.5" r="1.35" fill="#DA0001" />
</svg>
<svg class="reg-field__caret" viewBox="0 0 10 6" fill="none">
<path
d="M1 1.2 5 5l4-3.8"
stroke="currentColor"
stroke-width="1.3"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</span>
<input
class="reg-field__input reg-field__input--phone"
:value="displayPhone"
type="tel"
inputmode="numeric"
autocomplete="tel"
dir="rtl"
maxlength="11"
placeholder="شماره موبایل"
@input="onPhoneInput(($event.target as HTMLInputElement).value)"
/>
</span>
</label>
<p v-if="fieldErrors.phone" class="reg-field__error">{{ fieldErrors.phone }}</p>
<div ref="jobRoot" class="job-wrap">
<button
type="button"
class="reg-field job-trigger"
:class="{ 'is-open': jobOpen, 'is-invalid': Boolean(fieldErrors.jobCategory) }"
aria-haspopup="listbox"
:aria-expanded="jobOpen"
@click="jobOpen = !jobOpen"
>
<span class="reg-field__meta">
<BasicIcon icon="vuesax-linear:category" :size="18" color="#8A847C" />
<span :class="{ 'is-placeholder': !jobCategory }">{{ selectedJobLabel }}</span>
</span>
<svg class="job-chevron" viewBox="0 0 12 12" aria-hidden="true">
<path
d="M2.5 4.5 6 8l3.5-3.5"
fill="none"
stroke="currentColor"
stroke-width="1.4"
stroke-linecap="round"
/>
</svg>
</button>
<ul v-if="jobOpen" class="job-menu" role="listbox">
<li v-for="opt in JOB_CATEGORY_OPTIONS" :key="opt.id">
<button
type="button"
role="option"
class="job-option"
:class="{ 'is-active': jobCategory === opt.id }"
:aria-selected="jobCategory === opt.id"
@click="selectJob(opt.id)"
>
{{ opt.label }}
</button>
</li>
</ul>
<p v-if="fieldErrors.jobCategory" class="reg-field__error">{{ fieldErrors.jobCategory }}</p>
</div>
<button class="register-submit" type="submit" :disabled="auth.loading">
<span v-if="auth.loading" class="register-submit__spinner" aria-hidden="true" />
<span class="register-submit__chevron" aria-hidden="true">
<IconChevronLeft :size="18" color="#F4EDE4" />
</span>
<span>دریافت کد تأیید</span>
</button>
<label class="register-terms">
<input v-model="acceptedTerms" class="register-terms__native" type="checkbox" />
<span class="register-terms__box" :class="{ 'is-on': acceptedTerms }" aria-hidden="true">
<svg v-if="acceptedTerms" viewBox="0 0 12 12" fill="none">
<path
d="M2.2 6.2 4.7 8.7 9.8 3.4"
stroke="#fff"
stroke-width="1.6"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</span>
<span>
با ثبت‌نام،
<strong>قوانین و شرایط</strong>
استفاده از سرویس را می‌پذیرم.
</span>
</label>
<p v-if="fieldErrors.terms" class="reg-field__error">{{ fieldErrors.terms }}</p>
</form>
<section class="register-perks" aria-label="مزایا">
<article class="register-perk">
<IconVerified :size="22" color="#6F6B66" />
<strong>اطمینان از اصالت محصولات</strong>
</article>
<article class="register-perk">
<BasicIcon icon="vuesax-linear:truck-time" :size="22" color="#6F6B66" />
<strong>دسترسی سریع به کالیته‌های جدید</strong>
</article>
<article class="register-perk">
<IconDiamond :size="22" color="#6F6B66" />
<strong>تجربه خرید ویژه مشتریان</strong>
</article>
</section>
<div class="register-foot">
<img class="register-foot__bg" :src="cardUrl" alt="" />
<p class="register-foot__copy">همراه حرفه‌ای<br />کسب‌وکار شما</p>
</div>
</div> </div>
</div> <p v-if="fieldErrors.firstName || fieldErrors.lastName" class="auth-error">
</div> {{ fieldErrors.firstName || fieldErrors.lastName }}
</p>
<label class="auth-field" :class="{ 'is-invalid': fieldErrors.phone }">
<IconPhone :size="18" color="#98a2b3" />
<input
:value="displayPhone"
type="tel"
inputmode="numeric"
autocomplete="tel"
maxlength="11"
placeholder="شماره موبایل"
@input="onPhoneInput(($event.target as HTMLInputElement).value)"
/>
</label>
<p v-if="fieldErrors.phone" class="auth-error">{{ fieldErrors.phone }}</p>
<p class="job-label">دسته شغلی شما</p>
<div class="job-grid" :class="{ 'is-invalid': fieldErrors.jobCategory }">
<button
v-for="opt in JOB_CATEGORY_OPTIONS"
:key="opt.id"
type="button"
class="job-card"
:class="{ 'is-on': jobCategory === opt.id }"
@click="selectJob(opt.id)"
>
<img class="job-card__icon" :src="JOB_ICONS[opt.id]" :alt="opt.label" draggable="false" />
<span>{{ opt.label }}</span>
</button>
</div>
<p v-if="fieldErrors.jobCategory" class="auth-error">{{ fieldErrors.jobCategory }}</p>
<button class="auth-submit" type="submit" :disabled="auth.loading">
{{ auth.loading ? 'در حال ارسال…' : 'ثبت‌نام' }}
</button>
<label class="terms">
<input v-model="acceptedTerms" type="checkbox" />
<span>با ثبت‌نام، قوانین و شرایط استفاده را می‌پذیرم.</span>
</label>
<p v-if="fieldErrors.terms" class="auth-error">{{ fieldErrors.terms }}</p>
</form>
</AuthShell>
</template> </template>
<style scoped> <style scoped>
.register-page { .auth-title {
background: #f3eee8; margin: 0 0 8px;
color: #2a2622; text-align: center;
overflow: hidden; font-size: 24px;
font-weight: 800;
color: #1e293b;
} }
.register-page__scroll { .auth-lead {
height: 100%; margin: 0 0 22px;
overflow-x: hidden; text-align: center;
overflow-y: auto; color: #667085;
overscroll-behavior: contain; font-size: 13px;
line-height: 1.7;
} }
.register-page__stage { .auth-form {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 100%; gap: 12px;
width: 100%; width: 100%;
max-width: 390px; min-width: 0;
margin-inline: auto;
padding: calc(10px + env(safe-area-inset-top, 0px)) 20px 0;
box-sizing: border-box; box-sizing: border-box;
} }
.register-top { .auth-row {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 36px;
}
.register-top__welcome {
margin: 0;
color: #6f6b66;
font-size: 0.75rem;
}
.register-top__back {
width: 36px;
height: 36px;
margin-inline-start: auto;
padding: 0;
border: none;
background: transparent;
display: grid; display: grid;
place-items: center; grid-template-columns: 1fr 1fr;
cursor: pointer;
}
.register-title {
margin: 18px 0 0;
text-align: center;
font-size: 1.375rem;
font-weight: 700;
line-height: 1.45;
color: #1c1b19;
}
.register-lead {
margin: 6px 0 0;
text-align: center;
font-size: 0.75rem;
line-height: 1.7;
color: #8a847c;
}
.register-form {
display: flex;
flex-direction: column;
margin-top: 22px;
}
.register-form :deep(.form-error-banner) {
margin-bottom: 12px;
}
.reg-field {
display: flex;
align-items: center;
gap: 10px; gap: 10px;
height: 52px; width: 100%;
margin-top: 10px;
padding: 0 14px;
border: 1px solid #e0d9d0;
border-radius: 14px;
}
.reg-field.is-invalid,
.job-trigger.is-invalid {
border-color: color-mix(in srgb, var(--color-danger) 55%, #e6e1db);
}
.reg-field__meta {
display: inline-flex;
align-items: center;
gap: 6px;
color: #5f5b56;
font-size: 0.8125rem;
font-weight: 500;
white-space: nowrap;
flex-shrink: 0;
}
.reg-field__meta .is-placeholder {
color: #8a847c;
font-weight: 400;
}
.reg-field__input {
flex: 1;
min-width: 0; min-width: 0;
height: 100%; }
border: none;
.auth-field {
display: flex;
align-items: center;
gap: 8px;
min-width: 0;
width: 100%;
box-sizing: border-box;
height: 52px;
padding: 0 14px;
border: 1px solid #eaecf0;
border-radius: 14px;
background: #fff;
overflow: hidden;
}
.auth-field.is-invalid {
border-color: #b42318;
}
.auth-field input {
flex: 1 1 0;
min-width: 0;
width: 100%;
border: 0;
background: transparent; background: transparent;
color: #2a2622;
font: inherit; font: inherit;
font-size: 0.875rem; font-size: 14px;
text-align: right;
color: #1e293b;
outline: none; outline: none;
} }
.reg-field__input::placeholder { .auth-field input::placeholder {
color: #b0aaa3; color: #98a2b3;
} }
.reg-field__phone { .auth-error {
display: flex; margin: -4px 0 0;
flex: 1; color: #b42318;
align-items: center; font-size: 12px;
min-width: 0;
gap: 6px;
} }
.reg-field__locale { .job-label {
display: inline-flex; margin: 4px 0 0;
align-items: center; font-size: 14px;
gap: 4px; font-weight: 700;
color: #9a9590; color: #1e293b;
} }
.iran-flag { .job-grid {
width: 22px; display: grid;
height: 16px; grid-template-columns: repeat(3, 1fr);
border-radius: 2px; gap: 10px;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.06);
} }
.reg-field__caret { .job-card {
width: 10px;
height: 6px;
}
.reg-field__input--phone {
text-align: start;
letter-spacing: 0.04em;
}
.reg-field__error {
margin: 6px 8px 0;
color: var(--color-danger);
font-size: 0.75rem;
}
.job-wrap {
position: relative;
}
.job-trigger {
width: 100%;
justify-content: space-between;
font: inherit;
cursor: pointer;
text-align: start;
}
.job-trigger.is-open {
border-color: var(--color-primary);
}
.job-chevron {
width: 12px;
height: 12px;
color: #9aa3af;
flex-shrink: 0;
}
.job-trigger.is-open .job-chevron {
transform: rotate(180deg);
}
.job-menu {
position: absolute;
inset-inline: 0;
top: calc(100% + 6px);
z-index: 20;
margin: 0;
padding: 6px;
list-style: none;
background: #fbfaf7;
border: 1px solid #e6e1db;
border-radius: 16px;
box-shadow: 0 8px 24px rgba(16, 24, 40, 0.08);
}
.job-option {
display: block;
width: 100%;
padding: 10px 12px;
border: none;
border-radius: 10px;
background: transparent;
color: #2a2622;
font: inherit;
font-size: 0.875rem;
text-align: start;
cursor: pointer;
}
.job-option.is-active {
background: #e8f0ee;
color: var(--color-primary);
font-weight: 600;
}
.register-submit {
position: relative;
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
width: 100%;
height: 52px;
margin-top: 14px;
padding: 0 44px;
border: none;
border-radius: 999px;
background: var(--color-primary);
color: var(--color-surface);
font: inherit;
font-size: 0.9375rem;
font-weight: 600;
cursor: pointer;
transition: background 0.15s ease;
}
.register-submit:not(:disabled):hover,
.register-submit:not(:disabled):focus-visible {
background: var(--color-primary-hover);
}
.register-submit:disabled {
opacity: 0.7;
cursor: not-allowed;
}
.register-submit__chevron {
position: absolute;
inset-inline-end: 16px;
display: grid;
place-items: center;
}
.register-submit__spinner {
position: absolute;
inset-inline-start: 16px;
width: 16px;
height: 16px;
border: 2px solid rgba(255, 255, 255, 0.28);
border-top-color: #fff;
border-radius: 50%;
animation: register-spin 0.6s linear infinite;
}
.register-terms {
position: relative;
display: flex;
align-items: flex-start;
gap: 10px;
margin-top: 14px;
color: #6f6b66;
font-size: 0.75rem;
line-height: 1.7;
cursor: pointer;
}
.register-terms strong {
font-weight: 700;
color: #2a2622;
}
.register-terms__native {
position: absolute;
opacity: 0;
pointer-events: none;
}
.register-terms__box {
width: 22px;
height: 22px;
flex-shrink: 0;
margin-top: 1px;
border: 1.5px solid #cfc9c2;
border-radius: 50%;
display: grid;
place-items: center;
background: #fff;
}
.register-terms__box.is-on {
border-color: var(--color-primary);
background: var(--color-primary);
}
.register-terms__box svg {
width: 12px;
height: 12px;
}
.register-perks {
position: relative;
z-index: 2;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 8px; gap: 8px;
margin: 35px 0 -20px; min-height: 108px;
padding: 16px 10px 14px; padding: 10px 6px;
border-radius: 22px; border: 1.5px solid #eaecf0;
background: #ebe4dc; border-radius: 14px;
box-shadow: 0 10px 28px rgba(40, 32, 24, 0.12), 0 2px 8px rgba(40, 32, 24, 0.06); background: #fff;
color: #667085;
font: inherit;
font-size: 11px;
line-height: 1.45;
text-align: center;
cursor: pointer;
} }
.register-perk { .job-card__icon {
display: block;
width: 40px;
height: 40px;
object-fit: contain;
user-select: none;
}
.job-card.is-on {
border-color: #1e293b;
color: #1e293b;
font-weight: 700;
}
.auth-submit {
margin-top: 4px;
height: 52px;
border: 0;
border-radius: 14px;
background: #1e293b;
color: #fff;
font: inherit;
font-size: 16px;
font-weight: 700;
cursor: pointer;
}
.auth-submit:disabled {
opacity: 0.7;
}
.terms {
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
text-align: center; font-size: 12px;
color: #6f6b66; color: #475569;
} }
.register-perk strong { .terms input {
font-size: 0.6875rem; width: 16px;
font-weight: 500; height: 16px;
line-height: 1.55; accent-color: #1e293b;
} flex-shrink: 0;
.register-foot {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
margin-top: auto;
margin-inline: -20px;
min-height: 260px;
overflow: hidden;
padding: 48px 0 calc(16px + env(safe-area-inset-bottom, 0px));
}
.register-foot__bg {
position: absolute;
inset: 0;
z-index: 0;
width: 100%;
height: 100%;
object-fit: cover;
object-position: 88% 32%;
pointer-events: none;
user-select: none;
mask-image: linear-gradient(to bottom, transparent 0%, #000 42%);
-webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 42%);
}
.register-foot::before {
display: none;
}
.register-foot__copy {
position: absolute;
z-index: 1;
left: 24px;
top: 38%;
margin: 0;
max-width: 10rem;
font-size: 0.75rem;
font-weight: 600;
line-height: 1.55;
text-align: right;
color:#1c1b19;
pointer-events: none;
}
.register-foot__copy::after {
content: "";
display: block;
width: 1.375rem;
height: 1.5px;
margin-top: 8px;
margin-left: auto;
background: #c9a56a;
border-radius: 1px;
}
@keyframes register-spin {
to {
transform: rotate(360deg);
}
}
@media (min-width: 768px) {
.register-page {
padding: 0;
max-width: none;
margin: 0;
height: 100%;
min-height: 0;
overflow: hidden;
}
} }
</style> </style>
+142 -281
View File
@@ -1,342 +1,203 @@
<script setup lang="ts"> <script setup lang="ts">
import { onBeforeUnmount, onMounted, ref } from 'vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import BasicIcon from '@/components/BasicPacks/BasicIcon.vue' import logoUrl from '@/assets/images/nademitex-auth-logo.png'
import IconChevronLeft from '@/components/icons/IconChevronLeft.vue' import slide1 from '@/assets/images/login-fabric.jpg'
import IconQemashMark from '@/components/icons/IconQemashMark.vue' import slide2 from '@/assets/images/fabric-slide-2.jpg'
import fabricUrl from '@/assets/images/login-fabric.jpg' import slide3 from '@/assets/images/fabric-slide-3.jpg'
import slide4 from '@/assets/images/fabric-slide-4.jpg'
const router = useRouter() const router = useRouter()
/* ترتیب DOM از راست به چپ در RTL: ستاره → کامیون → لایه‌ها */ const slides = [
const features = [
{ {
icon: 'star', image: slide1,
title: 'همراه همیشگی کسب‌وکارتان', title: 'پارچه، برای ایده‌های بزرگ',
subtitle: 'با خدمات ویژه مشتریان', lead: 'انتخاب بهتر، تأمین سریع‌تر، همراه حرفه‌ای شما در مسیر تولید پوشاک',
}, },
{ {
icon: 'vuesax-linear:truck-time', image: slide2,
title: 'سفارش عمده', title: 'پارچه، برای ایده‌های بزرگ',
subtitle: 'مستقیم از تولیدکننده', lead: 'از کت و شلوار تا مانتو؛ بافتی که طرح شما را کامل می‌کند',
}, },
{ {
icon: 'vuesax-linear:element-3', image: slide3,
title: 'تنوع بی‌نظیر محصولات', title: 'پارچه، برای ایده‌های بزرگ',
subtitle: 'از کلاسیک تا مدرن', lead: 'کتان، پنبه و فاستونی؛ موجودی عمده برای مزون و تولیدکننده',
}, },
] as const {
image: slide4,
title: 'پارچه، برای ایده‌های بزرگ',
lead: 'کالیته را ببینید، رنگ را لمس کنید، بعد سفارش دهید',
},
]
function goLogin() { const index = ref(0)
const redirect = typeof router.currentRoute.value.query.redirect === 'string' let timer = 0
? router.currentRoute.value.query.redirect let startX = 0
: undefined
router.push({ function go(next: number) {
name: 'login', index.value = (next + slides.length) % slides.length
query: redirect ? { redirect } : undefined,
})
} }
function onTouchStart(event: TouchEvent) {
startX = event.changedTouches[0]?.clientX ?? 0
}
function onTouchEnd(event: TouchEvent) {
const dx = (event.changedTouches[0]?.clientX ?? 0) - startX
if (Math.abs(dx) < 40) return
go(index.value + (dx < 0 ? 1 : -1))
}
onMounted(() => {
timer = window.setInterval(() => go(index.value + 1), 4500)
})
onBeforeUnmount(() => window.clearInterval(timer))
</script> </script>
<template> <template>
<div class="page welcome-page"> <div class="welcome" @touchstart.passive="onTouchStart" @touchend.passive="onTouchEnd">
<img class="welcome-page__bg" :src="fabricUrl" alt="" /> <img
<div class="welcome-page__veil" aria-hidden="true" /> v-for="(slide, i) in slides"
:key="slide.lead"
class="welcome__photo"
:class="{ 'is-on': i === index }"
:src="slide.image"
alt=""
/>
<div class="welcome__shade" />
<div class="welcome-page__scroll"> <header class="welcome__brand">
<div class="welcome-page__stage"> <img class="welcome__logo" :src="logoUrl" alt="Nademi Tex" draggable="false" />
<header class="welcome-top"> </header>
<button type="button" class="welcome-skip" @click="goLogin">رد شدن</button>
</header>
<div class="welcome-brand"> <div class="welcome__copy">
<IconQemashMark :size="88" /> <h1>{{ slides[index]?.title }}</h1>
<h1 class="welcome-brand__fa">نادمی تکس</h1> <p>{{ slides[index]?.lead }}</p>
<p class="welcome-brand__tag">انتخاب حرفه‌ای، شروع یک همکاری ماندگار</p> <div class="welcome__dots" role="tablist" aria-label="اسلایدها">
<span class="welcome-brand__rule" aria-hidden="true" /> <button
</div> v-for="(slide, i) in slides"
:key="slide.lead"
<ul class="welcome-features"> type="button"
<li v-for="item in features" :key="item.title" class="welcome-feature"> :class="{ 'is-on': i === index }"
<span class="welcome-feature__icon" aria-hidden="true"> :aria-label="`اسلاید ${i + 1}`"
<svg @click="go(i)"
v-if="item.icon === 'star'" />
class="welcome-feature__star"
viewBox="0 0 24 24"
fill="none"
>
<path
d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
stroke="#fff"
stroke-width="1.5"
stroke-linejoin="round"
/>
</svg>
<BasicIcon v-else :icon="item.icon" :size="22" color="#ffffff" />
</span>
<strong>{{ item.title }}</strong>
<span>{{ item.subtitle }}</span>
</li>
</ul>
<div class="welcome-spacer" aria-hidden="true" />
<div class="welcome-dots" aria-hidden="true">
<i class="is-on" />
<i />
<i />
<i />
</div>
<button type="button" class="welcome-cta" @click="goLogin">
<span>ورود / ثبت‌نام</span>
<span class="welcome-cta__chevron" aria-hidden="true">
<IconChevronLeft :size="18" color="#ffffff" />
</span>
</button>
</div> </div>
</div> </div>
<button type="button" class="welcome__cta" @click="router.push('/login')">ورود / ثبت‌نام</button>
</div> </div>
</template> </template>
<style scoped> <style scoped>
.welcome-page { .welcome {
position: relative; position: relative;
isolation: isolate;
height: 100%; height: 100%;
min-height: 100%; min-height: 100%;
color: #f4ede4;
background: #1a1612;
overflow: hidden; overflow: hidden;
color: #fff;
background: #0f172a;
} }
.welcome-page__bg { .welcome__photo {
position: absolute; position: absolute;
inset: 0; inset: 0;
z-index: 0;
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
object-position: center; opacity: 0;
pointer-events: none; transition: opacity 0.5s ease;
}
.welcome__photo.is-on {
opacity: 1;
}
.welcome__shade {
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(15, 23, 42, 0.15) 20%, rgba(15, 23, 42, 0.82) 100%);
}
.welcome__brand,
.welcome__copy,
.welcome__cta {
position: relative;
z-index: 1;
}
.welcome__brand {
padding-top: 14vh;
text-align: center;
}
.welcome__logo {
display: block;
width: auto;
height: 110px;
margin: 0 auto;
object-fit: contain;
filter: brightness(0) invert(1);
user-select: none; user-select: none;
} }
.welcome-page__veil { .welcome__copy {
position: absolute; position: absolute;
inset: 0; right: 24px;
z-index: 1; left: 24px;
background: bottom: 108px;
linear-gradient(180deg, rgba(12, 10, 8, 0.42) 0%, rgba(12, 10, 8, 0.28) 42%, rgba(12, 10, 8, 0.72) 100%);
pointer-events: none;
} }
.welcome-page__scroll { .welcome__copy h1 {
position: relative; margin: 0 0 10px;
z-index: 2; font-size: 32px;
height: 100%;
overflow-x: hidden;
overflow-y: auto;
overscroll-behavior: contain;
}
.welcome-page__stage {
display: flex;
flex-direction: column;
min-height: 100%;
width: 100%;
max-width: 390px;
margin-inline: auto;
padding: calc(12px + env(safe-area-inset-top, 0px)) 20px
calc(20px + env(safe-area-inset-bottom, 0px));
box-sizing: border-box;
}
.welcome-top {
display: flex;
justify-content: flex-end;
min-height: 40px;
}
.welcome-skip {
height: 34px;
padding: 0 16px;
border: none;
border-radius: 999px;
background: rgba(12, 10, 8, 0.45);
color: #f4ede4;
font: inherit;
font-size: 0.8125rem;
font-weight: 500;
cursor: pointer;
backdrop-filter: blur(6px);
}
.welcome-brand {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
margin-top: 28px;
}
.welcome-brand__fa {
margin: 14px 0 0;
font-size: 1.875rem;
font-weight: 700; font-weight: 700;
line-height: 1.3; line-height: 1.35;
color: #ead7c0;
} }
.welcome-brand__tag { .welcome__copy p {
margin: 10px 0 0; margin: 0;
max-width: 16rem; font-size: 14px;
font-size: 0.8125rem; line-height: 1.8;
font-weight: 400; opacity: 0.92;
line-height: 1.7;
color: rgba(244, 237, 228, 0.92);
} }
.welcome-brand__rule { .welcome__dots {
display: block;
width: 36px;
height: 1.5px;
margin-top: 16px;
border-radius: 1px;
background: var(--color-primary);
}
.welcome-features {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
margin: 36px 0 0;
padding: 0;
list-style: none;
}
.welcome-feature {
display: flex; display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
text-align: center;
}
.welcome-feature__icon {
display: grid;
place-items: center;
width: 48px;
height: 48px;
border-radius: 999px;
background: rgba(244, 237, 228, 0.22);
color: #fff;
backdrop-filter: blur(4px);
}
.welcome-feature__star {
width: 22px;
height: 22px;
}
.welcome-feature strong {
font-size: 0.6875rem;
font-weight: 700;
line-height: 1.45;
color: #f4ede4;
}
.welcome-feature span {
font-size: 0.5625rem;
font-weight: 400;
line-height: 1.5;
color: rgba(244, 237, 228, 0.72);
}
.welcome-spacer {
flex: 1 1 auto;
min-height: 28px;
}
.welcome-dots {
display: flex;
justify-content: center;
gap: 6px; gap: 6px;
margin-bottom: 16px; margin-top: 18px;
} }
.welcome-dots i { .welcome__dots button {
width: 6px; width: 7px;
height: 6px; height: 7px;
padding: 0;
border: 0;
border-radius: 999px; border-radius: 999px;
background: rgba(244, 237, 228, 0.28); background: rgba(255, 255, 255, 0.45);
} }
.welcome-dots i.is-on { .welcome__dots button.is-on {
background: #f4ede4; width: 18px;
background: #fff;
} }
.welcome-cta { .welcome__cta {
position: relative; position: absolute;
display: flex; right: 24px;
align-items: center; left: 24px;
justify-content: center; bottom: 28px;
width: 100%;
height: 52px; height: 52px;
padding: 0 44px; border: 0;
border: 1px solid rgba(244, 237, 228, 0.28); border-radius: 14px;
border-radius: 999px; background: #1e293b;
background:
linear-gradient(
135deg,
color-mix(in srgb, var(--color-primary) 65%, transparent) 0%,
color-mix(in srgb, var(--color-primary) 42%, transparent) 48%,
color-mix(in srgb, var(--color-accent-navy) 48%, transparent) 100%
);
color: #fff; color: #fff;
font: inherit; font: inherit;
font-size: 0.9375rem; font-size: 16px;
font-weight: 600; font-weight: 700;
cursor: pointer; cursor: pointer;
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12);
}
.welcome-cta__chevron {
position: absolute;
inset-inline-end: 16px;
display: grid;
place-items: center;
}
@media (min-width: 768px) {
.welcome-page {
padding: 0;
max-width: none;
margin: 0;
height: 100%;
min-height: 0;
overflow: hidden;
}
.welcome-page__stage {
max-width: 390px;
padding-block: 16px 24px;
}
}
@media (max-width: 359px) {
.welcome-page__stage {
padding-inline: 14px;
}
.welcome-brand__fa {
font-size: 1.625rem;
}
.welcome-feature__icon {
width: 42px;
height: 42px;
}
} }
</style> </style>