diff --git a/dist/assets/ActiveSwitchCell-BzzYl8MV.js b/dist/assets/ActiveSwitchCell-BzzYl8MV.js
new file mode 100644
index 0000000..c325d82
--- /dev/null
+++ b/dist/assets/ActiveSwitchCell-BzzYl8MV.js
@@ -0,0 +1 @@
+import{L as e,Z as t,ct as n,rt as r,vt as i,yt as a,z as o}from"./index-BHqDDh7X.js";import{t as s}from"./BaseSwitch-DYYNQNXf.js";function c(e=480){return new Promise(t=>{window.setTimeout(t,e)})}function l(e){let t=i(null),n=i(null),r=o();async function a(i,a){if(t.value)return a;let o=!a;if(!o&&e.confirmOff&&!await e.confirmOff())return a;t.value=i,n.value=null;let s=a;try{return await e.onPersist(o),r.success(e.successMessage?.(o)??(o?`وضعیت فعال شد.`:`وضعیت غیرفعال شد.`)),o}catch{return n.value=i,r.error(e.errorMessage??`بهروزرسانی وضعیت انجام نشد.`),s}finally{t.value=null}}function s(e){return t.value===e}function c(e){return n.value===e}return{toggle:a,isLoading:s,hasError:c}}var u=r({__name:`ActiveSwitchCell`,props:{id:{},modelValue:{type:Boolean},entityName:{},entityType:{},persist:{type:Function}},emits:[`update:modelValue`],setup(r,{emit:i}){let o=r,u=i,{toggle:d,isLoading:f,hasError:p}=l({onPersist:async e=>{o.persist?await o.persist(o.id,e):await c()},successMessage:e=>e?`${o.entityType??`مورد`} «${o.entityName}» فعال شد.`:`${o.entityType??`مورد`} «${o.entityName}» غیرفعال شد.`});async function m(t){if(t===o.modelValue)return;let n=o.entityType??`مورد`;if(!await e({title:t?`فعالسازی ${n}`:`غیرفعالسازی ${n}`,message:t?`آیا از فعال کردن «${o.entityName}» مطمئن هستید؟`:`آیا از غیرفعال کردن «${o.entityName}» مطمئن هستید؟`,tone:t?`primary`:`danger`,confirmLabel:t?`فعال کردن`:`غیرفعال کردن`,cancelLabel:`انصراف`}))return;let r=await d(o.id,o.modelValue);u(`update:modelValue`,r)}return(e,i)=>(n(),t(s,{"model-value":r.modelValue,loading:a(f)(r.id),error:a(p)(r.id),"onUpdate:modelValue":m},null,8,[`model-value`,`loading`,`error`]))}});export{u as t};
\ No newline at end of file
diff --git a/dist/assets/ActiveSwitchCell-vuwwhrED.js b/dist/assets/ActiveSwitchCell-vuwwhrED.js
deleted file mode 100644
index 9c0fdfd..0000000
--- a/dist/assets/ActiveSwitchCell-vuwwhrED.js
+++ /dev/null
@@ -1 +0,0 @@
-import{N as e,a as t,m as n,nt as r,ut as i,x as a}from"./http-WTIyGIuL.js";import{I as o}from"./index-BOMJTziC.js";import{t as s}from"./BaseSwitch-gjOaAbzm.js";function c(e=480){return new Promise(t=>{window.setTimeout(t,e)})}function l(e){let n=r(null),i=r(null),a=t();async function o(t,r){if(n.value)return r;let o=!r;if(!o&&e.confirmOff&&!await e.confirmOff())return r;n.value=t,i.value=null;let s=r;try{return await e.onPersist(o),a.success(e.successMessage?.(o)??(o?`وضعیت فعال شد.`:`وضعیت غیرفعال شد.`)),o}catch{return i.value=t,a.error(e.errorMessage??`بهروزرسانی وضعیت انجام نشد.`),s}finally{n.value=null}}function s(e){return n.value===e}function c(e){return i.value===e}return{toggle:o,isLoading:s,hasError:c}}var u=a({__name:`ActiveSwitchCell`,props:{id:{},modelValue:{type:Boolean},entityName:{},entityType:{},persist:{type:Function}},emits:[`update:modelValue`],setup(t,{emit:r}){let a=t,u=r,{toggle:d,isLoading:f,hasError:p}=l({onPersist:async e=>{a.persist?await a.persist(a.id,e):await c()},successMessage:e=>e?`${a.entityType??`مورد`} «${a.entityName}» فعال شد.`:`${a.entityType??`مورد`} «${a.entityName}» غیرفعال شد.`});async function m(e){if(e===a.modelValue)return;let t=a.entityType??`مورد`;if(!await o({title:e?`فعالسازی ${t}`:`غیرفعالسازی ${t}`,message:e?`آیا از فعال کردن «${a.entityName}» مطمئن هستید؟`:`آیا از غیرفعال کردن «${a.entityName}» مطمئن هستید؟`,tone:e?`primary`:`danger`,confirmLabel:e?`فعال کردن`:`غیرفعال کردن`,cancelLabel:`انصراف`}))return;let n=await d(a.id,a.modelValue);u(`update:modelValue`,n)}return(r,a)=>(e(),n(s,{"model-value":t.modelValue,loading:i(f)(t.id),error:i(p)(t.id),"onUpdate:modelValue":m},null,8,[`model-value`,`loading`,`error`]))}});export{u as t};
\ No newline at end of file
diff --git a/dist/assets/AdminCurrencyInput-B-jo-Bw8.js b/dist/assets/AdminCurrencyInput-B-jo-Bw8.js
new file mode 100644
index 0000000..347b28b
--- /dev/null
+++ b/dist/assets/AdminCurrencyInput-B-jo-Bw8.js
@@ -0,0 +1 @@
+import{$ as e,B as t,Y as n,bt as r,ct as i,o as a,rt as o,t as s}from"./index-BHqDDh7X.js";var c=[`id`,`value`,`placeholder`,`disabled`],l=t(o({__name:`AdminCurrencyInput`,props:{modelValue:{default:null},placeholder:{default:``},disabled:{type:Boolean,default:!1},id:{},inputClass:{default:`admin-input`},allowEmpty:{type:Boolean,default:!0}},emits:[`update:modelValue`],setup(t,{emit:o}){let l=t,u=o,d=n(()=>l.modelValue==null||!Number.isFinite(l.modelValue)?``:a(l.modelValue));function f(e){let t=e.target,n=s(t.value);if(!n){u(`update:modelValue`,l.allowEmpty?null:0),t.value=``;return}let r=Number(n);u(`update:modelValue`,r),t.value=a(r)}return(n,a)=>(i(),e(`input`,{id:t.id,type:`text`,inputmode:`numeric`,dir:`ltr`,class:r([`admin-currency-input`,t.inputClass]),value:d.value,placeholder:t.placeholder,disabled:t.disabled,onInput:f},null,42,c))}}),[[`__scopeId`,`data-v-56435fc8`]]);export{l as t};
\ No newline at end of file
diff --git a/dist/assets/AdminCurrencyInput-L6rRk6Fe.js b/dist/assets/AdminCurrencyInput-L6rRk6Fe.js
deleted file mode 100644
index bad5724..0000000
--- a/dist/assets/AdminCurrencyInput-L6rRk6Fe.js
+++ /dev/null
@@ -1 +0,0 @@
-import{At as e,N as t,f as n,g as r,o as i,x as a}from"./http-WTIyGIuL.js";import{o,t as s}from"./index-BOMJTziC.js";var c=[`id`,`value`,`placeholder`,`disabled`],l=i(a({__name:`AdminCurrencyInput`,props:{modelValue:{default:null},placeholder:{default:``},disabled:{type:Boolean,default:!1},id:{},inputClass:{default:`admin-input`},allowEmpty:{type:Boolean,default:!0}},emits:[`update:modelValue`],setup(i,{emit:a}){let l=i,u=a,d=n(()=>l.modelValue==null||!Number.isFinite(l.modelValue)?``:o(l.modelValue));function f(e){let t=e.target,n=s(t.value);if(!n){u(`update:modelValue`,l.allowEmpty?null:0),t.value=``;return}let r=Number(n);u(`update:modelValue`,r),t.value=o(r)}return(n,a)=>(t(),r(`input`,{id:i.id,type:`text`,inputmode:`numeric`,dir:`ltr`,class:e([`admin-currency-input`,i.inputClass]),value:d.value,placeholder:i.placeholder,disabled:i.disabled,onInput:f},null,42,c))}}),[[`__scopeId`,`data-v-56435fc8`]]);export{l as t};
\ No newline at end of file
diff --git a/dist/assets/AdminImagePicker-DcFp1rIR.js b/dist/assets/AdminImagePicker-DcFp1rIR.js
deleted file mode 100644
index 0efdac1..0000000
--- a/dist/assets/AdminImagePicker-DcFp1rIR.js
+++ /dev/null
@@ -1 +0,0 @@
-import{At as e,Mt as t,N as n,Nt as r,g as i,h as a,nt as o,o as s,p as c,x as l}from"./http-WTIyGIuL.js";import{t as u}from"./catalogImage-DbusXpop.js";var d={class:`image-picker`},f={key:0,class:`image-picker__label`},p={class:`image-picker__row`},m={class:`image-picker__actions`},h=[`disabled`],g=[`disabled`],_={key:1,class:`image-picker__error`},v=s(l({__name:`AdminImagePicker`,props:{modelValue:{},label:{}},emits:[`update:modelValue`],setup(s,{emit:l}){let v=s,y=l,b=o(null),x=o(!1),S=o(``);function C(){b.value?.click()}async function w(e){let t=e.target,n=t.files?.[0];if(t.value=``,n){x.value=!0,S.value=``;try{y(`update:modelValue`,await u(n))}catch(e){S.value=e instanceof Error?e.message:`بارگذاری تصویر ناموفق بود.`}finally{x.value=!1}}}function T(){y(`update:modelValue`,null)}return(o,l)=>(n(),i(`div`,d,[s.label?(n(),i(`p`,f,r(s.label),1)):a(``,!0),c(`div`,p,[c(`div`,{class:e([`image-picker__preview`,{"image-picker__preview--empty":!v.modelValue}]),style:t(v.modelValue?{backgroundImage:`url(${v.modelValue})`}:void 0)},null,6),c(`div`,m,[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,disabled:x.value,onClick:C},r(v.modelValue?`تغییر تصویر`:`افزودن تصویر`),9,h),v.modelValue?(n(),i(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,disabled:x.value,onClick:T},` حذف `,8,g)):a(``,!0),S.value?(n(),i(`p`,_,r(S.value),1)):a(``,!0)])]),c(`input`,{ref_key:`inputRef`,ref:b,type:`file`,accept:`image/*`,class:`image-picker__file`,onChange:w},null,544)]))}}),[[`__scopeId`,`data-v-55584001`]]);export{v as t};
\ No newline at end of file
diff --git a/dist/assets/AdminImagePicker-DzV79efN.js b/dist/assets/AdminImagePicker-DzV79efN.js
new file mode 100644
index 0000000..e7729eb
--- /dev/null
+++ b/dist/assets/AdminImagePicker-DzV79efN.js
@@ -0,0 +1 @@
+import{$ as e,B as t,Q as n,St as r,X as i,bt as a,ct as o,rt as s,vt as c,xt as l}from"./index-BHqDDh7X.js";var u=960,d=.82;async function f(e){if(!e.type.startsWith(`image/`))throw Error(`فقط فایل تصویری مجاز است.`);if(e.size>8388608)throw Error(`حجم تصویر نباید بیشتر از ۸ مگابایت باشد.`);return m(await p(e))}function p(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result??``)),r.onerror=()=>n(Error(`خواندن تصویر ناموفق بود.`)),r.readAsDataURL(e)})}function m(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{let e=Math.min(1,u/Math.max(r.width,r.height)),i=Math.max(1,Math.round(r.width*e)),a=Math.max(1,Math.round(r.height*e)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);if(!s){n(Error(`پردازش تصویر ناموفق بود.`));return}s.drawImage(r,0,0,i,a),t(o.toDataURL(`image/jpeg`,d))},r.onerror=()=>n(Error(`تصویر نامعتبر است.`)),r.src=e})}var h={class:`image-picker`},g={key:0,class:`image-picker__label`},_={class:`image-picker__row`},v={class:`image-picker__actions`},y=[`disabled`],b=[`disabled`],x={key:1,class:`image-picker__error`},S=t(s({__name:`AdminImagePicker`,props:{modelValue:{},label:{}},emits:[`update:modelValue`],setup(t,{emit:s}){let u=t,d=s,p=c(null),m=c(!1),S=c(``);function C(){p.value?.click()}async function w(e){let t=e.target,n=t.files?.[0];if(t.value=``,n){m.value=!0,S.value=``;try{d(`update:modelValue`,await f(n))}catch(e){S.value=e instanceof Error?e.message:`بارگذاری تصویر ناموفق بود.`}finally{m.value=!1}}}function T(){d(`update:modelValue`,null)}return(s,c)=>(o(),e(`div`,h,[t.label?(o(),e(`p`,g,r(t.label),1)):n(``,!0),i(`div`,_,[i(`div`,{class:a([`image-picker__preview`,{"image-picker__preview--empty":!u.modelValue}]),style:l(u.modelValue?{backgroundImage:`url(${u.modelValue})`}:void 0)},null,6),i(`div`,v,[i(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,disabled:m.value,onClick:C},r(u.modelValue?`تغییر تصویر`:`افزودن تصویر`),9,y),u.modelValue?(o(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,disabled:m.value,onClick:T},` حذف `,8,b)):n(``,!0),S.value?(o(),e(`p`,x,r(S.value),1)):n(``,!0)])]),i(`input`,{ref_key:`inputRef`,ref:p,type:`file`,accept:`image/*`,class:`image-picker__file`,onChange:w},null,544)]))}}),[[`__scopeId`,`data-v-55584001`]]);export{f as n,S as t};
\ No newline at end of file
diff --git a/dist/assets/AdminPageSkeleton-D-u-8bBz.js b/dist/assets/AdminPageSkeleton-D-u-8bBz.js
deleted file mode 100644
index aecbda0..0000000
--- a/dist/assets/AdminPageSkeleton-D-u-8bBz.js
+++ /dev/null
@@ -1 +0,0 @@
-import{I as e,N as t,c as n,g as r,o as i,p as a,v as o,x as s}from"./http-WTIyGIuL.js";var c={class:`admin-page-skeleton`,role:`status`,"aria-live":`polite`,"aria-busy":`true`,"aria-label":`در حال بارگذاری`},l={class:`admin-card admin-page-skeleton__table`},u={key:1,class:`admin-card admin-page-skeleton__form`},d={key:2,class:`admin-card admin-page-skeleton__detail`},f={key:3,class:`admin-page-skeleton__cards`},p=i(s({__name:`AdminPageSkeleton`,props:{variant:{default:`cards`},rows:{default:5}},setup(i){return(s,p)=>(t(),r(`div`,c,[i.variant===`table`?(t(),r(n,{key:0},[p[1]||=a(`div`,{class:`admin-page-skeleton__toolbar`},[a(`span`,{class:`admin-skeleton admin-page-skeleton__search`}),a(`span`,{class:`admin-skeleton admin-page-skeleton__btn`})],-1),a(`div`,l,[(t(!0),r(n,null,e(i.rows,e=>(t(),r(`div`,{key:e,class:`admin-page-skeleton__tr`},[...p[0]||=[o(``,5)]]))),128))])],64)):i.variant===`form`?(t(),r(`div`,u,[(t(!0),r(n,null,e(i.rows,e=>(t(),r(`div`,{key:e,class:`admin-page-skeleton__field`},[...p[2]||=[a(`span`,{class:`admin-skeleton`,style:{width:`28%`,height:`10px`}},null,-1),a(`span`,{class:`admin-skeleton`,style:{width:`100%`,height:`40px`,"border-radius":`10px`}},null,-1)]]))),128))])):i.variant===`detail`?(t(),r(`div`,d,[...p[3]||=[o(``,5)]])):(t(),r(`div`,f,[(t(!0),r(n,null,e(i.rows,e=>(t(),r(`div`,{key:e,class:`admin-card admin-page-skeleton__card`},[...p[4]||=[a(`span`,{class:`admin-skeleton`,style:{width:`45%`,height:`14px`}},null,-1),a(`span`,{class:`admin-skeleton`,style:{width:`70%`,height:`11px`}},null,-1),a(`span`,{class:`admin-skeleton`,style:{width:`35%`,height:`11px`}},null,-1)]]))),128))]))]))}}),[[`__scopeId`,`data-v-8283cd1d`]]);export{p as t};
\ No newline at end of file
diff --git a/dist/assets/AdminPageSkeleton-E50Kwv4j.js b/dist/assets/AdminPageSkeleton-E50Kwv4j.js
new file mode 100644
index 0000000..7e1d31e
--- /dev/null
+++ b/dist/assets/AdminPageSkeleton-E50Kwv4j.js
@@ -0,0 +1 @@
+import{$ as e,B as t,X as n,ct as r,et as i,q as a,rt as o,ut as s}from"./index-BHqDDh7X.js";var c={class:`admin-page-skeleton`,role:`status`,"aria-live":`polite`,"aria-busy":`true`,"aria-label":`در حال بارگذاری`},l={class:`admin-card admin-page-skeleton__table`},u={key:1,class:`admin-card admin-page-skeleton__form`},d={key:2,class:`admin-card admin-page-skeleton__detail`},f={key:3,class:`admin-page-skeleton__cards`},p=t(o({__name:`AdminPageSkeleton`,props:{variant:{default:`cards`},rows:{default:5}},setup(t){return(o,p)=>(r(),e(`div`,c,[t.variant===`table`?(r(),e(a,{key:0},[p[1]||=n(`div`,{class:`admin-page-skeleton__toolbar`},[n(`span`,{class:`admin-skeleton admin-page-skeleton__search`}),n(`span`,{class:`admin-skeleton admin-page-skeleton__btn`})],-1),n(`div`,l,[(r(!0),e(a,null,s(t.rows,t=>(r(),e(`div`,{key:t,class:`admin-page-skeleton__tr`},[...p[0]||=[i(``,5)]]))),128))])],64)):t.variant===`form`?(r(),e(`div`,u,[(r(!0),e(a,null,s(t.rows,t=>(r(),e(`div`,{key:t,class:`admin-page-skeleton__field`},[...p[2]||=[n(`span`,{class:`admin-skeleton`,style:{width:`28%`,height:`10px`}},null,-1),n(`span`,{class:`admin-skeleton`,style:{width:`100%`,height:`40px`,"border-radius":`10px`}},null,-1)]]))),128))])):t.variant===`detail`?(r(),e(`div`,d,[...p[3]||=[i(``,5)]])):(r(),e(`div`,f,[(r(!0),e(a,null,s(t.rows,t=>(r(),e(`div`,{key:t,class:`admin-card admin-page-skeleton__card`},[...p[4]||=[n(`span`,{class:`admin-skeleton`,style:{width:`45%`,height:`14px`}},null,-1),n(`span`,{class:`admin-skeleton`,style:{width:`70%`,height:`11px`}},null,-1),n(`span`,{class:`admin-skeleton`,style:{width:`35%`,height:`11px`}},null,-1)]]))),128))]))]))}}),[[`__scopeId`,`data-v-8283cd1d`]]);export{p as t};
\ No newline at end of file
diff --git a/dist/assets/AdminSelect-BVy_0-3W.js b/dist/assets/AdminSelect-BVy_0-3W.js
deleted file mode 100644
index 70f20d3..0000000
--- a/dist/assets/AdminSelect-BVy_0-3W.js
+++ /dev/null
@@ -1 +0,0 @@
-import{At as e,I as t,K as n,Mt as r,N as i,Nt as a,O as o,U as s,b as c,c as l,f as u,g as d,h as f,j as p,m,nt as h,o as g,p as _,u as v,x as y}from"./http-WTIyGIuL.js";import{H as b,N as x,O as S,U as C,V as w}from"./index-BOMJTziC.js";var T=[`id`],E=[`aria-label`,`aria-expanded`],D={class:`admin-select__value`},O={class:`admin-select__chevron`,"aria-hidden":`true`},k=[`aria-label`],A={key:0,class:`admin-select__search`,role:`presentation`},j=[`placeholder`],M={key:1,class:`admin-select__empty`,role:`presentation`},N=[`aria-selected`,`onClick`],P=g(y({__name:`AdminSelect`,props:{modelValue:{},options:{},placeholder:{default:`انتخاب کنید`},ariaLabel:{default:`انتخاب`},block:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},searchPlaceholder:{default:`جستجو…`},id:{default:void 0}},emits:[`update:modelValue`],setup(g,{emit:y}){let P=g,F=y,I=h(!1),L=h(``),R=h(null),z=h(null),B=h(null),V=h({});S(R,()=>{I.value=!1,L.value=``},{ignore:[z]});let H=u(()=>P.options.find(e=>e.value===P.modelValue)?.label??P.placeholder),U=u(()=>{let e=L.value.trim().toLowerCase();return e?P.options.filter(t=>t.label.toLowerCase().includes(e)):P.options});function W(){let e=R.value;if(!e)return;let t=e.getBoundingClientRect(),n=Math.min(320,window.innerHeight*.5),r=window.innerHeight-t.bottom-6,i=t.top-6,a=rr,o=Math.max(120,Math.min(n,a?i:r));V.value={position:`fixed`,left:`${Math.max(8,Math.min(t.left,window.innerWidth-Math.max(t.width,220)-8))}px`,width:`${Math.max(t.width,220)}px`,zIndex:`1100`,maxHeight:`${o}px`,...a?{top:`auto`,bottom:`${window.innerHeight-t.top+6}px`}:{top:`${t.bottom+6}px`,bottom:`auto`}}}function G(e){e?(window.addEventListener(`resize`,W),window.addEventListener(`scroll`,W,!0)):(window.removeEventListener(`resize`,W),window.removeEventListener(`scroll`,W,!0))}async function K(){I.value=!I.value,I.value&&(await o(),W(),P.searchable&&(L.value=``,await o(),B.value?.focus()))}function q(e){F(`update:modelValue`,e),I.value=!1,L.value=``}return s(I,e=>{G(e),e&&o(()=>W())}),p(()=>{G(!1)}),(o,s)=>(i(),d(`div`,{id:g.id,ref_key:`rootRef`,ref:R,class:e([`admin-select`,{"admin-select--open":I.value,"admin-select--block":g.block}])},[_(`button`,{type:`button`,class:`admin-select__trigger`,"aria-label":g.ariaLabel,"aria-expanded":I.value,"aria-haspopup":`listbox`,onClick:K},[_(`span`,D,a(H.value),1),_(`span`,O,[c(x,{name:`chevron-down`,size:16})])],8,E),(i(),m(v,{to:`body`},[I.value?(i(),d(`ul`,{key:0,ref_key:`menuRef`,ref:z,class:`admin-select__menu`,role:`listbox`,"aria-label":g.ariaLabel,style:r(V.value)},[g.searchable?(i(),d(`li`,A,[n(_(`input`,{ref_key:`searchInputRef`,ref:B,"onUpdate:modelValue":s[0]||=e=>L.value=e,type:`search`,class:`admin-select__search-input`,placeholder:g.searchPlaceholder,onClick:s[1]||=C(()=>{},[`stop`]),onKeydown:s[2]||=b(C(e=>I.value=!1,[`stop`]),[`esc`])},null,40,j),[[w,L.value]])])):f(``,!0),U.value.length?f(``,!0):(i(),d(`li`,M,` موردی یافت نشد `)),(i(!0),d(l,null,t(U.value,t=>(i(),d(`li`,{key:t.value,role:`presentation`},[_(`button`,{type:`button`,class:e([`admin-select__option`,{"admin-select__option--active":t.value===g.modelValue}]),role:`option`,"aria-selected":t.value===g.modelValue,onClick:e=>q(t.value)},[_(`span`,null,a(t.label),1),t.value===g.modelValue?(i(),m(x,{key:0,name:`check`,size:16,class:`admin-select__check`})):f(``,!0)],10,N)]))),128))],12,k)):f(``,!0)]))],10,T))}}),[[`__scopeId`,`data-v-7f43c8c3`]]);export{P as t};
\ No newline at end of file
diff --git a/dist/assets/AdminSelect-BjB6PHdr.js b/dist/assets/AdminSelect-BjB6PHdr.js
new file mode 100644
index 0000000..1499ecb
--- /dev/null
+++ b/dist/assets/AdminSelect-BjB6PHdr.js
@@ -0,0 +1 @@
+import{$ as e,B as t,G as n,J as r,K as i,O as a,P as o,Q as s,St as c,W as l,X as u,Y as d,Z as f,at as p,bt as m,ct as h,ht as g,nt as _,pt as v,q as y,rt as b,st as x,ut as S,vt as C,xt as w}from"./index-BHqDDh7X.js";var T=[`id`],E=[`aria-label`,`aria-expanded`],D={class:`admin-select__value`},O={class:`admin-select__chevron`,"aria-hidden":`true`},k=[`aria-label`],A={key:0,class:`admin-select__search`,role:`presentation`},j=[`placeholder`],M={key:1,class:`admin-select__empty`,role:`presentation`},N=[`aria-selected`,`onClick`],P=t(b({__name:`AdminSelect`,props:{modelValue:{},options:{},placeholder:{default:`انتخاب کنید`},ariaLabel:{default:`انتخاب`},block:{type:Boolean,default:!1},searchable:{type:Boolean,default:!1},searchPlaceholder:{default:`جستجو…`},id:{default:void 0}},emits:[`update:modelValue`],setup(t,{emit:b}){let P=t,F=b,I=C(!1),L=C(``),R=C(null),z=C(null),B=C(null),V=C({});a(R,()=>{I.value=!1,L.value=``},{ignore:[z]});let H=d(()=>P.options.find(e=>e.value===P.modelValue)?.label??P.placeholder),U=d(()=>{let e=L.value.trim().toLowerCase();return e?P.options.filter(t=>t.label.toLowerCase().includes(e)):P.options});function W(){let e=R.value;if(!e)return;let t=e.getBoundingClientRect(),n=Math.min(320,window.innerHeight*.5),r=window.innerHeight-t.bottom-6,i=t.top-6,a=rr,o=Math.max(120,Math.min(n,a?i:r));V.value={position:`fixed`,left:`${Math.max(8,Math.min(t.left,window.innerWidth-Math.max(t.width,220)-8))}px`,width:`${Math.max(t.width,220)}px`,zIndex:`1100`,maxHeight:`${o}px`,...a?{top:`auto`,bottom:`${window.innerHeight-t.top+6}px`}:{top:`${t.bottom+6}px`,bottom:`auto`}}}function G(e){e?(window.addEventListener(`resize`,W),window.addEventListener(`scroll`,W,!0)):(window.removeEventListener(`resize`,W),window.removeEventListener(`scroll`,W,!0))}async function K(){I.value=!I.value,I.value&&(await p(),W(),P.searchable&&(L.value=``,await p(),B.value?.focus()))}function q(e){F(`update:modelValue`,e),I.value=!1,L.value=``}return v(I,e=>{G(e),e&&p(()=>W())}),x(()=>{G(!1)}),(a,d)=>(h(),e(`div`,{id:t.id,ref_key:`rootRef`,ref:R,class:m([`admin-select`,{"admin-select--open":I.value,"admin-select--block":t.block}])},[u(`button`,{type:`button`,class:`admin-select__trigger`,"aria-label":t.ariaLabel,"aria-expanded":I.value,"aria-haspopup":`listbox`,onClick:K},[u(`span`,D,c(H.value),1),u(`span`,O,[_(o,{name:`chevron-down`,size:16})])],8,E),(h(),f(r,{to:`body`},[I.value?(h(),e(`ul`,{key:0,ref_key:`menuRef`,ref:z,class:`admin-select__menu`,role:`listbox`,"aria-label":t.ariaLabel,style:w(V.value)},[t.searchable?(h(),e(`li`,A,[g(u(`input`,{ref_key:`searchInputRef`,ref:B,"onUpdate:modelValue":d[0]||=e=>L.value=e,type:`search`,class:`admin-select__search-input`,placeholder:t.searchPlaceholder,onClick:d[1]||=i(()=>{},[`stop`]),onKeydown:d[2]||=n(i(e=>I.value=!1,[`stop`]),[`esc`])},null,40,j),[[l,L.value]])])):s(``,!0),U.value.length?s(``,!0):(h(),e(`li`,M,` موردی یافت نشد `)),(h(!0),e(y,null,S(U.value,n=>(h(),e(`li`,{key:n.value,role:`presentation`},[u(`button`,{type:`button`,class:m([`admin-select__option`,{"admin-select__option--active":n.value===t.modelValue}]),role:`option`,"aria-selected":n.value===t.modelValue,onClick:e=>q(n.value)},[u(`span`,null,c(n.label),1),n.value===t.modelValue?(h(),f(o,{key:0,name:`check`,size:16,class:`admin-select__check`})):s(``,!0)],10,N)]))),128))],12,k)):s(``,!0)]))],10,T))}}),[[`__scopeId`,`data-v-7f43c8c3`]]);export{P as t};
\ No newline at end of file
diff --git a/dist/assets/BankAccountsView-BXBWNQN8.js b/dist/assets/BankAccountsView-BXBWNQN8.js
deleted file mode 100644
index 49916fb..0000000
--- a/dist/assets/BankAccountsView-BXBWNQN8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,G as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,et as ee,f as l,g as u,h as d,m as f,nt as p,o as te,p as m,t as h,x as g,y as _}from"./http-WTIyGIuL.js";import{F as ne,L as re,P as v,U as ie,V as y,c as b,h as ae}from"./index-BOMJTziC.js";import{t as oe}from"./BaseSwitch-gjOaAbzm.js";import{t as se}from"./BaseEmptyState-Wc1O8rBP.js";import{t as x}from"./ActiveSwitchCell-vuwwhrED.js";var ce={class:`accounts-page`},le={class:`admin-page-header`},ue={class:`admin-page-header__title`},de={key:1,class:`accounts-page__table admin-card desktop-only`},fe={class:`admin-table-wrap`},pe={class:`admin-table`},me={class:`status`},S={key:2,class:`compact-only admin-card-list`},C={class:`admin-card-item__header`},w={class:`admin-card-item__title`},T={class:`admin-card-item__meta`},E={key:0},D={key:1,dir:`ltr`},O={key:0,class:`admin-form__error`,role:`alert`},k={class:`admin-form__row`},A={class:`admin-form__field`},j={class:`admin-form__field`},M={class:`admin-form__field`},N={class:`admin-form__row`},P={class:`admin-form__field`},F={class:`admin-form__field`},I={class:`admin-form__field`},L=[`disabled`],R=te(g({__name:`BankAccountsView`,setup(te){let g=v(),R=ne(),z=o(),B=p(null),V=p([]),H=p(!1),U=p(``),W=p(!1),G=l(()=>String(g.params.companyId)),K=l(()=>V.value),q=()=>({bankName:``,accountNumber:``,accountHolder:B.value?.name??``,cardNumber:``,iban:``,isActive:!0}),J=ee(q()),Y=l(()=>J.bankName.trim().length>0&&J.accountNumber.trim().length>0&&J.accountHolder.trim().length>0);async function he(){try{let[e,t]=await Promise.all([ae.get(G.value),b.listByCompany(G.value)]);B.value=e,V.value=t}catch(e){z.error(e instanceof h?e.message:`بارگذاری حسابها انجام نشد.`)}}e(()=>{he()});function X(){Object.assign(J,q()),U.value=``,H.value=!0}function Z(){H.value=!1,U.value=``}async function Q(){if(!Y.value){U.value=`فیلدهای ستارهدار الزامی هستند.`;return}W.value=!0;try{let e=await b.create(G.value,{bankName:J.bankName.trim(),accountNumber:J.accountNumber.trim(),accountHolder:J.accountHolder.trim(),cardNumber:J.cardNumber.trim()||`-`,iban:J.iban.trim()||`-`,isActive:J.isActive,displayOrder:V.value.length+1});V.value.push(e),z.success(`حساب بانکی جدید ثبت شد.`),Z()}catch(e){z.error(e instanceof h?e.message:`ثبت حساب انجام نشد.`)}finally{W.value=!1}}async function $(e,t){await b.setActive(e,t)}function ge(){R.push(`/companies`)}return(e,o)=>(i(),u(`div`,ce,[m(`div`,le,[m(`div`,null,[m(`h1`,ue,` مدیریت حسابهای بانکی — `+a(B.value?.name??`…`),1)]),m(`div`,{class:`admin-action-group`},[m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:X},` افزودن حساب `),m(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:ge},` بازگشت `)])]),K.value.length?(i(),u(`div`,de,[m(`div`,fe,[m(`table`,pe,[o[6]||=m(`thead`,null,[m(`tr`,null,[m(`th`,null,`بانک`),m(`th`,null,`حساب بانکی`),m(`th`,null,`نام صاحب`),m(`th`,null,`شماره کارت`),m(`th`,null,`شماره شبا`),m(`th`,{class:`status`},`وضعیت`)])],-1),m(`tbody`,null,[(i(!0),u(c,null,n(K.value,e=>(i(),u(`tr`,{key:e.id},[m(`td`,null,a(e.bankName),1),m(`td`,null,a(e.accountNumber),1),m(`td`,null,a(e.accountHolder),1),m(`td`,null,a(e.cardNumber||`—`),1),m(`td`,null,a(e.iban||`—`),1),m(`td`,me,[s(x,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.bankName,"entity-type":`حساب بانکی`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])])]))),128))])])])])):(i(),f(se,{key:0,class:`admin-card`,icon:`wallet`,title:`حساب بانکی ثبت نشده`,description:`برای این شرکت هنوز حساب بانکی ثبت نشده است.`},{default:t(()=>[m(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:X},` افزودن حساب `)]),_:1})),K.value.length?(i(),u(`div`,S,[(i(!0),u(c,null,n(K.value,e=>(i(),u(`article`,{key:e.id,class:`admin-card-item`},[m(`div`,C,[m(`p`,w,`بانک `+a(e.bankName),1),s(x,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.bankName,"entity-type":`حساب بانکی`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),m(`div`,T,[m(`span`,null,a(e.accountHolder),1),m(`span`,null,`حساب: `+a(e.accountNumber),1),e.cardNumber?(i(),u(`span`,E,`کارت: `+a(e.cardNumber),1)):d(``,!0),e.iban?(i(),u(`span`,D,a(e.iban),1)):d(``,!0)])]))),128))])):d(``,!0),s(re,{open:H.value,title:`افزودن حساب بانکی`,size:`lg`,onClose:Z},{footer:t(()=>[m(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},` انصراف `),m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Y.value||W.value,onClick:Q},` ثبت حساب `,8,L)]),default:t(()=>[m(`form`,{class:`admin-form`,onSubmit:ie(Q,[`prevent`])},[U.value?(i(),u(`p`,O,a(U.value),1)):d(``,!0),m(`div`,k,[m(`div`,A,[o[7]||=m(`label`,{for:`bank-name`},[_(`نام بانک `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`bank-name`,"onUpdate:modelValue":o[0]||=e=>J.bankName=e,type:`text`,class:`admin-input`,placeholder:`مثال: ملت`},null,512),[[y,J.bankName]])]),m(`div`,j,[o[8]||=m(`label`,{for:`account-number`},[_(` شماره حساب `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`account-number`,"onUpdate:modelValue":o[1]||=e=>J.accountNumber=e,type:`text`,class:`admin-input`,placeholder:`1234567890`,inputmode:`numeric`,dir:`ltr`},null,512),[[y,J.accountNumber]])])]),m(`div`,M,[o[9]||=m(`label`,{for:`account-holder`},[_(` نام صاحب حساب `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`account-holder`,"onUpdate:modelValue":o[2]||=e=>J.accountHolder=e,type:`text`,class:`admin-input`},null,512),[[y,J.accountHolder]])]),m(`div`,N,[m(`div`,P,[o[10]||=m(`label`,{for:`card-number`},`شماره کارت`,-1),r(m(`input`,{id:`card-number`,"onUpdate:modelValue":o[3]||=e=>J.cardNumber=e,type:`text`,class:`admin-input`,placeholder:`6104 3378 0077 1234`,inputmode:`numeric`,dir:`ltr`},null,512),[[y,J.cardNumber]])]),m(`div`,F,[o[11]||=m(`label`,{for:`iban`},`شماره شبا`,-1),r(m(`input`,{id:`iban`,"onUpdate:modelValue":o[4]||=e=>J.iban=e,type:`text`,class:`admin-input`,placeholder:`IR...`,dir:`ltr`},null,512),[[y,J.iban]])])]),m(`div`,I,[s(oe,{modelValue:J.isActive,"onUpdate:modelValue":o[5]||=e=>J.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-0011826b`]]);export{R as default};
\ No newline at end of file
diff --git a/dist/assets/BankAccountsView-DDlWVuy0.js b/dist/assets/BankAccountsView-DDlWVuy0.js
new file mode 100644
index 0000000..71d6926
--- /dev/null
+++ b/dist/assets/BankAccountsView-DDlWVuy0.js
@@ -0,0 +1 @@
+import{$ as e,B as t,F as n,I as ee,K as te,N as r,Q as i,R as a,St as o,W as s,X as c,Y as l,Z as ne,_t as re,c as u,ct as d,h as ie,ht as f,mt as p,nt as m,ot as ae,q as h,rt as g,tt as _,ut as v,vt as y,z as oe}from"./index-BHqDDh7X.js";import{t as se}from"./BaseSwitch-DYYNQNXf.js";import{t as ce}from"./BaseEmptyState-vNIhbGdV.js";import{t as b}from"./ActiveSwitchCell-BzzYl8MV.js";var le={class:`accounts-page`},ue={class:`admin-page-header`},de={class:`admin-page-header__title`},fe={key:1,class:`accounts-page__table admin-card desktop-only`},pe={class:`admin-table-wrap`},me={class:`admin-table`},x={class:`status`},S={key:2,class:`compact-only admin-card-list`},C={class:`admin-card-item__header`},w={class:`admin-card-item__title`},T={class:`admin-card-item__meta`},E={key:0},D={key:1,dir:`ltr`},O={key:0,class:`admin-form__error`,role:`alert`},k={class:`admin-form__row`},A={class:`admin-form__field`},j={class:`admin-form__field`},M={class:`admin-form__field`},N={class:`admin-form__row`},P={class:`admin-form__field`},F={class:`admin-form__field`},I={class:`admin-form__field`},L=[`disabled`],R=t(g({__name:`BankAccountsView`,setup(t){let g=n(),R=ee(),z=oe(),B=y(null),V=y([]),H=y(!1),U=y(``),W=y(!1),G=l(()=>String(g.params.companyId)),K=l(()=>V.value),q=()=>({bankName:``,accountNumber:``,accountHolder:B.value?.name??``,cardNumber:``,iban:``,isActive:!0}),J=re(q()),Y=l(()=>J.bankName.trim().length>0&&J.accountNumber.trim().length>0&&J.accountHolder.trim().length>0);async function he(){try{let[e,t]=await Promise.all([ie.get(G.value),u.listByCompany(G.value)]);B.value=e,V.value=t}catch(e){z.error(e instanceof r?e.message:`بارگذاری حسابها انجام نشد.`)}}ae(()=>{he()});function X(){Object.assign(J,q()),U.value=``,H.value=!0}function Z(){H.value=!1,U.value=``}async function Q(){if(!Y.value){U.value=`فیلدهای ستارهدار الزامی هستند.`;return}W.value=!0;try{let e=await u.create(G.value,{bankName:J.bankName.trim(),accountNumber:J.accountNumber.trim(),accountHolder:J.accountHolder.trim(),cardNumber:J.cardNumber.trim()||`-`,iban:J.iban.trim()||`-`,isActive:J.isActive,displayOrder:V.value.length+1});V.value.push(e),z.success(`حساب بانکی جدید ثبت شد.`),Z()}catch(e){z.error(e instanceof r?e.message:`ثبت حساب انجام نشد.`)}finally{W.value=!1}}async function $(e,t){await u.setActive(e,t)}function ge(){R.push(`/companies`)}return(t,n)=>(d(),e(`div`,le,[c(`div`,ue,[c(`div`,null,[c(`h1`,de,` مدیریت حسابهای بانکی — `+o(B.value?.name??`…`),1)]),c(`div`,{class:`admin-action-group`},[c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:X},` افزودن حساب `),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:ge},` بازگشت `)])]),K.value.length?(d(),e(`div`,fe,[c(`div`,pe,[c(`table`,me,[n[6]||=c(`thead`,null,[c(`tr`,null,[c(`th`,null,`بانک`),c(`th`,null,`حساب بانکی`),c(`th`,null,`نام صاحب`),c(`th`,null,`شماره کارت`),c(`th`,null,`شماره شبا`),c(`th`,{class:`status`},`وضعیت`)])],-1),c(`tbody`,null,[(d(!0),e(h,null,v(K.value,t=>(d(),e(`tr`,{key:t.id},[c(`td`,null,o(t.bankName),1),c(`td`,null,o(t.accountNumber),1),c(`td`,null,o(t.accountHolder),1),c(`td`,null,o(t.cardNumber||`—`),1),c(`td`,null,o(t.iban||`—`),1),c(`td`,x,[m(b,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.bankName,"entity-type":`حساب بانکی`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])])]))),128))])])])])):(d(),ne(ce,{key:0,class:`admin-card`,icon:`wallet`,title:`حساب بانکی ثبت نشده`,description:`برای این شرکت هنوز حساب بانکی ثبت نشده است.`},{default:p(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:X},` افزودن حساب `)]),_:1})),K.value.length?(d(),e(`div`,S,[(d(!0),e(h,null,v(K.value,t=>(d(),e(`article`,{key:t.id,class:`admin-card-item`},[c(`div`,C,[c(`p`,w,`بانک `+o(t.bankName),1),m(b,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.bankName,"entity-type":`حساب بانکی`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`div`,T,[c(`span`,null,o(t.accountHolder),1),c(`span`,null,`حساب: `+o(t.accountNumber),1),t.cardNumber?(d(),e(`span`,E,`کارت: `+o(t.cardNumber),1)):i(``,!0),t.iban?(d(),e(`span`,D,o(t.iban),1)):i(``,!0)])]))),128))])):i(``,!0),m(a,{open:H.value,title:`افزودن حساب بانکی`,size:`lg`,onClose:Z},{footer:p(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},` انصراف `),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Y.value||W.value,onClick:Q},` ثبت حساب `,8,L)]),default:p(()=>[c(`form`,{class:`admin-form`,onSubmit:te(Q,[`prevent`])},[U.value?(d(),e(`p`,O,o(U.value),1)):i(``,!0),c(`div`,k,[c(`div`,A,[n[7]||=c(`label`,{for:`bank-name`},[_(`نام بانک `),c(`span`,{class:`admin-form__required`},`*`)],-1),f(c(`input`,{id:`bank-name`,"onUpdate:modelValue":n[0]||=e=>J.bankName=e,type:`text`,class:`admin-input`,placeholder:`مثال: ملت`},null,512),[[s,J.bankName]])]),c(`div`,j,[n[8]||=c(`label`,{for:`account-number`},[_(` شماره حساب `),c(`span`,{class:`admin-form__required`},`*`)],-1),f(c(`input`,{id:`account-number`,"onUpdate:modelValue":n[1]||=e=>J.accountNumber=e,type:`text`,class:`admin-input`,placeholder:`1234567890`,inputmode:`numeric`,dir:`ltr`},null,512),[[s,J.accountNumber]])])]),c(`div`,M,[n[9]||=c(`label`,{for:`account-holder`},[_(` نام صاحب حساب `),c(`span`,{class:`admin-form__required`},`*`)],-1),f(c(`input`,{id:`account-holder`,"onUpdate:modelValue":n[2]||=e=>J.accountHolder=e,type:`text`,class:`admin-input`},null,512),[[s,J.accountHolder]])]),c(`div`,N,[c(`div`,P,[n[10]||=c(`label`,{for:`card-number`},`شماره کارت`,-1),f(c(`input`,{id:`card-number`,"onUpdate:modelValue":n[3]||=e=>J.cardNumber=e,type:`text`,class:`admin-input`,placeholder:`6104 3378 0077 1234`,inputmode:`numeric`,dir:`ltr`},null,512),[[s,J.cardNumber]])]),c(`div`,F,[n[11]||=c(`label`,{for:`iban`},`شماره شبا`,-1),f(c(`input`,{id:`iban`,"onUpdate:modelValue":n[4]||=e=>J.iban=e,type:`text`,class:`admin-input`,placeholder:`IR...`,dir:`ltr`},null,512),[[s,J.iban]])])]),c(`div`,I,[m(se,{modelValue:J.isActive,"onUpdate:modelValue":n[5]||=e=>J.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-0011826b`]]);export{R as default};
\ No newline at end of file
diff --git a/dist/assets/BannersView-CIS468U_.js b/dist/assets/BannersView-CIS468U_.js
new file mode 100644
index 0000000..c114b6b
--- /dev/null
+++ b/dist/assets/BannersView-CIS468U_.js
@@ -0,0 +1 @@
+import{$ as e,B as t,N as n,Q as r,R as i,St as a,W as o,X as s,Y as c,Z as l,_t as u,bt as d,ct as f,ht as p,l as m,mt as h,nt as g,ot as _,q as v,rt as y,tt as b,ut as ee,vt as x,xt as S,z as C}from"./index-BHqDDh7X.js";import{t as te}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as w}from"./BaseSwitch-DYYNQNXf.js";import{t as T}from"./BaseEmptyState-vNIhbGdV.js";import{t as E}from"./AdminImagePicker-DzV79efN.js";import{t as D}from"./AdminSelect-BjB6PHdr.js";var O={class:`banners-page`},k={key:2,class:`admin-card`},A={class:`admin-table`},j={key:0,class:`banner-sub`},M={class:`actions`},N=[`onClick`],P=[`onClick`],F={class:`field`},I={class:`field`},L={class:`field__head`},R={class:`field`},z={class:`field__head`},ne={class:`field`},B={class:`field__head`},V={class:`field`},H={class:`field`},U=[`disabled`],W=t(y({__name:`BannersView`,setup(t){let y=[{value:`home_hero`,label:`خانه — بنر اصلی`},{value:`products_hero`,label:`لیست محصولات`},{value:`categories_hero`,label:`دستهبندیها`}],W=x([]),G=x(!0),K=x(!1),q=x(!1),J=x(null),Y=C(),X=u({slot:`home_hero`,title:``,subtitle:``,ctaLabel:``,ctaLink:`/categories`,imageUrl:null,displayOrder:0,isActive:!0,showTitle:!0,showSubtitle:!0,showCta:!0}),Z=c(()=>J.value?`ویرایش بنر`:`افزودن بنر`);function re(e){return y.find(t=>t.value===e)?.label??e}async function Q(){G.value=!0;try{W.value=await m.list()}catch(e){Y.error(e instanceof n?e.message:`بارگذاری بنرها ناموفق بود.`)}finally{G.value=!1}}function $(){J.value=null,Object.assign(X,{slot:`home_hero`,title:``,subtitle:``,ctaLabel:`مشاهده کالکشن`,ctaLink:`/categories`,imageUrl:null,displayOrder:W.value.length,isActive:!0,showTitle:!0,showSubtitle:!0,showCta:!0}),q.value=!0}function ie(e){J.value=e.id,Object.assign(X,{slot:e.slot,title:e.title,subtitle:e.subtitle,ctaLabel:e.ctaLabel,ctaLink:e.ctaLink||`/categories`,imageUrl:e.imageUrl||null,displayOrder:e.displayOrder,isActive:e.isActive,showTitle:e.showTitle!==!1,showSubtitle:e.showSubtitle!==!1,showCta:e.showCta!==!1}),q.value=!0}async function ae(){if(X.title.trim()){K.value=!0;try{let e={slot:X.slot,title:X.title.trim(),subtitle:X.subtitle.trim()||null,ctaLabel:X.ctaLabel.trim()||null,ctaLink:X.ctaLink.trim()||null,imageUrl:X.imageUrl,displayOrder:X.displayOrder,isActive:X.isActive,showTitle:X.showTitle,showSubtitle:X.showSubtitle,showCta:X.showCta};J.value?await m.update(J.value,e):await m.create(e),q.value=!1,Y.success(`بنر ذخیره شد.`),await Q()}catch(e){Y.error(e instanceof n?e.message:`ذخیره بنر ناموفق بود.`)}finally{K.value=!1}}}async function oe(e){if(window.confirm(`بنر «${e.title}» حذف شود؟`))try{await m.remove(e.id),Y.success(`بنر حذف شد.`),await Q()}catch(e){Y.error(e instanceof n?e.message:`حذف بنر ناموفق بود.`)}}return _(()=>{Q()}),(t,n)=>(f(),e(`div`,O,[s(`div`,{class:`admin-page-header`},[n[13]||=s(`div`,null,[s(`h1`,{class:`admin-page-header__title`},`بنرها`),s(`p`,{class:`admin-page-header__sub`},`بنر بخشهای مختلف اپ کاربر را از اینجا مدیریت کنید.`)],-1),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:$},`افزودن بنر`)]),G.value?(f(),l(te,{key:0,variant:`table`})):W.value.length?(f(),e(`div`,k,[s(`table`,A,[n[14]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`تصویر`),s(`th`,null,`عنوان`),s(`th`,null,`بخش`),s(`th`,null,`دکمه`),s(`th`,null,`فعال`),s(`th`,{class:`actions`},`عملیات`)])],-1),s(`tbody`,null,[(f(!0),e(v,null,ee(W.value,t=>(f(),e(`tr`,{key:t.id},[s(`td`,null,[s(`span`,{class:d([`banner-thumb`,{"banner-thumb--empty":!t.imageUrl}]),style:S(t.imageUrl?{backgroundImage:`url(${t.imageUrl})`}:void 0)},null,6)]),s(`td`,null,[s(`strong`,null,a(t.title),1),t.subtitle?(f(),e(`p`,j,a(t.subtitle),1)):r(``,!0)]),s(`td`,null,a(re(t.slot)),1),s(`td`,null,a(t.ctaLabel||`—`),1),s(`td`,null,a(t.isActive?`بله`:`خیر`),1),s(`td`,M,[s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>ie(t)},` ویرایش `,8,N),s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>oe(t)},` حذف `,8,P)])]))),128))])])])):(f(),l(T,{key:1,title:`بنری ثبت نشده`,description:`اولین بنر خانه را اضافه کنید.`},{default:h(()=>[s(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:$},` افزودن بنر `)]),_:1})),g(i,{open:q.value,title:Z.value,onClose:n[12]||=e=>q.value=!1},{footer:h(()=>[s(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:n[11]||=e=>q.value=!1},`انصراف`),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!X.title.trim()||K.value,onClick:ae},a(K.value?`در حال ذخیره...`:`ذخیره`),9,U)]),default:h(()=>[s(`label`,F,[n[15]||=b(` بخش نمایش `,-1),g(D,{modelValue:X.slot,"onUpdate:modelValue":n[0]||=e=>X.slot=e,options:y},null,8,[`modelValue`])]),s(`div`,I,[s(`span`,L,[n[16]||=b(` عنوان `,-1),g(w,{modelValue:X.showTitle,"onUpdate:modelValue":n[1]||=e=>X.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),p(s(`input`,{"onUpdate:modelValue":n[2]||=e=>X.title=e,class:`admin-input`},null,512),[[o,X.title]])]),s(`div`,R,[s(`span`,z,[n[17]||=b(` زیرعنوان `,-1),g(w,{modelValue:X.showSubtitle,"onUpdate:modelValue":n[3]||=e=>X.showSubtitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),p(s(`input`,{"onUpdate:modelValue":n[4]||=e=>X.subtitle=e,class:`admin-input`},null,512),[[o,X.subtitle]])]),s(`div`,ne,[s(`span`,B,[n[18]||=b(` متن دکمه `,-1),g(w,{modelValue:X.showCta,"onUpdate:modelValue":n[5]||=e=>X.showCta=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`])]),p(s(`input`,{"onUpdate:modelValue":n[6]||=e=>X.ctaLabel=e,class:`admin-input`},null,512),[[o,X.ctaLabel]])]),s(`label`,V,[n[19]||=b(` لینک دکمه `,-1),p(s(`input`,{"onUpdate:modelValue":n[7]||=e=>X.ctaLink=e,class:`admin-input`,dir:`ltr`,placeholder:`/categories`},null,512),[[o,X.ctaLink]])]),s(`label`,H,[n[20]||=b(`ترتیب نمایش`,-1),p(s(`input`,{"onUpdate:modelValue":n[8]||=e=>X.displayOrder=e,type:`number`,min:`0`,class:`admin-input`},null,512),[[o,X.displayOrder,void 0,{number:!0}]])]),g(E,{modelValue:X.imageUrl,"onUpdate:modelValue":n[9]||=e=>X.imageUrl=e,label:`تصویر بنر`},null,8,[`modelValue`]),g(w,{modelValue:X.isActive,"onUpdate:modelValue":n[10]||=e=>X.isActive=e,label:`فعال`},null,8,[`modelValue`])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-1ca3d686`]]);export{W as default};
\ No newline at end of file
diff --git a/dist/assets/BannersView-DlJtlA4V.css b/dist/assets/BannersView-DlJtlA4V.css
deleted file mode 100644
index ea82925..0000000
--- a/dist/assets/BannersView-DlJtlA4V.css
+++ /dev/null
@@ -1 +0,0 @@
-.admin-page-header__sub[data-v-b734755d]{color:var(--color-text-muted);margin:4px 0 0;font-size:.85rem}.banner-thumb[data-v-b734755d]{background:#e8eceb 50%/cover no-repeat;border-radius:8px;width:72px;height:44px;display:block}.banner-thumb--empty[data-v-b734755d]{background:#eef1f0}.banner-sub[data-v-b734755d]{color:var(--color-text-muted);margin:2px 0 0;font-size:.8rem}.field[data-v-b734755d]{flex-direction:column;gap:6px;margin-bottom:12px;font-size:.875rem;display:flex}
diff --git a/dist/assets/BannersView-TRKkvRxh.css b/dist/assets/BannersView-TRKkvRxh.css
new file mode 100644
index 0000000..7881c8e
--- /dev/null
+++ b/dist/assets/BannersView-TRKkvRxh.css
@@ -0,0 +1 @@
+.admin-page-header__sub[data-v-1ca3d686]{color:var(--color-text-muted);margin:4px 0 0;font-size:.85rem}.banner-thumb[data-v-1ca3d686]{background:#e8eceb 50%/cover no-repeat;border-radius:8px;width:72px;height:44px;display:block}.banner-thumb--empty[data-v-1ca3d686]{background:#eef1f0}.banner-sub[data-v-1ca3d686]{color:var(--color-text-muted);margin:2px 0 0;font-size:.8rem}.field[data-v-1ca3d686]{flex-direction:column;gap:6px;margin-bottom:12px;font-size:.875rem;display:flex}.field__head[data-v-1ca3d686]{justify-content:space-between;align-items:center;gap:12px;display:flex}
diff --git a/dist/assets/BannersView-UgInvL0M.js b/dist/assets/BannersView-UgInvL0M.js
deleted file mode 100644
index 11c1dee..0000000
--- a/dist/assets/BannersView-UgInvL0M.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,At as t,G as n,I as r,K as i,Mt as a,N as o,Nt as s,a as c,b as l,c as u,et as d,f,g as p,h as m,m as h,nt as g,o as _,p as v,t as y,x as b,y as x}from"./http-WTIyGIuL.js";import{L as S,V as C,l as w}from"./index-BOMJTziC.js";import{t as T}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as E}from"./BaseSwitch-gjOaAbzm.js";import{t as ee}from"./BaseEmptyState-Wc1O8rBP.js";import{t as D}from"./AdminImagePicker-DcFp1rIR.js";import{t as O}from"./AdminSelect-BVy_0-3W.js";var k={class:`banners-page`},A={key:2,class:`admin-card`},j={class:`admin-table`},M={key:0,class:`banner-sub`},N={class:`actions`},P=[`onClick`],F=[`onClick`],I={class:`field`},L={class:`field`},R={class:`field`},z={class:`field`},B={class:`field`},V={class:`field`},H=[`disabled`],U=_(b({__name:`BannersView`,setup(_){let b=[{value:`home_hero`,label:`خانه — بنر اصلی`},{value:`products_hero`,label:`لیست محصولات`},{value:`categories_hero`,label:`دستهبندیها`}],U=g([]),W=g(!0),G=g(!1),K=g(!1),q=g(null),J=c(),Y=d({slot:`home_hero`,title:``,subtitle:``,ctaLabel:``,ctaLink:`/categories`,imageUrl:null,displayOrder:0,isActive:!0}),X=f(()=>q.value?`ویرایش بنر`:`افزودن بنر`);function Z(e){return b.find(t=>t.value===e)?.label??e}async function Q(){W.value=!0;try{U.value=await w.list()}catch(e){J.error(e instanceof y?e.message:`بارگذاری بنرها ناموفق بود.`)}finally{W.value=!1}}function $(){q.value=null,Object.assign(Y,{slot:`home_hero`,title:``,subtitle:``,ctaLabel:`مشاهده کالکشن`,ctaLink:`/categories`,imageUrl:null,displayOrder:U.value.length,isActive:!0}),K.value=!0}function te(e){q.value=e.id,Object.assign(Y,{slot:e.slot,title:e.title,subtitle:e.subtitle,ctaLabel:e.ctaLabel,ctaLink:e.ctaLink||`/categories`,imageUrl:e.imageUrl||null,displayOrder:e.displayOrder,isActive:e.isActive}),K.value=!0}async function ne(){if(Y.title.trim()){G.value=!0;try{let e={slot:Y.slot,title:Y.title.trim(),subtitle:Y.subtitle.trim()||null,ctaLabel:Y.ctaLabel.trim()||null,ctaLink:Y.ctaLink.trim()||null,imageUrl:Y.imageUrl,displayOrder:Y.displayOrder,isActive:Y.isActive};q.value?await w.update(q.value,e):await w.create(e),K.value=!1,J.success(`بنر ذخیره شد.`),await Q()}catch(e){J.error(e instanceof y?e.message:`ذخیره بنر ناموفق بود.`)}finally{G.value=!1}}}async function re(e){if(window.confirm(`بنر «${e.title}» حذف شود؟`))try{await w.remove(e.id),J.success(`بنر حذف شد.`),await Q()}catch(e){J.error(e instanceof y?e.message:`حذف بنر ناموفق بود.`)}}return e(()=>{Q()}),(e,c)=>(o(),p(`div`,k,[v(`div`,{class:`admin-page-header`},[c[10]||=v(`div`,null,[v(`h1`,{class:`admin-page-header__title`},`بنرها`),v(`p`,{class:`admin-page-header__sub`},`بنر بخشهای مختلف اپ کاربر را از اینجا مدیریت کنید.`)],-1),v(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:$},`افزودن بنر`)]),W.value?(o(),h(T,{key:0,variant:`table`})):U.value.length?(o(),p(`div`,A,[v(`table`,j,[c[11]||=v(`thead`,null,[v(`tr`,null,[v(`th`,null,`تصویر`),v(`th`,null,`عنوان`),v(`th`,null,`بخش`),v(`th`,null,`دکمه`),v(`th`,null,`فعال`),v(`th`,{class:`actions`},`عملیات`)])],-1),v(`tbody`,null,[(o(!0),p(u,null,r(U.value,e=>(o(),p(`tr`,{key:e.id},[v(`td`,null,[v(`span`,{class:t([`banner-thumb`,{"banner-thumb--empty":!e.imageUrl}]),style:a(e.imageUrl?{backgroundImage:`url(${e.imageUrl})`}:void 0)},null,6)]),v(`td`,null,[v(`strong`,null,s(e.title),1),e.subtitle?(o(),p(`p`,M,s(e.subtitle),1)):m(``,!0)]),v(`td`,null,s(Z(e.slot)),1),v(`td`,null,s(e.ctaLabel||`—`),1),v(`td`,null,s(e.isActive?`بله`:`خیر`),1),v(`td`,N,[v(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>te(e)},` ویرایش `,8,P),v(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>re(e)},` حذف `,8,F)])]))),128))])])])):(o(),h(ee,{key:1,title:`بنری ثبت نشده`,description:`اولین بنر خانه را اضافه کنید.`},{default:n(()=>[v(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:$},` افزودن بنر `)]),_:1})),l(S,{open:K.value,title:X.value,onClose:c[9]||=e=>K.value=!1},{footer:n(()=>[v(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:c[8]||=e=>K.value=!1},`انصراف`),v(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Y.title.trim()||G.value,onClick:ne},s(G.value?`در حال ذخیره...`:`ذخیره`),9,H)]),default:n(()=>[v(`label`,I,[c[12]||=x(` بخش نمایش `,-1),l(O,{modelValue:Y.slot,"onUpdate:modelValue":c[0]||=e=>Y.slot=e,options:b},null,8,[`modelValue`])]),v(`label`,L,[c[13]||=x(`عنوان`,-1),i(v(`input`,{"onUpdate:modelValue":c[1]||=e=>Y.title=e,class:`admin-input`},null,512),[[C,Y.title]])]),v(`label`,R,[c[14]||=x(`زیرعنوان`,-1),i(v(`input`,{"onUpdate:modelValue":c[2]||=e=>Y.subtitle=e,class:`admin-input`},null,512),[[C,Y.subtitle]])]),v(`label`,z,[c[15]||=x(`متن دکمه`,-1),i(v(`input`,{"onUpdate:modelValue":c[3]||=e=>Y.ctaLabel=e,class:`admin-input`},null,512),[[C,Y.ctaLabel]])]),v(`label`,B,[c[16]||=x(` لینک دکمه `,-1),i(v(`input`,{"onUpdate:modelValue":c[4]||=e=>Y.ctaLink=e,class:`admin-input`,dir:`ltr`,placeholder:`/categories`},null,512),[[C,Y.ctaLink]])]),v(`label`,V,[c[17]||=x(`ترتیب نمایش`,-1),i(v(`input`,{"onUpdate:modelValue":c[5]||=e=>Y.displayOrder=e,type:`number`,min:`0`,class:`admin-input`},null,512),[[C,Y.displayOrder,void 0,{number:!0}]])]),l(D,{modelValue:Y.imageUrl,"onUpdate:modelValue":c[6]||=e=>Y.imageUrl=e,label:`تصویر بنر`},null,8,[`modelValue`]),l(E,{modelValue:Y.isActive,"onUpdate:modelValue":c[7]||=e=>Y.isActive=e,label:`فعال`},null,8,[`modelValue`])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-b734755d`]]);export{U as default};
\ No newline at end of file
diff --git a/dist/assets/BaseEmptyState-Wc1O8rBP.js b/dist/assets/BaseEmptyState-Wc1O8rBP.js
deleted file mode 100644
index 41453d9..0000000
--- a/dist/assets/BaseEmptyState-Wc1O8rBP.js
+++ /dev/null
@@ -1 +0,0 @@
-import{At as e,L as t,N as n,Nt as r,b as i,g as a,h as o,o as s,p as c,x as l}from"./http-WTIyGIuL.js";import{N as u}from"./index-BOMJTziC.js";var d={class:`base-empty__icon`,"aria-hidden":`true`},f={class:`base-empty__title`},p={key:0,class:`base-empty__description`},m={key:1,class:`base-empty__actions`},h=s(l({__name:`BaseEmptyState`,props:{icon:{default:`file`},title:{},description:{},compact:{type:Boolean}},emits:[`action`,`secondary`],setup(s){return(l,h)=>(n(),a(`div`,{class:e([`base-empty`,{"base-empty--compact":s.compact}])},[c(`div`,d,[i(u,{name:s.icon,size:s.compact?28:36},null,8,[`name`,`size`])]),c(`h3`,f,r(s.title),1),s.description?(n(),a(`p`,p,r(s.description),1)):o(``,!0),l.$slots.default||l.$slots.secondary?(n(),a(`div`,m,[t(l.$slots,`default`,{},void 0,!0),t(l.$slots,`secondary`,{},void 0,!0)])):o(``,!0)],2))}}),[[`__scopeId`,`data-v-47ea81e4`]]);export{h as t};
\ No newline at end of file
diff --git a/dist/assets/BaseEmptyState-vNIhbGdV.js b/dist/assets/BaseEmptyState-vNIhbGdV.js
new file mode 100644
index 0000000..d093192
--- /dev/null
+++ b/dist/assets/BaseEmptyState-vNIhbGdV.js
@@ -0,0 +1 @@
+import{$ as e,B as t,P as n,Q as r,St as i,X as a,bt as o,ct as s,dt as c,nt as l,rt as u}from"./index-BHqDDh7X.js";var d={class:`base-empty__icon`,"aria-hidden":`true`},f={class:`base-empty__title`},p={key:0,class:`base-empty__description`},m={key:1,class:`base-empty__actions`},h=t(u({__name:`BaseEmptyState`,props:{icon:{default:`file`},title:{},description:{},compact:{type:Boolean}},emits:[`action`,`secondary`],setup(t){return(u,h)=>(s(),e(`div`,{class:o([`base-empty`,{"base-empty--compact":t.compact}])},[a(`div`,d,[l(n,{name:t.icon,size:t.compact?28:36},null,8,[`name`,`size`])]),a(`h3`,f,i(t.title),1),t.description?(s(),e(`p`,p,i(t.description),1)):r(``,!0),u.$slots.default||u.$slots.secondary?(s(),e(`div`,m,[c(u.$slots,`default`,{},void 0,!0),c(u.$slots,`secondary`,{},void 0,!0)])):r(``,!0)],2))}}),[[`__scopeId`,`data-v-47ea81e4`]]);export{h as t};
\ No newline at end of file
diff --git a/dist/assets/BaseSwitch-DYYNQNXf.js b/dist/assets/BaseSwitch-DYYNQNXf.js
new file mode 100644
index 0000000..a4ccdbe
--- /dev/null
+++ b/dist/assets/BaseSwitch-DYYNQNXf.js
@@ -0,0 +1 @@
+import{$ as e,B as t,Q as n,St as r,X as i,Y as a,bt as o,ct as s,rt as c}from"./index-BHqDDh7X.js";var l=[`title`],u={key:0,class:`base-switch__label`},d={class:`base-switch__control`},f=[`id`,`checked`,`disabled`,`aria-checked`,`aria-label`],p={class:`base-switch__track`,"aria-hidden":`true`},m={class:`base-switch__thumb`},h={key:0,class:`base-switch__spinner`},g=t(c({__name:`BaseSwitch`,props:{modelValue:{type:Boolean},disabled:{type:Boolean},loading:{type:Boolean},error:{type:Boolean},label:{},activeText:{default:`فعال`},inactiveText:{default:`غیرفعال`},id:{}},emits:[`update:modelValue`],setup(t,{emit:c}){let g=t,_=c,v=a(()=>g.id??`switch-${crypto.randomUUID().slice(0,8)}`),y=a(()=>g.modelValue?g.activeText:g.inactiveText);function b(e){let t=e.target,n=t.checked;t.checked=g.modelValue,!(g.disabled||g.loading)&&_(`update:modelValue`,n)}return(a,c)=>(s(),e(`label`,{class:o([`base-switch`,{"base-switch--disabled":t.disabled||t.loading,"base-switch--error":t.error}]),title:y.value},[t.label?(s(),e(`span`,u,r(t.label),1)):n(``,!0),i(`span`,d,[i(`input`,{id:v.value,class:`base-switch__input`,type:`checkbox`,role:`switch`,checked:t.modelValue,disabled:t.disabled||t.loading,"aria-checked":t.modelValue,"aria-label":t.label||y.value,onChange:b},null,40,f),i(`span`,p,[i(`span`,m,[t.loading?(s(),e(`span`,h)):n(``,!0)])])])],10,l))}}),[[`__scopeId`,`data-v-0410eed4`]]);export{g as t};
\ No newline at end of file
diff --git a/dist/assets/BaseSwitch-gjOaAbzm.js b/dist/assets/BaseSwitch-gjOaAbzm.js
deleted file mode 100644
index f5c8fc8..0000000
--- a/dist/assets/BaseSwitch-gjOaAbzm.js
+++ /dev/null
@@ -1 +0,0 @@
-import{At as e,N as t,Nt as n,f as r,g as i,h as a,o,p as s,x as c}from"./http-WTIyGIuL.js";var l=[`title`],u={key:0,class:`base-switch__label`},d={class:`base-switch__control`},f=[`id`,`checked`,`disabled`,`aria-checked`,`aria-label`],p={class:`base-switch__track`,"aria-hidden":`true`},m={class:`base-switch__thumb`},h={key:0,class:`base-switch__spinner`},g=o(c({__name:`BaseSwitch`,props:{modelValue:{type:Boolean},disabled:{type:Boolean},loading:{type:Boolean},error:{type:Boolean},label:{},activeText:{default:`فعال`},inactiveText:{default:`غیرفعال`},id:{}},emits:[`update:modelValue`],setup(o,{emit:c}){let g=o,_=c,v=r(()=>g.id??`switch-${crypto.randomUUID().slice(0,8)}`),y=r(()=>g.modelValue?g.activeText:g.inactiveText);function b(e){let t=e.target,n=t.checked;t.checked=g.modelValue,!(g.disabled||g.loading)&&_(`update:modelValue`,n)}return(r,c)=>(t(),i(`label`,{class:e([`base-switch`,{"base-switch--disabled":o.disabled||o.loading,"base-switch--error":o.error}]),title:y.value},[o.label?(t(),i(`span`,u,n(o.label),1)):a(``,!0),s(`span`,d,[s(`input`,{id:v.value,class:`base-switch__input`,type:`checkbox`,role:`switch`,checked:o.modelValue,disabled:o.disabled||o.loading,"aria-checked":o.modelValue,"aria-label":o.label||y.value,onChange:b},null,40,f),s(`span`,p,[s(`span`,m,[o.loading?(t(),i(`span`,h)):a(``,!0)])])])],10,l))}}),[[`__scopeId`,`data-v-0410eed4`]]);export{g as t};
\ No newline at end of file
diff --git a/dist/assets/BrandsView-CBe6zIpx.js b/dist/assets/BrandsView-CBe6zIpx.js
deleted file mode 100644
index ca8b1fb..0000000
--- a/dist/assets/BrandsView-CBe6zIpx.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,G as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,et as l,f as u,g as d,m as f,nt as p,o as m,p as h,t as g,x as _,y as v}from"./http-WTIyGIuL.js";import{L as y,V as b,u as x}from"./index-BOMJTziC.js";import{t as S}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as C}from"./BaseSwitch-gjOaAbzm.js";import{t as w}from"./BaseEmptyState-Wc1O8rBP.js";var T={class:`admin-page`},E={key:2,class:`admin-table`},D={dir:`ltr`},O=[`onClick`],k={class:`field`},A={class:`field`},j={class:`field`},M={class:`field`},N=[`disabled`],P=m(_({__name:`BrandsView`,setup(m){let _=p([]),P=p(!0),F=p(!1),I=p(null),L=o(),R=l({name:``,slug:``,description:``,displayOrder:0,isActive:!0}),z=u(()=>I.value?`ویرایش برند`:`افزودن برند`);async function B(){P.value=!0;try{_.value=await x.list()}catch(e){L.error(e instanceof g?e.message:`بارگذاری برندها ناموفق بود`)}finally{P.value=!1}}function V(){I.value=null,Object.assign(R,{name:``,slug:``,description:``,displayOrder:_.value.length+1,isActive:!0}),F.value=!0}function H(e){I.value=e.id,Object.assign(R,{name:e.name,slug:e.slug??``,description:e.description??``,displayOrder:e.displayOrder,isActive:e.isActive}),F.value=!0}async function U(){try{let e={name:R.name.trim(),slug:R.slug.trim()||void 0,description:R.description.trim()||void 0,displayOrder:R.displayOrder,isActive:R.isActive};I.value?await x.update(I.value,e):await x.create(e),F.value=!1,L.success(`ذخیره شد`),await B()}catch(e){L.error(e instanceof g?e.message:`ذخیره ناموفق بود`)}}return e(()=>{B()}),(e,o)=>(i(),d(`div`,T,[h(`header`,{class:`admin-page__head`},[o[6]||=h(`div`,null,[h(`h1`,null,`برندها`)],-1),h(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:V},`افزودن برند`)]),P.value?(i(),f(S,{key:0,variant:`table`})):_.value.length?(i(),d(`table`,E,[o[7]||=h(`thead`,null,[h(`tr`,null,[h(`th`,null,`نام`),h(`th`,null,`شناسه لاتین`),h(`th`,null,`مشتریان`),h(`th`,null,`فعال`),h(`th`)])],-1),h(`tbody`,null,[(i(!0),d(c,null,n(_.value,e=>(i(),d(`tr`,{key:e.id},[h(`td`,null,a(e.name),1),h(`td`,D,a(e.slug||`—`),1),h(`td`,null,a(e.customersCount??0),1),h(`td`,null,a(e.isActive?`بله`:`خیر`),1),h(`td`,null,[h(`button`,{type:`button`,class:`link`,onClick:t=>H(e)},`ویرایش`,8,O)])]))),128))])])):(i(),f(w,{key:1,title:`برندی ثبت نشده`})),s(y,{open:F.value,title:z.value,onClose:o[5]||=e=>F.value=!1},{footer:t(()=>[h(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!R.name.trim(),onClick:U},`ذخیره`,8,N)]),default:t(()=>[h(`label`,k,[o[8]||=v(`نام`,-1),r(h(`input`,{"onUpdate:modelValue":o[0]||=e=>R.name=e,class:`admin-input`},null,512),[[b,R.name]])]),h(`label`,A,[o[9]||=v(`شناسه لاتین`,-1),r(h(`input`,{"onUpdate:modelValue":o[1]||=e=>R.slug=e,class:`admin-input`,dir:`ltr`,placeholder:`مثلاً nademi-silk`},null,512),[[b,R.slug]])]),h(`label`,j,[o[10]||=v(`توضیح`,-1),r(h(`textarea`,{"onUpdate:modelValue":o[2]||=e=>R.description=e,class:`admin-input`,rows:`3`},null,512),[[b,R.description]])]),h(`label`,M,[o[11]||=v(`ترتیب`,-1),r(h(`input`,{"onUpdate:modelValue":o[3]||=e=>R.displayOrder=e,type:`number`,class:`admin-input`},null,512),[[b,R.displayOrder,void 0,{number:!0}]])]),s(C,{modelValue:R.isActive,"onUpdate:modelValue":o[4]||=e=>R.isActive=e,label:`فعال`},null,8,[`modelValue`])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-88043806`]]);export{P as default};
\ No newline at end of file
diff --git a/dist/assets/BrandsView-Dx7NTNMV.js b/dist/assets/BrandsView-Dx7NTNMV.js
new file mode 100644
index 0000000..b7847bd
--- /dev/null
+++ b/dist/assets/BrandsView-Dx7NTNMV.js
@@ -0,0 +1 @@
+import{$ as e,B as t,N as n,R as r,St as i,W as a,X as o,Y as s,Z as c,_t as l,ct as u,ht as d,mt as f,nt as p,ot as m,q as h,rt as g,tt as _,u as v,ut as y,vt as b,z as x}from"./index-BHqDDh7X.js";import{t as S}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as C}from"./BaseSwitch-DYYNQNXf.js";import{t as w}from"./BaseEmptyState-vNIhbGdV.js";var T={class:`admin-page`},E={key:2,class:`admin-table`},D={dir:`ltr`},O=[`onClick`],k={class:`field`},A={class:`field`},j={class:`field`},M={class:`field`},N=[`disabled`],P=t(g({__name:`BrandsView`,setup(t){let g=b([]),P=b(!0),F=b(!1),I=b(null),L=x(),R=l({name:``,slug:``,description:``,displayOrder:0,isActive:!0}),z=s(()=>I.value?`ویرایش برند`:`افزودن برند`);async function B(){P.value=!0;try{g.value=await v.list()}catch(e){L.error(e instanceof n?e.message:`بارگذاری برندها ناموفق بود`)}finally{P.value=!1}}function V(){I.value=null,Object.assign(R,{name:``,slug:``,description:``,displayOrder:g.value.length+1,isActive:!0}),F.value=!0}function H(e){I.value=e.id,Object.assign(R,{name:e.name,slug:e.slug??``,description:e.description??``,displayOrder:e.displayOrder,isActive:e.isActive}),F.value=!0}async function U(){try{let e={name:R.name.trim(),slug:R.slug.trim()||void 0,description:R.description.trim()||void 0,displayOrder:R.displayOrder,isActive:R.isActive};I.value?await v.update(I.value,e):await v.create(e),F.value=!1,L.success(`ذخیره شد`),await B()}catch(e){L.error(e instanceof n?e.message:`ذخیره ناموفق بود`)}}return m(()=>{B()}),(t,n)=>(u(),e(`div`,T,[o(`header`,{class:`admin-page__head`},[n[6]||=o(`div`,null,[o(`h1`,null,`برندها`)],-1),o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:V},`افزودن برند`)]),P.value?(u(),c(S,{key:0,variant:`table`})):g.value.length?(u(),e(`table`,E,[n[7]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`نام`),o(`th`,null,`شناسه لاتین`),o(`th`,null,`مشتریان`),o(`th`,null,`فعال`),o(`th`)])],-1),o(`tbody`,null,[(u(!0),e(h,null,y(g.value,t=>(u(),e(`tr`,{key:t.id},[o(`td`,null,i(t.name),1),o(`td`,D,i(t.slug||`—`),1),o(`td`,null,i(t.customersCount??0),1),o(`td`,null,i(t.isActive?`بله`:`خیر`),1),o(`td`,null,[o(`button`,{type:`button`,class:`link`,onClick:e=>H(t)},`ویرایش`,8,O)])]))),128))])])):(u(),c(w,{key:1,title:`برندی ثبت نشده`})),p(r,{open:F.value,title:z.value,onClose:n[5]||=e=>F.value=!1},{footer:f(()=>[o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!R.name.trim(),onClick:U},`ذخیره`,8,N)]),default:f(()=>[o(`label`,k,[n[8]||=_(`نام`,-1),d(o(`input`,{"onUpdate:modelValue":n[0]||=e=>R.name=e,class:`admin-input`},null,512),[[a,R.name]])]),o(`label`,A,[n[9]||=_(`شناسه لاتین`,-1),d(o(`input`,{"onUpdate:modelValue":n[1]||=e=>R.slug=e,class:`admin-input`,dir:`ltr`,placeholder:`مثلاً nademi-silk`},null,512),[[a,R.slug]])]),o(`label`,j,[n[10]||=_(`توضیح`,-1),d(o(`textarea`,{"onUpdate:modelValue":n[2]||=e=>R.description=e,class:`admin-input`,rows:`3`},null,512),[[a,R.description]])]),o(`label`,M,[n[11]||=_(`ترتیب`,-1),d(o(`input`,{"onUpdate:modelValue":n[3]||=e=>R.displayOrder=e,type:`number`,class:`admin-input`},null,512),[[a,R.displayOrder,void 0,{number:!0}]])]),p(C,{modelValue:R.isActive,"onUpdate:modelValue":n[4]||=e=>R.isActive=e,label:`فعال`},null,8,[`modelValue`])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-88043806`]]);export{P as default};
\ No newline at end of file
diff --git a/dist/assets/CashPaymentsView-Jb2DRj2K.js b/dist/assets/CashPaymentsView-Jb2DRj2K.js
new file mode 100644
index 0000000..d1c668c
--- /dev/null
+++ b/dist/assets/CashPaymentsView-Jb2DRj2K.js
@@ -0,0 +1 @@
+import{$ as e,B as t,F as n,N as r,P as ee,Q as i,St as a,W as o,X as s,Y as te,Z as c,bt as l,ct as u,d,ht as f,i as p,n as m,nt as h,ot as ne,q as g,rt as _,ut as v,vt as y,x as re,yt as b,z as ie}from"./index-BHqDDh7X.js";import{t as ae}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as oe}from"./AdminSelect-BjB6PHdr.js";import{n as x,t as S}from"./adminLabels-Cz9ccm1Z.js";var se={class:`cash-payments-page`},C={class:`cash-payments-page__filters admin-card`},w={class:`cash-payments-page__search`},T={class:`cash-payments-page__table admin-card desktop-only`},E={class:`admin-table-wrap`},D={class:`admin-table`},O={dir:`ltr`},k={key:0,class:`admin-action-group`},A=[`disabled`,`onClick`],j=[`disabled`,`onClick`],M={key:1,class:`admin-action-group`},N=[`disabled`,`onClick`],P={key:2},F={class:`compact-only admin-card-list`},I={class:`admin-card-item__header`},L={class:`admin-card-item__title`},R={class:`admin-card-item__meta`},ce={key:0},z={dir:`ltr`},B={key:0,class:`admin-card-item__actions`},V=[`disabled`,`onClick`],H=[`disabled`,`onClick`],U=[`disabled`,`onClick`],W=t(_({__name:`CashPaymentsView`,setup(t){let _=n(),W=y([]),G=y(_.query.order??``),K=y(`all`),q=y(!0),J=ie(),Y=y(null),le=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار تأیید`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`},{value:`expired`,label:`منقضیشده`}],X=te(()=>{let e=W.value;K.value!==`all`&&(e=e.filter(e=>e.status===K.value));let t=G.value.trim();return t&&(e=e.filter(e=>e.orderNumber.includes(t)||e.customerName.includes(t)||e.trackingCode.includes(t))),e});async function ue(){q.value=!0;try{W.value=await d.list()}catch(e){J.error(e instanceof r?e.message:`بارگذاری پرداختها انجام نشد.`)}finally{q.value=!1}}ne(()=>{ue()});async function Z(e){Y.value=e.id;try{let t=await d.updateStatus(e.id,{status:`approved`}),n=W.value.findIndex(t=>t.id===e.id);n!==-1&&(W.value[n]={...W.value[n],...t}),J.success(`پرداخت سفارش ${e.orderNumber} تأیید شد.`)}catch(e){J.error(e instanceof r?e.message:`تأیید پرداخت انجام نشد.`)}finally{Y.value=null}}async function Q(e){Y.value=e.id;try{await re.updateStatus(e.orderId,{status:`final_approved`,note:`تأیید نهایی پس از تأیید رسید نقدی`}),J.success(`سفارش ${e.orderNumber} تأیید نهایی شد.`)}catch(e){J.error(e instanceof r?e.message:`تأیید نهایی انجام نشد.`)}finally{Y.value=null}}async function $(e){Y.value=e.id;try{let t=await d.updateStatus(e.id,{status:`rejected`}),n=W.value.findIndex(t=>t.id===e.id);n!==-1&&(W.value[n]={...W.value[n],...t}),J.warning(`پرداخت سفارش ${e.orderNumber} رد شد.`)}catch(e){J.error(e instanceof r?e.message:`رد پرداخت انجام نشد.`)}finally{Y.value=null}}return(t,n)=>(u(),e(`div`,se,[n[3]||=s(`div`,{class:`admin-page-header`},[s(`div`,null,[s(`h1`,{class:`admin-page-header__title`},`پرداختهای نقدی`)])],-1),s(`div`,C,[s(`div`,w,[h(ee,{name:`search`,size:18}),f(s(`input`,{"onUpdate:modelValue":n[0]||=e=>G.value=e,type:`search`,class:`cash-payments-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، پیگیری...`},null,512),[[o,G.value]])]),h(oe,{modelValue:K.value,"onUpdate:modelValue":n[1]||=e=>K.value=e,class:`cash-payments-page__status-select`,"aria-label":`فیلتر وضعیت پرداخت`,options:le},null,8,[`modelValue`])]),q.value?(u(),c(ae,{key:0,variant:`table`})):(u(),e(g,{key:1},[s(`div`,T,[s(`div`,E,[s(`table`,D,[n[2]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`شماره سفارش`),s(`th`,null,`مشتری`),s(`th`,null,`مبلغ فاکتور`),s(`th`,null,`مبلغ واریزی`),s(`th`,null,`تاریخ واریز`),s(`th`,null,`شماره پیگیری`),s(`th`,null,`پایان اعتبار`),s(`th`,null,`وضعیت`),s(`th`,null,`عملیات`)])],-1),s(`tbody`,null,[(u(!0),e(g,null,v(X.value,t=>(u(),e(`tr`,{key:t.id},[s(`td`,null,a(t.orderNumber),1),s(`td`,null,a(t.customerName),1),s(`td`,null,a(b(m)(t.amount)),1),s(`td`,null,a(t.paidAmount?b(m)(t.paidAmount):`—`),1),s(`td`,null,a(t.transferDate?b(p)(t.transferDate):`—`),1),s(`td`,O,a(t.trackingCode),1),s(`td`,null,a(b(p)(t.expiresAt)),1),s(`td`,null,[s(`span`,{class:l([`admin-badge`,b(S)[t.status]])},a(b(x)[t.status]),3)]),s(`td`,null,[t.status===`pending_review`?(u(),e(`div`,k,[s(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>Z(t)},` تأیید `,8,A),s(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>$(t)},` رد `,8,j)])):t.status===`approved`?(u(),e(`div`,M,[s(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>Q(t)},` تأیید نهایی سفارش `,8,N)])):(u(),e(`span`,P,`—`))])]))),128))])])])]),s(`div`,F,[(u(!0),e(g,null,v(X.value,t=>(u(),e(`article`,{key:t.id,class:`admin-card-item`},[s(`div`,I,[s(`p`,L,a(t.orderNumber),1),s(`span`,{class:l([`admin-badge`,b(S)[t.status]])},a(b(x)[t.status]),3)]),s(`div`,R,[s(`span`,null,a(t.customerName),1),s(`span`,null,a(b(m)(t.amount)),1),t.paidAmount==null?i(``,!0):(u(),e(`span`,ce,`پرداختی: `+a(b(m)(t.paidAmount)),1)),s(`span`,z,a(t.trackingCode),1)]),t.status===`pending_review`||t.status===`approved`?(u(),e(`div`,B,[t.status===`pending_review`?(u(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>Z(t)},` تأیید `,8,V)):i(``,!0),t.status===`pending_review`?(u(),e(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>$(t)},` رد `,8,H)):i(``,!0),t.status===`approved`?(u(),e(`button`,{key:2,type:`button`,class:`admin-btn admin-btn--primary admin-btn--xs`,disabled:Y.value===t.id,onClick:e=>Q(t)},` تأیید نهایی سفارش `,8,U)):i(``,!0)])):i(``,!0)]))),128))])],64))]))}}),[[`__scopeId`,`data-v-9afb2a83`]]);export{W as default};
\ No newline at end of file
diff --git a/dist/assets/CashPaymentsView-msqreZJH.js b/dist/assets/CashPaymentsView-msqreZJH.js
deleted file mode 100644
index 66f5526..0000000
--- a/dist/assets/CashPaymentsView-msqreZJH.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,At as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,f as l,g as u,h as d,m as ee,nt as f,o as te,p,t as m,ut as h,x as g}from"./http-WTIyGIuL.js";import{N as ne,P as re,V as ie,d as _,i as v,n as y,x as ae}from"./index-BOMJTziC.js";import{t as b}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as oe}from"./AdminSelect-BVy_0-3W.js";import{n as x,t as S}from"./adminLabels-Cz9ccm1Z.js";var se={class:`cash-payments-page`},C={class:`cash-payments-page__filters admin-card`},w={class:`cash-payments-page__search`},T={class:`cash-payments-page__table admin-card desktop-only`},E={class:`admin-table-wrap`},D={class:`admin-table`},O={dir:`ltr`},k={key:0,class:`admin-action-group`},A=[`disabled`,`onClick`],j=[`disabled`,`onClick`],M={key:1,class:`admin-action-group`},N=[`disabled`,`onClick`],P={key:2},F={class:`compact-only admin-card-list`},I={class:`admin-card-item__header`},L={class:`admin-card-item__title`},R={class:`admin-card-item__meta`},ce={key:0},z={dir:`ltr`},B={key:0,class:`admin-card-item__actions`},V=[`disabled`,`onClick`],H=[`disabled`,`onClick`],U=[`disabled`,`onClick`],W=te(g({__name:`CashPaymentsView`,setup(te){let g=re(),W=f([]),G=f(g.query.order??``),K=f(`all`),q=f(!0),J=o(),Y=f(null),le=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار تأیید`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`},{value:`expired`,label:`منقضیشده`}],X=l(()=>{let e=W.value;K.value!==`all`&&(e=e.filter(e=>e.status===K.value));let t=G.value.trim();return t&&(e=e.filter(e=>e.orderNumber.includes(t)||e.customerName.includes(t)||e.trackingCode.includes(t))),e});async function ue(){q.value=!0;try{W.value=await _.list()}catch(e){J.error(e instanceof m?e.message:`بارگذاری پرداختها انجام نشد.`)}finally{q.value=!1}}e(()=>{ue()});async function Z(e){Y.value=e.id;try{let t=await _.updateStatus(e.id,{status:`approved`}),n=W.value.findIndex(t=>t.id===e.id);n!==-1&&(W.value[n]={...W.value[n],...t}),J.success(`پرداخت سفارش ${e.orderNumber} تأیید شد.`)}catch(e){J.error(e instanceof m?e.message:`تأیید پرداخت انجام نشد.`)}finally{Y.value=null}}async function Q(e){Y.value=e.id;try{await ae.updateStatus(e.orderId,{status:`final_approved`,note:`تأیید نهایی پس از تأیید رسید نقدی`}),J.success(`سفارش ${e.orderNumber} تأیید نهایی شد.`)}catch(e){J.error(e instanceof m?e.message:`تأیید نهایی انجام نشد.`)}finally{Y.value=null}}async function $(e){Y.value=e.id;try{let t=await _.updateStatus(e.id,{status:`rejected`}),n=W.value.findIndex(t=>t.id===e.id);n!==-1&&(W.value[n]={...W.value[n],...t}),J.warning(`پرداخت سفارش ${e.orderNumber} رد شد.`)}catch(e){J.error(e instanceof m?e.message:`رد پرداخت انجام نشد.`)}finally{Y.value=null}}return(e,o)=>(i(),u(`div`,se,[o[3]||=p(`div`,{class:`admin-page-header`},[p(`div`,null,[p(`h1`,{class:`admin-page-header__title`},`پرداختهای نقدی`)])],-1),p(`div`,C,[p(`div`,w,[s(ne,{name:`search`,size:18}),r(p(`input`,{"onUpdate:modelValue":o[0]||=e=>G.value=e,type:`search`,class:`cash-payments-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، پیگیری...`},null,512),[[ie,G.value]])]),s(oe,{modelValue:K.value,"onUpdate:modelValue":o[1]||=e=>K.value=e,class:`cash-payments-page__status-select`,"aria-label":`فیلتر وضعیت پرداخت`,options:le},null,8,[`modelValue`])]),q.value?(i(),ee(b,{key:0,variant:`table`})):(i(),u(c,{key:1},[p(`div`,T,[p(`div`,E,[p(`table`,D,[o[2]||=p(`thead`,null,[p(`tr`,null,[p(`th`,null,`شماره سفارش`),p(`th`,null,`مشتری`),p(`th`,null,`مبلغ فاکتور`),p(`th`,null,`مبلغ واریزی`),p(`th`,null,`تاریخ واریز`),p(`th`,null,`شماره پیگیری`),p(`th`,null,`پایان اعتبار`),p(`th`,null,`وضعیت`),p(`th`,null,`عملیات`)])],-1),p(`tbody`,null,[(i(!0),u(c,null,n(X.value,e=>(i(),u(`tr`,{key:e.id},[p(`td`,null,a(e.orderNumber),1),p(`td`,null,a(e.customerName),1),p(`td`,null,a(h(y)(e.amount)),1),p(`td`,null,a(e.paidAmount?h(y)(e.paidAmount):`—`),1),p(`td`,null,a(e.transferDate?h(v)(e.transferDate):`—`),1),p(`td`,O,a(e.trackingCode),1),p(`td`,null,a(h(v)(e.expiresAt)),1),p(`td`,null,[p(`span`,{class:t([`admin-badge`,h(S)[e.status]])},a(h(x)[e.status]),3)]),p(`td`,null,[e.status===`pending_review`?(i(),u(`div`,k,[p(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Z(e)},` تأیید `,8,A),p(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>$(e)},` رد `,8,j)])):e.status===`approved`?(i(),u(`div`,M,[p(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Q(e)},` تأیید نهایی سفارش `,8,N)])):(i(),u(`span`,P,`—`))])]))),128))])])])]),p(`div`,F,[(i(!0),u(c,null,n(X.value,e=>(i(),u(`article`,{key:e.id,class:`admin-card-item`},[p(`div`,I,[p(`p`,L,a(e.orderNumber),1),p(`span`,{class:t([`admin-badge`,h(S)[e.status]])},a(h(x)[e.status]),3)]),p(`div`,R,[p(`span`,null,a(e.customerName),1),p(`span`,null,a(h(y)(e.amount)),1),e.paidAmount==null?d(``,!0):(i(),u(`span`,ce,`پرداختی: `+a(h(y)(e.paidAmount)),1)),p(`span`,z,a(e.trackingCode),1)]),e.status===`pending_review`||e.status===`approved`?(i(),u(`div`,B,[e.status===`pending_review`?(i(),u(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Z(e)},` تأیید `,8,V)):d(``,!0),e.status===`pending_review`?(i(),u(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>$(e)},` رد `,8,H)):d(``,!0),e.status===`approved`?(i(),u(`button`,{key:2,type:`button`,class:`admin-btn admin-btn--primary admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Q(e)},` تأیید نهایی سفارش `,8,U)):d(``,!0)])):d(``,!0)]))),128))])],64))]))}}),[[`__scopeId`,`data-v-9afb2a83`]]);export{W as default};
\ No newline at end of file
diff --git a/dist/assets/CatalogRequestsView-BAS2-bR4.js b/dist/assets/CatalogRequestsView-BAS2-bR4.js
new file mode 100644
index 0000000..55b28cc
--- /dev/null
+++ b/dist/assets/CatalogRequestsView-BAS2-bR4.js
@@ -0,0 +1 @@
+import{$ as e,B as t,N as n,Q as r,St as i,X as a,Z as o,ct as s,f as c,i as l,nt as u,ot as d,q as f,rt as p,tt as m,ut as h,vt as g,yt as _,z as v}from"./index-BHqDDh7X.js";import{t as y}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as b}from"./BaseEmptyState-vNIhbGdV.js";import{t as x}from"./AdminSelect-BjB6PHdr.js";var S={class:`admin-page`},C={class:`admin-page__head`},w={class:`request-card__top`},T={class:`muted`,dir:`ltr`},E={class:`badge`},D={key:0,class:`muted`},O={class:`admin-table`},k={dir:`ltr`},A={key:0,class:`movements`},j={class:`muted`},M=t(p({__name:`CatalogRequestsView`,setup(t){let p=[{value:``,label:`همه وضعیتها`},{value:`new`,label:`درخواست جدید`},{value:`approved`,label:`تأیید شده`},{value:`ready_to_ship`,label:`آماده ارسال`},{value:`delivered`,label:`تحویل به مشتری`},{value:`returned`,label:`بازگردانده شده`},{value:`cancelled`,label:`لغو شده`}],M=[{value:`warehouse`,label:`انبار`},{value:`customer`,label:`مشتری`},{value:`agent`,label:`واسطه`}],N=Object.fromEntries(p.filter(e=>e.value).map(e=>[e.value,e.label])),P=Object.fromEntries(M.map(e=>[e.value,e.label])),F=g([]),I=g(``),L=g(!0),R=g(null),z=v();async function B(){L.value=!0;try{F.value=await c.list(I.value||void 0)}catch(e){z.error(e instanceof n?e.message:`بارگذاری انجام نشد`)}finally{L.value=!1}}async function V(e,t){try{await c.updateStatus(e,t),z.success(`وضعیت بهروز شد`),await B()}catch(e){z.error(e instanceof n?e.message:`بهروزرسانی ناموفق بود`)}}async function H(e,t){if(!R.value){R.value=e;try{await c.updateHolder(e,{holderType:t}),z.success(`محل نگهداری بهروز شد`),await B()}catch(e){z.error(e instanceof n?e.message:`بهروزرسانی محل ناموفق بود`)}finally{R.value=null}}}function U(e){return P[e]??e}return d(()=>{B()}),(t,n)=>(s(),e(`div`,S,[a(`header`,C,[n[1]||=a(`div`,null,[a(`h1`,null,`درخواست کالیته فیزیکی`),a(`p`,null,`بررسی، گردش وضعیت و محل نگهداری اقلام`)],-1),u(x,{modelValue:I.value,"onUpdate:modelValue":[n[0]||=e=>I.value=e,B],options:p},null,8,[`modelValue`])]),L.value?(s(),o(y,{key:0,variant:`cards`})):F.value.length?(s(!0),e(f,{key:2},h(F.value,t=>(s(),e(`div`,{key:t.id,class:`request-card`},[a(`div`,w,[a(`div`,null,[a(`strong`,null,i(t.customerName),1),a(`span`,T,i(t.customerPhone),1),a(`span`,E,i(_(N)[t.status]??t.status),1)]),u(x,{"model-value":t.status,options:p.filter(e=>e.value),"onUpdate:modelValue":e=>V(t.id,String(e))},null,8,[`model-value`,`options`,`onUpdate:modelValue`])]),t.note?(s(),e(`p`,D,i(t.note),1)):r(``,!0),a(`table`,O,[n[2]||=a(`thead`,null,[a(`tr`,null,[a(`th`,null,`محصول`),a(`th`,null,`کد`),a(`th`,null,`تعداد`),a(`th`,null,`محل`)])],-1),a(`tbody`,null,[(s(!0),e(f,null,h(t.items,t=>(s(),e(`tr`,{key:t.id},[a(`td`,null,i(t.productName),1),a(`td`,k,i(t.productCode),1),a(`td`,null,i(t.quantity),1),a(`td`,null,[u(x,{"model-value":t.holderType,options:M,"onUpdate:modelValue":e=>H(t.id,String(e))},null,8,[`model-value`,`onUpdate:modelValue`]),t.movements?.length?(s(),e(`ul`,A,[(s(!0),e(f,null,h(t.movements,t=>(s(),e(`li`,{key:t.id},[m(i(U(t.fromHolder))+` → `+i(U(t.toHolder))+` `,1),a(`span`,j,i(_(l)(t.movedAt)),1)]))),128))])):r(``,!0)])]))),128))])])]))),128)):(s(),o(b,{key:1,title:`درخواستی نیست`}))]))}}),[[`__scopeId`,`data-v-747d8f88`]]);export{M as default};
\ No newline at end of file
diff --git a/dist/assets/CatalogRequestsView-CbhyUNPd.js b/dist/assets/CatalogRequestsView-CbhyUNPd.js
deleted file mode 100644
index 948a5a9..0000000
--- a/dist/assets/CatalogRequestsView-CbhyUNPd.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,I as t,N as n,Nt as r,a as i,b as a,c as o,g as s,h as c,m as l,nt as u,o as d,p as f,t as p,ut as m,x as h,y as g}from"./http-WTIyGIuL.js";import{f as _,i as v}from"./index-BOMJTziC.js";import{t as y}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as b}from"./BaseEmptyState-Wc1O8rBP.js";import{t as x}from"./AdminSelect-BVy_0-3W.js";var S={class:`admin-page`},C={class:`admin-page__head`},w={class:`request-card__top`},T={class:`muted`,dir:`ltr`},E={class:`badge`},D={key:0,class:`muted`},O={class:`admin-table`},k={dir:`ltr`},A={key:0,class:`movements`},j={class:`muted`},M=d(h({__name:`CatalogRequestsView`,setup(d){let h=[{value:``,label:`همه وضعیتها`},{value:`new`,label:`درخواست جدید`},{value:`approved`,label:`تأیید شده`},{value:`ready_to_ship`,label:`آماده ارسال`},{value:`delivered`,label:`تحویل به مشتری`},{value:`returned`,label:`بازگردانده شده`},{value:`cancelled`,label:`لغو شده`}],M=[{value:`warehouse`,label:`انبار`},{value:`customer`,label:`مشتری`},{value:`agent`,label:`واسطه`}],N=Object.fromEntries(h.filter(e=>e.value).map(e=>[e.value,e.label])),P=Object.fromEntries(M.map(e=>[e.value,e.label])),F=u([]),I=u(``),L=u(!0),R=u(null),z=i();async function B(){L.value=!0;try{F.value=await _.list(I.value||void 0)}catch(e){z.error(e instanceof p?e.message:`بارگذاری انجام نشد`)}finally{L.value=!1}}async function V(e,t){try{await _.updateStatus(e,t),z.success(`وضعیت بهروز شد`),await B()}catch(e){z.error(e instanceof p?e.message:`بهروزرسانی ناموفق بود`)}}async function H(e,t){if(!R.value){R.value=e;try{await _.updateHolder(e,{holderType:t}),z.success(`محل نگهداری بهروز شد`),await B()}catch(e){z.error(e instanceof p?e.message:`بهروزرسانی محل ناموفق بود`)}finally{R.value=null}}}function U(e){return P[e]??e}return e(()=>{B()}),(e,i)=>(n(),s(`div`,S,[f(`header`,C,[i[1]||=f(`div`,null,[f(`h1`,null,`درخواست کالیته فیزیکی`),f(`p`,null,`بررسی، گردش وضعیت و محل نگهداری اقلام`)],-1),a(x,{modelValue:I.value,"onUpdate:modelValue":[i[0]||=e=>I.value=e,B],options:h},null,8,[`modelValue`])]),L.value?(n(),l(y,{key:0,variant:`cards`})):F.value.length?(n(!0),s(o,{key:2},t(F.value,e=>(n(),s(`div`,{key:e.id,class:`request-card`},[f(`div`,w,[f(`div`,null,[f(`strong`,null,r(e.customerName),1),f(`span`,T,r(e.customerPhone),1),f(`span`,E,r(m(N)[e.status]??e.status),1)]),a(x,{"model-value":e.status,options:h.filter(e=>e.value),"onUpdate:modelValue":t=>V(e.id,String(t))},null,8,[`model-value`,`options`,`onUpdate:modelValue`])]),e.note?(n(),s(`p`,D,r(e.note),1)):c(``,!0),f(`table`,O,[i[2]||=f(`thead`,null,[f(`tr`,null,[f(`th`,null,`محصول`),f(`th`,null,`کد`),f(`th`,null,`تعداد`),f(`th`,null,`محل`)])],-1),f(`tbody`,null,[(n(!0),s(o,null,t(e.items,e=>(n(),s(`tr`,{key:e.id},[f(`td`,null,r(e.productName),1),f(`td`,k,r(e.productCode),1),f(`td`,null,r(e.quantity),1),f(`td`,null,[a(x,{"model-value":e.holderType,options:M,"onUpdate:modelValue":t=>H(e.id,String(t))},null,8,[`model-value`,`onUpdate:modelValue`]),e.movements?.length?(n(),s(`ul`,A,[(n(!0),s(o,null,t(e.movements,e=>(n(),s(`li`,{key:e.id},[g(r(U(e.fromHolder))+` → `+r(U(e.toHolder))+` `,1),f(`span`,j,r(m(v)(e.movedAt)),1)]))),128))])):c(``,!0)])]))),128))])])]))),128)):(n(),l(b,{key:1,title:`درخواستی نیست`}))]))}}),[[`__scopeId`,`data-v-747d8f88`]]);export{M as default};
\ No newline at end of file
diff --git a/dist/assets/CatalogsView-CmZDc_3n.js b/dist/assets/CatalogsView-CmZDc_3n.js
new file mode 100644
index 0000000..42c6d41
--- /dev/null
+++ b/dist/assets/CatalogsView-CmZDc_3n.js
@@ -0,0 +1 @@
+import{$ as e,B as t,K as ee,N as n,P as te,Q as r,R as ne,St as i,W as a,X as o,Y as s,Z as c,_t as re,bt as l,ct as u,h as ie,ht as d,mt as f,nt as p,ot as ae,p as m,q as h,rt as g,tt as _,ut as v,vt as y,xt as b,z as oe}from"./index-BHqDDh7X.js";import{t as se}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as ce}from"./BaseSwitch-DYYNQNXf.js";import{t as le}from"./BaseEmptyState-vNIhbGdV.js";import{t as ue}from"./AdminImagePicker-DzV79efN.js";import{t as x}from"./AdminSelect-BjB6PHdr.js";import{t as S}from"./ActiveSwitchCell-BzzYl8MV.js";var de={class:`catalogs-page`},fe={class:`catalogs-page__filters admin-card`},pe={class:`catalogs-page__search`},me={key:2,class:`catalogs-page__table admin-card desktop-only`},he={class:`admin-table-wrap`},ge={class:`admin-table`},_e={class:`numeric`},ve={class:`numeric`},ye={class:`status`},be={class:`actions`},xe=[`onClick`],C={key:3,class:`compact-only admin-card-list`},w={class:`admin-card-item__header`},T={class:`admin-card-item__title`},E={class:`admin-card-item__meta`},D={class:`admin-card-item__actions`},O=[`onClick`],k={key:0,class:`admin-form__error`,role:`alert`},A={class:`admin-form__field`},j={class:`admin-form__row`},M={class:`admin-form__field`},Se={class:`admin-form__field`},Ce={class:`admin-form__row`},we={class:`admin-form__field`},Te={class:`admin-form__field`},Ee=[`disabled`],N=t(g({__name:`CatalogsView`,setup(t){let g=y([]),N=y([]),P=y(``),F=y(`all`),I=y(!0),L=y(null),R=y(null),z=y(``),B=y(!1),V=oe(),De=s(()=>[{value:`all`,label:`همه شرکتها`},...N.value.map(e=>({value:e.id,label:e.name}))]),Oe=s(()=>N.value.map(e=>({value:e.id,label:e.name}))),H=()=>({companyId:N.value[0]?.id??``,code:``,name:``,displayOrder:g.value.length+1,isActive:!0,imageUrl:null}),U=re(H()),ke=s(()=>L.value!==null),W=s(()=>L.value===`edit`?`ویرایش کالیته`:`افزودن کالیته`),G=s(()=>U.code.trim()&&U.name.trim()&&U.companyId),K=s(()=>P.value.trim().length>0||F.value!==`all`),q=s(()=>{let e=g.value;F.value!==`all`&&(e=e.filter(e=>e.companyId===F.value));let t=P.value.trim();return t&&(e=e.filter(e=>e.code.includes(t)||e.name.includes(t)||e.companyName.includes(t))),e});async function Ae(){I.value=!0;try{let[e,t]=await Promise.all([m.list(),ie.list()]);g.value=e,N.value=t}catch(e){V.error(e instanceof n?e.message:`بارگذاری کالیتهها انجام نشد.`)}finally{I.value=!1}}ae(()=>{Ae()});function J(e){return N.value.find(t=>t.id===e)?.name??`—`}function Y(){L.value=`add`,R.value=null,Object.assign(U,H()),z.value=``}function X(e){L.value=`edit`,R.value=e.id,U.companyId=e.companyId,U.code=e.code,U.name=e.name,U.displayOrder=e.displayOrder,U.isActive=e.isActive,U.imageUrl=e.imageUrl??null,z.value=``}function Z(){L.value=null,R.value=null,z.value=``}async function Q(){if(!G.value){z.value=`کد، نام و شرکت الزامی هستند.`;return}B.value=!0;try{if(L.value===`edit`&&R.value){let e=await m.update(R.value,{code:U.code.trim(),name:U.name.trim(),displayOrder:Number(U.displayOrder)||1,isActive:U.isActive,imageUrl:U.imageUrl}),t=g.value.findIndex(e=>e.id===R.value);t!==-1&&(g.value[t]={...g.value[t],...e,companyName:J(U.companyId)}),V.success(`اطلاعات کالیته بهروزرسانی شد.`)}else{let e=await m.create({companyId:U.companyId,code:U.code.trim(),name:U.name.trim(),displayOrder:Number(U.displayOrder)||1,isActive:U.isActive,imageUrl:U.imageUrl});g.value.push({...e,companyName:e.companyName||J(U.companyId),productCount:e.productCount??0}),V.success(`کالیته جدید ثبت شد.`)}Z()}catch(e){V.error(e instanceof n?e.message:`ذخیره کالیته انجام نشد.`)}finally{B.value=!1}}async function $(e,t){await m.setActive(e,t)}function je(){P.value=``,F.value=`all`}return(t,n)=>(u(),e(`div`,de,[o(`div`,{class:`admin-page-header`},[n[8]||=o(`div`,null,[o(`h1`,{class:`admin-page-header__title`},`کالیتهها`)],-1),o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن کالیته `)]),o(`div`,fe,[o(`div`,pe,[p(te,{name:`search`,size:18}),d(o(`input`,{"onUpdate:modelValue":n[0]||=e=>P.value=e,type:`search`,class:`catalogs-page__search-input`,placeholder:`جستجو بر اساس کد یا نام...`},null,512),[[a,P.value]])]),p(x,{modelValue:F.value,"onUpdate:modelValue":n[1]||=e=>F.value=e,class:`catalogs-page__company-filter`,"aria-label":`فیلتر شرکت`,options:De.value},null,8,[`modelValue`,`options`])]),I.value?(u(),c(se,{key:0,variant:`table`})):q.value.length?(u(),e(`div`,me,[o(`div`,he,[o(`table`,ge,[n[9]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`تصویر`),o(`th`,null,`کد`),o(`th`,null,`نام کالیته`),o(`th`,null,`شرکت`),o(`th`,{class:`numeric`},`ترتیب`),o(`th`,{class:`numeric`},`تعداد محصول`),o(`th`,{class:`status`},`وضعیت`),o(`th`,{class:`actions`},`عملیات`)])],-1),o(`tbody`,null,[(u(!0),e(h,null,v(q.value,t=>(u(),e(`tr`,{key:t.id},[o(`td`,null,[o(`span`,{class:l([`catalog-thumb`,{"catalog-thumb--empty":!t.imageUrl}]),style:b(t.imageUrl?{backgroundImage:`url(${t.imageUrl})`}:void 0)},null,6)]),o(`td`,null,i(t.code),1),o(`td`,null,i(t.name),1),o(`td`,null,i(t.companyName),1),o(`td`,_e,i(t.displayOrder),1),o(`td`,ve,i(t.productCount),1),o(`td`,ye,[p(S,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`کالیته`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),o(`td`,be,[o(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>X(t)},` ویرایش `,8,xe)])]))),128))])])])])):(u(),c(le,{key:1,class:`admin-card`,icon:`catalogs`,title:K.value?`نتیجهای یافت نشد`:`کالیتهای ثبت نشده`,description:K.value?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین کالیته را ثبت کنید.`},{default:f(()=>[K.value?(u(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:je},` پاک کردن فیلترها `)):(u(),e(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن کالیته `))]),_:1},8,[`title`,`description`])),!I.value&&q.value.length?(u(),e(`div`,C,[(u(!0),e(h,null,v(q.value,t=>(u(),e(`article`,{key:t.id,class:`admin-card-item`},[o(`div`,w,[o(`span`,{class:l([`catalog-thumb`,{"catalog-thumb--empty":!t.imageUrl}]),style:b(t.imageUrl?{backgroundImage:`url(${t.imageUrl})`}:void 0)},null,6),o(`p`,T,`کالیته `+i(t.code)+` — `+i(t.name),1),p(S,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`کالیته`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),o(`div`,E,[o(`span`,null,i(t.companyName),1),o(`span`,null,i(t.productCount)+` محصول`,1),o(`span`,null,`ترتیب: `+i(t.displayOrder),1)]),o(`div`,D,[o(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>X(t)},` ویرایش `,8,O)])]))),128))])):r(``,!0),p(ne,{open:ke.value,title:W.value,size:`lg`,onClose:Z},{footer:f(()=>[o(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!G.value||B.value,onClick:Q},i(L.value===`edit`?`ذخیره تغییرات`:`ثبت کالیته`),9,Ee)]),default:f(()=>[o(`form`,{class:`admin-form`,onSubmit:ee(Q,[`prevent`])},[z.value?(u(),e(`p`,k,i(z.value),1)):r(``,!0),o(`div`,A,[n[10]||=o(`label`,null,[_(`شرکت `),o(`span`,{class:`admin-form__required`},`*`)],-1),p(x,{modelValue:U.companyId,"onUpdate:modelValue":n[2]||=e=>U.companyId=e,block:``,"aria-label":`انتخاب شرکت`,placeholder:`انتخاب شرکت`,options:Oe.value},null,8,[`modelValue`,`options`])]),o(`div`,j,[o(`div`,M,[n[11]||=o(`label`,{for:`catalog-code`},[_(`کد کالیته `),o(`span`,{class:`admin-form__required`},`*`)],-1),d(o(`input`,{id:`catalog-code`,"onUpdate:modelValue":n[3]||=e=>U.code=e,type:`text`,class:`admin-input`,placeholder:`377`},null,512),[[a,U.code]])]),o(`div`,Se,[n[12]||=o(`label`,{for:`catalog-name`},[_(`نام کالیته `),o(`span`,{class:`admin-form__required`},`*`)],-1),d(o(`input`,{id:`catalog-name`,"onUpdate:modelValue":n[4]||=e=>U.name=e,type:`text`,class:`admin-input`},null,512),[[a,U.name]])])]),o(`div`,Ce,[o(`div`,we,[n[13]||=o(`label`,{for:`catalog-order`},`ترتیب نمایش`,-1),d(o(`input`,{id:`catalog-order`,"onUpdate:modelValue":n[5]||=e=>U.displayOrder=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[a,U.displayOrder,void 0,{number:!0}]])]),o(`div`,Te,[p(ce,{modelValue:U.isActive,"onUpdate:modelValue":n[6]||=e=>U.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])]),p(ue,{modelValue:U.imageUrl,"onUpdate:modelValue":n[7]||=e=>U.imageUrl=e,label:`تصویر بنر کالیته`},null,8,[`modelValue`])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-4fb827ad`]]);export{N as default};
\ No newline at end of file
diff --git a/dist/assets/CatalogsView-DxuVgGlS.js b/dist/assets/CatalogsView-DxuVgGlS.js
deleted file mode 100644
index f802ce4..0000000
--- a/dist/assets/CatalogsView-DxuVgGlS.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,At as t,G as n,I as r,K as i,Mt as a,N as o,Nt as s,a as c,b as l,c as u,et as ee,f as d,g as f,h as p,m,nt as h,o as te,p as g,t as _,x as v,y}from"./http-WTIyGIuL.js";import{L as ne,N as re,U as ie,V as b,h as ae,p as x}from"./index-BOMJTziC.js";import{t as oe}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as se}from"./BaseSwitch-gjOaAbzm.js";import{t as ce}from"./BaseEmptyState-Wc1O8rBP.js";import{t as le}from"./AdminImagePicker-DcFp1rIR.js";import{t as S}from"./AdminSelect-BVy_0-3W.js";import{t as C}from"./ActiveSwitchCell-vuwwhrED.js";var ue={class:`catalogs-page`},de={class:`catalogs-page__filters admin-card`},fe={class:`catalogs-page__search`},pe={key:2,class:`catalogs-page__table admin-card desktop-only`},me={class:`admin-table-wrap`},he={class:`admin-table`},ge={class:`numeric`},_e={class:`numeric`},ve={class:`status`},ye={class:`actions`},be=[`onClick`],xe={key:3,class:`compact-only admin-card-list`},w={class:`admin-card-item__header`},T={class:`admin-card-item__title`},E={class:`admin-card-item__meta`},D={class:`admin-card-item__actions`},O=[`onClick`],k={key:0,class:`admin-form__error`,role:`alert`},A={class:`admin-form__field`},j={class:`admin-form__row`},M={class:`admin-form__field`},Se={class:`admin-form__field`},Ce={class:`admin-form__row`},we={class:`admin-form__field`},Te={class:`admin-form__field`},Ee=[`disabled`],N=te(v({__name:`CatalogsView`,setup(te){let v=h([]),N=h([]),P=h(``),F=h(`all`),I=h(!0),L=h(null),R=h(null),z=h(``),B=h(!1),V=c(),De=d(()=>[{value:`all`,label:`همه شرکتها`},...N.value.map(e=>({value:e.id,label:e.name}))]),Oe=d(()=>N.value.map(e=>({value:e.id,label:e.name}))),H=()=>({companyId:N.value[0]?.id??``,code:``,name:``,displayOrder:v.value.length+1,isActive:!0,imageUrl:null}),U=ee(H()),ke=d(()=>L.value!==null),W=d(()=>L.value===`edit`?`ویرایش کالیته`:`افزودن کالیته`),G=d(()=>U.code.trim()&&U.name.trim()&&U.companyId),K=d(()=>P.value.trim().length>0||F.value!==`all`),q=d(()=>{let e=v.value;F.value!==`all`&&(e=e.filter(e=>e.companyId===F.value));let t=P.value.trim();return t&&(e=e.filter(e=>e.code.includes(t)||e.name.includes(t)||e.companyName.includes(t))),e});async function Ae(){I.value=!0;try{let[e,t]=await Promise.all([x.list(),ae.list()]);v.value=e,N.value=t}catch(e){V.error(e instanceof _?e.message:`بارگذاری کالیتهها انجام نشد.`)}finally{I.value=!1}}e(()=>{Ae()});function J(e){return N.value.find(t=>t.id===e)?.name??`—`}function Y(){L.value=`add`,R.value=null,Object.assign(U,H()),z.value=``}function X(e){L.value=`edit`,R.value=e.id,U.companyId=e.companyId,U.code=e.code,U.name=e.name,U.displayOrder=e.displayOrder,U.isActive=e.isActive,U.imageUrl=e.imageUrl??null,z.value=``}function Z(){L.value=null,R.value=null,z.value=``}async function Q(){if(!G.value){z.value=`کد، نام و شرکت الزامی هستند.`;return}B.value=!0;try{if(L.value===`edit`&&R.value){let e=await x.update(R.value,{code:U.code.trim(),name:U.name.trim(),displayOrder:Number(U.displayOrder)||1,isActive:U.isActive,imageUrl:U.imageUrl}),t=v.value.findIndex(e=>e.id===R.value);t!==-1&&(v.value[t]={...v.value[t],...e,companyName:J(U.companyId)}),V.success(`اطلاعات کالیته بهروزرسانی شد.`)}else{let e=await x.create({companyId:U.companyId,code:U.code.trim(),name:U.name.trim(),displayOrder:Number(U.displayOrder)||1,isActive:U.isActive,imageUrl:U.imageUrl});v.value.push({...e,companyName:e.companyName||J(U.companyId),productCount:e.productCount??0}),V.success(`کالیته جدید ثبت شد.`)}Z()}catch(e){V.error(e instanceof _?e.message:`ذخیره کالیته انجام نشد.`)}finally{B.value=!1}}async function $(e,t){await x.setActive(e,t)}function je(){P.value=``,F.value=`all`}return(e,c)=>(o(),f(`div`,ue,[g(`div`,{class:`admin-page-header`},[c[8]||=g(`div`,null,[g(`h1`,{class:`admin-page-header__title`},`کالیتهها`)],-1),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن کالیته `)]),g(`div`,de,[g(`div`,fe,[l(re,{name:`search`,size:18}),i(g(`input`,{"onUpdate:modelValue":c[0]||=e=>P.value=e,type:`search`,class:`catalogs-page__search-input`,placeholder:`جستجو بر اساس کد یا نام...`},null,512),[[b,P.value]])]),l(S,{modelValue:F.value,"onUpdate:modelValue":c[1]||=e=>F.value=e,class:`catalogs-page__company-filter`,"aria-label":`فیلتر شرکت`,options:De.value},null,8,[`modelValue`,`options`])]),I.value?(o(),m(oe,{key:0,variant:`table`})):q.value.length?(o(),f(`div`,pe,[g(`div`,me,[g(`table`,he,[c[9]||=g(`thead`,null,[g(`tr`,null,[g(`th`,null,`تصویر`),g(`th`,null,`کد`),g(`th`,null,`نام کالیته`),g(`th`,null,`شرکت`),g(`th`,{class:`numeric`},`ترتیب`),g(`th`,{class:`numeric`},`تعداد محصول`),g(`th`,{class:`status`},`وضعیت`),g(`th`,{class:`actions`},`عملیات`)])],-1),g(`tbody`,null,[(o(!0),f(u,null,r(q.value,e=>(o(),f(`tr`,{key:e.id},[g(`td`,null,[g(`span`,{class:t([`catalog-thumb`,{"catalog-thumb--empty":!e.imageUrl}]),style:a(e.imageUrl?{backgroundImage:`url(${e.imageUrl})`}:void 0)},null,6)]),g(`td`,null,s(e.code),1),g(`td`,null,s(e.name),1),g(`td`,null,s(e.companyName),1),g(`td`,ge,s(e.displayOrder),1),g(`td`,_e,s(e.productCount),1),g(`td`,ve,[l(C,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`کالیته`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),g(`td`,ye,[g(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,be)])]))),128))])])])])):(o(),m(ce,{key:1,class:`admin-card`,icon:`catalogs`,title:K.value?`نتیجهای یافت نشد`:`کالیتهای ثبت نشده`,description:K.value?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین کالیته را ثبت کنید.`},{default:n(()=>[K.value?(o(),f(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:je},` پاک کردن فیلترها `)):(o(),f(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن کالیته `))]),_:1},8,[`title`,`description`])),!I.value&&q.value.length?(o(),f(`div`,xe,[(o(!0),f(u,null,r(q.value,e=>(o(),f(`article`,{key:e.id,class:`admin-card-item`},[g(`div`,w,[g(`span`,{class:t([`catalog-thumb`,{"catalog-thumb--empty":!e.imageUrl}]),style:a(e.imageUrl?{backgroundImage:`url(${e.imageUrl})`}:void 0)},null,6),g(`p`,T,`کالیته `+s(e.code)+` — `+s(e.name),1),l(C,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`کالیته`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),g(`div`,E,[g(`span`,null,s(e.companyName),1),g(`span`,null,s(e.productCount)+` محصول`,1),g(`span`,null,`ترتیب: `+s(e.displayOrder),1)]),g(`div`,D,[g(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,O)])]))),128))])):p(``,!0),l(ne,{open:ke.value,title:W.value,size:`lg`,onClose:Z},{footer:n(()=>[g(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!G.value||B.value,onClick:Q},s(L.value===`edit`?`ذخیره تغییرات`:`ثبت کالیته`),9,Ee)]),default:n(()=>[g(`form`,{class:`admin-form`,onSubmit:ie(Q,[`prevent`])},[z.value?(o(),f(`p`,k,s(z.value),1)):p(``,!0),g(`div`,A,[c[10]||=g(`label`,null,[y(`شرکت `),g(`span`,{class:`admin-form__required`},`*`)],-1),l(S,{modelValue:U.companyId,"onUpdate:modelValue":c[2]||=e=>U.companyId=e,block:``,"aria-label":`انتخاب شرکت`,placeholder:`انتخاب شرکت`,options:Oe.value},null,8,[`modelValue`,`options`])]),g(`div`,j,[g(`div`,M,[c[11]||=g(`label`,{for:`catalog-code`},[y(`کد کالیته `),g(`span`,{class:`admin-form__required`},`*`)],-1),i(g(`input`,{id:`catalog-code`,"onUpdate:modelValue":c[3]||=e=>U.code=e,type:`text`,class:`admin-input`,placeholder:`377`},null,512),[[b,U.code]])]),g(`div`,Se,[c[12]||=g(`label`,{for:`catalog-name`},[y(`نام کالیته `),g(`span`,{class:`admin-form__required`},`*`)],-1),i(g(`input`,{id:`catalog-name`,"onUpdate:modelValue":c[4]||=e=>U.name=e,type:`text`,class:`admin-input`},null,512),[[b,U.name]])])]),g(`div`,Ce,[g(`div`,we,[c[13]||=g(`label`,{for:`catalog-order`},`ترتیب نمایش`,-1),i(g(`input`,{id:`catalog-order`,"onUpdate:modelValue":c[5]||=e=>U.displayOrder=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[b,U.displayOrder,void 0,{number:!0}]])]),g(`div`,Te,[l(se,{modelValue:U.isActive,"onUpdate:modelValue":c[6]||=e=>U.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])]),l(le,{modelValue:U.imageUrl,"onUpdate:modelValue":c[7]||=e=>U.imageUrl=e,label:`تصویر بنر کالیته`},null,8,[`modelValue`])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-4fb827ad`]]);export{N as default};
\ No newline at end of file
diff --git a/dist/assets/CategoriesView-Bt7aQmf-.css b/dist/assets/CategoriesView-Bt7aQmf-.css
new file mode 100644
index 0000000..a00f742
--- /dev/null
+++ b/dist/assets/CategoriesView-Bt7aQmf-.css
@@ -0,0 +1 @@
+.admin-page-header__sub[data-v-45420745]{color:var(--color-text-muted);margin:4px 0 0;font-size:.85rem}.categories-admin__grid[data-v-45420745]{align-items:start;gap:16px;display:grid}.categories-panel[data-v-45420745]{padding:20px}.categories-panel__head[data-v-45420745]{border-bottom:1px solid var(--color-border);justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px;padding-bottom:14px;display:flex}.categories-panel__head h2[data-v-45420745]{margin:0 0 4px;font-size:1.05rem;font-weight:700}.categories-panel__head p[data-v-45420745]{color:var(--color-text-muted);margin:0;font-size:.78rem}.categories-panel__add[data-v-45420745]{border:1px dashed var(--color-border);background:var(--color-bg);border-radius:12px;gap:8px;margin-bottom:16px;padding:14px;display:grid}.categories-panel__empty[data-v-45420745]{text-align:center;color:var(--color-text-muted);background:var(--color-bg);border-radius:12px;margin:0;padding:28px 12px;font-size:.875rem}.categories-panel__list[data-v-45420745]{gap:12px;display:grid}.category-row[data-v-45420745]{border:1px solid var(--color-border);background:var(--color-bg);border-radius:14px;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:12px;padding:12px;display:grid}.category-row__fields[data-v-45420745]{gap:8px;min-width:0;display:grid}.category-row__line[data-v-45420745]{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.category-row__id[data-v-45420745]{color:var(--color-text-muted);margin:0;font-family:ui-monospace,monospace;font-size:.72rem}.category-row__remove[data-v-45420745]{color:var(--color-danger,#dc3545);font:inherit;cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:6px 4px;font-size:.8125rem}.category-row[data-v-45420745] .image-picker__preview{width:72px;height:60px}@media (width>=900px){.categories-admin__grid[data-v-45420745]{grid-template-columns:1fr 1fr}}@media (width<=640px){.category-row[data-v-45420745]{grid-template-columns:1fr}.category-row__remove[data-v-45420745]{justify-self:start}}
diff --git a/dist/assets/CategoriesView-BtzgdW50.js b/dist/assets/CategoriesView-BtzgdW50.js
deleted file mode 100644
index 58a3bb0..0000000
--- a/dist/assets/CategoriesView-BtzgdW50.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,I as t,N as n,Nt as r,a as i,b as a,c as o,et as s,g as c,m as l,nt as u,o as d,p as f,t as p,x as m}from"./http-WTIyGIuL.js";import{C as h}from"./index-BOMJTziC.js";import{t as g}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as _}from"./AdminImagePicker-DcFp1rIR.js";var v={class:`categories-admin`},y={class:`admin-page-header`},b=[`disabled`],x={key:1,class:`categories-admin__grid`},S={class:`admin-card`},C={class:`categories-admin__list`},w={class:`admin-card`},T={class:`categories-admin__list`},E=d(m({__name:`CategoriesView`,setup(d){let m=[{id:`trousers`,title:`پارچههای شلواری`},{id:`suit`,title:`پارچههای کتشلواری`},{id:`shirt`,title:`پارچههای پیراهنی`}],E=[{id:`summer`,title:`تابستانه`},{id:`winter`,title:`زمستانه`},{id:`all_season`,title:`چهارفصل`}],D=s({trousers:null,suit:null,shirt:null,summer:null,winter:null,all_season:null}),O=u(!0),k=u(!1),A=i();async function j(){O.value=!0;try{let e=(await h.get()).categoryImagesJson??{};for(let t of Object.keys(D))D[t]=e[t]??null}catch(e){A.error(e instanceof p?e.message:`بارگذاری تصاویر دستهها ناموفق بود.`)}finally{O.value=!1}}async function M(){k.value=!0;try{let e={};for(let[t,n]of Object.entries(D))n&&(e[t]=n);await h.update({categoryImagesJson:e}),A.success(`تصاویر دستهبندی ذخیره شد.`)}catch(e){A.error(e instanceof p?e.message:`ذخیره تصاویر ناموفق بود.`)}finally{k.value=!1}}return e(()=>{j()}),(e,i)=>(n(),c(`div`,v,[f(`div`,y,[i[0]||=f(`div`,null,[f(`h1`,{class:`admin-page-header__title`},`دستهبندیها`),f(`p`,{class:`admin-page-header__sub`},`تصویر هر دسته در اپ کاربر نمایش داده میشود.`)],-1),f(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:k.value||O.value,onClick:M},r(k.value?`در حال ذخیره...`:`ذخیره تصاویر`),9,b)]),O.value?(n(),l(g,{key:0,variant:`cards`})):(n(),c(`div`,x,[f(`section`,S,[i[1]||=f(`h2`,null,`بر اساس کاربرد`,-1),f(`div`,C,[(n(),c(o,null,t(m,e=>a(_,{key:e.id,label:e.title,"model-value":D[e.id],"onUpdate:modelValue":t=>D[e.id]=t},null,8,[`label`,`model-value`,`onUpdate:modelValue`])),64))])]),f(`section`,w,[i[2]||=f(`h2`,null,`بر اساس فصل`,-1),f(`div`,T,[(n(),c(o,null,t(E,e=>a(_,{key:e.id,label:e.title,"model-value":D[e.id],"onUpdate:modelValue":t=>D[e.id]=t},null,8,[`label`,`model-value`,`onUpdate:modelValue`])),64))])])]))]))}}),[[`__scopeId`,`data-v-551e5d97`]]);export{E as default};
\ No newline at end of file
diff --git a/dist/assets/CategoriesView-CL20Eino.css b/dist/assets/CategoriesView-CL20Eino.css
deleted file mode 100644
index 44a484b..0000000
--- a/dist/assets/CategoriesView-CL20Eino.css
+++ /dev/null
@@ -1 +0,0 @@
-.admin-page-header__sub[data-v-551e5d97]{color:var(--color-text-muted);margin:4px 0 0;font-size:.85rem}.categories-admin__grid[data-v-551e5d97]{gap:16px;display:grid}.categories-admin__grid h2[data-v-551e5d97]{margin:0 0 14px;font-size:1rem}.categories-admin__list[data-v-551e5d97]{gap:16px;display:grid}@media (width>=900px){.categories-admin__grid[data-v-551e5d97]{grid-template-columns:1fr 1fr}}
diff --git a/dist/assets/CategoriesView-CeAD16yR.js b/dist/assets/CategoriesView-CeAD16yR.js
new file mode 100644
index 0000000..e46163b
--- /dev/null
+++ b/dist/assets/CategoriesView-CeAD16yR.js
@@ -0,0 +1 @@
+import{$ as e,B as t,C as n,N as r,Q as i,St as a,U as o,W as s,X as c,Y as l,Z as ee,_t as u,ct as d,ht as f,nt as p,ot as te,q as m,rt as h,ut as g,vt as _,z as ne}from"./index-BHqDDh7X.js";import{t as re}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as v}from"./BaseSwitch-DYYNQNXf.js";import{t as y}from"./AdminImagePicker-DzV79efN.js";var ie={class:`categories-admin`},b={class:`admin-page-header`},ae=[`disabled`],oe={key:1,class:`categories-admin__grid`},se={class:`admin-card categories-panel`},ce={class:`categories-panel__head`},le={key:0,class:`categories-panel__add`},ue={key:1,class:`categories-panel__empty`},de={key:2,class:`categories-panel__list`},fe={class:`category-row__fields`},pe={class:`category-row__line`},me=[`onUpdate:modelValue`],he={class:`category-row__line`},ge=[`onUpdate:modelValue`],x={class:`category-row__line`},S=[`onUpdate:modelValue`],C=[`value`],w={class:`category-row__id`,dir:`ltr`},T=[`onClick`],E={class:`admin-card categories-panel`},D={class:`categories-panel__head`},O={key:0,class:`categories-panel__add`},k={key:1,class:`categories-panel__empty`},A={key:2,class:`categories-panel__list`},j={class:`category-row__fields`},M={class:`category-row__line`},N=[`onUpdate:modelValue`],P={class:`category-row__line`},F=[`onUpdate:modelValue`],I={class:`category-row__line`},L=[`onUpdate:modelValue`],_e={class:`category-row__line`},ve=[`onUpdate:modelValue`],ye=[`value`],be={class:`category-row__id`,dir:`ltr`},xe=[`onClick`],R=t(h({__name:`CategoriesView`,setup(t){let h=_([]),R=_([]),z=u({}),B=_(!0),V=_(!1),H=ne(),U=_(!1),W=_(!1),G=[{value:`bolt`,label:`آذرخش`},{value:`feather`,label:`پر`},{value:`diamond`,label:`الماس`},{value:`grid`,label:`شبکه`},{value:`bag`,label:`کیف`},{value:`id-card`,label:`کارت`},{value:`catalog`,label:`کالیته`},{value:`headset`,label:`پشتیبانی`},{value:`home`,label:`خانه`}];function Se(e){return e===`shirt`?`id-card`:e===`suit`?`bag`:`grid`}function Ce(e){return e===`summer`?`bolt`:e===`winter`?`feather`:`diamond`}let K=u({id:``,title:``,subtitle:`مشاهده محصولات`,icon:`grid`,showTitle:!0,showSubtitle:!0,showIcon:!0}),q=u({id:``,title:``,description:``,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0});function J(e){return e!==!1}let Y=l(()=>h.value.map(e=>e.id)),X=l(()=>R.value.map(e=>e.id));function Z(e){return e.trim().toLowerCase().replace(/\s+/g,`_`).replace(/[^a-z0-9_\u0600-\u06ff-]/gi,``).slice(0,48)}function Q(){let e=[...Y.value,...X.value];for(let t of e)t in z||(z[t]=null);for(let t of Object.keys(z))e.includes(t)||delete z[t]}async function $(){B.value=!0;try{let e=await n.get();h.value=e.categoryDefsJson?.usage?.length?e.categoryDefsJson.usage.map(e=>({id:e.id,title:e.title,subtitle:e.subtitle||`مشاهده محصولات`,icon:e.icon||Se(e.id),showTitle:J(e.showTitle),showSubtitle:J(e.showSubtitle),showIcon:J(e.showIcon)})):[{id:`trousers`,title:`پارچههای شلواری`,subtitle:`مشاهده محصولات`,icon:`grid`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`suit`,title:`پارچههای کتشلواری`,subtitle:`مشاهده محصولات`,icon:`bag`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`shirt`,title:`پارچههای پیراهنی`,subtitle:`مشاهده محصولات`,icon:`id-card`,showTitle:!0,showSubtitle:!0,showIcon:!0}],R.value=e.categoryDefsJson?.seasons?.length?e.categoryDefsJson.seasons.map(e=>({id:e.id,title:e.title,description:e.description||``,ctaLabel:e.ctaLabel||`مشاهده محصولات`,icon:e.icon||Ce(e.id),showTitle:J(e.showTitle),showDescription:J(e.showDescription),showCta:J(e.showCta),showIcon:J(e.showIcon)})):[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`,ctaLabel:`مشاهده محصولات`,icon:`bolt`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`,ctaLabel:`مشاهده محصولات`,icon:`feather`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصلهای سال`,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0}],Q();let t=e.categoryImagesJson??{};for(let e of Object.keys(z))z[e]=t[e]??null}catch(e){H.error(e instanceof r?e.message:`بارگذاری دستهها ناموفق بود.`),h.value.length||(h.value=[{id:`trousers`,title:`پارچههای شلواری`,subtitle:`مشاهده محصولات`,icon:`grid`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`suit`,title:`پارچههای کتشلواری`,subtitle:`مشاهده محصولات`,icon:`bag`,showTitle:!0,showSubtitle:!0,showIcon:!0},{id:`shirt`,title:`پارچههای پیراهنی`,subtitle:`مشاهده محصولات`,icon:`id-card`,showTitle:!0,showSubtitle:!0,showIcon:!0}]),R.value.length||(R.value=[{id:`summer`,title:`تابستانه`,description:`سبک، خنک و مناسب فصل گرم`,ctaLabel:`مشاهده محصولات`,icon:`bolt`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`winter`,title:`زمستانه`,description:`گرم و مناسب فصل سرد`,ctaLabel:`مشاهده محصولات`,icon:`feather`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0},{id:`all_season`,title:`چهارفصل`,description:`مناسب استفاده در بیشتر فصلهای سال`,ctaLabel:`مشاهده محصولات`,icon:`diamond`,showTitle:!0,showDescription:!0,showCta:!0,showIcon:!0}]),Q()}finally{B.value=!1}}function we(){let e=Z(K.id||K.title),t=K.title.trim();if(!e||!t){H.error(`شناسه و عنوان دسته کاربرد الزامی است.`);return}if(Y.value.includes(e)||X.value.includes(e)){H.error(`این شناسه از قبل وجود دارد.`);return}h.value.push({id:e,title:t,subtitle:K.subtitle.trim()||`مشاهده محصولات`,icon:K.icon,showTitle:K.showTitle,showSubtitle:K.showSubtitle,showIcon:K.showIcon}),z[e]=null,K.id=``,K.title=``,K.subtitle=`مشاهده محصولات`,K.icon=`grid`,K.showTitle=!0,K.showSubtitle=!0,K.showIcon=!0,U.value=!1}function Te(){let e=Z(q.id||q.title),t=q.title.trim();if(!e||!t){H.error(`شناسه و عنوان دسته فصل الزامی است.`);return}if(Y.value.includes(e)||X.value.includes(e)){H.error(`این شناسه از قبل وجود دارد.`);return}R.value.push({id:e,title:t,description:q.description.trim(),ctaLabel:q.ctaLabel.trim()||`مشاهده محصولات`,icon:q.icon,showTitle:q.showTitle,showDescription:q.showDescription,showCta:q.showCta,showIcon:q.showIcon}),z[e]=null,q.id=``,q.title=``,q.description=``,q.ctaLabel=`مشاهده محصولات`,q.icon=`diamond`,q.showTitle=!0,q.showDescription=!0,q.showCta=!0,q.showIcon=!0,W.value=!1}function Ee(e){if(h.value.length<=1){H.error(`حداقل یک دسته کاربرد لازم است.`);return}h.value=h.value.filter(t=>t.id!==e),delete z[e]}function De(e){if(R.value.length<=1){H.error(`حداقل یک دسته فصل لازم است.`);return}R.value=R.value.filter(t=>t.id!==e),delete z[e]}async function Oe(){V.value=!0;try{let e={};for(let[t,n]of Object.entries(z))n&&(e[t]=n);await n.update({categoryDefsJson:{usage:h.value,seasons:R.value},categoryImagesJson:e}),H.success(`دستهبندیها ذخیره شد.`),await $()}catch(e){H.error(e instanceof r?e.message:`ذخیره دستهبندیها ناموفق بود.`)}finally{V.value=!1}}return te(()=>{$()}),(t,n)=>(d(),e(`div`,ie,[c(`div`,b,[n[8]||=c(`div`,null,[c(`h1`,{class:`admin-page-header__title`},`دستهبندیها`),c(`p`,{class:`admin-page-header__sub`},` دستههای کاربرد و فصل را اضافه کنید. با کلید «نمایش / مخفی» مشخص کنید عنوان و توضیح در اپ کاربر دیده شود. `)],-1),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:V.value||B.value,onClick:Oe},a(V.value?`در حال ذخیره...`:`ذخیره تغییرات`),9,ae)]),B.value?(d(),ee(re,{key:0,variant:`cards`})):(d(),e(`div`,oe,[c(`section`,se,[c(`div`,ce,[c(`div`,null,[n[9]||=c(`h2`,null,`بر اساس کاربرد`,-1),c(`p`,null,a(h.value.length)+` دسته برای فیلتر محصول در اپ کاربر`,1)]),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:n[0]||=e=>U.value=!U.value},a(U.value?`بستن فرم`:`+ افزودن دسته`),1)]),U.value?(d(),e(`div`,le,[f(c(`input`,{"onUpdate:modelValue":n[1]||=e=>K.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان (مثلاً پارچههای مانتویی)`},null,512),[[s,K.title]]),f(c(`input`,{"onUpdate:modelValue":n[2]||=e=>K.id=e,class:`admin-input`,type:`text`,dir:`ltr`,placeholder:`شناسه انگلیسی (اختیاری، مثلاً mantle)`},null,512),[[s,K.id]]),f(c(`input`,{"onUpdate:modelValue":n[3]||=e=>K.subtitle=e,class:`admin-input`,type:`text`,placeholder:`زیرعنوان`},null,512),[[s,K.subtitle]]),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:we},`ثبت در لیست`)])):i(``,!0),h.value.length?(d(),e(`div`,de,[(d(!0),e(m,null,g(h.value,t=>(d(),e(`article`,{key:t.id,class:`category-row`},[p(y,{"model-value":z[t.id],"onUpdate:modelValue":e=>z[t.id]=e},null,8,[`model-value`,`onUpdate:modelValue`]),c(`div`,fe,[c(`div`,pe,[f(c(`input`,{"onUpdate:modelValue":e=>t.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان دسته`},null,8,me),[[s,t.title]]),p(v,{modelValue:t.showTitle,"onUpdate:modelValue":e=>t.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`div`,he,[f(c(`input`,{"onUpdate:modelValue":e=>t.subtitle=e,class:`admin-input`,type:`text`,placeholder:`زیرعنوان`},null,8,ge),[[s,t.subtitle]]),p(v,{modelValue:t.showSubtitle,"onUpdate:modelValue":e=>t.showSubtitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`div`,x,[f(c(`select`,{"onUpdate:modelValue":e=>t.icon=e,class:`admin-input`,"aria-label":`آیکون`},[(d(),e(m,null,g(G,e=>c(`option`,{key:e.value,value:e.value},` آیکون: `+a(e.label),9,C)),64))],8,S),[[o,t.icon]]),p(v,{modelValue:t.showIcon,"onUpdate:modelValue":e=>t.showIcon=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`p`,w,a(t.id),1)]),c(`button`,{type:`button`,class:`category-row__remove`,onClick:e=>Ee(t.id)},`حذف`,8,T)]))),128))])):(d(),e(`p`,ue,`هنوز دستهای ثبت نشده. با «افزودن دسته» شروع کنید.`))]),c(`section`,E,[c(`div`,D,[c(`div`,null,[n[10]||=c(`h2`,null,`بر اساس فصل`,-1),c(`p`,null,a(R.value.length)+` دسته فصلی برای فیلتر محصول`,1)]),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:n[4]||=e=>W.value=!W.value},a(W.value?`بستن فرم`:`+ افزودن دسته`),1)]),W.value?(d(),e(`div`,O,[f(c(`input`,{"onUpdate:modelValue":n[5]||=e=>q.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان (مثلاً بهاره)`},null,512),[[s,q.title]]),f(c(`input`,{"onUpdate:modelValue":n[6]||=e=>q.id=e,class:`admin-input`,type:`text`,dir:`ltr`,placeholder:`شناسه انگلیسی (اختیاری، مثلاً spring)`},null,512),[[s,q.id]]),f(c(`input`,{"onUpdate:modelValue":n[7]||=e=>q.description=e,class:`admin-input`,type:`text`,placeholder:`توضیح`},null,512),[[s,q.description]]),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Te},`ثبت در لیست`)])):i(``,!0),R.value.length?(d(),e(`div`,A,[(d(!0),e(m,null,g(R.value,t=>(d(),e(`article`,{key:t.id,class:`category-row`},[p(y,{"model-value":z[t.id],"onUpdate:modelValue":e=>z[t.id]=e},null,8,[`model-value`,`onUpdate:modelValue`]),c(`div`,j,[c(`div`,M,[f(c(`input`,{"onUpdate:modelValue":e=>t.title=e,class:`admin-input`,type:`text`,placeholder:`عنوان دسته`},null,8,N),[[s,t.title]]),p(v,{modelValue:t.showTitle,"onUpdate:modelValue":e=>t.showTitle=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`div`,P,[f(c(`input`,{"onUpdate:modelValue":e=>t.description=e,class:`admin-input`,type:`text`,placeholder:`توضیح`},null,8,F),[[s,t.description]]),p(v,{modelValue:t.showDescription,"onUpdate:modelValue":e=>t.showDescription=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`div`,I,[f(c(`input`,{"onUpdate:modelValue":e=>t.ctaLabel=e,class:`admin-input`,type:`text`,placeholder:`متن لینک (مشاهده محصولات)`},null,8,L),[[s,t.ctaLabel]]),p(v,{modelValue:t.showCta,"onUpdate:modelValue":e=>t.showCta=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`div`,_e,[f(c(`select`,{"onUpdate:modelValue":e=>t.icon=e,class:`admin-input`,"aria-label":`آیکون`},[(d(),e(m,null,g(G,e=>c(`option`,{key:e.value,value:e.value},` آیکون: `+a(e.label),9,ye)),64))],8,ve),[[o,t.icon]]),p(v,{modelValue:t.showIcon,"onUpdate:modelValue":e=>t.showIcon=e,"active-text":`نمایش`,"inactive-text":`مخفی`},null,8,[`modelValue`,`onUpdate:modelValue`])]),c(`p`,be,a(t.id),1)]),c(`button`,{type:`button`,class:`category-row__remove`,onClick:e=>De(t.id)},`حذف`,8,xe)]))),128))])):(d(),e(`p`,k,`هنوز دستهای ثبت نشده. با «افزودن دسته» شروع کنید.`))])]))]))}}),[[`__scopeId`,`data-v-45420745`]]);export{R as default};
\ No newline at end of file
diff --git a/dist/assets/CheckManagementView-DEYM2hmj.js b/dist/assets/CheckManagementView-DEYM2hmj.js
deleted file mode 100644
index 70d0662..0000000
--- a/dist/assets/CheckManagementView-DEYM2hmj.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,At as t,I as n,N as r,Nt as i,a,b as o,c as s,f as c,g as l,h as u,m as ee,nt as d,o as te,p as f,t as p,u as ne,ut as m,x as h,y as g}from"./http-WTIyGIuL.js";import{F as re,I as _,P as ie,U as v,m as y,n as b,r as x,x as S,y as ae}from"./index-BOMJTziC.js";import{c as C}from"./orderStatus-CYVblRJB.js";import{t as w}from"./StatusBadge-C_awmXg1.js";var oe={class:`checks-page`},se={class:`admin-page-header`},ce={key:0,class:`checks-page__order-meta`},le={class:`checks-page__stats`},ue={class:`checks-page__stat`},de={class:`checks-page__stat`},fe={class:`checks-page__stat`},pe={class:`checks-page__stat`},me={class:`admin-tabs`},he={key:0,class:`admin-empty-placeholder admin-card`},ge={key:1,class:`checks-page__list admin-card`},_e=[`onClick`],ve={class:`check-row__chevron`,"aria-hidden":`true`},ye=[`onClick`],be=[`src`],T={key:1,class:`check-row__thumb check-row__thumb--empty`},E={class:`check-row__meta`},D=[`disabled`,`onClick`],O=[`disabled`,`onClick`],k={key:0,class:`check-row__panel`},A={key:0,class:`check-row__fields`},j=[`dir`],M={key:1,class:`check-row__hint`},N={class:`check-row__photos`},xe=[`onClick`],Se=[`src`],Ce=[`onClick`],we=[`src`],Te={key:2,class:`check-row__hint`},Ee={class:`checks-page__footer`},De={class:`checks-page__note`},Oe={class:`admin-action-group`},ke=[`disabled`],Ae={key:0,class:`admin-empty-placeholder admin-card`},je={key:1,class:`checks-page__history`},Me={class:`checks-page__history-item-head`},Ne={class:`checks-page__history-meta`},P={key:0,class:`checks-page__history-note`},Pe={key:1,class:`checks-page__history-note`},Fe={class:`checks-page__history-item-head`},Ie={class:`checks-page__history-note`},Le=[`src`],F=te(h({__name:`CheckManagementView`,setup(te){let h=ie(),F=re(),I=a(),L=d(`info`),R=d(null),z=d([]),B=d(null),V=d(null),H=d(null),U=c(()=>R.value?ae(R.value):null),Re=c(()=>z.value.reduce((e,t)=>e+t.amount,0)),W=c(()=>z.value.filter(e=>e.status===`pending_review`)),ze=c(()=>z.value.length>0&&z.value.every(e=>e.status===`approved`)),G=c(()=>!ze.value||!R.value?!1:(R.value.rawStatus??R.value.status)===`checks_approved`),K=d(!1),q=c(()=>{let e=R.value?.statusHistory??[],t=new Set([`check_in_progress`,`awaiting_check_review`,`check_needs_fix`,`check_rejected`,`checks_approved`]),n=e.filter(e=>t.has(e.toStatus)||e.fromStatus&&t.has(e.fromStatus)||/چک/.test(e.note||``)||/چک/.test(e.reason||``));return[...n.length?n:e].sort((e,t)=>new Date(t.changedAt).getTime()-new Date(e.changedAt).getTime())}),J=c(()=>z.value.filter(e=>e.notes?.trim()).map(e=>({id:e.id,row:e.row,status:e.status,notes:e.notes,updatedAt:e.updatedAt})));async function Be(){let e=String(h.params.id);try{let[t,n]=await Promise.all([S.get(e),y.listByOrder(e)]);R.value=t,z.value=n,n.length===1&&(V.value=n[0].id)}catch(e){I.error(e instanceof p?e.message:`بارگذاری چکها انجام نشد.`)}}e(()=>{Be()});function Ve(){F.push(`/orders`)}function Y(e){return e===`approved`?`check_approved`:e===`rejected`?`check_rejected`:`pending_check_review`}function He(e){return e?e===`customer`?`مشتری`:e.startsWith(`admin:`)?`ادمین`:e:`—`}function X(e){if(!e)return`—`;try{return new Intl.DateTimeFormat(`fa-IR`,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}catch{return e.slice(0,16).replace(`T`,` `)}}function Ue(e){return[e.ownerFirstName,e.ownerLastName].filter(Boolean).join(` `)}function Z(e){return[{label:`بانک`,value:e.bankName},{label:`شعبه`,value:e.branchName},{label:`شناسه صیادی`,value:e.sayadId,ltr:!0},{label:`شماره چک`,value:e.checkNumber,ltr:!0},{label:`صاحب چک`,value:Ue(e)},{label:`کد ملی`,value:e.ownerNationalId,ltr:!0},{label:`یادداشت`,value:e.notes}].filter(e=>!!e.value?.trim())}function We(e){V.value=V.value===e.id?null:e.id}async function Q(e,t){B.value=e.id;try{let n=await y.updateStatus(e.id,{status:t}),r=z.value.findIndex(t=>t.id===e.id);return r!==-1&&(z.value[r]=n),R.value=await S.get(String(h.params.id)),!0}catch(e){return I.error(e instanceof p?e.message:`بهروزرسانی وضعیت چک انجام نشد.`),!1}finally{B.value=null}}async function $(e,t){if(t!==`approved`&&t!==`rejected`)return;let n=b(e.amount);await _(t===`approved`?{title:`تأیید چک`,message:`آیا از تأیید چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید چک`,cancelLabel:`انصراف`}:{title:`رد چک`,message:`آیا از رد چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`danger`,confirmLabel:`رد چک`,cancelLabel:`انصراف`})&&await Q(e,t)&&I.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}async function Ge(){let e=W.value;if(!e.length){I.error(`چکی برای تأیید وجود ندارد.`);return}if(await _({title:`تأیید همه چکها`,message:`آیا از تأیید ${e.length} چک در انتظار بررسی مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید همه`,cancelLabel:`انصراف`})){for(let t of e)if(!await Q(t,`approved`))return;I.success(`همه چکهای در انتظار تأیید شدند.`)}}async function Ke(){if(!(!R.value||K.value)&&await _({title:`تأیید نهایی سفارش`,message:`با تأیید نهایی، سفارش از مرحله بررسی چک خارج میشود و وارد آمادهسازی میگردد. ادامه میدهید؟`,tone:`primary`,confirmLabel:`تأیید نهایی`,cancelLabel:`انصراف`})){K.value=!0;try{let e=await S.updateStatus(R.value.id,{status:`final_approved`,note:`تأیید نهایی پس از تأیید همه چکها`});R.value=e,I.success(`سفارش تأیید نهایی شد.`)}catch(e){I.error(e instanceof p?e.message:`تأیید نهایی انجام نشد.`)}finally{K.value=!1}}}return(e,a)=>(r(),l(`div`,oe,[f(`div`,se,[a[5]||=f(`div`,null,[f(`h1`,{class:`admin-page-header__title`},`مدیریت چکهای سفارش`)],-1),U.value?(r(),l(`div`,ce,[o(w,{status:U.value.status},null,8,[`status`])])):u(``,!0)]),f(`div`,le,[f(`div`,ue,[a[6]||=f(`span`,null,`تعداد`,-1),f(`strong`,null,i(z.value.length),1)]),f(`div`,de,[a[7]||=f(`span`,null,`راس`,-1),f(`strong`,null,i(R.value?.checkRassDays??`—`)+` روز`,1)]),f(`div`,fe,[a[8]||=f(`span`,null,`مجموع چک`,-1),f(`strong`,null,i(m(b)(Re.value)),1)]),f(`div`,pe,[a[9]||=f(`span`,null,`مبلغ سفارش`,-1),f(`strong`,null,i(U.value?.totalAmount?m(b)(U.value.totalAmount):`—`),1)])]),f(`div`,me,[f(`button`,{type:`button`,class:t([`admin-tab`,{active:L.value===`info`}]),onClick:a[0]||=e=>L.value=`info`},` چکها (`+i(z.value.length)+`) `,3),f(`button`,{type:`button`,class:t([`admin-tab`,{active:L.value===`history`}]),onClick:a[1]||=e=>L.value=`history`},` تاریخچه `,2)]),L.value===`info`?(r(),l(s,{key:0},[z.value.length?(r(),l(`div`,ge,[(r(!0),l(s,null,n(z.value,e=>(r(),l(`div`,{key:e.id,class:t([`check-row`,{open:V.value===e.id}])},[f(`button`,{type:`button`,class:`check-row__main`,onClick:t=>We(e)},[f(`span`,ve,i(V.value===e.id?`▾`:`◂`),1),e.frontImage||e.backImage?(r(),l(`span`,{key:0,class:`check-row__thumb`,onClick:v(t=>H.value=e.frontImage||e.backImage,[`stop`])},[f(`img`,{src:e.frontImage||e.backImage,alt:``},null,8,be)],8,ye)):(r(),l(`span`,T,`بدون عکس`)),f(`span`,E,[f(`strong`,null,`چک `+i(e.row),1),f(`small`,null,[g(i(m(b)(e.amount))+` `,1),e.bankName?(r(),l(s,{key:0},[g(` · `+i(e.bankName),1)],64)):u(``,!0),g(` · `+i(m(x)(e.dueDate)),1)])]),o(w,{status:Y(e.status)},null,8,[`status`])],8,_e),f(`div`,{class:`check-row__actions`,onClick:a[2]||=v(()=>{},[`stop`])},[e.status===`pending_review`?(r(),l(s,{key:0},[f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:B.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,D),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:B.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,O)],64)):u(``,!0)]),V.value===e.id?(r(),l(`div`,k,[Z(e).length?(r(),l(`div`,A,[(r(!0),l(s,null,n(Z(e),e=>(r(),l(`div`,{key:e.label,class:`check-row__field`},[f(`span`,null,i(e.label),1),f(`strong`,{dir:e.ltr?`ltr`:void 0},i(e.value),9,j)]))),128))])):(r(),l(`p`,M,`جزئیات متنی بیشتری ثبت نشده است.`)),f(`div`,N,[e.frontImage?(r(),l(`button`,{key:0,type:`button`,class:`check-row__photo`,onClick:t=>H.value=e.frontImage},[f(`img`,{src:e.frontImage,alt:`روی چک`},null,8,Se),a[10]||=f(`span`,null,`روی`,-1)],8,xe)):u(``,!0),e.backImage?(r(),l(`button`,{key:1,type:`button`,class:`check-row__photo`,onClick:t=>H.value=e.backImage},[f(`img`,{src:e.backImage,alt:`پشت چک`},null,8,we),a[11]||=f(`span`,null,`پشت`,-1)],8,Ce)):u(``,!0),!e.frontImage&&!e.backImage?(r(),l(`p`,Te,` تصویری ثبت نشده. `)):u(``,!0)])])):u(``,!0)],2))),128))])):(r(),l(`div`,he,` چکی برای این سفارش ثبت نشده است. `)),f(`div`,Ee,[f(`p`,De,[G.value?(r(),l(s,{key:0},[g(` همه چکها تأیید شدهاند. برای ادامه، تأیید نهایی سفارش را ثبت کنید. `)],64)):R.value?.checkRassDate?(r(),l(s,{key:1},[g(` راس: `+i(m(x)(R.value.checkRassDate)),1)],64)):(r(),l(s,{key:2},[g(`راس بر اساس تاریخ ثبت سفارش محاسبه میشود.`)],64))]),f(`div`,Oe,[G.value?(r(),l(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,disabled:K.value,onClick:Ke},i(K.value?`در حال ثبت…`:`تأیید نهایی سفارش`),9,ke)):u(``,!0),W.value.length?(r(),l(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,onClick:Ge},` تأیید همه چکها `)):u(``,!0),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:Ve},` بازگشت `)])])],64)):(r(),l(s,{key:1},[!q.value.length&&!J.value.length?(r(),l(`div`,Ae,` هنوز تاریخچهای ثبت نشده است. `)):(r(),l(`div`,je,[(r(!0),l(s,null,n(q.value,e=>(r(),l(`article`,{key:e.id,class:`admin-card checks-page__history-item`},[f(`div`,Me,[f(`strong`,null,i(e.fromStatus?m(C)(e.fromStatus):`—`)+` → `+i(m(C)(e.toStatus)),1),f(`span`,null,i(X(e.changedAt)),1)]),f(`p`,Ne,`توسط `+i(He(e.changedBy)),1),e.note?(r(),l(`p`,P,i(e.note),1)):u(``,!0),e.reason?(r(),l(`p`,Pe,`دلیل: `+i(e.reason),1)):u(``,!0)]))),128)),(r(!0),l(s,null,n(J.value,e=>(r(),l(`article`,{key:`note-${e.id}`,class:`admin-card checks-page__history-item`},[f(`div`,Fe,[f(`strong`,null,`یادداشت چک `+i(e.row),1),f(`span`,null,i(X(e.updatedAt)),1)]),o(w,{status:Y(e.status)},null,8,[`status`]),f(`p`,Ie,i(e.notes),1)]))),128))]))],64)),(r(),ee(ne,{to:`body`},[H.value?(r(),l(`div`,{key:0,class:`checks-page__lightbox`,onClick:a[4]||=v(e=>H.value=null,[`self`])},[f(`button`,{type:`button`,class:`checks-page__lightbox-close`,onClick:a[3]||=e=>H.value=null},` بستن `),f(`img`,{src:H.value,alt:`پیشنمایش`},null,8,Le)])):u(``,!0)]))]))}}),[[`__scopeId`,`data-v-1cb3ca79`]]);export{F as default};
\ No newline at end of file
diff --git a/dist/assets/CheckManagementView-Dfau013q.js b/dist/assets/CheckManagementView-Dfau013q.js
new file mode 100644
index 0000000..8c2ceba
--- /dev/null
+++ b/dist/assets/CheckManagementView-Dfau013q.js
@@ -0,0 +1 @@
+import{$ as e,B as t,F as n,I as r,J as ee,K as i,L as a,N as o,Q as s,St as c,X as l,Y as u,Z as te,bt as d,ct as f,m as p,n as m,nt as h,ot as ne,q as g,r as _,rt as v,tt as y,ut as b,vt as x,x as S,y as re,yt as C,z as ie}from"./index-BHqDDh7X.js";import{c as w}from"./orderStatus-CYVblRJB.js";import{t as T}from"./StatusBadge-BMzuiwOg.js";var ae={class:`checks-page`},oe={class:`admin-page-header`},se={key:0,class:`checks-page__order-meta`},ce={class:`checks-page__stats`},le={class:`checks-page__stat`},ue={class:`checks-page__stat`},de={class:`checks-page__stat`},fe={class:`checks-page__stat`},pe={class:`admin-tabs`},me={key:0,class:`admin-empty-placeholder admin-card`},he={key:1,class:`checks-page__list admin-card`},ge=[`onClick`],_e={class:`check-row__chevron`,"aria-hidden":`true`},ve=[`onClick`],ye=[`src`],be={key:1,class:`check-row__thumb check-row__thumb--empty`},E={class:`check-row__meta`},D=[`disabled`,`onClick`],O=[`disabled`,`onClick`],k={key:0,class:`check-row__panel`},A={key:0,class:`check-row__fields`},j=[`dir`],M={key:1,class:`check-row__hint`},N={class:`check-row__photos`},xe=[`onClick`],Se=[`src`],Ce=[`onClick`],we=[`src`],Te={key:2,class:`check-row__hint`},Ee={class:`checks-page__footer`},De={class:`checks-page__note`},Oe={class:`admin-action-group`},ke=[`disabled`],Ae={key:0,class:`admin-empty-placeholder admin-card`},je={key:1,class:`checks-page__history`},Me={class:`checks-page__history-item-head`},Ne={class:`checks-page__history-meta`},Pe={key:0,class:`checks-page__history-note`},P={key:1,class:`checks-page__history-note`},Fe={class:`checks-page__history-item-head`},Ie={class:`checks-page__history-note`},Le=[`src`],F=t(v({__name:`CheckManagementView`,setup(t){let v=n(),F=r(),I=ie(),L=x(`info`),R=x(null),z=x([]),B=x(null),V=x(null),H=x(null),U=u(()=>R.value?re(R.value):null),Re=u(()=>z.value.reduce((e,t)=>e+t.amount,0)),W=u(()=>z.value.filter(e=>e.status===`pending_review`)),ze=u(()=>z.value.length>0&&z.value.every(e=>e.status===`approved`)),G=u(()=>!ze.value||!R.value?!1:(R.value.rawStatus??R.value.status)===`checks_approved`),K=x(!1),q=u(()=>{let e=R.value?.statusHistory??[],t=new Set([`check_in_progress`,`awaiting_check_review`,`check_needs_fix`,`check_rejected`,`checks_approved`]),n=e.filter(e=>t.has(e.toStatus)||e.fromStatus&&t.has(e.fromStatus)||/چک/.test(e.note||``)||/چک/.test(e.reason||``));return[...n.length?n:e].sort((e,t)=>new Date(t.changedAt).getTime()-new Date(e.changedAt).getTime())}),J=u(()=>z.value.filter(e=>e.notes?.trim()).map(e=>({id:e.id,row:e.row,status:e.status,notes:e.notes,updatedAt:e.updatedAt})));async function Be(){let e=String(v.params.id);try{let[t,n]=await Promise.all([S.get(e),p.listByOrder(e)]);R.value=t,z.value=n,n.length===1&&(V.value=n[0].id)}catch(e){I.error(e instanceof o?e.message:`بارگذاری چکها انجام نشد.`)}}ne(()=>{Be()});function Ve(){F.push(`/orders`)}function Y(e){return e===`approved`?`check_approved`:e===`rejected`?`check_rejected`:`pending_check_review`}function He(e){return e?e===`customer`?`مشتری`:e.startsWith(`admin:`)?`ادمین`:e:`—`}function X(e){if(!e)return`—`;try{return new Intl.DateTimeFormat(`fa-IR`,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}catch{return e.slice(0,16).replace(`T`,` `)}}function Ue(e){return[e.ownerFirstName,e.ownerLastName].filter(Boolean).join(` `)}function Z(e){return[{label:`بانک`,value:e.bankName},{label:`شعبه`,value:e.branchName},{label:`شناسه صیادی`,value:e.sayadId,ltr:!0},{label:`شماره چک`,value:e.checkNumber,ltr:!0},{label:`صاحب چک`,value:Ue(e)},{label:`کد ملی`,value:e.ownerNationalId,ltr:!0},{label:`یادداشت`,value:e.notes}].filter(e=>!!e.value?.trim())}function We(e){V.value=V.value===e.id?null:e.id}async function Q(e,t){B.value=e.id;try{let n=await p.updateStatus(e.id,{status:t}),r=z.value.findIndex(t=>t.id===e.id);return r!==-1&&(z.value[r]=n),R.value=await S.get(String(v.params.id)),!0}catch(e){return I.error(e instanceof o?e.message:`بهروزرسانی وضعیت چک انجام نشد.`),!1}finally{B.value=null}}async function $(e,t){if(t!==`approved`&&t!==`rejected`)return;let n=m(e.amount);await a(t===`approved`?{title:`تأیید چک`,message:`آیا از تأیید چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید چک`,cancelLabel:`انصراف`}:{title:`رد چک`,message:`آیا از رد چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`danger`,confirmLabel:`رد چک`,cancelLabel:`انصراف`})&&await Q(e,t)&&I.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}async function Ge(){let e=W.value;if(!e.length){I.error(`چکی برای تأیید وجود ندارد.`);return}if(await a({title:`تأیید همه چکها`,message:`آیا از تأیید ${e.length} چک در انتظار بررسی مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید همه`,cancelLabel:`انصراف`})){for(let t of e)if(!await Q(t,`approved`))return;I.success(`همه چکهای در انتظار تأیید شدند.`)}}async function Ke(){if(!(!R.value||K.value)&&await a({title:`تأیید نهایی سفارش`,message:`با تأیید نهایی، سفارش از مرحله بررسی چک خارج میشود و وارد آمادهسازی میگردد. ادامه میدهید؟`,tone:`primary`,confirmLabel:`تأیید نهایی`,cancelLabel:`انصراف`})){K.value=!0;try{let e=await S.updateStatus(R.value.id,{status:`final_approved`,note:`تأیید نهایی پس از تأیید همه چکها`});R.value=e,I.success(`سفارش تأیید نهایی شد.`)}catch(e){I.error(e instanceof o?e.message:`تأیید نهایی انجام نشد.`)}finally{K.value=!1}}}return(t,n)=>(f(),e(`div`,ae,[l(`div`,oe,[n[5]||=l(`div`,null,[l(`h1`,{class:`admin-page-header__title`},`مدیریت چکهای سفارش`)],-1),U.value?(f(),e(`div`,se,[h(T,{status:U.value.status},null,8,[`status`])])):s(``,!0)]),l(`div`,ce,[l(`div`,le,[n[6]||=l(`span`,null,`تعداد`,-1),l(`strong`,null,c(z.value.length),1)]),l(`div`,ue,[n[7]||=l(`span`,null,`راس`,-1),l(`strong`,null,c(R.value?.checkRassDays??`—`)+` روز`,1)]),l(`div`,de,[n[8]||=l(`span`,null,`مجموع چک`,-1),l(`strong`,null,c(C(m)(Re.value)),1)]),l(`div`,fe,[n[9]||=l(`span`,null,`مبلغ سفارش`,-1),l(`strong`,null,c(U.value?.totalAmount?C(m)(U.value.totalAmount):`—`),1)])]),l(`div`,pe,[l(`button`,{type:`button`,class:d([`admin-tab`,{active:L.value===`info`}]),onClick:n[0]||=e=>L.value=`info`},` چکها (`+c(z.value.length)+`) `,3),l(`button`,{type:`button`,class:d([`admin-tab`,{active:L.value===`history`}]),onClick:n[1]||=e=>L.value=`history`},` تاریخچه `,2)]),L.value===`info`?(f(),e(g,{key:0},[z.value.length?(f(),e(`div`,he,[(f(!0),e(g,null,b(z.value,t=>(f(),e(`div`,{key:t.id,class:d([`check-row`,{open:V.value===t.id}])},[l(`button`,{type:`button`,class:`check-row__main`,onClick:e=>We(t)},[l(`span`,_e,c(V.value===t.id?`▾`:`◂`),1),t.frontImage||t.backImage?(f(),e(`span`,{key:0,class:`check-row__thumb`,onClick:i(e=>H.value=t.frontImage||t.backImage,[`stop`])},[l(`img`,{src:t.frontImage||t.backImage,alt:``},null,8,ye)],8,ve)):(f(),e(`span`,be,`بدون عکس`)),l(`span`,E,[l(`strong`,null,`چک `+c(t.row),1),l(`small`,null,[y(c(C(m)(t.amount))+` `,1),t.bankName?(f(),e(g,{key:0},[y(` · `+c(t.bankName),1)],64)):s(``,!0),y(` · `+c(C(_)(t.dueDate)),1)])]),h(T,{status:Y(t.status)},null,8,[`status`])],8,ge),l(`div`,{class:`check-row__actions`,onClick:n[2]||=i(()=>{},[`stop`])},[t.status===`pending_review`?(f(),e(g,{key:0},[l(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:B.value===t.id,onClick:e=>$(t,`approved`)},` تأیید `,8,D),l(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:B.value===t.id,onClick:e=>$(t,`rejected`)},` رد `,8,O)],64)):s(``,!0)]),V.value===t.id?(f(),e(`div`,k,[Z(t).length?(f(),e(`div`,A,[(f(!0),e(g,null,b(Z(t),t=>(f(),e(`div`,{key:t.label,class:`check-row__field`},[l(`span`,null,c(t.label),1),l(`strong`,{dir:t.ltr?`ltr`:void 0},c(t.value),9,j)]))),128))])):(f(),e(`p`,M,`جزئیات متنی بیشتری ثبت نشده است.`)),l(`div`,N,[t.frontImage?(f(),e(`button`,{key:0,type:`button`,class:`check-row__photo`,onClick:e=>H.value=t.frontImage},[l(`img`,{src:t.frontImage,alt:`روی چک`},null,8,Se),n[10]||=l(`span`,null,`روی`,-1)],8,xe)):s(``,!0),t.backImage?(f(),e(`button`,{key:1,type:`button`,class:`check-row__photo`,onClick:e=>H.value=t.backImage},[l(`img`,{src:t.backImage,alt:`پشت چک`},null,8,we),n[11]||=l(`span`,null,`پشت`,-1)],8,Ce)):s(``,!0),!t.frontImage&&!t.backImage?(f(),e(`p`,Te,` تصویری ثبت نشده. `)):s(``,!0)])])):s(``,!0)],2))),128))])):(f(),e(`div`,me,` چکی برای این سفارش ثبت نشده است. `)),l(`div`,Ee,[l(`p`,De,[G.value?(f(),e(g,{key:0},[y(` همه چکها تأیید شدهاند. برای ادامه، تأیید نهایی سفارش را ثبت کنید. `)],64)):R.value?.checkRassDate?(f(),e(g,{key:1},[y(` راس: `+c(C(_)(R.value.checkRassDate)),1)],64)):(f(),e(g,{key:2},[y(`راس بر اساس تاریخ ثبت سفارش محاسبه میشود.`)],64))]),l(`div`,Oe,[G.value?(f(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,disabled:K.value,onClick:Ke},c(K.value?`در حال ثبت…`:`تأیید نهایی سفارش`),9,ke)):s(``,!0),W.value.length?(f(),e(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,onClick:Ge},` تأیید همه چکها `)):s(``,!0),l(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:Ve},` بازگشت `)])])],64)):(f(),e(g,{key:1},[!q.value.length&&!J.value.length?(f(),e(`div`,Ae,` هنوز تاریخچهای ثبت نشده است. `)):(f(),e(`div`,je,[(f(!0),e(g,null,b(q.value,t=>(f(),e(`article`,{key:t.id,class:`admin-card checks-page__history-item`},[l(`div`,Me,[l(`strong`,null,c(t.fromStatus?C(w)(t.fromStatus):`—`)+` → `+c(C(w)(t.toStatus)),1),l(`span`,null,c(X(t.changedAt)),1)]),l(`p`,Ne,`توسط `+c(He(t.changedBy)),1),t.note?(f(),e(`p`,Pe,c(t.note),1)):s(``,!0),t.reason?(f(),e(`p`,P,`دلیل: `+c(t.reason),1)):s(``,!0)]))),128)),(f(!0),e(g,null,b(J.value,t=>(f(),e(`article`,{key:`note-${t.id}`,class:`admin-card checks-page__history-item`},[l(`div`,Fe,[l(`strong`,null,`یادداشت چک `+c(t.row),1),l(`span`,null,c(X(t.updatedAt)),1)]),h(T,{status:Y(t.status)},null,8,[`status`]),l(`p`,Ie,c(t.notes),1)]))),128))]))],64)),(f(),te(ee,{to:`body`},[H.value?(f(),e(`div`,{key:0,class:`checks-page__lightbox`,onClick:n[4]||=i(e=>H.value=null,[`self`])},[l(`button`,{type:`button`,class:`checks-page__lightbox-close`,onClick:n[3]||=e=>H.value=null},` بستن `),l(`img`,{src:H.value,alt:`پیشنمایش`},null,8,Le)])):s(``,!0)]))]))}}),[[`__scopeId`,`data-v-1cb3ca79`]]);export{F as default};
\ No newline at end of file
diff --git a/dist/assets/ChecksListView-C8YqwOp4.js b/dist/assets/ChecksListView-C8YqwOp4.js
new file mode 100644
index 0000000..64d57c6
--- /dev/null
+++ b/dist/assets/ChecksListView-C8YqwOp4.js
@@ -0,0 +1 @@
+import{$ as e,B as t,I as n,N as r,P as ee,Q as i,St as a,W as te,X as o,Y as s,Z as ne,ct as c,ht as l,i as u,m as d,n as f,nt as p,ot as re,q as m,rt as h,ut as g,vt as _,x as ie,yt as v,z as ae}from"./index-BHqDDh7X.js";import{t as oe}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as se}from"./AdminSelect-BjB6PHdr.js";import{t as y}from"./StatusBadge-BMzuiwOg.js";var ce={class:`checks-list-page`},le={class:`admin-page-header`},b={class:`checks-list-page__summary`},x={key:0},S={class:`checks-list-page__filters admin-card`},C={class:`checks-list-page__search`},w={class:`checks-list-page__table admin-card desktop-only`},T={class:`admin-table-wrap`},E={class:`admin-table`},D=[`onClick`],O={dir:`ltr`},k={class:`admin-action-group`},A=[`disabled`,`onClick`],j=[`disabled`,`onClick`],M=[`onClick`],N={key:0,class:`checks-list-page__empty`},P={class:`compact-only admin-card-list`},F={class:`admin-card-item__header`},ue={class:`admin-card-item__title`},I={class:`admin-card-item__meta`},L={key:0},R={class:`admin-card-item__actions`},z=[`disabled`,`onClick`],B=[`disabled`,`onClick`],V=[`onClick`],H={key:0,class:`checks-list-page__empty`},U=t(h({__name:`ChecksListView`,setup(t){let h=n(),U=ae(),W=_([]),G=_(!0),K=_(``),q=_(`all`),J=_(null),de=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار بررسی`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`}],Y=s(()=>{let e=W.value;q.value!==`all`&&(e=e.filter(e=>e.status===q.value));let t=K.value.trim();return t&&(e=e.filter(e=>(e.orderNumber??``).includes(t)||(e.customerName??``).includes(t)||(e.bankName??``).includes(t)||(e.sayadId??``).includes(t))),e}),X=s(()=>W.value.filter(e=>e.status===`pending_review`).length);function Z(e){return e===`approved`?`final_approval`:e===`rejected`?`needs_correction`:`pending_check_review`}async function fe(){let e=await ie.list();W.value=e.flatMap(e=>(e.checks??[]).map(t=>({...t,orderNumber:e.orderNumber,customerName:e.customerName,orderStatus:e.status,settlementType:e.settlementMethod??e.settlementType??null})))}async function pe(){G.value=!0;try{W.value=await d.list()}catch{try{await fe()}catch(e){U.error(e instanceof r?e.message:`بارگذاری چکها انجام نشد.`)}}finally{G.value=!1}}re(()=>{pe()});function Q(e){h.push(`/orders/${e.orderId}/checks`)}async function $(e,t){J.value=e.id;try{let n=await d.updateStatus(e.id,{status:t}),r=W.value.findIndex(t=>t.id===e.id);r!==-1&&(W.value[r]={...W.value[r],...n,orderNumber:e.orderNumber,customerName:e.customerName,orderStatus:e.orderStatus,settlementType:e.settlementType}),U.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}catch(e){U.error(e instanceof r?e.message:`بهروزرسانی وضعیت چک انجام نشد.`)}finally{J.value=null}}return(t,n)=>(c(),e(`div`,ce,[o(`div`,le,[n[2]||=o(`div`,null,[o(`h1`,{class:`admin-page-header__title`},`چکها`)],-1),o(`div`,b,[o(`span`,null,a(W.value.length)+` چک`,1),X.value?(c(),e(`span`,x,a(X.value)+` در انتظار بررسی`,1)):i(``,!0)])]),o(`div`,S,[o(`div`,C,[p(ee,{name:`search`,size:18}),l(o(`input`,{"onUpdate:modelValue":n[0]||=e=>K.value=e,type:`search`,class:`checks-list-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، بانک، صیاد...`},null,512),[[te,K.value]])]),p(se,{modelValue:q.value,"onUpdate:modelValue":n[1]||=e=>q.value=e,class:`checks-list-page__status-select`,"aria-label":`فیلتر وضعیت چک`,options:de},null,8,[`modelValue`])]),G.value?(c(),ne(oe,{key:0,variant:`table`})):(c(),e(m,{key:1},[o(`div`,w,[o(`div`,T,[o(`table`,E,[n[3]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`شماره سفارش`),o(`th`,null,`مشتری`),o(`th`,null,`ردیف`),o(`th`,null,`مبلغ`),o(`th`,null,`بانک`),o(`th`,null,`شناسه صیادی`),o(`th`,null,`سررسید`),o(`th`,null,`وضعیت`),o(`th`,null,`عملیات`)])],-1),o(`tbody`,null,[(c(!0),e(m,null,g(Y.value,t=>(c(),e(`tr`,{key:t.id},[o(`td`,null,[o(`button`,{type:`button`,class:`checks-list-page__order-link`,onClick:e=>Q(t)},a(t.orderNumber||t.orderId),9,D)]),o(`td`,null,a(t.customerName||`—`),1),o(`td`,null,a(t.row),1),o(`td`,null,a(v(f)(t.amount)),1),o(`td`,null,a(t.bankName||`—`),1),o(`td`,O,a(t.sayadId||`—`),1),o(`td`,null,a(t.dueDate.slice(0,10)),1),o(`td`,null,[p(y,{status:Z(t.status)},null,8,[`status`])]),o(`td`,null,[o(`div`,k,[t.status===`pending_review`?(c(),e(m,{key:0},[o(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===t.id,onClick:e=>$(t,`approved`)},` تأیید `,8,A),o(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===t.id,onClick:e=>$(t,`rejected`)},` رد `,8,j)],64)):i(``,!0),o(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:e=>Q(t)},` جزئیات سفارش `,8,M)])])]))),128))])])]),Y.value.length?i(``,!0):(c(),e(`p`,N,` چکی با این فیلتر یافت نشد. `))]),o(`div`,P,[(c(!0),e(m,null,g(Y.value,t=>(c(),e(`article`,{key:t.id,class:`admin-card-item`},[o(`div`,F,[o(`p`,ue,a(t.orderNumber||t.orderId)+` — چک `+a(t.row),1),p(y,{status:Z(t.status)},null,8,[`status`])]),o(`div`,I,[o(`span`,null,a(t.customerName||`—`),1),o(`span`,null,a(v(f)(t.amount)),1),o(`span`,null,a(t.bankName||`—`),1),o(`span`,null,`سررسید `+a(t.dueDate.slice(0,10)),1),t.createdAt?(c(),e(`span`,L,`ثبت `+a(v(u)(t.createdAt)),1)):i(``,!0)]),o(`div`,R,[t.status===`pending_review`?(c(),e(m,{key:0},[o(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===t.id,onClick:e=>$(t,`approved`)},` تأیید `,8,z),o(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===t.id,onClick:e=>$(t,`rejected`)},` رد `,8,B)],64)):i(``,!0),o(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:e=>Q(t)},` جزئیات سفارش `,8,V)])]))),128)),Y.value.length?i(``,!0):(c(),e(`p`,H,` چکی با این فیلتر یافت نشد. `))])],64))]))}}),[[`__scopeId`,`data-v-09633f1f`]]);export{U as default};
\ No newline at end of file
diff --git a/dist/assets/ChecksListView-CcMjKrl8.js b/dist/assets/ChecksListView-CcMjKrl8.js
deleted file mode 100644
index 9262964..0000000
--- a/dist/assets/ChecksListView-CcMjKrl8.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,I as t,K as n,N as r,Nt as i,a,b as o,c as s,f as c,g as l,h as u,m as ee,nt as d,o as te,p as f,t as p,ut as m,x as h}from"./http-WTIyGIuL.js";import{F as ne,N as re,V as ie,i as ae,m as g,n as _,x as oe}from"./index-BOMJTziC.js";import{t as v}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as se}from"./AdminSelect-BVy_0-3W.js";import{t as y}from"./StatusBadge-C_awmXg1.js";var ce={class:`checks-list-page`},le={class:`admin-page-header`},b={class:`checks-list-page__summary`},x={key:0},S={class:`checks-list-page__filters admin-card`},C={class:`checks-list-page__search`},w={class:`checks-list-page__table admin-card desktop-only`},T={class:`admin-table-wrap`},E={class:`admin-table`},D=[`onClick`],O={dir:`ltr`},k={class:`admin-action-group`},A=[`disabled`,`onClick`],j=[`disabled`,`onClick`],M=[`onClick`],N={key:0,class:`checks-list-page__empty`},P={class:`compact-only admin-card-list`},F={class:`admin-card-item__header`},I={class:`admin-card-item__title`},ue={class:`admin-card-item__meta`},L={key:0},R={class:`admin-card-item__actions`},z=[`disabled`,`onClick`],B=[`disabled`,`onClick`],V=[`onClick`],H={key:0,class:`checks-list-page__empty`},U=te(h({__name:`ChecksListView`,setup(te){let h=ne(),U=a(),W=d([]),G=d(!0),K=d(``),q=d(`all`),J=d(null),de=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار بررسی`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`}],Y=c(()=>{let e=W.value;q.value!==`all`&&(e=e.filter(e=>e.status===q.value));let t=K.value.trim();return t&&(e=e.filter(e=>(e.orderNumber??``).includes(t)||(e.customerName??``).includes(t)||(e.bankName??``).includes(t)||(e.sayadId??``).includes(t))),e}),X=c(()=>W.value.filter(e=>e.status===`pending_review`).length);function Z(e){return e===`approved`?`final_approval`:e===`rejected`?`needs_correction`:`pending_check_review`}async function fe(){let e=await oe.list();W.value=e.flatMap(e=>(e.checks??[]).map(t=>({...t,orderNumber:e.orderNumber,customerName:e.customerName,orderStatus:e.status,settlementType:e.settlementMethod??e.settlementType??null})))}async function pe(){G.value=!0;try{W.value=await g.list()}catch{try{await fe()}catch(e){U.error(e instanceof p?e.message:`بارگذاری چکها انجام نشد.`)}}finally{G.value=!1}}e(()=>{pe()});function Q(e){h.push(`/orders/${e.orderId}/checks`)}async function $(e,t){J.value=e.id;try{let n=await g.updateStatus(e.id,{status:t}),r=W.value.findIndex(t=>t.id===e.id);r!==-1&&(W.value[r]={...W.value[r],...n,orderNumber:e.orderNumber,customerName:e.customerName,orderStatus:e.orderStatus,settlementType:e.settlementType}),U.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}catch(e){U.error(e instanceof p?e.message:`بهروزرسانی وضعیت چک انجام نشد.`)}finally{J.value=null}}return(e,a)=>(r(),l(`div`,ce,[f(`div`,le,[a[2]||=f(`div`,null,[f(`h1`,{class:`admin-page-header__title`},`چکها`)],-1),f(`div`,b,[f(`span`,null,i(W.value.length)+` چک`,1),X.value?(r(),l(`span`,x,i(X.value)+` در انتظار بررسی`,1)):u(``,!0)])]),f(`div`,S,[f(`div`,C,[o(re,{name:`search`,size:18}),n(f(`input`,{"onUpdate:modelValue":a[0]||=e=>K.value=e,type:`search`,class:`checks-list-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، بانک، صیاد...`},null,512),[[ie,K.value]])]),o(se,{modelValue:q.value,"onUpdate:modelValue":a[1]||=e=>q.value=e,class:`checks-list-page__status-select`,"aria-label":`فیلتر وضعیت چک`,options:de},null,8,[`modelValue`])]),G.value?(r(),ee(v,{key:0,variant:`table`})):(r(),l(s,{key:1},[f(`div`,w,[f(`div`,T,[f(`table`,E,[a[3]||=f(`thead`,null,[f(`tr`,null,[f(`th`,null,`شماره سفارش`),f(`th`,null,`مشتری`),f(`th`,null,`ردیف`),f(`th`,null,`مبلغ`),f(`th`,null,`بانک`),f(`th`,null,`شناسه صیادی`),f(`th`,null,`سررسید`),f(`th`,null,`وضعیت`),f(`th`,null,`عملیات`)])],-1),f(`tbody`,null,[(r(!0),l(s,null,t(Y.value,e=>(r(),l(`tr`,{key:e.id},[f(`td`,null,[f(`button`,{type:`button`,class:`checks-list-page__order-link`,onClick:t=>Q(e)},i(e.orderNumber||e.orderId),9,D)]),f(`td`,null,i(e.customerName||`—`),1),f(`td`,null,i(e.row),1),f(`td`,null,i(m(_)(e.amount)),1),f(`td`,null,i(e.bankName||`—`),1),f(`td`,O,i(e.sayadId||`—`),1),f(`td`,null,i(e.dueDate.slice(0,10)),1),f(`td`,null,[o(y,{status:Z(e.status)},null,8,[`status`])]),f(`td`,null,[f(`div`,k,[e.status===`pending_review`?(r(),l(s,{key:0},[f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,A),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,j)],64)):u(``,!0),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e)},` جزئیات سفارش `,8,M)])])]))),128))])])]),Y.value.length?u(``,!0):(r(),l(`p`,N,` چکی با این فیلتر یافت نشد. `))]),f(`div`,P,[(r(!0),l(s,null,t(Y.value,e=>(r(),l(`article`,{key:e.id,class:`admin-card-item`},[f(`div`,F,[f(`p`,I,i(e.orderNumber||e.orderId)+` — چک `+i(e.row),1),o(y,{status:Z(e.status)},null,8,[`status`])]),f(`div`,ue,[f(`span`,null,i(e.customerName||`—`),1),f(`span`,null,i(m(_)(e.amount)),1),f(`span`,null,i(e.bankName||`—`),1),f(`span`,null,`سررسید `+i(e.dueDate.slice(0,10)),1),e.createdAt?(r(),l(`span`,L,`ثبت `+i(m(ae)(e.createdAt)),1)):u(``,!0)]),f(`div`,R,[e.status===`pending_review`?(r(),l(s,{key:0},[f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,z),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,B)],64)):u(``,!0),f(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e)},` جزئیات سفارش `,8,V)])]))),128)),Y.value.length?u(``,!0):(r(),l(`p`,H,` چکی با این فیلتر یافت نشد. `))])],64))]))}}),[[`__scopeId`,`data-v-09633f1f`]]);export{U as default};
\ No newline at end of file
diff --git a/dist/assets/CompaniesView-B0sT9CSl.js b/dist/assets/CompaniesView-B0sT9CSl.js
deleted file mode 100644
index 7aa78c4..0000000
--- a/dist/assets/CompaniesView-B0sT9CSl.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,G as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,et as ee,f as l,g as u,h as d,m as f,nt as p,o as te,p as m,t as h,x as g,y as _}from"./http-WTIyGIuL.js";import{F as ne,I as re,L as ie,T as ae,U as oe,V as v,h as y}from"./index-BOMJTziC.js";import{t as se}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as ce}from"./BaseSwitch-gjOaAbzm.js";import{t as le}from"./BaseEmptyState-Wc1O8rBP.js";import{t as b}from"./ActiveSwitchCell-vuwwhrED.js";var ue={class:`companies-page`},de={key:2,class:`companies-page__table admin-card desktop-only`},fe={class:`admin-table-wrap`},pe={class:`admin-table`},me=[`src`,`alt`],he={key:1,class:`company-logo company-logo--fallback`},ge={class:`numeric`},_e={class:`status`},ve={class:`actions`},ye={class:`admin-action-group`},be=[`onClick`],xe=[`onClick`],x={key:3,class:`compact-only admin-card-list`},S={class:`admin-card-item__header`},C={class:`companies-page__card-logo`},w=[`src`,`alt`],T={key:1,class:`company-logo company-logo--fallback`},E={class:`admin-card-item__title`},D={class:`companies-page__card-desc`},O={class:`admin-card-item__meta`},k={class:`admin-card-item__actions`},A=[`onClick`],j=[`onClick`],M={key:0,class:`admin-form__error`,role:`alert`},Se={class:`admin-form__field`},Ce={class:`logo-upload`},we={key:0,class:`logo-upload__preview-wrap`},Te=[`src`],Ee={key:1,class:`logo-upload__dropzone`,for:`company-logo-file`},De={class:`admin-form__field`},Oe={class:`admin-form__field`},ke={class:`admin-form__row`},Ae={class:`admin-form__field`},N={class:`admin-form__field`},je=[`disabled`],Me=2097152,P=te(g({__name:`CompaniesView`,setup(te){let g=[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`],P=ne(),F=o(),I=p([]),L=p(!0),R=p(null),z=p(null),B=p(null),V=p(null),H=p(!1);async function Ne(){L.value=!0;try{I.value=await y.list()}catch(e){F.error(e instanceof h?e.message:`بارگذاری شرکتها انجام نشد.`)}finally{L.value=!1}}e(()=>{Ne()});let U=()=>({name:``,description:``,displayOrder:I.value.length+1,isActive:!0}),W=ee(U()),G=p(``),Pe=l(()=>R.value!==null),Fe=l(()=>R.value===`edit`?`ویرایش شرکت`:`افزودن شرکت`),Ie=l(()=>R.value===`edit`?`ذخیره تغییرات`:`ثبت شرکت`),Le=l(()=>W.name.trim().length>0&&B.value!==null);function K(){B.value=null,V.value&&(V.value.value=``)}function q(){R.value=`add`,z.value=null,Object.assign(W,U()),K(),G.value=``}function J(e){R.value=`edit`,z.value=e.id,W.name=e.name,W.description=e.description===`—`?``:e.description,W.displayOrder=e.displayOrder,W.isActive=e.isActive,B.value=e.logoUrl,V.value&&(V.value.value=``),G.value=``}function Y(){R.value=null,z.value=null,G.value=``,K()}function Re(e){let t=e.target.files?.[0];if(!t)return;if(!g.includes(t.type)){G.value=`فرمت مجاز: PNG، JPG، WEBP یا SVG`;return}if(t.size>Me){G.value=`حداکثر حجم تصویر ۲ مگابایت است.`;return}G.value=``;let n=new FileReader;n.onload=()=>{B.value=n.result},n.readAsDataURL(t)}async function ze(){B.value&&await re({title:`حذف تصویر`,message:`آیا از حذف لوگوی شرکت مطمئن هستید؟`,confirmLabel:`حذف`,cancelLabel:`انصراف`,tone:`danger`})&&K()}async function X(){let e=W.name.trim();if(!e){G.value=`نام شرکت الزامی است.`;return}if(!B.value){G.value=`آپلود لوگو الزامی است.`;return}if(I.value.some(t=>t.name===e&&t.id!==z.value)){G.value=`شرکتی با این نام قبلاً ثبت شده است.`;return}H.value=!0;try{if(R.value===`edit`&&z.value){let t=await y.update(z.value,{name:e,description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||1,isActive:W.isActive,logoUrl:B.value}),n=I.value.findIndex(e=>e.id===z.value);n!==-1&&(I.value[n]={...I.value[n],...t}),F.success(`اطلاعات شرکت بهروزرسانی شد.`)}else{let t=await y.create({name:e,slug:ae(e),description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||I.value.length+1,isActive:W.isActive,logoUrl:B.value});I.value.push(t),F.success(`شرکت جدید ثبت شد.`)}Y()}catch(e){F.error(e instanceof h?e.message:`ذخیره شرکت انجام نشد.`)}finally{H.value=!1}}async function Z(e,t){await y.setActive(e,t)}function Q(e){P.push(`/companies/${e}/accounts`)}function $(e){return e.trim().charAt(0)||`؟`}return(e,o)=>(i(),u(`div`,ue,[m(`div`,{class:`admin-page-header`},[o[5]||=m(`div`,null,[m(`h1`,{class:`admin-page-header__title`},`مدیریت شرکتها`)],-1),m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:q},` افزودن شرکت `)]),L.value?(i(),f(se,{key:0,variant:`table`})):I.value.length?(i(),u(`div`,de,[m(`div`,fe,[m(`table`,pe,[o[6]||=m(`thead`,null,[m(`tr`,null,[m(`th`,null,`لوگو`),m(`th`,{class:`numeric`},`ترتیب`),m(`th`,{class:`status`},`وضعیت`),m(`th`,null,`توضیحات`),m(`th`,null,`نام شرکت`),m(`th`,{class:`actions`},`عملیات`)])],-1),m(`tbody`,null,[(i(!0),u(c,null,n(I.value,e=>(i(),u(`tr`,{key:e.id},[m(`td`,null,[e.logoUrl?(i(),u(`img`,{key:0,src:e.logoUrl,alt:`لوگوی ${e.name}`,class:`company-logo`},null,8,me)):(i(),u(`div`,he,a($(e.name)),1))]),m(`td`,ge,a(e.displayOrder),1),m(`td`,_e,[s(b,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`شرکت`,persist:Z},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),m(`td`,null,a(e.description),1),m(`td`,null,a(e.name),1),m(`td`,ve,[m(`div`,ye,[m(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>J(e)},` ویرایش `,8,be),m(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e.id)},` حسابها `,8,xe)])])]))),128))])])])])):(i(),f(le,{key:1,class:`admin-card`,icon:`companies`,title:`شرکتی ثبت نشده`,description:`برای شروع، اولین شرکت را ثبت کنید.`},{default:t(()=>[m(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:q},` افزودن شرکت `)]),_:1})),!L.value&&I.value.length?(i(),u(`div`,x,[(i(!0),u(c,null,n(I.value,e=>(i(),u(`article`,{key:e.id,class:`admin-card-item`},[m(`div`,S,[m(`div`,C,[e.logoUrl?(i(),u(`img`,{key:0,src:e.logoUrl,alt:`لوگوی ${e.name}`,class:`company-logo`},null,8,w)):(i(),u(`div`,T,a($(e.name)),1)),m(`div`,null,[m(`p`,E,a(e.name),1),m(`p`,D,a(e.description),1)])]),s(b,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`شرکت`,persist:Z},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),m(`div`,O,[m(`span`,null,`ترتیب: `+a(e.displayOrder),1)]),m(`div`,k,[m(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>J(e)},` ویرایش `,8,A),m(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e.id)},` حسابها `,8,j)])]))),128))])):d(``,!0),s(ie,{open:Pe.value,title:Fe.value,onClose:Y},{footer:t(()=>[m(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Y},` انصراف `),m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Le.value||H.value,onClick:X},a(Ie.value),9,je)]),default:t(()=>[m(`form`,{class:`admin-form`,onSubmit:oe(X,[`prevent`])},[G.value?(i(),u(`p`,M,a(G.value),1)):d(``,!0),m(`div`,Se,[o[8]||=m(`label`,null,[_(`لوگو `),m(`span`,{class:`admin-form__required`},`*`)],-1),m(`div`,Ce,[B.value?(i(),u(`div`,we,[m(`img`,{src:B.value,alt:`پیشنمایش لوگو`,class:`logo-upload__preview`},null,8,Te),m(`button`,{type:`button`,class:`logo-upload__remove`,onClick:ze},` حذف تصویر `)])):(i(),u(`label`,Ee,[...o[7]||=[m(`span`,{class:`logo-upload__icon`},`+`,-1),m(`span`,{class:`logo-upload__text`},`انتخاب یا رها کردن تصویر لوگو`,-1),m(`span`,{class:`logo-upload__hint`},`PNG، JPG، WEBP یا SVG — حداکثر ۲ مگابایت`,-1)]])),m(`input`,{id:`company-logo-file`,ref_key:`logoInputRef`,ref:V,type:`file`,accept:`image/png,image/jpeg,image/webp,image/svg+xml`,class:`logo-upload__input`,onChange:Re},null,544),B.value?(i(),u(`button`,{key:2,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm logo-upload__change`,onClick:o[0]||=e=>V.value?.click()},` تغییر تصویر `)):d(``,!0)])]),m(`div`,De,[o[9]||=m(`label`,{for:`company-name`},[_(`نام شرکت `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`company-name`,"onUpdate:modelValue":o[1]||=e=>W.name=e,type:`text`,class:`admin-input`,placeholder:`مثال: شرکت پَر`,autocomplete:`off`},null,512),[[v,W.name]])]),m(`div`,Oe,[o[10]||=m(`label`,{for:`company-description`},`توضیحات`,-1),r(m(`textarea`,{id:`company-description`,"onUpdate:modelValue":o[2]||=e=>W.description=e,class:`admin-form__textarea`,placeholder:`تولید و عرضه انواع پارچه`,rows:`3`},null,512),[[v,W.description]])]),m(`div`,ke,[m(`div`,Ae,[o[11]||=m(`label`,{for:`company-order`},`ترتیب نمایش`,-1),r(m(`input`,{id:`company-order`,"onUpdate:modelValue":o[3]||=e=>W.displayOrder=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[v,W.displayOrder,void 0,{number:!0}]])]),m(`div`,N,[s(ce,{modelValue:W.isActive,"onUpdate:modelValue":o[4]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-b4857c22`]]);export{P as default};
\ No newline at end of file
diff --git a/dist/assets/CompaniesView-ClslswWK.js b/dist/assets/CompaniesView-ClslswWK.js
new file mode 100644
index 0000000..79e5027
--- /dev/null
+++ b/dist/assets/CompaniesView-ClslswWK.js
@@ -0,0 +1 @@
+import{$ as e,B as t,I as n,K as ee,L as r,N as i,Q as a,R as te,St as o,T as ne,W as s,X as c,Y as l,Z as u,_t as re,ct as d,h as f,ht as p,mt as m,nt as h,ot as ie,q as g,rt as _,tt as v,ut as y,vt as b,z as ae}from"./index-BHqDDh7X.js";import{t as oe}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as se}from"./BaseSwitch-DYYNQNXf.js";import{t as ce}from"./BaseEmptyState-vNIhbGdV.js";import{t as x}from"./ActiveSwitchCell-BzzYl8MV.js";var le={class:`companies-page`},ue={key:2,class:`companies-page__table admin-card desktop-only`},de={class:`admin-table-wrap`},fe={class:`admin-table`},pe=[`src`,`alt`],me={key:1,class:`company-logo company-logo--fallback`},he={class:`numeric`},ge={class:`status`},_e={class:`actions`},ve={class:`admin-action-group`},ye=[`onClick`],be=[`onClick`],S={key:3,class:`compact-only admin-card-list`},C={class:`admin-card-item__header`},w={class:`companies-page__card-logo`},T=[`src`,`alt`],E={key:1,class:`company-logo company-logo--fallback`},D={class:`admin-card-item__title`},O={class:`companies-page__card-desc`},k={class:`admin-card-item__meta`},A={class:`admin-card-item__actions`},j=[`onClick`],M=[`onClick`],N={key:0,class:`admin-form__error`,role:`alert`},xe={class:`admin-form__field`},Se={class:`logo-upload`},Ce={key:0,class:`logo-upload__preview-wrap`},we=[`src`],Te={key:1,class:`logo-upload__dropzone`,for:`company-logo-file`},Ee={class:`admin-form__field`},De={class:`admin-form__field`},Oe={class:`admin-form__row`},ke={class:`admin-form__field`},Ae={class:`admin-form__field`},je=[`disabled`],Me=2097152,P=t(_({__name:`CompaniesView`,setup(t){let _=[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`],P=n(),F=ae(),I=b([]),L=b(!0),R=b(null),z=b(null),B=b(null),V=b(null),H=b(!1);async function Ne(){L.value=!0;try{I.value=await f.list()}catch(e){F.error(e instanceof i?e.message:`بارگذاری شرکتها انجام نشد.`)}finally{L.value=!1}}ie(()=>{Ne()});let U=()=>({name:``,description:``,displayOrder:I.value.length+1,isActive:!0}),W=re(U()),G=b(``),Pe=l(()=>R.value!==null),Fe=l(()=>R.value===`edit`?`ویرایش شرکت`:`افزودن شرکت`),Ie=l(()=>R.value===`edit`?`ذخیره تغییرات`:`ثبت شرکت`),Le=l(()=>W.name.trim().length>0&&B.value!==null);function K(){B.value=null,V.value&&(V.value.value=``)}function q(){R.value=`add`,z.value=null,Object.assign(W,U()),K(),G.value=``}function J(e){R.value=`edit`,z.value=e.id,W.name=e.name,W.description=e.description===`—`?``:e.description,W.displayOrder=e.displayOrder,W.isActive=e.isActive,B.value=e.logoUrl,V.value&&(V.value.value=``),G.value=``}function Y(){R.value=null,z.value=null,G.value=``,K()}function Re(e){let t=e.target.files?.[0];if(!t)return;if(!_.includes(t.type)){G.value=`فرمت مجاز: PNG، JPG، WEBP یا SVG`;return}if(t.size>Me){G.value=`حداکثر حجم تصویر ۲ مگابایت است.`;return}G.value=``;let n=new FileReader;n.onload=()=>{B.value=n.result},n.readAsDataURL(t)}async function ze(){B.value&&await r({title:`حذف تصویر`,message:`آیا از حذف لوگوی شرکت مطمئن هستید؟`,confirmLabel:`حذف`,cancelLabel:`انصراف`,tone:`danger`})&&K()}async function X(){let e=W.name.trim();if(!e){G.value=`نام شرکت الزامی است.`;return}if(!B.value){G.value=`آپلود لوگو الزامی است.`;return}if(I.value.some(t=>t.name===e&&t.id!==z.value)){G.value=`شرکتی با این نام قبلاً ثبت شده است.`;return}H.value=!0;try{if(R.value===`edit`&&z.value){let t=await f.update(z.value,{name:e,description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||1,isActive:W.isActive,logoUrl:B.value}),n=I.value.findIndex(e=>e.id===z.value);n!==-1&&(I.value[n]={...I.value[n],...t}),F.success(`اطلاعات شرکت بهروزرسانی شد.`)}else{let t=await f.create({name:e,slug:ne(e),description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||I.value.length+1,isActive:W.isActive,logoUrl:B.value});I.value.push(t),F.success(`شرکت جدید ثبت شد.`)}Y()}catch(e){F.error(e instanceof i?e.message:`ذخیره شرکت انجام نشد.`)}finally{H.value=!1}}async function Z(e,t){await f.setActive(e,t)}function Q(e){P.push(`/companies/${e}/accounts`)}function $(e){return e.trim().charAt(0)||`؟`}return(t,n)=>(d(),e(`div`,le,[c(`div`,{class:`admin-page-header`},[n[5]||=c(`div`,null,[c(`h1`,{class:`admin-page-header__title`},`مدیریت شرکتها`)],-1),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:q},` افزودن شرکت `)]),L.value?(d(),u(oe,{key:0,variant:`table`})):I.value.length?(d(),e(`div`,ue,[c(`div`,de,[c(`table`,fe,[n[6]||=c(`thead`,null,[c(`tr`,null,[c(`th`,null,`لوگو`),c(`th`,{class:`numeric`},`ترتیب`),c(`th`,{class:`status`},`وضعیت`),c(`th`,null,`توضیحات`),c(`th`,null,`نام شرکت`),c(`th`,{class:`actions`},`عملیات`)])],-1),c(`tbody`,null,[(d(!0),e(g,null,y(I.value,t=>(d(),e(`tr`,{key:t.id},[c(`td`,null,[t.logoUrl?(d(),e(`img`,{key:0,src:t.logoUrl,alt:`لوگوی ${t.name}`,class:`company-logo`},null,8,pe)):(d(),e(`div`,me,o($(t.name)),1))]),c(`td`,he,o(t.displayOrder),1),c(`td`,ge,[h(x,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`شرکت`,persist:Z},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`td`,null,o(t.description),1),c(`td`,null,o(t.name),1),c(`td`,_e,[c(`div`,ve,[c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>J(t)},` ویرایش `,8,ye),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:e=>Q(t.id)},` حسابها `,8,be)])])]))),128))])])])])):(d(),u(ce,{key:1,class:`admin-card`,icon:`companies`,title:`شرکتی ثبت نشده`,description:`برای شروع، اولین شرکت را ثبت کنید.`},{default:m(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:q},` افزودن شرکت `)]),_:1})),!L.value&&I.value.length?(d(),e(`div`,S,[(d(!0),e(g,null,y(I.value,t=>(d(),e(`article`,{key:t.id,class:`admin-card-item`},[c(`div`,C,[c(`div`,w,[t.logoUrl?(d(),e(`img`,{key:0,src:t.logoUrl,alt:`لوگوی ${t.name}`,class:`company-logo`},null,8,T)):(d(),e(`div`,E,o($(t.name)),1)),c(`div`,null,[c(`p`,D,o(t.name),1),c(`p`,O,o(t.description),1)])]),h(x,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`شرکت`,persist:Z},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),c(`div`,k,[c(`span`,null,`ترتیب: `+o(t.displayOrder),1)]),c(`div`,A,[c(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>J(t)},` ویرایش `,8,j),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:e=>Q(t.id)},` حسابها `,8,M)])]))),128))])):a(``,!0),h(te,{open:Pe.value,title:Fe.value,onClose:Y},{footer:m(()=>[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Y},` انصراف `),c(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Le.value||H.value,onClick:X},o(Ie.value),9,je)]),default:m(()=>[c(`form`,{class:`admin-form`,onSubmit:ee(X,[`prevent`])},[G.value?(d(),e(`p`,N,o(G.value),1)):a(``,!0),c(`div`,xe,[n[8]||=c(`label`,null,[v(`لوگو `),c(`span`,{class:`admin-form__required`},`*`)],-1),c(`div`,Se,[B.value?(d(),e(`div`,Ce,[c(`img`,{src:B.value,alt:`پیشنمایش لوگو`,class:`logo-upload__preview`},null,8,we),c(`button`,{type:`button`,class:`logo-upload__remove`,onClick:ze},` حذف تصویر `)])):(d(),e(`label`,Te,[...n[7]||=[c(`span`,{class:`logo-upload__icon`},`+`,-1),c(`span`,{class:`logo-upload__text`},`انتخاب یا رها کردن تصویر لوگو`,-1),c(`span`,{class:`logo-upload__hint`},`PNG، JPG، WEBP یا SVG — حداکثر ۲ مگابایت`,-1)]])),c(`input`,{id:`company-logo-file`,ref_key:`logoInputRef`,ref:V,type:`file`,accept:`image/png,image/jpeg,image/webp,image/svg+xml`,class:`logo-upload__input`,onChange:Re},null,544),B.value?(d(),e(`button`,{key:2,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm logo-upload__change`,onClick:n[0]||=e=>V.value?.click()},` تغییر تصویر `)):a(``,!0)])]),c(`div`,Ee,[n[9]||=c(`label`,{for:`company-name`},[v(`نام شرکت `),c(`span`,{class:`admin-form__required`},`*`)],-1),p(c(`input`,{id:`company-name`,"onUpdate:modelValue":n[1]||=e=>W.name=e,type:`text`,class:`admin-input`,placeholder:`مثال: شرکت پَر`,autocomplete:`off`},null,512),[[s,W.name]])]),c(`div`,De,[n[10]||=c(`label`,{for:`company-description`},`توضیحات`,-1),p(c(`textarea`,{id:`company-description`,"onUpdate:modelValue":n[2]||=e=>W.description=e,class:`admin-form__textarea`,placeholder:`تولید و عرضه انواع پارچه`,rows:`3`},null,512),[[s,W.description]])]),c(`div`,Oe,[c(`div`,ke,[n[11]||=c(`label`,{for:`company-order`},`ترتیب نمایش`,-1),p(c(`input`,{id:`company-order`,"onUpdate:modelValue":n[3]||=e=>W.displayOrder=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[s,W.displayOrder,void 0,{number:!0}]])]),c(`div`,Ae,[h(se,{modelValue:W.isActive,"onUpdate:modelValue":n[4]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-b4857c22`]]);export{P as default};
\ No newline at end of file
diff --git a/dist/assets/CustomersView-C97HIrAF.js b/dist/assets/CustomersView-C97HIrAF.js
deleted file mode 100644
index 257342a..0000000
--- a/dist/assets/CustomersView-C97HIrAF.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,G as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,et as ee,f as l,g as u,h as d,m as f,nt as p,o as te,p as m,t as h,ut as g,x as _,y as v}from"./http-WTIyGIuL.js";import{L as ne,N as re,U as ie,V as y,a as ae,g as b,i as oe,u as se,v as ce}from"./index-BOMJTziC.js";import{t as le}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as ue}from"./BaseSwitch-gjOaAbzm.js";import{t as de}from"./BaseEmptyState-Wc1O8rBP.js";import{t as x}from"./AdminSelect-BVy_0-3W.js";import{r as S}from"./adminLabels-Cz9ccm1Z.js";import{t as C}from"./ActiveSwitchCell-vuwwhrED.js";var fe={class:`customers-page`},pe={class:`customers-page__search admin-card`},me={key:2,class:`customers-page__table admin-card desktop-only`},he={class:`admin-table-wrap`},ge={class:`admin-table`},_e={class:`numeric`},ve={class:`numeric`},ye={class:`status`},be={class:`actions`},xe=[`onClick`],Se={key:3,class:`compact-only admin-card-list`},Ce={class:`admin-card-item__header`},w={class:`admin-card-item__title`},T={class:`admin-card-item__header-actions`},E=[`onClick`],D={class:`admin-card-item__meta`},O={key:0,class:`admin-form__error`,role:`alert`},k={class:`admin-form__field`},A={class:`admin-form__row`},we={class:`admin-form__field`},Te={class:`admin-form__field`},Ee={class:`admin-form__row`},De={class:`admin-form__field`},Oe={class:`admin-form__field`},ke={class:`admin-form__row`},Ae={class:`admin-form__field`},je={class:`admin-form__field`},Me={class:`admin-form__row`},Ne={class:`admin-form__field`},Pe={key:0,class:`admin-form__field`},Fe={key:1,class:`admin-form__field`},Ie={class:`customers-page__brands`},Le=[`checked`,`onChange`],Re={class:`admin-form__field`},ze=[`disabled`],Be={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},j=te(_({__name:`CustomersView`,setup(te){let _=p([]),j=p([]),M=p([]),N=p([]),P=p(``),F=p(!0),I=p(null),L=p(null),R=p(``),z=p(!1),B=o();function V(e){if(e==null)return`-`;if(typeof e==`number`)return Number.isFinite(e)?String(e):`-`;let t=e.trim();return!t||t===`—`?`-`:t}function H(e){return e==null||!Number.isFinite(e)?`-`:ae(e)}let Ve=[{value:`wholesale`,label:`عمدهفروش`},{value:`retail`,label:`خردهفروش`}],He=[{value:`customer`,label:`مشتری`},{value:`agent`,label:`واسطه`}],Ue=l(()=>[{value:``,label:`بدون سطح`},...j.value.map(e=>({value:e.id,label:e.label}))]),We=l(()=>[{value:``,label:`بدون واسطه`},...M.value.filter(e=>e.id!==L.value).map(e=>({value:e.id,label:e.name+(e.agentCode?` (${e.agentCode})`:``)}))]),U=()=>({name:``,phone:``,nationalId:``,customerType:`wholesale`,companyName:``,isActive:!0,levelDefId:``,assignedAgentId:``,brandIds:[],appRole:`customer`,agentCode:``}),W=ee(U()),Ge=l(()=>I.value!==null),G=l(()=>I.value===`edit`?`ویرایش مشتری`:`افزودن مشتری`),K=l(()=>W.name.trim()&&W.phone.trim()&&W.nationalId.trim()),q=l(()=>{let e=P.value.trim();return e?_.value.filter(t=>t.name.includes(e)||t.phone.includes(e)||t.nationalId.includes(e)||t.companyName.includes(e)):_.value});function Ke(e,t){t?W.brandIds.includes(e)||W.brandIds.push(e):W.brandIds=W.brandIds.filter(t=>t!==e)}async function qe(){F.value=!0;try{_.value=await b.list()}catch(e){B.error(e instanceof h?e.message:`بارگذاری مشتریان انجام نشد.`)}finally{F.value=!1}}async function J(){try{let[e,t,n]=await Promise.all([ce.list(),b.list(void 0,`agent`),se.list()]);j.value=e,M.value=t,N.value=n}catch(e){B.error(e instanceof h?e.message:`بارگذاری اطلاعات کمکی انجام نشد.`)}}e(()=>{qe(),J()});function Y(){I.value=`add`,L.value=null,Object.assign(W,U()),R.value=``}function X(e){I.value=`edit`,L.value=e.id,W.name=e.name,W.phone=e.phone,W.nationalId=e.nationalId,W.customerType=e.customerType,W.companyName=e.companyName,W.isActive=e.isActive,W.levelDefId=e.levelDefId??``,W.assignedAgentId=e.assignedAgentId??``,W.brandIds=[...e.brandIds??[]],W.appRole=e.appRole===`agent`?`agent`:`customer`,W.agentCode=e.agentCode??``,R.value=``}function Z(){I.value=null,L.value=null,R.value=``}async function Q(){if(!K.value){R.value=`نام، تلفن و شناسه ملی الزامی هستند.`;return}z.value=!0;let e={name:W.name.trim(),phone:W.phone.trim(),nationalId:W.nationalId.trim(),customerType:W.customerType,isActive:W.isActive,levelDefId:W.levelDefId||null,assignedAgentId:W.assignedAgentId||null,brandIds:[...W.brandIds],appRole:W.appRole,agentCode:W.appRole===`agent`&&W.agentCode.trim()||null};try{if(I.value===`edit`&&L.value){let t=await b.update(L.value,e),n=_.value.findIndex(e=>e.id===L.value);n!==-1&&(_.value[n]={..._.value[n],...t})}else{let t=await b.create(e);_.value.unshift(t)}B.success(I.value===`edit`?`اطلاعات مشتری بهروزرسانی شد.`:`مشتری جدید ثبت شد.`),Z(),e.appRole===`agent`&&J()}catch(e){B.error(e instanceof h?e.message:`ذخیره مشتری انجام نشد.`)}finally{z.value=!1}}async function $(e,t){await b.setActive(e,t)}function Je(){P.value=``}return(e,o)=>(i(),u(`div`,fe,[m(`div`,{class:`admin-page-header`},[o[11]||=m(`div`,null,[m(`h1`,{class:`admin-page-header__title`},`مشتریان`)],-1),m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن مشتری `)]),m(`div`,pe,[s(re,{name:`search`,size:18}),r(m(`input`,{"onUpdate:modelValue":o[0]||=e=>P.value=e,type:`search`,class:`customers-page__search-input`,placeholder:`جستجو در نام، تلفن، شناسه ملی...`},null,512),[[y,P.value]])]),F.value?(i(),f(le,{key:0,variant:`table`})):q.value.length?(i(),u(`div`,me,[m(`div`,he,[m(`table`,ge,[o[12]||=m(`thead`,null,[m(`tr`,null,[m(`th`,null,`نام مشتری`),m(`th`,null,`تلفن`),m(`th`,null,`شناسه ملی`),m(`th`,null,`نوع`),m(`th`,null,`سطح`),m(`th`,null,`واسطه`),m(`th`,null,`شرکت`),m(`th`,{class:`numeric`},`تعداد سفارش`),m(`th`,{class:`numeric`},`مجموع متراژ`),m(`th`,{class:`status`},`وضعیت`),m(`th`,null,`تاریخ ثبت`),m(`th`,{class:`actions`},`عملیات`)])],-1),m(`tbody`,null,[(i(!0),u(c,null,n(q.value,e=>(i(),u(`tr`,{key:e.id},[m(`td`,null,a(V(e.name)),1),m(`td`,null,a(V(e.phone)),1),m(`td`,null,a(V(e.nationalId)),1),m(`td`,null,a(V(g(S)[e.customerType])),1),m(`td`,null,a(V(e.levelLabel)),1),m(`td`,null,a(V(e.assignedAgentName)),1),m(`td`,null,a(V(e.companyName)),1),m(`td`,_e,a(V(e.orderCount)),1),m(`td`,ve,a(H(e.totalMeterage)),1),m(`td`,ye,[s(C,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),m(`td`,null,a(V(g(oe)(e.registeredAt))),1),m(`td`,be,[m(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,xe)])]))),128))])])])])):(i(),f(de,{key:1,class:`admin-card`,icon:`customers`,title:P.value.trim()?`نتیجهای یافت نشد`:`مشتریان ثبت شده`,description:P.value.trim()?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین مشتری را ثبت کنید.`},{default:t(()=>[P.value.trim()?(i(),u(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:Je},` پاک کردن جستجو `)):(i(),u(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن مشتری `))]),_:1},8,[`title`,`description`])),!F.value&&q.value.length?(i(),u(`div`,Se,[(i(!0),u(c,null,n(q.value,e=>(i(),u(`article`,{key:e.id,class:`admin-card-item`},[m(`div`,Ce,[m(`p`,w,a(V(e.name)),1),m(`div`,T,[s(C,{id:e.id,modelValue:e.isActive,"onUpdate:modelValue":t=>e.isActive=t,"entity-name":e.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`]),m(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,E)])]),m(`div`,D,[m(`span`,null,a(V(e.phone)),1),m(`span`,null,a(V(g(S)[e.customerType])),1),m(`span`,null,a(V(e.levelLabel)),1),m(`span`,null,a(V(e.assignedAgentName)),1),m(`span`,null,a(V(e.companyName)),1),m(`span`,null,a(V(e.orderCount))+` سفارش · `+a(H(e.totalMeterage)),1)])]))),128))])):d(``,!0),s(ne,{open:Ge.value,title:G.value,size:`lg`,onClose:Z},{footer:t(()=>[m(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),m(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!K.value||z.value,onClick:Q},[z.value?(i(),u(`span`,Be)):d(``,!0),v(` `+a(I.value===`edit`?`ذخیره تغییرات`:`ثبت مشتری`),1)],8,ze)]),default:t(()=>[m(`form`,{class:`admin-form`,onSubmit:ie(Q,[`prevent`])},[R.value?(i(),u(`p`,O,a(R.value),1)):d(``,!0),m(`div`,k,[o[13]||=m(`label`,{for:`customer-name`},[v(`نام مشتری `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`customer-name`,"onUpdate:modelValue":o[1]||=e=>W.name=e,type:`text`,class:`admin-input`},null,512),[[y,W.name]])]),m(`div`,A,[m(`div`,we,[o[14]||=m(`label`,{for:`customer-phone`},[v(`تلفن `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`customer-phone`,"onUpdate:modelValue":o[2]||=e=>W.phone=e,type:`tel`,class:`admin-input`,inputmode:`tel`,dir:`ltr`},null,512),[[y,W.phone]])]),m(`div`,Te,[o[15]||=m(`label`,{for:`customer-national-id`},[v(`شناسه ملی `),m(`span`,{class:`admin-form__required`},`*`)],-1),r(m(`input`,{id:`customer-national-id`,"onUpdate:modelValue":o[3]||=e=>W.nationalId=e,type:`text`,class:`admin-input`,inputmode:`numeric`,dir:`ltr`},null,512),[[y,W.nationalId]])])]),m(`div`,Ee,[m(`div`,De,[o[16]||=m(`label`,null,`نوع مشتری`,-1),s(x,{modelValue:W.customerType,"onUpdate:modelValue":o[4]||=e=>W.customerType=e,block:``,"aria-label":`نوع مشتری`,options:Ve},null,8,[`modelValue`])]),m(`div`,Oe,[o[17]||=m(`label`,{for:`customer-company`},`شرکت مرتبط`,-1),r(m(`input`,{id:`customer-company`,"onUpdate:modelValue":o[5]||=e=>W.companyName=e,type:`text`,class:`admin-input`},null,512),[[y,W.companyName]])])]),m(`div`,ke,[m(`div`,Ae,[o[18]||=m(`label`,null,`سطح`,-1),s(x,{modelValue:W.levelDefId,"onUpdate:modelValue":o[6]||=e=>W.levelDefId=e,block:``,"aria-label":`سطح مشتری`,options:Ue.value},null,8,[`modelValue`,`options`])]),m(`div`,je,[o[19]||=m(`label`,null,`واسطه`,-1),s(x,{modelValue:W.assignedAgentId,"onUpdate:modelValue":o[7]||=e=>W.assignedAgentId=e,block:``,"aria-label":`واسطه اختصاصیافته`,options:We.value},null,8,[`modelValue`,`options`])])]),m(`div`,Me,[m(`div`,Ne,[o[20]||=m(`label`,null,`نقش در اپ`,-1),s(x,{modelValue:W.appRole,"onUpdate:modelValue":o[8]||=e=>W.appRole=e,block:``,"aria-label":`نقش در اپ`,options:He},null,8,[`modelValue`])]),W.appRole===`agent`?(i(),u(`div`,Pe,[o[21]||=m(`label`,{for:`customer-agent-code`},`کد واسطه`,-1),r(m(`input`,{id:`customer-agent-code`,"onUpdate:modelValue":o[9]||=e=>W.agentCode=e,type:`text`,class:`admin-input`,dir:`ltr`},null,512),[[y,W.agentCode]])])):d(``,!0)]),N.value.length?(i(),u(`div`,Fe,[o[22]||=m(`label`,null,`برندها`,-1),m(`div`,Ie,[(i(!0),u(c,null,n(N.value,e=>(i(),u(`label`,{key:e.id,class:`customers-page__brand`},[m(`input`,{type:`checkbox`,checked:W.brandIds.includes(e.id),onChange:t=>Ke(e.id,t.target.checked)},null,40,Le),m(`span`,null,a(e.name),1)]))),128))])])):d(``,!0),m(`div`,Re,[s(ue,{modelValue:W.isActive,"onUpdate:modelValue":o[10]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-089d9237`]]);export{j as default};
\ No newline at end of file
diff --git a/dist/assets/CustomersView-rx7JjBy0.js b/dist/assets/CustomersView-rx7JjBy0.js
new file mode 100644
index 0000000..bb5380e
--- /dev/null
+++ b/dist/assets/CustomersView-rx7JjBy0.js
@@ -0,0 +1 @@
+import{$ as e,B as t,K as n,N as r,P as ee,Q as i,R as te,St as a,W as o,X as s,Y as c,Z as l,_t as ne,a as re,ct as u,g as d,ht as f,i as ie,mt as p,nt as m,ot as ae,q as h,rt as g,tt as _,u as oe,ut as v,v as se,vt as y,yt as b,z as ce}from"./index-BHqDDh7X.js";import{t as le}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as ue}from"./BaseSwitch-DYYNQNXf.js";import{t as de}from"./BaseEmptyState-vNIhbGdV.js";import{t as x}from"./AdminSelect-BjB6PHdr.js";import{r as S}from"./adminLabels-Cz9ccm1Z.js";import{t as C}from"./ActiveSwitchCell-BzzYl8MV.js";var fe={class:`customers-page`},pe={class:`customers-page__search admin-card`},me={key:2,class:`customers-page__table admin-card desktop-only`},he={class:`admin-table-wrap`},ge={class:`admin-table`},_e={class:`numeric`},ve={class:`numeric`},ye={class:`status`},be={class:`actions`},xe=[`onClick`],Se={key:3,class:`compact-only admin-card-list`},Ce={class:`admin-card-item__header`},w={class:`admin-card-item__title`},T={class:`admin-card-item__header-actions`},E=[`onClick`],D={class:`admin-card-item__meta`},O={key:0,class:`admin-form__error`,role:`alert`},k={class:`admin-form__field`},A={class:`admin-form__row`},we={class:`admin-form__field`},Te={class:`admin-form__field`},Ee={class:`admin-form__row`},De={class:`admin-form__field`},Oe={class:`admin-form__field`},ke={class:`admin-form__row`},Ae={class:`admin-form__field`},je={class:`admin-form__field`},Me={class:`admin-form__row`},Ne={class:`admin-form__field`},Pe={key:0,class:`admin-form__field`},Fe={key:1,class:`admin-form__field`},Ie={class:`customers-page__brands`},Le=[`checked`,`onChange`],Re={class:`admin-form__field`},ze=[`disabled`],Be={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},j=t(g({__name:`CustomersView`,setup(t){let g=y([]),j=y([]),M=y([]),N=y([]),P=y(``),F=y(!0),I=y(null),L=y(null),R=y(``),z=y(!1),B=ce();function V(e){if(e==null)return`-`;if(typeof e==`number`)return Number.isFinite(e)?String(e):`-`;let t=e.trim();return!t||t===`—`?`-`:t}function H(e){return e==null||!Number.isFinite(e)?`-`:re(e)}let Ve=[{value:`wholesale`,label:`عمدهفروش`},{value:`retail`,label:`خردهفروش`}],He=[{value:`customer`,label:`مشتری`},{value:`agent`,label:`واسطه`}],Ue=c(()=>[{value:``,label:`بدون سطح`},...j.value.map(e=>({value:e.id,label:e.label}))]),We=c(()=>[{value:``,label:`بدون واسطه`},...M.value.filter(e=>e.id!==L.value).map(e=>({value:e.id,label:e.name+(e.agentCode?` (${e.agentCode})`:``)}))]),U=()=>({name:``,phone:``,nationalId:``,customerType:`wholesale`,companyName:``,isActive:!0,levelDefId:``,assignedAgentId:``,brandIds:[],appRole:`customer`,agentCode:``}),W=ne(U()),Ge=c(()=>I.value!==null),G=c(()=>I.value===`edit`?`ویرایش مشتری`:`افزودن مشتری`),K=c(()=>W.name.trim()&&W.phone.trim()&&W.nationalId.trim()),q=c(()=>{let e=P.value.trim();return e?g.value.filter(t=>t.name.includes(e)||t.phone.includes(e)||t.nationalId.includes(e)||t.companyName.includes(e)):g.value});function Ke(e,t){t?W.brandIds.includes(e)||W.brandIds.push(e):W.brandIds=W.brandIds.filter(t=>t!==e)}async function qe(){F.value=!0;try{g.value=await d.list()}catch(e){B.error(e instanceof r?e.message:`بارگذاری مشتریان انجام نشد.`)}finally{F.value=!1}}async function J(){try{let[e,t,n]=await Promise.all([se.list(),d.list(void 0,`agent`),oe.list()]);j.value=e,M.value=t,N.value=n}catch(e){B.error(e instanceof r?e.message:`بارگذاری اطلاعات کمکی انجام نشد.`)}}ae(()=>{qe(),J()});function Y(){I.value=`add`,L.value=null,Object.assign(W,U()),R.value=``}function X(e){I.value=`edit`,L.value=e.id,W.name=e.name,W.phone=e.phone,W.nationalId=e.nationalId,W.customerType=e.customerType,W.companyName=e.companyName,W.isActive=e.isActive,W.levelDefId=e.levelDefId??``,W.assignedAgentId=e.assignedAgentId??``,W.brandIds=[...e.brandIds??[]],W.appRole=e.appRole===`agent`?`agent`:`customer`,W.agentCode=e.agentCode??``,R.value=``}function Z(){I.value=null,L.value=null,R.value=``}async function Q(){if(!K.value){R.value=`نام، تلفن و شناسه ملی الزامی هستند.`;return}z.value=!0;let e={name:W.name.trim(),phone:W.phone.trim(),nationalId:W.nationalId.trim(),customerType:W.customerType,isActive:W.isActive,levelDefId:W.levelDefId||null,assignedAgentId:W.assignedAgentId||null,brandIds:[...W.brandIds],appRole:W.appRole,agentCode:W.appRole===`agent`&&W.agentCode.trim()||null};try{if(I.value===`edit`&&L.value){let t=await d.update(L.value,e),n=g.value.findIndex(e=>e.id===L.value);n!==-1&&(g.value[n]={...g.value[n],...t})}else{let t=await d.create(e);g.value.unshift(t)}B.success(I.value===`edit`?`اطلاعات مشتری بهروزرسانی شد.`:`مشتری جدید ثبت شد.`),Z(),e.appRole===`agent`&&J()}catch(e){B.error(e instanceof r?e.message:`ذخیره مشتری انجام نشد.`)}finally{z.value=!1}}async function $(e,t){await d.setActive(e,t)}function Je(){P.value=``}return(t,r)=>(u(),e(`div`,fe,[s(`div`,{class:`admin-page-header`},[r[11]||=s(`div`,null,[s(`h1`,{class:`admin-page-header__title`},`مشتریان`)],-1),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن مشتری `)]),s(`div`,pe,[m(ee,{name:`search`,size:18}),f(s(`input`,{"onUpdate:modelValue":r[0]||=e=>P.value=e,type:`search`,class:`customers-page__search-input`,placeholder:`جستجو در نام، تلفن، شناسه ملی...`},null,512),[[o,P.value]])]),F.value?(u(),l(le,{key:0,variant:`table`})):q.value.length?(u(),e(`div`,me,[s(`div`,he,[s(`table`,ge,[r[12]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`نام مشتری`),s(`th`,null,`تلفن`),s(`th`,null,`شناسه ملی`),s(`th`,null,`نوع`),s(`th`,null,`سطح`),s(`th`,null,`واسطه`),s(`th`,null,`شرکت`),s(`th`,{class:`numeric`},`تعداد سفارش`),s(`th`,{class:`numeric`},`مجموع متراژ`),s(`th`,{class:`status`},`وضعیت`),s(`th`,null,`تاریخ ثبت`),s(`th`,{class:`actions`},`عملیات`)])],-1),s(`tbody`,null,[(u(!0),e(h,null,v(q.value,t=>(u(),e(`tr`,{key:t.id},[s(`td`,null,a(V(t.name)),1),s(`td`,null,a(V(t.phone)),1),s(`td`,null,a(V(t.nationalId)),1),s(`td`,null,a(V(b(S)[t.customerType])),1),s(`td`,null,a(V(t.levelLabel)),1),s(`td`,null,a(V(t.assignedAgentName)),1),s(`td`,null,a(V(t.companyName)),1),s(`td`,_e,a(V(t.orderCount)),1),s(`td`,ve,a(H(t.totalMeterage)),1),s(`td`,ye,[m(C,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`])]),s(`td`,null,a(V(b(ie)(t.registeredAt))),1),s(`td`,be,[s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>X(t)},` ویرایش `,8,xe)])]))),128))])])])])):(u(),l(de,{key:1,class:`admin-card`,icon:`customers`,title:P.value.trim()?`نتیجهای یافت نشد`:`مشتریان ثبت شده`,description:P.value.trim()?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین مشتری را ثبت کنید.`},{default:p(()=>[P.value.trim()?(u(),e(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:Je},` پاک کردن جستجو `)):(u(),e(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن مشتری `))]),_:1},8,[`title`,`description`])),!F.value&&q.value.length?(u(),e(`div`,Se,[(u(!0),e(h,null,v(q.value,t=>(u(),e(`article`,{key:t.id,class:`admin-card-item`},[s(`div`,Ce,[s(`p`,w,a(V(t.name)),1),s(`div`,T,[m(C,{id:t.id,modelValue:t.isActive,"onUpdate:modelValue":e=>t.isActive=e,"entity-name":t.name,"entity-type":`مشتری`,persist:$},null,8,[`id`,`modelValue`,`onUpdate:modelValue`,`entity-name`]),s(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:e=>X(t)},` ویرایش `,8,E)])]),s(`div`,D,[s(`span`,null,a(V(t.phone)),1),s(`span`,null,a(V(b(S)[t.customerType])),1),s(`span`,null,a(V(t.levelLabel)),1),s(`span`,null,a(V(t.assignedAgentName)),1),s(`span`,null,a(V(t.companyName)),1),s(`span`,null,a(V(t.orderCount))+` سفارش · `+a(H(t.totalMeterage)),1)])]))),128))])):i(``,!0),m(te,{open:Ge.value,title:G.value,size:`lg`,onClose:Z},{footer:p(()=>[s(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!K.value||z.value,onClick:Q},[z.value?(u(),e(`span`,Be)):i(``,!0),_(` `+a(I.value===`edit`?`ذخیره تغییرات`:`ثبت مشتری`),1)],8,ze)]),default:p(()=>[s(`form`,{class:`admin-form`,onSubmit:n(Q,[`prevent`])},[R.value?(u(),e(`p`,O,a(R.value),1)):i(``,!0),s(`div`,k,[r[13]||=s(`label`,{for:`customer-name`},[_(`نام مشتری `),s(`span`,{class:`admin-form__required`},`*`)],-1),f(s(`input`,{id:`customer-name`,"onUpdate:modelValue":r[1]||=e=>W.name=e,type:`text`,class:`admin-input`},null,512),[[o,W.name]])]),s(`div`,A,[s(`div`,we,[r[14]||=s(`label`,{for:`customer-phone`},[_(`تلفن `),s(`span`,{class:`admin-form__required`},`*`)],-1),f(s(`input`,{id:`customer-phone`,"onUpdate:modelValue":r[2]||=e=>W.phone=e,type:`tel`,class:`admin-input`,inputmode:`tel`,dir:`ltr`},null,512),[[o,W.phone]])]),s(`div`,Te,[r[15]||=s(`label`,{for:`customer-national-id`},[_(`شناسه ملی `),s(`span`,{class:`admin-form__required`},`*`)],-1),f(s(`input`,{id:`customer-national-id`,"onUpdate:modelValue":r[3]||=e=>W.nationalId=e,type:`text`,class:`admin-input`,inputmode:`numeric`,dir:`ltr`},null,512),[[o,W.nationalId]])])]),s(`div`,Ee,[s(`div`,De,[r[16]||=s(`label`,null,`نوع مشتری`,-1),m(x,{modelValue:W.customerType,"onUpdate:modelValue":r[4]||=e=>W.customerType=e,block:``,"aria-label":`نوع مشتری`,options:Ve},null,8,[`modelValue`])]),s(`div`,Oe,[r[17]||=s(`label`,{for:`customer-company`},`شرکت مرتبط`,-1),f(s(`input`,{id:`customer-company`,"onUpdate:modelValue":r[5]||=e=>W.companyName=e,type:`text`,class:`admin-input`},null,512),[[o,W.companyName]])])]),s(`div`,ke,[s(`div`,Ae,[r[18]||=s(`label`,null,`سطح`,-1),m(x,{modelValue:W.levelDefId,"onUpdate:modelValue":r[6]||=e=>W.levelDefId=e,block:``,"aria-label":`سطح مشتری`,options:Ue.value},null,8,[`modelValue`,`options`])]),s(`div`,je,[r[19]||=s(`label`,null,`واسطه`,-1),m(x,{modelValue:W.assignedAgentId,"onUpdate:modelValue":r[7]||=e=>W.assignedAgentId=e,block:``,"aria-label":`واسطه اختصاصیافته`,options:We.value},null,8,[`modelValue`,`options`])])]),s(`div`,Me,[s(`div`,Ne,[r[20]||=s(`label`,null,`نقش در اپ`,-1),m(x,{modelValue:W.appRole,"onUpdate:modelValue":r[8]||=e=>W.appRole=e,block:``,"aria-label":`نقش در اپ`,options:He},null,8,[`modelValue`])]),W.appRole===`agent`?(u(),e(`div`,Pe,[r[21]||=s(`label`,{for:`customer-agent-code`},`کد واسطه`,-1),f(s(`input`,{id:`customer-agent-code`,"onUpdate:modelValue":r[9]||=e=>W.agentCode=e,type:`text`,class:`admin-input`,dir:`ltr`},null,512),[[o,W.agentCode]])])):i(``,!0)]),N.value.length?(u(),e(`div`,Fe,[r[22]||=s(`label`,null,`برندها`,-1),s(`div`,Ie,[(u(!0),e(h,null,v(N.value,t=>(u(),e(`label`,{key:t.id,class:`customers-page__brand`},[s(`input`,{type:`checkbox`,checked:W.brandIds.includes(t.id),onChange:e=>Ke(t.id,e.target.checked)},null,40,Le),s(`span`,null,a(t.name),1)]))),128))])])):i(``,!0),s(`div`,Re,[m(ue,{modelValue:W.isActive,"onUpdate:modelValue":r[10]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-089d9237`]]);export{j as default};
\ No newline at end of file
diff --git a/dist/assets/DashboardView-BUfTfLwy.js b/dist/assets/DashboardView-BUfTfLwy.js
new file mode 100644
index 0000000..bdc1a23
--- /dev/null
+++ b/dist/assets/DashboardView-BUfTfLwy.js
@@ -0,0 +1 @@
+import{$ as e,B as t,I as n,N as r,P as i,Q as a,St as o,X as s,Y as c,Z as l,_ as u,bt as d,ct as f,ft as p,i as m,mt as h,n as g,nt as _,o as v,ot as y,q as b,rt as x,tt as S,ut as C,vt as w,xt as T,y as E,yt as D,z as O}from"./index-BHqDDh7X.js";import{t as k}from"./StatusBadge-BMzuiwOg.js";var ee={class:`sales-chart`},te={key:0,class:`sales-chart__header`},A={key:0,class:`sales-chart__title`},j={key:1,class:`sales-chart__subtitle`},M=[`viewBox`,`aria-label`],N=[`x1`,`x2`,`y1`,`y2`],P=[`points`],F=[`points`],I=[`x1`,`x2`,`y1`,`y2`],L=[`cx`,`cy`],R={class:`sales-chart__tooltip-label`},z={key:1,class:`sales-chart__axis`},B=320,V=120,H=t(x({__name:`SalesAreaChart`,props:{data:{},title:{},subtitle:{},height:{default:160},color:{default:`#0a353c`},unit:{default:`میلیارد تومان`},labels:{}},setup(t){let n=t,r=w(null),i={top:12,right:8,bottom:8,left:8},l=c(()=>Math.max(...n.data,.001)),u=c(()=>{let e=B-i.left-i.right,t=V-i.top-i.bottom,r=e/Math.max(n.data.length-1,1);return n.data.map((e,n)=>({x:i.left+n*r,y:i.top+t-e/l.value*t,value:e,index:n}))}),d=c(()=>u.value.map(e=>`${e.x},${e.y}`).join(` `)),p=c(()=>{let e=V-i.bottom,t=u.value[0],n=u.value[u.value.length-1];return!t||!n?``:`${t.x},${e} ${d.value} ${n.x},${e}`}),m=c(()=>{let e=V-i.top-i.bottom;return[0,.5,1].map(t=>i.top+e*t)}),h=c(()=>r.value===null?null:u.value[r.value]??null);function g(e){let t=e.currentTarget.getBoundingClientRect(),n=(e.clientX-t.left)/t.width*B,i=0,a=1/0;u.value.forEach(e=>{let t=Math.abs(e.x-n);t(f(),e(`div`,ee,[t.title||t.subtitle?(f(),e(`div`,te,[s(`div`,null,[t.title?(f(),e(`h3`,A,o(t.title),1)):a(``,!0),t.subtitle?(f(),e(`p`,j,o(t.subtitle),1)):a(``,!0)])])):a(``,!0),s(`div`,{class:`sales-chart__body`,style:T({height:`${t.height}px`})},[(f(),e(`svg`,{class:`sales-chart__svg`,viewBox:`0 0 ${B} ${V}`,preserveAspectRatio:`none`,role:`img`,"aria-label":t.title||`نمودار فروش`,onMousemove:g,onMouseleave:_},[(f(!0),e(b,null,C(m.value,(t,n)=>(f(),e(`line`,{key:n,x1:i.left,x2:B-i.right,y1:t,y2:t,class:`sales-chart__grid`},null,8,N))),128)),p.value?(f(),e(`polygon`,{key:0,points:p.value,class:`sales-chart__area`,style:T({fill:`${t.color}22`})},null,12,P)):a(``,!0),s(`polyline`,{points:d.value,class:`sales-chart__line`,style:T({stroke:t.color})},null,12,F),h.value?(f(),e(b,{key:1},[s(`line`,{x1:h.value.x,x2:h.value.x,y1:i.top,y2:V-i.bottom,class:`sales-chart__cursor`},null,8,I),s(`circle`,{cx:h.value.x,cy:h.value.y,r:`4`,class:`sales-chart__dot`,style:T({fill:t.color})},null,12,L)],64)):a(``,!0)],40,M)),h.value?(f(),e(`div`,{key:0,class:`sales-chart__tooltip`,style:T({left:`${h.value.x/B*100}%`})},[s(`span`,R,o(t.labels?.[h.value.index]??`روز ${h.value.index+1}`),1),s(`strong`,null,o(D(v)(h.value.value))+` `+o(t.unit),1)],4)):a(``,!0)],4),t.labels?.length?(f(),e(`div`,z,[(f(!0),e(b,null,C(t.labels,(t,n)=>(f(),e(`span`,{key:n},o(t),1))),128))])):a(``,!0)]))}}),[[`__scopeId`,`data-v-85c70c78`]]),U={info:`var(--color-info-light)`,warning:`var(--color-warning-light)`,purple:`var(--color-purple-light)`,success:`var(--color-success-light)`},W={info:`var(--color-info)`,warning:`var(--color-warning-dark)`,purple:`var(--color-purple)`,success:`var(--color-success)`},G=()=>({newOrders:0,pendingReview:0,pendingCheck:0,finalApproval:0,todaySales:0,todaySalesGrowth:0,monthSales:0});function K(){let e=n(),t=O(),i=w(G()),a=w([]),o=w(Array.from({length:28},()=>0)),s=w([`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`]),l=w([]),d=w(!1),f=c(()=>[{label:`سفارشهای جدید`,value:i.value.newOrders,icon:`cart`,tone:`info`,link:`/orders`},{label:`در انتظار بررسی`,value:i.value.pendingReview,icon:`file`,tone:`warning`,link:`/orders?tab=pending_review`},{label:`بررسی چک`,value:i.value.pendingCheck,icon:`wallet`,tone:`purple`,link:`/orders?tab=pending_check`},{label:`تأیید نهایی شده`,value:i.value.finalApproval,icon:`check-circle`,tone:`success`,link:`/orders?tab=final_approval`}]),p=c(()=>{let e=o.value;if(!e.length)return``;let t=Math.max(...e,.001),n=e.length>1?280/(e.length-1):280;return e.map((e,r)=>`${r*n},${120-e/t*110-5}`).join(` `)});async function m(){d.value=!0;try{let e=await u.get();i.value=e.stats,a.value=(e.recentOrders??[]).map(e=>E(e)),o.value=e.salesChartData?.length?e.salesChartData:Array.from({length:28},()=>0),s.value=e.chartAxisLabels?.length?e.chartAxisLabels:[`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`],l.value=e.checkDeadlines??[]}catch(e){t.error(e instanceof r?e.message:`بارگذاری داشبورد انجام نشد.`)}finally{d.value=!1}}y(()=>{m()});function h(){e.push(`/orders`)}return{checkDeadlines:l,dashboardStats:i,recentOrders:a,chartPoints:p,salesChartData:o,chartAxisLabels:s,statCards:f,loading:d,goOrders:h,loadDashboard:m}}var q={class:`dashboard`},J={class:`dashboard__toolbar`},Y={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},X={class:`dashboard__stats`},Z={class:`admin-stat-card__label`},Q={class:`admin-stat-card__value`},ne={class:`dashboard__sales-card admin-stat-card`},re={class:`dashboard__sales-header`},ie={class:`admin-stat-card__value dashboard__sales-value`},$={class:`dashboard__sales-growth`},ae={class:`dashboard__grid`},oe={class:`dashboard__chart-card admin-card`},se={class:`dashboard__orders-card admin-card`},ce={class:`admin-table-wrap`},le={class:`admin-table admin-table--compact`},ue={class:`dashboard__card-footer`},de={class:`dashboard__checks-card admin-card`},fe={class:`dashboard__deadline-list`},pe={class:`dashboard__deadline-count`},me={class:`dashboard__deadline-amount`},he={class:`dashboard__card-footer`},ge=t(x({__name:`DesktopDashboard`,setup(t){let{checkDeadlines:n,dashboardStats:r,recentOrders:a,salesChartData:c,chartAxisLabels:l,goOrders:u,statCards:v}=K();return(t,y)=>{let x=p(`RouterLink`);return f(),e(`div`,q,[s(`div`,J,[s(`button`,Y,[_(i,{name:`calendar`,size:16}),y[1]||=S(` امروز `,-1)])]),s(`div`,X,[(f(!0),e(b,null,C(D(v),t=>(f(),e(`div`,{key:t.label,class:`admin-stat-card`},[s(`div`,{class:`admin-stat-card__icon`,style:T({background:D(U)[t.tone],color:D(W)[t.tone]})},[_(i,{name:t.icon,size:20},null,8,[`name`])],4),s(`p`,Z,o(t.label),1),s(`p`,Q,o(t.value),1),_(x,{to:t.link,class:`admin-stat-card__link`},{default:h(()=>[...y[2]||=[S(`مشاهده سفارشها`,-1)]]),_:1},8,[`to`])]))),128)),s(`div`,ne,[s(`div`,re,[s(`div`,null,[y[3]||=s(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),s(`p`,ie,o(D(g)(D(r).todaySales)),1),s(`span`,$,` +`+o(D(r).todaySalesGrowth)+`% نسبت به دیروز `,1)]),_(i,{name:`calendar`,size:20,class:`dashboard__sales-icon`})]),y[4]||=s(`svg`,{class:`dashboard__sparkline`,viewBox:`0 0 120 32`,preserveAspectRatio:`none`},[s(`polyline`,{fill:`none`,stroke:`#159660`,"stroke-width":`2`,points:`0,24 20,18 40,22 60,12 80,16 100,8 120,14`})],-1)])]),s(`div`,ae,[s(`div`,oe,[_(H,{title:`فروش ماه جاری`,subtitle:D(g)(D(r).monthSales),data:D(c),labels:D(l),unit:`میلیارد`,height:168},null,8,[`subtitle`,`data`,`labels`])]),s(`div`,se,[y[7]||=s(`div`,{class:`dashboard__card-header`},[s(`h2`,{class:`dashboard__card-title`},`سفارشهای اخیر`)],-1),s(`div`,ce,[s(`table`,le,[y[5]||=s(`thead`,null,[s(`tr`,null,[s(`th`,null,`شماره سفارش`),s(`th`,null,`مشتری`),s(`th`,null,`شرکت`),s(`th`,null,`وضعیت`),s(`th`,null,`تاریخ ثبت`)])],-1),s(`tbody`,null,[(f(!0),e(b,null,C(D(a),t=>(f(),e(`tr`,{key:t.id},[s(`td`,null,o(t.orderNumber),1),s(`td`,null,o(t.customerName),1),s(`td`,null,o(t.companyName),1),s(`td`,null,[_(k,{status:t.status},null,8,[`status`])]),s(`td`,null,o(D(m)(t.createdAt)),1)]))),128))])])]),s(`div`,ue,[s(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:y[0]||=(...e)=>D(u)&&D(u)(...e)},[y[6]||=S(` مشاهده همه سفارشها `,-1),_(i,{name:`chevron-left`,size:16})])])]),s(`div`,de,[y[9]||=s(`div`,{class:`dashboard__card-header`},[s(`h2`,{class:`dashboard__card-title`},`سررسید چکها`)],-1),s(`ul`,fe,[(f(!0),e(b,null,C(D(n),t=>(f(),e(`li`,{key:t.id,class:`dashboard__deadline-item`},[s(`span`,{class:d([`admin-badge`,{"admin-badge--danger":t.tone===`danger`,"admin-badge--warning":t.tone===`warning`,"admin-badge--neutral":t.tone===`neutral`}])},o(t.label),3),s(`span`,pe,o(t.count)+` فقره`,1),s(`span`,me,o(D(g)(t.amount)),1)]))),128))]),s(`div`,he,[_(x,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm`},{default:h(()=>[y[8]||=S(` مشاهده همه `,-1),_(i,{name:`chevron-left`,size:16})]),_:1})])])])])}}}),[[`__scopeId`,`data-v-bf2ebdae`]]),_e={class:`compact-dashboard page-shell`},ve={class:`flex justify-end mb-3`},ye={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},be={class:`compact-stats-grid`},xe={class:`admin-stat-card__label`},Se={class:`admin-stat-card__value`},Ce={class:`admin-stat-card col-span-full`},we={class:`admin-stat-card__value`},Te={class:`text-xs font-semibold text-success`},Ee={class:`compact-section-grid`},De={class:`compact-section-card admin-panel`},Oe={class:`compact-section-card admin-panel`},ke={class:`admin-card-list`},Ae={class:`admin-card-item__header`},je={class:`admin-card-item__title`},Me={class:`admin-card-item__meta`},Ne={class:`compact-section-card admin-panel`},Pe={class:`m-0 p-0 list-none flex flex-col gap-2.5`},Fe={class:`mr-auto text-xs`},Ie=x({__name:`CompactDashboard`,setup(t){let{checkDeadlines:n,dashboardStats:r,recentOrders:a,salesChartData:c,chartAxisLabels:u,goOrders:v,statCards:y}=K();return(t,x)=>{let w=p(`RouterLink`);return f(),e(`div`,_e,[s(`div`,ve,[s(`button`,ye,[_(i,{name:`calendar`,size:16}),x[1]||=S(` امروز `,-1)])]),s(`div`,be,[(f(!0),e(b,null,C(D(y),t=>(f(),e(`div`,{key:t.label,class:`admin-stat-card`},[s(`div`,{class:`admin-stat-card__icon`,style:T({background:D(U)[t.tone],color:D(W)[t.tone]})},[_(i,{name:t.icon,size:20},null,8,[`name`])],4),s(`p`,xe,o(t.label),1),s(`p`,Se,o(t.value),1),_(w,{to:t.link,class:`admin-stat-card__link`},{default:h(()=>[...x[2]||=[S(`مشاهده`,-1)]]),_:1},8,[`to`])]))),128)),s(`div`,Ce,[x[3]||=s(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),s(`p`,we,o(D(g)(D(r).todaySales)),1),s(`span`,Te,` +`+o(D(r).todaySalesGrowth)+`% نسبت به دیروز `,1)])]),s(`div`,Ee,[s(`section`,De,[_(H,{title:`فروش ماه جاری`,subtitle:D(g)(D(r).monthSales),data:D(c),labels:D(u),unit:`میلیارد`,height:140},null,8,[`subtitle`,`data`,`labels`])]),s(`section`,Oe,[x[5]||=s(`h2`,{class:`compact-section-card__title`},`سفارشهای اخیر`,-1),s(`div`,ke,[(f(!0),e(b,null,C(D(a),e=>(f(),l(w,{key:e.id,to:`/orders`,class:`admin-card-item block no-underline text-inherit`},{default:h(()=>[s(`div`,Ae,[s(`p`,je,o(e.orderNumber),1),_(k,{status:e.status},null,8,[`status`])]),s(`div`,Me,[s(`span`,null,o(e.customerName),1),s(`span`,null,o(D(m)(e.createdAt)),1)])]),_:2},1024))),128))]),s(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm inline-flex mt-3`,onClick:x[0]||=(...e)=>D(v)&&D(v)(...e)},[x[4]||=S(` مشاهده همه سفارشها `,-1),_(i,{name:`chevron-left`,size:16})])]),s(`section`,Ne,[x[7]||=s(`h2`,{class:`compact-section-card__title`},`سررسید چکها`,-1),s(`ul`,Pe,[(f(!0),e(b,null,C(D(n),t=>(f(),e(`li`,{key:t.id,class:`flex flex-wrap items-center gap-2 text-sm`},[s(`span`,{class:d([`admin-badge`,{"admin-badge--danger":t.tone===`danger`,"admin-badge--warning":t.tone===`warning`,"admin-badge--neutral":t.tone===`neutral`}])},o(t.label),3),s(`span`,null,o(t.count)+` فقره`,1),s(`strong`,Fe,o(D(g)(t.amount)),1)]))),128))]),_(w,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm inline-flex mt-3 no-underline`},{default:h(()=>[x[6]||=S(` مشاهده همه `,-1),_(i,{name:`chevron-left`,size:16})]),_:1})])])])}}}),Le=x({__name:`DashboardView`,setup(t){return(t,n)=>(f(),e(b,null,[_(ge,{class:`desktop-only`}),_(Ie,{class:`compact-only`})],64))}});export{Le as default};
\ No newline at end of file
diff --git a/dist/assets/DashboardView-ChWbpDAC.js b/dist/assets/DashboardView-ChWbpDAC.js
deleted file mode 100644
index 200e93b..0000000
--- a/dist/assets/DashboardView-ChWbpDAC.js
+++ /dev/null
@@ -1 +0,0 @@
-import{A as e,At as t,G as n,I as r,Mt as i,N as a,Nt as o,R as s,a as c,b as l,c as u,f as d,g as f,h as p,m,nt as h,o as g,p as _,t as v,ut as y,x as b,y as x}from"./http-WTIyGIuL.js";import{F as S,N as C,_ as w,i as T,n as E,o as D,y as O}from"./index-BOMJTziC.js";import{t as k}from"./StatusBadge-C_awmXg1.js";var ee={class:`sales-chart`},A={key:0,class:`sales-chart__header`},j={key:0,class:`sales-chart__title`},M={key:1,class:`sales-chart__subtitle`},N=[`viewBox`,`aria-label`],te=[`x1`,`x2`,`y1`,`y2`],P=[`points`],F=[`points`],I=[`x1`,`x2`,`y1`,`y2`],L=[`cx`,`cy`],R={class:`sales-chart__tooltip-label`},z={key:1,class:`sales-chart__axis`},B=320,V=120,H=g(b({__name:`SalesAreaChart`,props:{data:{},title:{},subtitle:{},height:{default:160},color:{default:`#0a353c`},unit:{default:`میلیارد تومان`},labels:{}},setup(e){let t=e,n=h(null),s={top:12,right:8,bottom:8,left:8},c=d(()=>Math.max(...t.data,.001)),l=d(()=>{let e=B-s.left-s.right,n=V-s.top-s.bottom,r=e/Math.max(t.data.length-1,1);return t.data.map((e,t)=>({x:s.left+t*r,y:s.top+n-e/c.value*n,value:e,index:t}))}),m=d(()=>l.value.map(e=>`${e.x},${e.y}`).join(` `)),g=d(()=>{let e=V-s.bottom,t=l.value[0],n=l.value[l.value.length-1];return!t||!n?``:`${t.x},${e} ${m.value} ${n.x},${e}`}),v=d(()=>{let e=V-s.top-s.bottom;return[0,.5,1].map(t=>s.top+e*t)}),b=d(()=>n.value===null?null:l.value[n.value]??null);function x(e){let t=e.currentTarget.getBoundingClientRect(),r=(e.clientX-t.left)/t.width*B,i=0,a=1/0;l.value.forEach(e=>{let t=Math.abs(e.x-r);t(a(),f(`div`,ee,[e.title||e.subtitle?(a(),f(`div`,A,[_(`div`,null,[e.title?(a(),f(`h3`,j,o(e.title),1)):p(``,!0),e.subtitle?(a(),f(`p`,M,o(e.subtitle),1)):p(``,!0)])])):p(``,!0),_(`div`,{class:`sales-chart__body`,style:i({height:`${e.height}px`})},[(a(),f(`svg`,{class:`sales-chart__svg`,viewBox:`0 0 ${B} ${V}`,preserveAspectRatio:`none`,role:`img`,"aria-label":e.title||`نمودار فروش`,onMousemove:x,onMouseleave:S},[(a(!0),f(u,null,r(v.value,(e,t)=>(a(),f(`line`,{key:t,x1:s.left,x2:B-s.right,y1:e,y2:e,class:`sales-chart__grid`},null,8,te))),128)),g.value?(a(),f(`polygon`,{key:0,points:g.value,class:`sales-chart__area`,style:i({fill:`${e.color}22`})},null,12,P)):p(``,!0),_(`polyline`,{points:m.value,class:`sales-chart__line`,style:i({stroke:e.color})},null,12,F),b.value?(a(),f(u,{key:1},[_(`line`,{x1:b.value.x,x2:b.value.x,y1:s.top,y2:V-s.bottom,class:`sales-chart__cursor`},null,8,I),_(`circle`,{cx:b.value.x,cy:b.value.y,r:`4`,class:`sales-chart__dot`,style:i({fill:e.color})},null,12,L)],64)):p(``,!0)],40,N)),b.value?(a(),f(`div`,{key:0,class:`sales-chart__tooltip`,style:i({left:`${b.value.x/B*100}%`})},[_(`span`,R,o(e.labels?.[b.value.index]??`روز ${b.value.index+1}`),1),_(`strong`,null,o(y(D)(b.value.value))+` `+o(e.unit),1)],4)):p(``,!0)],4),e.labels?.length?(a(),f(`div`,z,[(a(!0),f(u,null,r(e.labels,(e,t)=>(a(),f(`span`,{key:t},o(e),1))),128))])):p(``,!0)]))}}),[[`__scopeId`,`data-v-85c70c78`]]),U={info:`var(--color-info-light)`,warning:`var(--color-warning-light)`,purple:`var(--color-purple-light)`,success:`var(--color-success-light)`},W={info:`var(--color-info)`,warning:`var(--color-warning-dark)`,purple:`var(--color-purple)`,success:`var(--color-success)`},G=()=>({newOrders:0,pendingReview:0,pendingCheck:0,finalApproval:0,todaySales:0,todaySalesGrowth:0,monthSales:0});function K(){let t=S(),n=c(),r=h(G()),i=h([]),a=h(Array.from({length:28},()=>0)),o=h([`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`]),s=h([]),l=h(!1),u=d(()=>[{label:`سفارشهای جدید`,value:r.value.newOrders,icon:`cart`,tone:`info`,link:`/orders`},{label:`در انتظار بررسی`,value:r.value.pendingReview,icon:`file`,tone:`warning`,link:`/orders?tab=pending_review`},{label:`بررسی چک`,value:r.value.pendingCheck,icon:`wallet`,tone:`purple`,link:`/orders?tab=pending_check`},{label:`تأیید نهایی شده`,value:r.value.finalApproval,icon:`check-circle`,tone:`success`,link:`/orders?tab=final_approval`}]),f=d(()=>{let e=a.value;if(!e.length)return``;let t=Math.max(...e,.001),n=e.length>1?280/(e.length-1):280;return e.map((e,r)=>`${r*n},${120-e/t*110-5}`).join(` `)});async function p(){l.value=!0;try{let e=await w.get();r.value=e.stats,i.value=(e.recentOrders??[]).map(e=>O(e)),a.value=e.salesChartData?.length?e.salesChartData:Array.from({length:28},()=>0),o.value=e.chartAxisLabels?.length?e.chartAxisLabels:[`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`],s.value=e.checkDeadlines??[]}catch(e){n.error(e instanceof v?e.message:`بارگذاری داشبورد انجام نشد.`)}finally{l.value=!1}}e(()=>{p()});function m(){t.push(`/orders`)}return{checkDeadlines:s,dashboardStats:r,recentOrders:i,chartPoints:f,salesChartData:a,chartAxisLabels:o,statCards:u,loading:l,goOrders:m,loadDashboard:p}}var q={class:`dashboard`},J={class:`dashboard__toolbar`},Y={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},X={class:`dashboard__stats`},Z={class:`admin-stat-card__label`},Q={class:`admin-stat-card__value`},ne={class:`dashboard__sales-card admin-stat-card`},re={class:`dashboard__sales-header`},ie={class:`admin-stat-card__value dashboard__sales-value`},ae={class:`dashboard__sales-growth`},oe={class:`dashboard__grid`},se={class:`dashboard__chart-card admin-card`},ce={class:`dashboard__orders-card admin-card`},le={class:`admin-table-wrap`},ue={class:`admin-table admin-table--compact`},de={class:`dashboard__card-footer`},fe={class:`dashboard__checks-card admin-card`},pe={class:`dashboard__deadline-list`},me={class:`dashboard__deadline-count`},he={class:`dashboard__deadline-amount`},ge={class:`dashboard__card-footer`},_e=g(b({__name:`DesktopDashboard`,setup(e){let{checkDeadlines:c,dashboardStats:d,recentOrders:p,salesChartData:m,chartAxisLabels:h,goOrders:g,statCards:v}=K();return(e,b)=>{let S=s(`RouterLink`);return a(),f(`div`,q,[_(`div`,J,[_(`button`,Y,[l(C,{name:`calendar`,size:16}),b[1]||=x(` امروز `,-1)])]),_(`div`,X,[(a(!0),f(u,null,r(y(v),e=>(a(),f(`div`,{key:e.label,class:`admin-stat-card`},[_(`div`,{class:`admin-stat-card__icon`,style:i({background:y(U)[e.tone],color:y(W)[e.tone]})},[l(C,{name:e.icon,size:20},null,8,[`name`])],4),_(`p`,Z,o(e.label),1),_(`p`,Q,o(e.value),1),l(S,{to:e.link,class:`admin-stat-card__link`},{default:n(()=>[...b[2]||=[x(`مشاهده سفارشها`,-1)]]),_:1},8,[`to`])]))),128)),_(`div`,ne,[_(`div`,re,[_(`div`,null,[b[3]||=_(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),_(`p`,ie,o(y(E)(y(d).todaySales)),1),_(`span`,ae,` +`+o(y(d).todaySalesGrowth)+`% نسبت به دیروز `,1)]),l(C,{name:`calendar`,size:20,class:`dashboard__sales-icon`})]),b[4]||=_(`svg`,{class:`dashboard__sparkline`,viewBox:`0 0 120 32`,preserveAspectRatio:`none`},[_(`polyline`,{fill:`none`,stroke:`#159660`,"stroke-width":`2`,points:`0,24 20,18 40,22 60,12 80,16 100,8 120,14`})],-1)])]),_(`div`,oe,[_(`div`,se,[l(H,{title:`فروش ماه جاری`,subtitle:y(E)(y(d).monthSales),data:y(m),labels:y(h),unit:`میلیارد`,height:168},null,8,[`subtitle`,`data`,`labels`])]),_(`div`,ce,[b[7]||=_(`div`,{class:`dashboard__card-header`},[_(`h2`,{class:`dashboard__card-title`},`سفارشهای اخیر`)],-1),_(`div`,le,[_(`table`,ue,[b[5]||=_(`thead`,null,[_(`tr`,null,[_(`th`,null,`شماره سفارش`),_(`th`,null,`مشتری`),_(`th`,null,`شرکت`),_(`th`,null,`وضعیت`),_(`th`,null,`تاریخ ثبت`)])],-1),_(`tbody`,null,[(a(!0),f(u,null,r(y(p),e=>(a(),f(`tr`,{key:e.id},[_(`td`,null,o(e.orderNumber),1),_(`td`,null,o(e.customerName),1),_(`td`,null,o(e.companyName),1),_(`td`,null,[l(k,{status:e.status},null,8,[`status`])]),_(`td`,null,o(y(T)(e.createdAt)),1)]))),128))])])]),_(`div`,de,[_(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:b[0]||=(...e)=>y(g)&&y(g)(...e)},[b[6]||=x(` مشاهده همه سفارشها `,-1),l(C,{name:`chevron-left`,size:16})])])]),_(`div`,fe,[b[9]||=_(`div`,{class:`dashboard__card-header`},[_(`h2`,{class:`dashboard__card-title`},`سررسید چکها`)],-1),_(`ul`,pe,[(a(!0),f(u,null,r(y(c),e=>(a(),f(`li`,{key:e.id,class:`dashboard__deadline-item`},[_(`span`,{class:t([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},o(e.label),3),_(`span`,me,o(e.count)+` فقره`,1),_(`span`,he,o(y(E)(e.amount)),1)]))),128))]),_(`div`,ge,[l(S,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm`},{default:n(()=>[b[8]||=x(` مشاهده همه `,-1),l(C,{name:`chevron-left`,size:16})]),_:1})])])])])}}}),[[`__scopeId`,`data-v-bf2ebdae`]]),ve={class:`compact-dashboard page-shell`},ye={class:`flex justify-end mb-3`},be={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},xe={class:`compact-stats-grid`},Se={class:`admin-stat-card__label`},Ce={class:`admin-stat-card__value`},we={class:`admin-stat-card col-span-full`},$={class:`admin-stat-card__value`},Te={class:`text-xs font-semibold text-success`},Ee={class:`compact-section-grid`},De={class:`compact-section-card admin-panel`},Oe={class:`compact-section-card admin-panel`},ke={class:`admin-card-list`},Ae={class:`admin-card-item__header`},je={class:`admin-card-item__title`},Me={class:`admin-card-item__meta`},Ne={class:`compact-section-card admin-panel`},Pe={class:`m-0 p-0 list-none flex flex-col gap-2.5`},Fe={class:`mr-auto text-xs`},Ie=b({__name:`CompactDashboard`,setup(e){let{checkDeadlines:c,dashboardStats:d,recentOrders:p,salesChartData:h,chartAxisLabels:g,goOrders:v,statCards:b}=K();return(e,S)=>{let w=s(`RouterLink`);return a(),f(`div`,ve,[_(`div`,ye,[_(`button`,be,[l(C,{name:`calendar`,size:16}),S[1]||=x(` امروز `,-1)])]),_(`div`,xe,[(a(!0),f(u,null,r(y(b),e=>(a(),f(`div`,{key:e.label,class:`admin-stat-card`},[_(`div`,{class:`admin-stat-card__icon`,style:i({background:y(U)[e.tone],color:y(W)[e.tone]})},[l(C,{name:e.icon,size:20},null,8,[`name`])],4),_(`p`,Se,o(e.label),1),_(`p`,Ce,o(e.value),1),l(w,{to:e.link,class:`admin-stat-card__link`},{default:n(()=>[...S[2]||=[x(`مشاهده`,-1)]]),_:1},8,[`to`])]))),128)),_(`div`,we,[S[3]||=_(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),_(`p`,$,o(y(E)(y(d).todaySales)),1),_(`span`,Te,` +`+o(y(d).todaySalesGrowth)+`% نسبت به دیروز `,1)])]),_(`div`,Ee,[_(`section`,De,[l(H,{title:`فروش ماه جاری`,subtitle:y(E)(y(d).monthSales),data:y(h),labels:y(g),unit:`میلیارد`,height:140},null,8,[`subtitle`,`data`,`labels`])]),_(`section`,Oe,[S[5]||=_(`h2`,{class:`compact-section-card__title`},`سفارشهای اخیر`,-1),_(`div`,ke,[(a(!0),f(u,null,r(y(p),e=>(a(),m(w,{key:e.id,to:`/orders`,class:`admin-card-item block no-underline text-inherit`},{default:n(()=>[_(`div`,Ae,[_(`p`,je,o(e.orderNumber),1),l(k,{status:e.status},null,8,[`status`])]),_(`div`,Me,[_(`span`,null,o(e.customerName),1),_(`span`,null,o(y(T)(e.createdAt)),1)])]),_:2},1024))),128))]),_(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm inline-flex mt-3`,onClick:S[0]||=(...e)=>y(v)&&y(v)(...e)},[S[4]||=x(` مشاهده همه سفارشها `,-1),l(C,{name:`chevron-left`,size:16})])]),_(`section`,Ne,[S[7]||=_(`h2`,{class:`compact-section-card__title`},`سررسید چکها`,-1),_(`ul`,Pe,[(a(!0),f(u,null,r(y(c),e=>(a(),f(`li`,{key:e.id,class:`flex flex-wrap items-center gap-2 text-sm`},[_(`span`,{class:t([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},o(e.label),3),_(`span`,null,o(e.count)+` فقره`,1),_(`strong`,Fe,o(y(E)(e.amount)),1)]))),128))]),l(w,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm inline-flex mt-3 no-underline`},{default:n(()=>[S[6]||=x(` مشاهده همه `,-1),l(C,{name:`chevron-left`,size:16})]),_:1})])])])}}}),Le=b({__name:`DashboardView`,setup(e){return(e,t)=>(a(),f(u,null,[l(_e,{class:`desktop-only`}),l(Ie,{class:`compact-only`})],64))}});export{Le as default};
\ No newline at end of file
diff --git a/dist/assets/LevelsView-BKHxc_1f.js b/dist/assets/LevelsView-BKHxc_1f.js
new file mode 100644
index 0000000..1921df8
--- /dev/null
+++ b/dist/assets/LevelsView-BKHxc_1f.js
@@ -0,0 +1,3 @@
+import{$ as e,B as t,N as n,R as r,St as i,W as a,X as o,Y as s,Z as c,_t as l,ct as u,ht as d,mt as f,nt as p,ot as m,q as h,rt as g,tt as _,ut as v,v as y,vt as b,z as x}from"./index-BHqDDh7X.js";import{t as S}from"./AdminPageSkeleton-E50Kwv4j.js";import{t as C}from"./BaseEmptyState-vNIhbGdV.js";var w={class:`admin-page`},T={key:2,class:`admin-table`},E={dir:`ltr`},D=[`onClick`],O={class:`field`},k={class:`field`},A={class:`field`},j={class:`field`},M=[`disabled`],N=t(g({__name:`LevelsView`,setup(t){let g=b([]),N=b(!0),P=b(!1),F=b(null),I=x(),L=l({code:``,label:``,sortOrder:0,benefitsText:``}),R=s(()=>F.value?`ویرایش سطح`:`سطح جدید`);function z(e){return e.split(`
+`).map(e=>e.trim()).filter(Boolean).map(e=>({title:e}))}async function B(){N.value=!0;try{g.value=await y.list()}catch(e){I.error(e instanceof n?e.message:`بارگذاری سطوح ناموفق بود`)}finally{N.value=!1}}function V(){F.value=null,Object.assign(L,{code:``,label:``,sortOrder:g.value.length+1,benefitsText:``}),P.value=!0}function H(e){F.value=e.id,Object.assign(L,{code:e.code,label:e.label,sortOrder:e.sortOrder,benefitsText:e.benefits.map(e=>e.title).join(`
+`)}),P.value=!0}async function U(){try{let e={code:L.code.trim(),label:L.label.trim(),sortOrder:L.sortOrder,benefits:z(L.benefitsText)};F.value?await y.update(F.value,e):await y.create(e),P.value=!1,I.success(`ذخیره شد`),await B()}catch(e){I.error(e instanceof n?e.message:`ذخیره ناموفق بود`)}}return m(()=>{B()}),(t,n)=>(u(),e(`div`,w,[o(`header`,{class:`admin-page__head`},[n[5]||=o(`div`,null,[o(`h1`,null,`سطوح و مزایای مشتری`),o(`p`,null,`تعریف Level داخلی CRM و مزایای هر سطح (نمایش فقط در ادمین)`)],-1),o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:V},`سطح جدید`)]),N.value?(u(),c(S,{key:0,variant:`table`})):g.value.length?(u(),e(`table`,T,[n[6]||=o(`thead`,null,[o(`tr`,null,[o(`th`,null,`کد`),o(`th`,null,`عنوان`),o(`th`,null,`مزایا`),o(`th`,null,`مشتریان`),o(`th`)])],-1),o(`tbody`,null,[(u(!0),e(h,null,v(g.value,t=>(u(),e(`tr`,{key:t.id},[o(`td`,E,i(t.code),1),o(`td`,null,i(t.label),1),o(`td`,null,i(t.benefits.map(e=>e.title).join(`، `)||`—`),1),o(`td`,null,i(t.customersCount),1),o(`td`,null,[o(`button`,{type:`button`,class:`link`,onClick:e=>H(t)},`ویرایش`,8,D)])]))),128))])])):(u(),c(C,{key:1,title:`سطحی تعریف نشده`})),p(r,{open:P.value,title:R.value,onClose:n[4]||=e=>P.value=!1},{footer:f(()=>[o(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!L.code.trim()||!L.label.trim(),onClick:U},` ذخیره `,8,M)]),default:f(()=>[o(`label`,O,[n[7]||=_(`کد`,-1),d(o(`input`,{"onUpdate:modelValue":n[0]||=e=>L.code=e,class:`admin-input`,dir:`ltr`},null,512),[[a,L.code]])]),o(`label`,k,[n[8]||=_(`عنوان`,-1),d(o(`input`,{"onUpdate:modelValue":n[1]||=e=>L.label=e,class:`admin-input`},null,512),[[a,L.label]])]),o(`label`,A,[n[9]||=_(`ترتیب`,-1),d(o(`input`,{"onUpdate:modelValue":n[2]||=e=>L.sortOrder=e,type:`number`,class:`admin-input`},null,512),[[a,L.sortOrder,void 0,{number:!0}]])]),o(`label`,j,[n[10]||=_(` مزایا (هر خط یک مورد) `,-1),d(o(`textarea`,{"onUpdate:modelValue":n[3]||=e=>L.benefitsText=e,class:`admin-input`,rows:`4`},null,512),[[a,L.benefitsText]])])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-44c7f808`]]);export{N as default};
\ No newline at end of file
diff --git a/dist/assets/LevelsView-BLlLIF9F.js b/dist/assets/LevelsView-BLlLIF9F.js
deleted file mode 100644
index 5cf1045..0000000
--- a/dist/assets/LevelsView-BLlLIF9F.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import{A as e,G as t,I as n,K as r,N as i,Nt as a,a as o,b as s,c,et as l,f as u,g as d,m as f,nt as p,o as m,p as h,t as g,x as _,y as v}from"./http-WTIyGIuL.js";import{L as y,V as b,v as x}from"./index-BOMJTziC.js";import{t as S}from"./AdminPageSkeleton-D-u-8bBz.js";import{t as C}from"./BaseEmptyState-Wc1O8rBP.js";var w={class:`admin-page`},T={key:2,class:`admin-table`},E={dir:`ltr`},D=[`onClick`],O={class:`field`},k={class:`field`},A={class:`field`},j={class:`field`},M=[`disabled`],N=m(_({__name:`LevelsView`,setup(m){let _=p([]),N=p(!0),P=p(!1),F=p(null),I=o(),L=l({code:``,label:``,sortOrder:0,benefitsText:``}),R=u(()=>F.value?`ویرایش سطح`:`سطح جدید`);function z(e){return e.split(`
-`).map(e=>e.trim()).filter(Boolean).map(e=>({title:e}))}async function B(){N.value=!0;try{_.value=await x.list()}catch(e){I.error(e instanceof g?e.message:`بارگذاری سطوح ناموفق بود`)}finally{N.value=!1}}function V(){F.value=null,Object.assign(L,{code:``,label:``,sortOrder:_.value.length+1,benefitsText:``}),P.value=!0}function H(e){F.value=e.id,Object.assign(L,{code:e.code,label:e.label,sortOrder:e.sortOrder,benefitsText:e.benefits.map(e=>e.title).join(`
-`)}),P.value=!0}async function U(){try{let e={code:L.code.trim(),label:L.label.trim(),sortOrder:L.sortOrder,benefits:z(L.benefitsText)};F.value?await x.update(F.value,e):await x.create(e),P.value=!1,I.success(`ذخیره شد`),await B()}catch(e){I.error(e instanceof g?e.message:`ذخیره ناموفق بود`)}}return e(()=>{B()}),(e,o)=>(i(),d(`div`,w,[h(`header`,{class:`admin-page__head`},[o[5]||=h(`div`,null,[h(`h1`,null,`سطوح و مزایای مشتری`),h(`p`,null,`تعریف Level داخلی CRM و مزایای هر سطح (نمایش فقط در ادمین)`)],-1),h(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:V},`سطح جدید`)]),N.value?(i(),f(S,{key:0,variant:`table`})):_.value.length?(i(),d(`table`,T,[o[6]||=h(`thead`,null,[h(`tr`,null,[h(`th`,null,`کد`),h(`th`,null,`عنوان`),h(`th`,null,`مزایا`),h(`th`,null,`مشتریان`),h(`th`)])],-1),h(`tbody`,null,[(i(!0),d(c,null,n(_.value,e=>(i(),d(`tr`,{key:e.id},[h(`td`,E,a(e.code),1),h(`td`,null,a(e.label),1),h(`td`,null,a(e.benefits.map(e=>e.title).join(`، `)||`—`),1),h(`td`,null,a(e.customersCount),1),h(`td`,null,[h(`button`,{type:`button`,class:`link`,onClick:t=>H(e)},`ویرایش`,8,D)])]))),128))])])):(i(),f(C,{key:1,title:`سطحی تعریف نشده`})),s(y,{open:P.value,title:R.value,onClose:o[4]||=e=>P.value=!1},{footer:t(()=>[h(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!L.code.trim()||!L.label.trim(),onClick:U},` ذخیره `,8,M)]),default:t(()=>[h(`label`,O,[o[7]||=v(`کد`,-1),r(h(`input`,{"onUpdate:modelValue":o[0]||=e=>L.code=e,class:`admin-input`,dir:`ltr`},null,512),[[b,L.code]])]),h(`label`,k,[o[8]||=v(`عنوان`,-1),r(h(`input`,{"onUpdate:modelValue":o[1]||=e=>L.label=e,class:`admin-input`},null,512),[[b,L.label]])]),h(`label`,A,[o[9]||=v(`ترتیب`,-1),r(h(`input`,{"onUpdate:modelValue":o[2]||=e=>L.sortOrder=e,type:`number`,class:`admin-input`},null,512),[[b,L.sortOrder,void 0,{number:!0}]])]),h(`label`,j,[o[10]||=v(` مزایا (هر خط یک مورد) `,-1),r(h(`textarea`,{"onUpdate:modelValue":o[3]||=e=>L.benefitsText=e,class:`admin-input`,rows:`4`},null,512),[[b,L.benefitsText]])])]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-44c7f808`]]);export{N as default};
\ No newline at end of file
diff --git a/dist/assets/LoginView-ClhG325s.js b/dist/assets/LoginView-ClhG325s.js
new file mode 100644
index 0000000..aa42adc
--- /dev/null
+++ b/dist/assets/LoginView-ClhG325s.js
@@ -0,0 +1 @@
+import{$ as e,A as t,B as n,F as r,H as i,I as a,K as o,M as s,P as c,Q as l,St as u,V as d,W as f,X as p,Y as m,ct as h,et as g,ht as _,j as v,nt as y,rt as b,tt as x,vt as S,yt as C,z as w}from"./index-BHqDDh7X.js";var T={class:`login-page`},E={class:`login-page__form-wrap`},D={class:`login-page__card admin-card`},O={class:`login-page__header`},k={key:0,class:`login-page__mock-hint`},A={dir:`ltr`},j={dir:`ltr`},M={key:0,class:`admin-form__error`,role:`alert`},N={class:`admin-form__field`},P={class:`login-page__input-wrap`},F={class:`login-page__field-icon`,"aria-hidden":`true`},I={class:`admin-form__field`},L={class:`login-page__input-wrap login-page__input-wrap--password`},R={class:`login-page__field-icon`,"aria-hidden":`true`},z=[`type`],B=[`aria-label`],V={class:`login-page__remember`},H=[`disabled`],U={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},W=n(b({__name:`LoginView`,setup(n){let b=a(),W=r(),G=t(),K=w(),q=S(s()?v.phone:``),J=S(s()?v.password:``),Y=S(!0),X=S(!1),Z=s(),Q=m(()=>q.value.trim().length>0&&J.value.length>0);function $(e){return e.replace(/[۰-۹]/g,e=>String(`۰۱۲۳۴۵۶۷۸۹`.indexOf(e))).replace(/[٠-٩]/g,e=>String(`٠١٢٣٤٥٦٧٨٩`.indexOf(e)))}async function ee(){if(!Q.value){G.error=`لطفاً شماره موبایل و رمز عبور را وارد کنید.`;return}if(!await G.login($(q.value.trim()),J.value,Y.value))return;K.success(`خوش آمدید، ${G.fullName}`);let e=typeof W.query.redirect==`string`?W.query.redirect:`/`;b.replace(e)}return(t,n)=>(h(),e(`div`,T,[p(`div`,E,[p(`div`,D,[p(`div`,O,[n[8]||=p(`h2`,{class:`login-page__title`},`ورود به پنل مدیریت`,-1),n[9]||=p(`p`,{class:`login-page__subtitle`},`برای ادامه، اطلاعات حساب کاربری خود را وارد کنید.`,-1),C(Z)?(h(),e(`p`,k,[n[6]||=x(` حالت موک فعال است — `,-1),p(`span`,A,u(C(v).phone),1),n[7]||=x(` / `,-1),p(`span`,j,u(C(v).password),1)])):l(``,!0)]),p(`form`,{class:`admin-form login-page__form`,onSubmit:o(ee,[`prevent`])},[C(G).error?(h(),e(`p`,M,u(C(G).error),1)):l(``,!0),p(`div`,N,[n[10]||=p(`label`,{for:`login-phone`},`شماره موبایل`,-1),p(`div`,P,[p(`span`,F,[y(c,{name:`phone`,size:18})]),_(p(`input`,{id:`login-phone`,"onUpdate:modelValue":n[0]||=e=>q.value=e,type:`tel`,class:`admin-input login-page__input`,placeholder:`۰۹۱۲۱۱۱۱۲۲۲۲`,autocomplete:`username`,inputmode:`tel`,dir:`ltr`,onInput:n[1]||=e=>C(G).clearError()},null,544),[[f,q.value]])])]),p(`div`,I,[n[11]||=p(`label`,{for:`login-password`},`رمز عبور`,-1),p(`div`,L,[p(`span`,R,[y(c,{name:`lock`,size:18})]),_(p(`input`,{id:`login-password`,"onUpdate:modelValue":n[2]||=e=>J.value=e,type:X.value?`text`:`password`,class:`admin-input login-page__input login-page__input--with-toggle`,placeholder:`رمز عبور`,autocomplete:`current-password`,onInput:n[3]||=e=>C(G).clearError()},null,40,z),[[i,J.value]]),p(`button`,{type:`button`,class:`login-page__toggle-password`,"aria-label":X.value?`پنهان کردن رمز`:`نمایش رمز`,onClick:n[4]||=e=>X.value=!X.value},[y(c,{name:X.value?`eye-off`:`eye`,size:18},null,8,[`name`])],8,B)])]),p(`label`,V,[_(p(`input`,{"onUpdate:modelValue":n[5]||=e=>Y.value=e,type:`checkbox`},null,512),[[d,Y.value]]),n[12]||=p(`span`,null,`مرا به خاطر بسپار`,-1)]),p(`button`,{type:`submit`,class:`admin-btn admin-btn--primary login-page__submit`,disabled:!Q.value||C(G).loading},[C(G).loading?(h(),e(`span`,U)):l(``,!0),n[13]||=x(` ورود به پنل `,-1)],8,H)],32)])]),n[14]||=g(`