diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..7edc07d
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,11 @@
+node_modules
+.git
+.env
+.env.development
+.env.production
+.env.local
+*.log
+.DS_Store
+.idea
+.fleet
+.cursor
diff --git a/.gitignore b/.gitignore
index 79977f6..da8bf9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,8 +9,8 @@ lerna-debug.log*
node_modules
.DS_Store
-dist
-dist-ssr
+#dist
+#dist-ssr
coverage
*.local
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..7fa7e0e
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,21 @@
+# ایمیج اجرا: dist از گیت میآید. بیلد روی سیستم لوکال است؛ npm داخل داکر اجرا نمیشود.
+ARG NODE_IMAGE=node:22-alpine
+FROM ${NODE_IMAGE}
+
+WORKDIR /app
+
+COPY dist ./dist
+COPY scripts/serve-admin.mjs ./scripts/serve-admin.mjs
+COPY entrypoint.sh /entrypoint.sh
+
+RUN chmod +x /entrypoint.sh \
+ && test -f /app/dist/index.html
+
+ENV NODE_ENV=production
+ENV VITE_BASE_PATH=/admin/
+ENV PORT=9191
+
+EXPOSE 9191
+
+ENTRYPOINT ["/entrypoint.sh"]
+CMD ["node", "scripts/serve-admin.mjs"]
diff --git a/dist/.htaccess b/dist/.htaccess
new file mode 100644
index 0000000..ec82b63
--- /dev/null
+++ b/dist/.htaccess
@@ -0,0 +1,18 @@
+
+ RewriteEngine On
+ RewriteBase /admin/
+
+ # Serve existing files and directories
+ RewriteCond %{REQUEST_FILENAME} -f [OR]
+ RewriteCond %{REQUEST_FILENAME} -d
+ RewriteRule ^ - [L]
+
+ # SPA fallback
+ RewriteRule ^ index.html [L]
+
+
+
+ AddType application/javascript .js
+ AddType text/css .css
+ AddType application/wasm .wasm
+
diff --git a/dist/assets/ActiveSwitchCell-DxxSF-SL.js b/dist/assets/ActiveSwitchCell-DxxSF-SL.js
new file mode 100644
index 0000000..4b5cf4a
--- /dev/null
+++ b/dist/assets/ActiveSwitchCell-DxxSF-SL.js
@@ -0,0 +1 @@
+import{A as e,B as t,H as n,K as r,O as i,Q as a,T as o,U as s,V as c,ct as l,ft as u,j as d,lt as f,q as p,tt as m,ut as h,z as g}from"./index-dG7O4aC2.js";var _=[`title`],v={key:0,class:`base-switch__label`},y={class:`base-switch__control`},b=[`id`,`checked`,`disabled`,`aria-checked`,`aria-label`],x={class:`base-switch__track`,"aria-hidden":`true`},S={class:`base-switch__thumb`},C={key:0,class:`base-switch__spinner`},w=d(p({__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(e,{emit:r}){let i=e,o=r,c=g(()=>i.id??`switch-${crypto.randomUUID().slice(0,8)}`),l=g(()=>i.modelValue?i.activeText:i.inactiveText);function d(e){let t=e.target,n=t.checked;t.checked=i.modelValue,!(i.disabled||i.loading)&&o(`update:modelValue`,n)}return(r,i)=>(a(),s(`label`,{class:h([`base-switch`,{"base-switch--disabled":e.disabled||e.loading,"base-switch--error":e.error}]),title:l.value},[e.label?(a(),s(`span`,v,u(e.label),1)):n(``,!0),t(`span`,y,[t(`input`,{id:c.value,class:`base-switch__input`,type:`checkbox`,role:`switch`,checked:e.modelValue,disabled:e.disabled||e.loading,"aria-checked":e.modelValue,"aria-label":e.label||l.value,onChange:d},null,40,b),t(`span`,x,[t(`span`,S,[e.loading?(a(),s(`span`,C)):n(``,!0)])])])],10,_))}}),[[`__scopeId`,`data-v-0410eed4`]]),T={class:`base-empty__icon`,"aria-hidden":`true`},E={class:`base-empty__title`},D={key:0,class:`base-empty__description`},O={key:1,class:`base-empty__actions`},k=d(p({__name:`BaseEmptyState`,props:{icon:{default:`file`},title:{},description:{},compact:{type:Boolean}},emits:[`action`,`secondary`],setup(e){return(i,c)=>(a(),s(`div`,{class:h([`base-empty`,{"base-empty--compact":e.compact}])},[t(`div`,T,[r(o,{name:e.icon,size:e.compact?28:36},null,8,[`name`,`size`])]),t(`h3`,E,u(e.title),1),e.description?(a(),s(`p`,D,u(e.description),1)):n(``,!0),i.$slots.default||i.$slots.secondary?(a(),s(`div`,O,[m(i.$slots,`default`,{},void 0,!0),m(i.$slots,`secondary`,{},void 0,!0)])):n(``,!0)],2))}}),[[`__scopeId`,`data-v-47ea81e4`]]);function A(e=480){return new Promise(t=>{window.setTimeout(t,e)})}function j(t){let n=l(null),r=l(null),i=e();async function a(e,a){if(n.value)return a;let o=!a;if(!o&&t.confirmOff&&!await t.confirmOff())return a;n.value=e,r.value=null;let s=a;try{return await t.onPersist(o),i.success(t.successMessage?.(o)??(o?`وضعیت فعال شد.`:`وضعیت غیرفعال شد.`)),o}catch{return r.value=e,i.error(t.errorMessage??`بهروزرسانی وضعیت انجام نشد.`),s}finally{n.value=null}}function o(e){return n.value===e}function s(e){return r.value===e}return{toggle:a,isLoading:o,hasError:s}}var M=p({__name:`ActiveSwitchCell`,props:{id:{},modelValue:{type:Boolean},entityName:{},entityType:{},persist:{type:Function}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,r=t,{toggle:o,isLoading:s,hasError:l}=j({onPersist:async e=>{n.persist?await n.persist(n.id,e):await A()},successMessage:e=>e?`${n.entityType??`مورد`} «${n.entityName}» فعال شد.`:`${n.entityType??`مورد`} «${n.entityName}» غیرفعال شد.`});async function u(e){if(e===n.modelValue)return;let t=n.entityType??`مورد`;if(!await i({title:e?`فعالسازی ${t}`:`غیرفعالسازی ${t}`,message:e?`آیا از فعال کردن «${n.entityName}» مطمئن هستید؟`:`آیا از غیرفعال کردن «${n.entityName}» مطمئن هستید؟`,tone:e?`primary`:`danger`,confirmLabel:e?`فعال کردن`:`غیرفعال کردن`,cancelLabel:`انصراف`}))return;let a=await o(n.id,n.modelValue);r(`update:modelValue`,a)}return(t,n)=>(a(),c(w,{"model-value":e.modelValue,loading:f(s)(e.id),error:f(l)(e.id),"onUpdate:modelValue":u},null,8,[`model-value`,`loading`,`error`]))}});export{k as n,w as r,M as t};
\ No newline at end of file
diff --git a/dist/assets/ActiveSwitchCell-ek5gVZ9f.css b/dist/assets/ActiveSwitchCell-ek5gVZ9f.css
new file mode 100644
index 0000000..f249d0b
--- /dev/null
+++ b/dist/assets/ActiveSwitchCell-ek5gVZ9f.css
@@ -0,0 +1 @@
+.base-switch[data-v-0410eed4]{cursor:pointer;flex-direction:column;gap:6px;display:inline-flex}.base-switch--disabled[data-v-0410eed4]{cursor:not-allowed;opacity:.72}.base-switch--error .base-switch__track[data-v-0410eed4]{box-shadow:0 0 0 2px #dc35452e}.base-switch__label[data-v-0410eed4]{color:var(--color-text);font-size:.8125rem;font-weight:600}.base-switch__control[data-v-0410eed4]{align-items:center;display:inline-flex}.base-switch__input[data-v-0410eed4]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.base-switch__input:focus-visible+.base-switch__track[data-v-0410eed4]{outline:2px solid var(--color-primary);outline-offset:2px}.base-switch__track[data-v-0410eed4]{width:44px;height:24px;transition:background var(--transition-fast);background:#cbd5e1;border-radius:999px;flex-shrink:0;position:relative}.base-switch__input:checked+.base-switch__track[data-v-0410eed4]{background:var(--color-success)}.base-switch__thumb[data-v-0410eed4]{width:20px;height:20px;box-shadow:var(--shadow-sm);transition:transform var(--transition-fast);background:#fff;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute;top:2px;right:2px}.base-switch__input:checked+.base-switch__track .base-switch__thumb[data-v-0410eed4]{transform:translate(-20px)}.base-switch__spinner[data-v-0410eed4]{border:2px solid #e2e8f0;border-top-color:var(--color-primary);border-radius:50%;width:12px;height:12px;animation:.7s linear infinite base-switch-spin-0410eed4}@keyframes base-switch-spin-0410eed4{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.base-switch__track[data-v-0410eed4],.base-switch__thumb[data-v-0410eed4],.base-switch__spinner[data-v-0410eed4]{transition:none;animation:none}}.base-empty[data-v-47ea81e4]{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:40px 24px;display:flex}.base-empty--compact[data-v-47ea81e4]{padding:28px 16px}.base-empty__icon[data-v-47ea81e4]{border-radius:var(--radius-md);background:var(--color-border-light);width:56px;height:56px;color:var(--color-text-muted);justify-content:center;align-items:center;margin-bottom:4px;display:flex}.base-empty--compact .base-empty__icon[data-v-47ea81e4]{width:48px;height:48px}.base-empty__title[data-v-47ea81e4]{color:var(--color-text);margin:0;font-size:.9375rem;font-weight:700}.base-empty__description[data-v-47ea81e4]{max-width:28rem;color:var(--color-text-muted);margin:0;font-size:.8125rem;line-height:1.6}.base-empty__actions[data-v-47ea81e4]{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:8px;display:flex}
diff --git a/dist/assets/AdminCurrencyInput-Bo4teStb.js b/dist/assets/AdminCurrencyInput-Bo4teStb.js
new file mode 100644
index 0000000..e015948
--- /dev/null
+++ b/dist/assets/AdminCurrencyInput-Bo4teStb.js
@@ -0,0 +1 @@
+import{Q as e,U as t,j as n,o as r,q as i,t as a,ut as o,z as s}from"./index-dG7O4aC2.js";var c=[`id`,`value`,`placeholder`,`disabled`],l=n(i({__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(n,{emit:i}){let l=n,u=i,d=s(()=>l.modelValue==null||!Number.isFinite(l.modelValue)?``:r(l.modelValue));function f(e){let t=e.target,n=a(t.value);if(!n){u(`update:modelValue`,l.allowEmpty?null:0),t.value=``;return}let i=Number(n);u(`update:modelValue`,i),t.value=r(i)}return(r,i)=>(e(),t(`input`,{id:n.id,type:`text`,inputmode:`numeric`,dir:`ltr`,class:o([`admin-currency-input`,n.inputClass]),value:d.value,placeholder:n.placeholder,disabled:n.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-QPh70it7.css b/dist/assets/AdminCurrencyInput-QPh70it7.css
new file mode 100644
index 0000000..c02cb67
--- /dev/null
+++ b/dist/assets/AdminCurrencyInput-QPh70it7.css
@@ -0,0 +1 @@
+.admin-currency-input[data-v-56435fc8]{text-align:right}
diff --git a/dist/assets/AdminSelect-BsjBHdZj.js b/dist/assets/AdminSelect-BsjBHdZj.js
new file mode 100644
index 0000000..94a0e05
--- /dev/null
+++ b/dist/assets/AdminSelect-BsjBHdZj.js
@@ -0,0 +1 @@
+import{B as e,F as t,H as n,I as r,K as i,L as a,P as o,Q as s,T as c,U as l,V as u,Y as d,at as f,ct as p,et as m,ft as h,j as g,q as _,ut as v,x as y,z as b}from"./index-dG7O4aC2.js";var x=[`id`],S=[`aria-label`,`aria-expanded`],C={class:`admin-select__value`},w={class:`admin-select__chevron`,"aria-hidden":`true`},T=[`aria-label`],E={key:0,class:`admin-select__search`,role:`presentation`},D=[`placeholder`],O={key:1,class:`admin-select__empty`,role:`presentation`},k=[`aria-selected`,`onClick`],A=g(_({__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:_}){let A=g,j=_,M=p(!1),N=p(``),P=p(null),F=p(null);y(P,()=>{M.value=!1,N.value=``});let I=b(()=>A.options.find(e=>e.value===A.modelValue)?.label??A.placeholder),L=b(()=>{let e=N.value.trim().toLowerCase();return e?A.options.filter(t=>t.label.toLowerCase().includes(e)):A.options});async function R(){M.value=!M.value,M.value&&A.searchable&&(N.value=``,await d(),F.value?.focus())}function z(e){j(`update:modelValue`,e),M.value=!1,N.value=``}return(d,p)=>(s(),l(`div`,{id:g.id,ref_key:`rootRef`,ref:P,class:v([`admin-select`,{"admin-select--open":M.value,"admin-select--block":g.block}])},[e(`button`,{type:`button`,class:`admin-select__trigger`,"aria-label":g.ariaLabel,"aria-expanded":M.value,"aria-haspopup":`listbox`,onClick:R},[e(`span`,C,h(I.value),1),e(`span`,w,[i(c,{name:`chevron-down`,size:16})])],8,S),M.value?(s(),l(`ul`,{key:0,class:`admin-select__menu`,role:`listbox`,"aria-label":g.ariaLabel},[g.searchable?(s(),l(`li`,E,[f(e(`input`,{ref_key:`searchInputRef`,ref:F,"onUpdate:modelValue":p[0]||=e=>N.value=e,type:`search`,class:`admin-select__search-input`,placeholder:g.searchPlaceholder,onClick:p[1]||=r(()=>{},[`stop`]),onKeydown:p[2]||=t(r(e=>M.value=!1,[`stop`]),[`esc`])},null,40,D),[[o,N.value]])])):n(``,!0),L.value.length?n(``,!0):(s(),l(`li`,O,` موردی یافت نشد `)),(s(!0),l(a,null,m(L.value,t=>(s(),l(`li`,{key:t.value,role:`presentation`},[e(`button`,{type:`button`,class:v([`admin-select__option`,{"admin-select__option--active":t.value===g.modelValue}]),role:`option`,"aria-selected":t.value===g.modelValue,onClick:e=>z(t.value)},[e(`span`,null,h(t.label),1),t.value===g.modelValue?(s(),u(c,{key:0,name:`check`,size:16,class:`admin-select__check`})):n(``,!0)],10,k)]))),128))],8,T)):n(``,!0)],10,x))}}),[[`__scopeId`,`data-v-f752c229`]]);export{A as t};
\ No newline at end of file
diff --git a/dist/assets/AdminSelect-DygSPg0P.css b/dist/assets/AdminSelect-DygSPg0P.css
new file mode 100644
index 0000000..4ed7df6
--- /dev/null
+++ b/dist/assets/AdminSelect-DygSPg0P.css
@@ -0,0 +1 @@
+.admin-select[data-v-f752c229]{min-width:200px;max-width:100%;position:relative}.admin-select--block[data-v-f752c229]{width:100%;min-width:0}.admin-select__trigger[data-v-f752c229]{width:100%;min-height:var(--control-height,40px);border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-surface);color:var(--color-text);cursor:pointer;transition:border-color var(--transition-fast), box-shadow var(--transition-fast), background var(--transition-fast);justify-content:space-between;align-items:center;gap:10px;padding:0 12px 0 10px;font-family:inherit;font-size:.875rem;font-weight:500;display:flex}.admin-select__trigger[data-v-f752c229]:hover{border-color:var(--color-primary);background:var(--color-elevated,var(--color-surface))}.admin-select--open .admin-select__trigger[data-v-f752c229],.admin-select__trigger[data-v-f752c229]:focus-visible{border-color:var(--color-primary);box-shadow:var(--focus-ring);outline:none}.admin-select__value[data-v-f752c229]{text-align:start;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.admin-select__chevron[data-v-f752c229]{color:var(--color-text-muted);transition:transform var(--transition-fast);flex-shrink:0;display:inline-flex}.admin-select--open .admin-select__chevron[data-v-f752c229]{color:var(--color-primary);transform:rotate(180deg)}.admin-select__menu[data-v-f752c229]{inset-inline-start:0;z-index:40;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);width:max(100%,220px);max-height:min(320px,50vh);box-shadow:var(--shadow-card,0 12px 28px #0f172a1f);flex-direction:column;gap:4px;margin:0;padding:8px;list-style:none;display:flex;position:absolute;top:calc(100% + 6px);overflow-y:auto}.admin-select__search[data-v-f752c229]{z-index:1;background:var(--color-surface);padding-bottom:4px;position:sticky;top:0}.admin-select__search-input[data-v-f752c229]{border:1px solid var(--color-border);background:var(--color-bg);width:100%;height:36px;color:var(--color-text);font:inherit;border-radius:10px;padding:0 12px;font-size:.8125rem}.admin-select__search-input[data-v-f752c229]:focus{border-color:var(--color-primary);box-shadow:var(--focus-ring);outline:none}.admin-select__empty[data-v-f752c229]{color:var(--color-text-muted);text-align:center;padding:12px;font-size:.8125rem}.admin-select__option[data-v-f752c229]{width:100%;color:var(--color-text);text-align:start;cursor:pointer;transition:background var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast);background:0 0;border:1px solid #0000;border-radius:12px;justify-content:space-between;align-items:center;gap:10px;padding:10px 12px;font-family:inherit;font-size:.875rem;font-weight:500;display:flex}.admin-select__option[data-v-f752c229]:hover{background:var(--color-bg);border-color:var(--color-border)}.admin-select__option--active[data-v-f752c229]{background:var(--color-primary-soft);color:var(--color-primary);border-color:#0000;font-weight:600}.admin-select__option--active[data-v-f752c229]:hover{background:var(--color-primary-soft);border-color:#0000}.admin-select__check[data-v-f752c229]{color:var(--color-primary);flex-shrink:0}
diff --git a/dist/assets/BankAccountsView-DhlQ4HRy.css b/dist/assets/BankAccountsView-DhlQ4HRy.css
new file mode 100644
index 0000000..0e15654
--- /dev/null
+++ b/dist/assets/BankAccountsView-DhlQ4HRy.css
@@ -0,0 +1 @@
+.accounts-page__table[data-v-6dd3bf0f]{overflow:hidden}
diff --git a/dist/assets/BankAccountsView-sSvD7o7g.js b/dist/assets/BankAccountsView-sSvD7o7g.js
new file mode 100644
index 0000000..ed8d8cb
--- /dev/null
+++ b/dist/assets/BankAccountsView-sSvD7o7g.js
@@ -0,0 +1 @@
+import{A as e,B as t,D as n,E as ee,G as r,H as i,I as te,K as a,L as o,P as s,Q as c,U as l,V as u,X as d,at as f,c as p,ct as m,et as h,f as ne,ft as g,it as _,j as re,k as ie,q as v,st as y,w as b,z as x}from"./index-dG7O4aC2.js";import{n as ae,r as oe,t as S}from"./ActiveSwitchCell-DxxSF-SL.js";var se={class:`accounts-page`},ce={class:`admin-page-header`},le={class:`admin-page-header__title`},ue={key:1,class:`accounts-page__table admin-card desktop-only`},de={class:`admin-table-wrap`},fe={class:`admin-table`},pe={class:`status`},me={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=re(v({__name:`BankAccountsView`,setup(re){let v=ee(),R=n(),z=e(),B=m(null),V=m([]),H=m(!1),U=m(``),W=m(!1),G=x(()=>String(v.params.companyId)),K=x(()=>V.value),q=()=>({bankName:``,accountNumber:``,accountHolder:B.value?.name??``,cardNumber:``,iban:``,isActive:!0}),J=y(q()),Y=x(()=>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([ne.get(G.value),p.listByCompany(G.value)]);B.value=e,V.value=t}catch(e){z.error(e instanceof b?e.message:`بارگذاری حسابها انجام نشد.`)}}d(()=>{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 p.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 b?e.message:`ثبت حساب انجام نشد.`)}finally{W.value=!1}}async function $(e,t){await p.setActive(e,t)}function ge(){R.push(`/companies`)}return(e,n)=>(c(),l(`div`,se,[t(`div`,ce,[t(`div`,null,[t(`h1`,le,` مدیریت حسابهای بانکی — `+g(B.value?.name??`…`),1),n[6]||=t(`p`,{class:`admin-page-header__breadcrumb`},`تنظیمات / شرکتها / حسابهای بانکی`,-1)]),t(`div`,{class:`admin-action-group`},[t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:X},` افزودن حساب `),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:ge},` بازگشت `)])]),K.value.length?(c(),l(`div`,ue,[t(`div`,de,[t(`table`,fe,[n[7]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`بانک`),t(`th`,null,`حساب بانکی`),t(`th`,null,`نام صاحب`),t(`th`,null,`شماره کارت`),t(`th`,null,`شماره شبا`),t(`th`,{class:`status`},`وضعیت`)])],-1),t(`tbody`,null,[(c(!0),l(o,null,h(K.value,e=>(c(),l(`tr`,{key:e.id},[t(`td`,null,g(e.bankName),1),t(`td`,null,g(e.accountNumber),1),t(`td`,null,g(e.accountHolder),1),t(`td`,null,g(e.cardNumber||`—`),1),t(`td`,null,g(e.iban||`—`),1),t(`td`,pe,[a(S,{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))])])])])):(c(),u(ae,{key:0,class:`admin-card`,icon:`wallet`,title:`حساب بانکی ثبت نشده`,description:`برای این شرکت هنوز حساب بانکی ثبت نشده است.`},{default:_(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:X},` افزودن حساب `)]),_:1})),K.value.length?(c(),l(`div`,me,[(c(!0),l(o,null,h(K.value,e=>(c(),l(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,C,[t(`p`,w,`بانک `+g(e.bankName),1),a(S,{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`])]),t(`div`,T,[t(`span`,null,g(e.accountHolder),1),t(`span`,null,`حساب: `+g(e.accountNumber),1),e.cardNumber?(c(),l(`span`,E,`کارت: `+g(e.cardNumber),1)):i(``,!0),e.iban?(c(),l(`span`,D,g(e.iban),1)):i(``,!0)])]))),128))])):i(``,!0),a(ie,{open:H.value,title:`افزودن حساب بانکی`,size:`lg`,onClose:Z},{footer:_(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},` انصراف `),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Y.value||W.value,onClick:Q},` ثبت حساب `,8,L)]),default:_(()=>[t(`form`,{class:`admin-form`,onSubmit:te(Q,[`prevent`])},[U.value?(c(),l(`p`,O,g(U.value),1)):i(``,!0),t(`div`,k,[t(`div`,A,[n[8]||=t(`label`,{for:`bank-name`},[r(`نام بانک `),t(`span`,{class:`admin-form__required`},`*`)],-1),f(t(`input`,{id:`bank-name`,"onUpdate:modelValue":n[0]||=e=>J.bankName=e,type:`text`,class:`admin-input`,placeholder:`مثال: ملت`},null,512),[[s,J.bankName]])]),t(`div`,j,[n[9]||=t(`label`,{for:`account-number`},[r(` شماره حساب `),t(`span`,{class:`admin-form__required`},`*`)],-1),f(t(`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]])])]),t(`div`,M,[n[10]||=t(`label`,{for:`account-holder`},[r(` نام صاحب حساب `),t(`span`,{class:`admin-form__required`},`*`)],-1),f(t(`input`,{id:`account-holder`,"onUpdate:modelValue":n[2]||=e=>J.accountHolder=e,type:`text`,class:`admin-input`},null,512),[[s,J.accountHolder]])]),t(`div`,N,[t(`div`,P,[n[11]||=t(`label`,{for:`card-number`},`شماره کارت`,-1),f(t(`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]])]),t(`div`,F,[n[12]||=t(`label`,{for:`iban`},`شماره شبا`,-1),f(t(`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]])])]),t(`div`,I,[a(oe,{modelValue:J.isActive,"onUpdate:modelValue":n[5]||=e=>J.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-6dd3bf0f`]]);export{R as default};
\ No newline at end of file
diff --git a/dist/assets/CashPaymentsView-D6ITwHuu.js b/dist/assets/CashPaymentsView-D6ITwHuu.js
new file mode 100644
index 0000000..a4ef324
--- /dev/null
+++ b/dist/assets/CashPaymentsView-D6ITwHuu.js
@@ -0,0 +1 @@
+import{A as e,B as t,E as n,H as r,K as i,L as a,P as o,Q as s,T as c,U as l,X as u,at as d,ct as f,et as p,ft as m,i as h,j as g,l as _,lt as v,n as y,q as b,ut as x,w as S,z as C}from"./index-dG7O4aC2.js";import{t as w}from"./AdminSelect-BsjBHdZj.js";import{n as T,t as E}from"./adminLabels-Cz9ccm1Z.js";var ee={class:`cash-payments-page`},te={class:`cash-payments-page__filters admin-card`},D={class:`cash-payments-page__search`},O={class:`cash-payments-page__table admin-card desktop-only`},k={class:`admin-table-wrap`},A={class:`admin-table`},j={dir:`ltr`},M={key:0,class:`admin-action-group`},N=[`disabled`,`onClick`],P=[`disabled`,`onClick`],F={key:1},I={class:`compact-only admin-card-list`},L={class:`admin-card-item__header`},R={class:`admin-card-item__title`},z={class:`admin-card-item__meta`},B={key:0},V={dir:`ltr`},H={key:0,class:`admin-card-item__actions`},U=[`disabled`,`onClick`],W=[`disabled`,`onClick`],G=g(b({__name:`CashPaymentsView`,setup(g){let b=n(),G=f([]),K=f(b.query.order??``),q=f(`all`),J=e(),Y=f(null),X=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار تأیید`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`},{value:`expired`,label:`منقضیشده`}],Z=C(()=>{let e=G.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.trackingCode.includes(t))),e});async function ne(){try{G.value=await _.list()}catch(e){J.error(e instanceof S?e.message:`بارگذاری پرداختها انجام نشد.`)}}u(()=>{ne()});async function Q(e){Y.value=e.id;try{let t=await _.updateStatus(e.id,{status:`approved`}),n=G.value.findIndex(t=>t.id===e.id);n!==-1&&(G.value[n]={...G.value[n],...t}),J.success(`پرداخت سفارش ${e.orderNumber} تأیید شد.`)}catch(e){J.error(e instanceof S?e.message:`تأیید پرداخت انجام نشد.`)}finally{Y.value=null}}async function $(e){Y.value=e.id;try{let t=await _.updateStatus(e.id,{status:`rejected`}),n=G.value.findIndex(t=>t.id===e.id);n!==-1&&(G.value[n]={...G.value[n],...t}),J.warning(`پرداخت سفارش ${e.orderNumber} رد شد.`)}catch(e){J.error(e instanceof S?e.message:`رد پرداخت انجام نشد.`)}finally{Y.value=null}}return(e,n)=>(s(),l(`div`,ee,[n[3]||=t(`div`,{class:`admin-page-header`},[t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`پرداختهای نقدی`),t(`p`,{class:`admin-page-header__breadcrumb`},`مالی / پرداختهای نقدی`)])],-1),t(`div`,te,[t(`div`,D,[i(c,{name:`search`,size:18}),d(t(`input`,{"onUpdate:modelValue":n[0]||=e=>K.value=e,type:`search`,class:`cash-payments-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، پیگیری...`},null,512),[[o,K.value]])]),i(w,{modelValue:q.value,"onUpdate:modelValue":n[1]||=e=>q.value=e,class:`cash-payments-page__status-select`,"aria-label":`فیلتر وضعیت پرداخت`,options:X},null,8,[`modelValue`])]),t(`div`,O,[t(`div`,k,[t(`table`,A,[n[2]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`شماره سفارش`),t(`th`,null,`مشتری`),t(`th`,null,`مبلغ فاکتور`),t(`th`,null,`مبلغ واریزی`),t(`th`,null,`تاریخ واریز`),t(`th`,null,`شماره پیگیری`),t(`th`,null,`پایان اعتبار`),t(`th`,null,`وضعیت`),t(`th`,null,`عملیات`)])],-1),t(`tbody`,null,[(s(!0),l(a,null,p(Z.value,e=>(s(),l(`tr`,{key:e.id},[t(`td`,null,m(e.orderNumber),1),t(`td`,null,m(e.customerName),1),t(`td`,null,m(v(y)(e.amount)),1),t(`td`,null,m(e.paidAmount?v(y)(e.paidAmount):`—`),1),t(`td`,null,m(e.transferDate?v(h)(e.transferDate):`—`),1),t(`td`,j,m(e.trackingCode),1),t(`td`,null,m(v(h)(e.expiresAt)),1),t(`td`,null,[t(`span`,{class:x([`admin-badge`,v(E)[e.status]])},m(v(T)[e.status]),3)]),t(`td`,null,[e.status===`pending_review`?(s(),l(`div`,M,[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Q(e)},` تأیید `,8,N),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>$(e)},` رد `,8,P)])):(s(),l(`span`,F,`—`))])]))),128))])])])]),t(`div`,I,[(s(!0),l(a,null,p(Z.value,e=>(s(),l(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,L,[t(`p`,R,m(e.orderNumber),1),t(`span`,{class:x([`admin-badge`,v(E)[e.status]])},m(v(T)[e.status]),3)]),t(`div`,z,[t(`span`,null,m(e.customerName),1),t(`span`,null,m(v(y)(e.amount)),1),e.paidAmount==null?r(``,!0):(s(),l(`span`,B,`پرداختی: `+m(v(y)(e.paidAmount)),1)),t(`span`,V,m(e.trackingCode),1)]),e.status===`pending_review`?(s(),l(`div`,H,[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>Q(e)},` تأیید `,8,U),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:Y.value===e.id,onClick:t=>$(e)},` رد `,8,W)])):r(``,!0)]))),128))])]))}}),[[`__scopeId`,`data-v-bca3989e`]]);export{G as default};
\ No newline at end of file
diff --git a/dist/assets/CashPaymentsView-DMotishw.css b/dist/assets/CashPaymentsView-DMotishw.css
new file mode 100644
index 0000000..9a02a35
--- /dev/null
+++ b/dist/assets/CashPaymentsView-DMotishw.css
@@ -0,0 +1 @@
+.cash-payments-page__filters[data-v-bca3989e]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.cash-payments-page__search[data-v-bca3989e]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.cash-payments-page__search-input[data-v-bca3989e]{color:var(--color-text);background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.cash-payments-page__status-select[data-v-bca3989e]{flex:0 220px;width:220px}.cash-payments-page__table[data-v-bca3989e]{overflow:hidden}
diff --git a/dist/assets/CatalogsView-DbBk4Fy_.css b/dist/assets/CatalogsView-DbBk4Fy_.css
new file mode 100644
index 0000000..b5b811a
--- /dev/null
+++ b/dist/assets/CatalogsView-DbBk4Fy_.css
@@ -0,0 +1 @@
+.catalogs-page__filters[data-v-0d612376]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.catalogs-page__search[data-v-0d612376]{min-width:200px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;display:flex}.catalogs-page__search-input[data-v-0d612376]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.catalogs-page__company-filter[data-v-0d612376]{width:min(220px,100%)}.catalogs-page__table[data-v-0d612376]{overflow:hidden}
diff --git a/dist/assets/CatalogsView-rrxXBbd1.js b/dist/assets/CatalogsView-rrxXBbd1.js
new file mode 100644
index 0000000..8947e1f
--- /dev/null
+++ b/dist/assets/CatalogsView-rrxXBbd1.js
@@ -0,0 +1 @@
+import{A as e,B as t,G as n,H as r,I as ee,K as i,L as a,P as o,Q as s,T as te,U as c,V as ne,X as l,at as u,ct as d,et as f,f as re,ft as p,it as m,j as ie,k as ae,q as h,st as oe,u as g,w as _,z as v}from"./index-dG7O4aC2.js";import{t as y}from"./AdminSelect-BsjBHdZj.js";import{n as se,r as b,t as x}from"./ActiveSwitchCell-DxxSF-SL.js";var ce={class:`catalogs-page`},le={class:`catalogs-page__filters admin-card`},ue={class:`catalogs-page__search`},de={key:1,class:`catalogs-page__table admin-card desktop-only`},fe={class:`admin-table-wrap`},pe={class:`admin-table`},me={class:`numeric`},he={class:`numeric`},ge={class:`status`},_e={class:`actions`},ve=[`onClick`],ye={key:2,class:`compact-only admin-card-list`},S={class:`admin-card-item__header`},C={class:`admin-card-item__title`},w={class:`admin-card-item__meta`},T={class:`admin-card-item__actions`},E=[`onClick`],D={key:0,class:`admin-form__error`,role:`alert`},O={class:`admin-form__field`},k={class:`admin-form__row`},A={class:`admin-form__field`},j={class:`admin-form__field`},M={class:`admin-form__row`},N={class:`admin-form__field`},P={class:`admin-form__field`},be=[`disabled`],F=ie(h({__name:`CatalogsView`,setup(ie){let h=d([]),F=d([]),I=d(``),L=d(`all`),R=d(null),z=d(null),B=d(``),V=d(!1),H=e(),xe=v(()=>[{value:`all`,label:`همه شرکتها`},...F.value.map(e=>({value:e.id,label:e.name}))]),Se=v(()=>F.value.map(e=>({value:e.id,label:e.name}))),U=()=>({companyId:F.value[0]?.id??``,code:``,name:``,displayOrder:h.value.length+1,isActive:!0}),W=oe(U()),Ce=v(()=>R.value!==null),we=v(()=>R.value===`edit`?`ویرایش کالیته`:`افزودن کالیته`),G=v(()=>W.code.trim()&&W.name.trim()&&W.companyId),K=v(()=>I.value.trim().length>0||L.value!==`all`),q=v(()=>{let e=h.value;L.value!==`all`&&(e=e.filter(e=>e.companyId===L.value));let t=I.value.trim();return t&&(e=e.filter(e=>e.code.includes(t)||e.name.includes(t)||e.companyName.includes(t))),e});async function Te(){try{let[e,t]=await Promise.all([g.list(),re.list()]);h.value=e,F.value=t}catch(e){H.error(e instanceof _?e.message:`بارگذاری کالیتهها انجام نشد.`)}}l(()=>{Te()});function J(e){return F.value.find(t=>t.id===e)?.name??`—`}function Y(){R.value=`add`,z.value=null,Object.assign(W,U()),B.value=``}function X(e){R.value=`edit`,z.value=e.id,W.companyId=e.companyId,W.code=e.code,W.name=e.name,W.displayOrder=e.displayOrder,W.isActive=e.isActive,B.value=``}function Z(){R.value=null,z.value=null,B.value=``}async function Q(){if(!G.value){B.value=`کد، نام و شرکت الزامی هستند.`;return}V.value=!0;try{if(R.value===`edit`&&z.value){let e=await g.update(z.value,{code:W.code.trim(),name:W.name.trim(),displayOrder:Number(W.displayOrder)||1,isActive:W.isActive}),t=h.value.findIndex(e=>e.id===z.value);t!==-1&&(h.value[t]={...h.value[t],...e,companyName:J(W.companyId)}),H.success(`اطلاعات کالیته بهروزرسانی شد.`)}else{let e=await g.create({companyId:W.companyId,code:W.code.trim(),name:W.name.trim(),displayOrder:Number(W.displayOrder)||1,isActive:W.isActive});h.value.push({...e,companyName:e.companyName||J(W.companyId),productCount:e.productCount??0}),H.success(`کالیته جدید ثبت شد.`)}Z()}catch(e){H.error(e instanceof _?e.message:`ذخیره کالیته انجام نشد.`)}finally{V.value=!1}}async function $(e,t){await g.setActive(e,t)}function Ee(){I.value=``,L.value=`all`}return(e,l)=>(s(),c(`div`,ce,[t(`div`,{class:`admin-page-header`},[l[7]||=t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`کالیتهها`),t(`p`,{class:`admin-page-header__breadcrumb`},`مدیریت / کالیتهها`)],-1),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن کالیته `)]),t(`div`,le,[t(`div`,ue,[i(te,{name:`search`,size:18}),u(t(`input`,{"onUpdate:modelValue":l[0]||=e=>I.value=e,type:`search`,class:`catalogs-page__search-input`,placeholder:`جستجو بر اساس کد یا نام...`},null,512),[[o,I.value]])]),i(y,{modelValue:L.value,"onUpdate:modelValue":l[1]||=e=>L.value=e,class:`catalogs-page__company-filter`,"aria-label":`فیلتر شرکت`,options:xe.value},null,8,[`modelValue`,`options`])]),q.value.length?(s(),c(`div`,de,[t(`div`,fe,[t(`table`,pe,[l[8]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`کد`),t(`th`,null,`نام کالیته`),t(`th`,null,`شرکت`),t(`th`,{class:`numeric`},`ترتیب`),t(`th`,{class:`numeric`},`تعداد محصول`),t(`th`,{class:`status`},`وضعیت`),t(`th`,{class:`actions`},`عملیات`)])],-1),t(`tbody`,null,[(s(!0),c(a,null,f(q.value,e=>(s(),c(`tr`,{key:e.id},[t(`td`,null,p(e.code),1),t(`td`,null,p(e.name),1),t(`td`,null,p(e.companyName),1),t(`td`,me,p(e.displayOrder),1),t(`td`,he,p(e.productCount),1),t(`td`,ge,[i(x,{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`])]),t(`td`,_e,[t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,ve)])]))),128))])])])])):(s(),ne(se,{key:0,class:`admin-card`,icon:`catalogs`,title:K.value?`نتیجهای یافت نشد`:`کالیتهای ثبت نشده`,description:K.value?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین کالیته را ثبت کنید.`},{default:m(()=>[K.value?(s(),c(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:Ee},` پاک کردن فیلترها `)):(s(),c(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن کالیته `))]),_:1},8,[`title`,`description`])),q.value.length?(s(),c(`div`,ye,[(s(!0),c(a,null,f(q.value,e=>(s(),c(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,S,[t(`p`,C,`کالیته `+p(e.code)+` — `+p(e.name),1),i(x,{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`])]),t(`div`,w,[t(`span`,null,p(e.companyName),1),t(`span`,null,p(e.productCount)+` محصول`,1),t(`span`,null,`ترتیب: `+p(e.displayOrder),1)]),t(`div`,T,[t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,E)])]))),128))])):r(``,!0),i(ae,{open:Ce.value,title:we.value,size:`lg`,onClose:Z},{footer:m(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!G.value||V.value,onClick:Q},p(R.value===`edit`?`ذخیره تغییرات`:`ثبت کالیته`),9,be)]),default:m(()=>[t(`form`,{class:`admin-form`,onSubmit:ee(Q,[`prevent`])},[B.value?(s(),c(`p`,D,p(B.value),1)):r(``,!0),t(`div`,O,[l[9]||=t(`label`,null,[n(`شرکت `),t(`span`,{class:`admin-form__required`},`*`)],-1),i(y,{modelValue:W.companyId,"onUpdate:modelValue":l[2]||=e=>W.companyId=e,block:``,"aria-label":`انتخاب شرکت`,placeholder:`انتخاب شرکت`,options:Se.value},null,8,[`modelValue`,`options`])]),t(`div`,k,[t(`div`,A,[l[10]||=t(`label`,{for:`catalog-code`},[n(`کد کالیته `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`input`,{id:`catalog-code`,"onUpdate:modelValue":l[3]||=e=>W.code=e,type:`text`,class:`admin-input`,placeholder:`377`},null,512),[[o,W.code]])]),t(`div`,j,[l[11]||=t(`label`,{for:`catalog-name`},[n(`نام کالیته `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`input`,{id:`catalog-name`,"onUpdate:modelValue":l[4]||=e=>W.name=e,type:`text`,class:`admin-input`},null,512),[[o,W.name]])])]),t(`div`,M,[t(`div`,N,[l[12]||=t(`label`,{for:`catalog-order`},`ترتیب نمایش`,-1),u(t(`input`,{id:`catalog-order`,"onUpdate:modelValue":l[5]||=e=>W.displayOrder=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[o,W.displayOrder,void 0,{number:!0}]])]),t(`div`,P,[i(b,{modelValue:W.isActive,"onUpdate:modelValue":l[6]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-0d612376`]]);export{F as default};
\ No newline at end of file
diff --git a/dist/assets/CheckManagementView-BIZGwBaB.css b/dist/assets/CheckManagementView-BIZGwBaB.css
new file mode 100644
index 0000000..b533a8a
--- /dev/null
+++ b/dist/assets/CheckManagementView-BIZGwBaB.css
@@ -0,0 +1 @@
+.checks-page__order-meta[data-v-77053e0d]{align-items:center;gap:8px;display:flex}.checks-page__stats[data-v-77053e0d]{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:14px;display:grid}.checks-page__stat[data-v-77053e0d]{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);flex-direction:column;gap:2px;padding:10px 12px;display:flex}.checks-page__stat span[data-v-77053e0d]{color:var(--color-text-muted);font-size:.75rem}.checks-page__stat strong[data-v-77053e0d]{font-size:.875rem;font-weight:700}.checks-page__list[data-v-77053e0d]{overflow:hidden}.check-row[data-v-77053e0d]{border-bottom:1px solid var(--color-border-light);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px 12px;padding:8px 12px;display:grid}.check-row[data-v-77053e0d]:last-child{border-bottom:0}.check-row.open[data-v-77053e0d]{background:color-mix(in srgb, var(--color-primary-soft) 55%, transparent)}.check-row__main[data-v-77053e0d]{min-width:0;color:inherit;text-align:start;cursor:pointer;background:0 0;border:0;align-items:center;gap:10px;padding:4px 0;display:flex}.check-row__chevron[data-v-77053e0d]{width:14px;color:var(--color-text-muted);flex-shrink:0;font-size:.75rem}.check-row__thumb[data-v-77053e0d]{border:1px solid var(--color-border);cursor:zoom-in;background:#111;border-radius:6px;flex-shrink:0;place-items:center;width:44px;height:32px;padding:0;display:grid;overflow:hidden}.check-row__thumb img[data-v-77053e0d]{object-fit:cover;width:100%;height:100%;display:block}.check-row__thumb--empty[data-v-77053e0d]{color:var(--color-text-muted);cursor:default;font-size:.625rem}.check-row__meta[data-v-77053e0d]{flex:1;gap:2px;min-width:0;display:grid}.check-row__meta strong[data-v-77053e0d]{font-size:.875rem;font-weight:700}.check-row__meta small[data-v-77053e0d]{color:var(--color-text-muted);white-space:nowrap;text-overflow:ellipsis;font-size:.75rem;overflow:hidden}.check-row__actions[data-v-77053e0d]{flex-shrink:0;gap:6px;display:flex}.check-row__panel[data-v-77053e0d]{border-top:1px dashed var(--color-border);flex-wrap:wrap;grid-column:1/-1;align-items:flex-start;gap:12px 16px;padding:8px 0 4px 24px;display:flex}.check-row__fields[data-v-77053e0d]{flex-wrap:wrap;flex:1;gap:8px;min-width:200px;display:flex}.check-row__field[data-v-77053e0d]{background:var(--color-border-light);border-radius:999px;align-items:baseline;gap:6px;padding:4px 8px;font-size:.75rem;display:inline-flex}.check-row__field span[data-v-77053e0d]{color:var(--color-text-muted)}.check-row__field strong[data-v-77053e0d]{font-weight:600}.check-row__photos[data-v-77053e0d]{flex-shrink:0;gap:8px;display:flex}.check-row__photo[data-v-77053e0d]{border:1px solid var(--color-border);width:96px;color:inherit;cursor:zoom-in;text-align:center;background:0 0;border-radius:8px;padding:0;overflow:hidden}.check-row__photo img[data-v-77053e0d]{object-fit:cover;background:#111;width:100%;height:60px;display:block}.check-row__photo span[data-v-77053e0d]{color:var(--color-text-muted);padding:4px;font-size:.6875rem;display:block}.check-row__hint[data-v-77053e0d]{color:var(--color-text-muted);margin:0;font-size:.75rem}.checks-page__footer[data-v-77053e0d]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-top:14px;display:flex}.checks-page__note[data-v-77053e0d]{color:var(--color-text-muted);margin:0;font-size:.75rem}.checks-page__history[data-v-77053e0d]{gap:8px;display:grid}.checks-page__history-item[data-v-77053e0d]{gap:6px;padding:12px;display:grid}.checks-page__history-item-head[data-v-77053e0d]{flex-wrap:wrap;justify-content:space-between;gap:12px;font-size:.875rem;display:flex}.checks-page__history-meta[data-v-77053e0d],.checks-page__history-note[data-v-77053e0d]{margin:0;font-size:.8125rem;line-height:1.5}.checks-page__history-meta[data-v-77053e0d]{color:var(--color-text-muted)}.checks-page__lightbox[data-v-77053e0d]{z-index:300000;background:#000000d6;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.checks-page__lightbox img[data-v-77053e0d]{object-fit:contain;border-radius:8px;max-width:min(900px,100%);max-height:88vh}.checks-page__lightbox-close[data-v-77053e0d]{top:14px;cursor:pointer;border:0;border-radius:8px;padding:8px 12px;position:absolute;inset-inline-end:14px}@media (width<=800px){.checks-page__stats[data-v-77053e0d]{grid-template-columns:repeat(2,minmax(0,1fr))}.check-row[data-v-77053e0d]{grid-template-columns:1fr}.check-row__actions[data-v-77053e0d]{padding-inline-start:24px}.check-row__panel[data-v-77053e0d]{padding-inline-start:0}}
diff --git a/dist/assets/CheckManagementView-BfogLYQM.js b/dist/assets/CheckManagementView-BfogLYQM.js
new file mode 100644
index 0000000..21da155
--- /dev/null
+++ b/dist/assets/CheckManagementView-BfogLYQM.js
@@ -0,0 +1 @@
+import{A as e,B as t,D as n,E as r,G as i,H as a,I as o,K as s,L as c,O as l,Q as u,R as ee,U as d,V as te,X as ne,ct as f,d as p,et as m,ft as h,g,h as re,j as ie,lt as _,n as v,q as y,r as b,ut as x,w as S,z as C}from"./index-dG7O4aC2.js";import{s as w,t as T}from"./StatusBadge-D-XqK4sa.js";var ae={class:`checks-page`},oe={class:`admin-page-header`},se={class:`admin-page-header__breadcrumb`},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`],E={key:1,class:`check-row__thumb check-row__thumb--empty`},D={class:`check-row__meta`},O=[`disabled`,`onClick`],k=[`disabled`,`onClick`],A={key:0,class:`check-row__panel`},j={key:0,class:`check-row__fields`},M=[`dir`],N={key:1,class:`check-row__hint`},xe={class:`check-row__photos`},Se=[`onClick`],Ce=[`src`],we=[`onClick`],Te=[`src`],Ee={key:2,class:`check-row__hint`},De={class:`checks-page__footer`},Oe={class:`checks-page__note`},ke={class:`admin-action-group`},Ae=[`disabled`],je={key:0,class:`admin-empty-placeholder admin-card`},Me={key:1,class:`checks-page__history`},Ne={class:`checks-page__history-item-head`},Pe={class:`checks-page__history-meta`},P={key:0,class:`checks-page__history-note`},Fe={key:1,class:`checks-page__history-note`},Ie={class:`checks-page__history-item-head`},Le={class:`checks-page__history-note`},Re=[`src`],F=ie(y({__name:`CheckManagementView`,setup(ie){let y=r(),F=n(),I=e(),L=f(`info`),R=f(null),z=f([]),B=f(null),V=f(null),H=f(null),U=C(()=>R.value?re(R.value):null),ze=C(()=>z.value.reduce((e,t)=>e+t.amount,0)),W=C(()=>z.value.filter(e=>e.status===`pending_review`)),Be=C(()=>z.value.length>0&&z.value.every(e=>e.status===`approved`)),G=C(()=>{if(!Be.value||!R.value)return!1;let e=R.value.status;return e===`checks_approved`||e===`awaiting_check_review`}),K=f(!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 Ve(){let e=String(y.params.id);try{let[t,n]=await Promise.all([g.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 S?e.message:`بارگذاری چکها انجام نشد.`)}}ne(()=>{Ve()});function He(){F.push(`/orders`)}function Y(e){return e===`approved`?`check_approved`:e===`rejected`?`check_rejected`:`pending_check_review`}function Ue(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 We(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:We(e)},{label:`کد ملی`,value:e.ownerNationalId,ltr:!0},{label:`یادداشت`,value:e.notes}].filter(e=>!!e.value?.trim())}function Ge(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 g.get(String(y.params.id)),!0}catch(e){return I.error(e instanceof S?e.message:`بهروزرسانی وضعیت چک انجام نشد.`),!1}finally{B.value=null}}async function $(e,t){if(t!==`approved`&&t!==`rejected`)return;let n=v(e.amount);await l(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 Ke(){let e=W.value;if(!e.length){I.error(`چکی برای تأیید وجود ندارد.`);return}if(await l({title:`تأیید همه چکها`,message:`آیا از تأیید ${e.length} چک در انتظار بررسی مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید همه`,cancelLabel:`انصراف`})){for(let t of e)if(!await Q(t,`approved`))return;I.success(`همه چکهای در انتظار تأیید شدند.`)}}async function qe(){if(!(!R.value||K.value)&&await l({title:`تأیید نهایی سفارش`,message:`با تأیید نهایی، سفارش از مرحله بررسی چک خارج میشود و وارد آمادهسازی میگردد. ادامه میدهید؟`,tone:`primary`,confirmLabel:`تأیید نهایی`,cancelLabel:`انصراف`})){K.value=!0;try{let e=await g.updateStatus(R.value.id,{status:`final_approved`,note:`تأیید نهایی پس از تأیید همه چکها`});R.value=e,I.success(`سفارش تأیید نهایی شد.`)}catch(e){I.error(e instanceof S?e.message:`تأیید نهایی انجام نشد.`)}finally{K.value=!1}}}return(e,n)=>(u(),d(`div`,ae,[t(`div`,oe,[t(`div`,null,[n[6]||=t(`h1`,{class:`admin-page-header__title`},`مدیریت چکهای سفارش`,-1),t(`p`,se,[n[5]||=i(` سفارشها `,-1),U.value?(u(),d(c,{key:0},[i(` / `+h(U.value.orderNumber),1)],64)):a(``,!0)])]),U.value?(u(),d(`div`,ce,[s(T,{status:U.value.status},null,8,[`status`])])):a(``,!0)]),t(`div`,le,[t(`div`,ue,[n[7]||=t(`span`,null,`تعداد`,-1),t(`strong`,null,h(z.value.length),1)]),t(`div`,de,[n[8]||=t(`span`,null,`راس`,-1),t(`strong`,null,h(R.value?.checkRassDays??`—`)+` روز`,1)]),t(`div`,fe,[n[9]||=t(`span`,null,`مجموع چک`,-1),t(`strong`,null,h(_(v)(ze.value)),1)]),t(`div`,pe,[n[10]||=t(`span`,null,`مبلغ سفارش`,-1),t(`strong`,null,h(U.value?.totalAmount?_(v)(U.value.totalAmount):`—`),1)])]),t(`div`,me,[t(`button`,{type:`button`,class:x([`admin-tab`,{active:L.value===`info`}]),onClick:n[0]||=e=>L.value=`info`},` چکها (`+h(z.value.length)+`) `,3),t(`button`,{type:`button`,class:x([`admin-tab`,{active:L.value===`history`}]),onClick:n[1]||=e=>L.value=`history`},` تاریخچه `,2)]),L.value===`info`?(u(),d(c,{key:0},[z.value.length?(u(),d(`div`,ge,[(u(!0),d(c,null,m(z.value,e=>(u(),d(`div`,{key:e.id,class:x([`check-row`,{open:V.value===e.id}])},[t(`button`,{type:`button`,class:`check-row__main`,onClick:t=>Ge(e)},[t(`span`,ve,h(V.value===e.id?`▾`:`◂`),1),e.frontImage||e.backImage?(u(),d(`span`,{key:0,class:`check-row__thumb`,onClick:o(t=>H.value=e.frontImage||e.backImage,[`stop`])},[t(`img`,{src:e.frontImage||e.backImage,alt:``},null,8,be)],8,ye)):(u(),d(`span`,E,`بدون عکس`)),t(`span`,D,[t(`strong`,null,`چک `+h(e.row),1),t(`small`,null,[i(h(_(v)(e.amount))+` `,1),e.bankName?(u(),d(c,{key:0},[i(` · `+h(e.bankName),1)],64)):a(``,!0),i(` · `+h(_(b)(e.dueDate)),1)])]),s(T,{status:Y(e.status)},null,8,[`status`])],8,_e),t(`div`,{class:`check-row__actions`,onClick:n[2]||=o(()=>{},[`stop`])},[e.status===`pending_review`?(u(),d(c,{key:0},[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:B.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,O),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:B.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,k)],64)):a(``,!0)]),V.value===e.id?(u(),d(`div`,A,[Z(e).length?(u(),d(`div`,j,[(u(!0),d(c,null,m(Z(e),e=>(u(),d(`div`,{key:e.label,class:`check-row__field`},[t(`span`,null,h(e.label),1),t(`strong`,{dir:e.ltr?`ltr`:void 0},h(e.value),9,M)]))),128))])):(u(),d(`p`,N,`جزئیات متنی بیشتری ثبت نشده است.`)),t(`div`,xe,[e.frontImage?(u(),d(`button`,{key:0,type:`button`,class:`check-row__photo`,onClick:t=>H.value=e.frontImage},[t(`img`,{src:e.frontImage,alt:`روی چک`},null,8,Ce),n[11]||=t(`span`,null,`روی`,-1)],8,Se)):a(``,!0),e.backImage?(u(),d(`button`,{key:1,type:`button`,class:`check-row__photo`,onClick:t=>H.value=e.backImage},[t(`img`,{src:e.backImage,alt:`پشت چک`},null,8,Te),n[12]||=t(`span`,null,`پشت`,-1)],8,we)):a(``,!0),!e.frontImage&&!e.backImage?(u(),d(`p`,Ee,` تصویری ثبت نشده. `)):a(``,!0)])])):a(``,!0)],2))),128))])):(u(),d(`div`,he,` چکی برای این سفارش ثبت نشده است. `)),t(`div`,De,[t(`p`,Oe,[G.value?(u(),d(c,{key:0},[i(` همه چکها تأیید شدهاند. برای ادامه، تأیید نهایی سفارش را ثبت کنید. `)],64)):R.value?.checkRassDate?(u(),d(c,{key:1},[i(` راس: `+h(_(b)(R.value.checkRassDate)),1)],64)):(u(),d(c,{key:2},[i(`راس بر اساس تاریخ ثبت سفارش محاسبه میشود.`)],64))]),t(`div`,ke,[G.value?(u(),d(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,disabled:K.value,onClick:qe},h(K.value?`در حال ثبت…`:`تأیید نهایی سفارش`),9,Ae)):a(``,!0),W.value.length?(u(),d(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,onClick:Ke},` تأیید همه چکها `)):a(``,!0),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:He},` بازگشت `)])])],64)):(u(),d(c,{key:1},[!q.value.length&&!J.value.length?(u(),d(`div`,je,` هنوز تاریخچهای ثبت نشده است. `)):(u(),d(`div`,Me,[(u(!0),d(c,null,m(q.value,e=>(u(),d(`article`,{key:e.id,class:`admin-card checks-page__history-item`},[t(`div`,Ne,[t(`strong`,null,h(e.fromStatus?_(w)(e.fromStatus):`—`)+` → `+h(_(w)(e.toStatus)),1),t(`span`,null,h(X(e.changedAt)),1)]),t(`p`,Pe,`توسط `+h(Ue(e.changedBy)),1),e.note?(u(),d(`p`,P,h(e.note),1)):a(``,!0),e.reason?(u(),d(`p`,Fe,`دلیل: `+h(e.reason),1)):a(``,!0)]))),128)),(u(!0),d(c,null,m(J.value,e=>(u(),d(`article`,{key:`note-${e.id}`,class:`admin-card checks-page__history-item`},[t(`div`,Ie,[t(`strong`,null,`یادداشت چک `+h(e.row),1),t(`span`,null,h(X(e.updatedAt)),1)]),s(T,{status:Y(e.status)},null,8,[`status`]),t(`p`,Le,h(e.notes),1)]))),128))]))],64)),(u(),te(ee,{to:`body`},[H.value?(u(),d(`div`,{key:0,class:`checks-page__lightbox`,onClick:n[4]||=o(e=>H.value=null,[`self`])},[t(`button`,{type:`button`,class:`checks-page__lightbox-close`,onClick:n[3]||=e=>H.value=null},` بستن `),t(`img`,{src:H.value,alt:`پیشنمایش`},null,8,Re)])):a(``,!0)]))]))}}),[[`__scopeId`,`data-v-77053e0d`]]);export{F as default};
\ No newline at end of file
diff --git a/dist/assets/ChecksListView-BManVtea.css b/dist/assets/ChecksListView-BManVtea.css
new file mode 100644
index 0000000..5b3e30e
--- /dev/null
+++ b/dist/assets/ChecksListView-BManVtea.css
@@ -0,0 +1 @@
+.checks-list-page__summary[data-v-c611455f]{color:var(--color-text-muted);flex-direction:column;align-items:flex-end;gap:4px;font-size:.8125rem;display:flex}.checks-list-page__filters[data-v-c611455f]{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;padding:12px 14px;display:flex}.checks-list-page__search[data-v-c611455f]{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-border-light);min-width:220px;color:var(--color-text-muted);flex:1;align-items:center;gap:10px;padding:8px 12px;display:flex}.checks-list-page__search-input[data-v-c611455f]{color:var(--color-text);background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.checks-list-page__status-select[data-v-c611455f]{flex:0 220px;width:220px}.checks-list-page__table[data-v-c611455f]{padding:0;overflow:hidden}.checks-list-page__order-link[data-v-c611455f]{color:var(--color-primary);cursor:pointer;font:inherit;background:0 0;border:none;padding:0}.checks-list-page__order-link[data-v-c611455f]:hover{text-decoration:underline}.checks-list-page__empty[data-v-c611455f]{text-align:center;color:var(--color-text-muted);margin:0;padding:24px;font-size:.875rem}
diff --git a/dist/assets/ChecksListView-BenCn0gO.js b/dist/assets/ChecksListView-BenCn0gO.js
new file mode 100644
index 0000000..9ea012a
--- /dev/null
+++ b/dist/assets/ChecksListView-BenCn0gO.js
@@ -0,0 +1 @@
+import{A as e,B as t,D as n,H as r,K as i,L as a,P as ee,Q as o,T as te,U as s,X as c,at as l,ct as u,d,et as f,ft as p,g as ne,i as m,j as h,lt as g,n as _,q as v,w as y,z as b}from"./index-dG7O4aC2.js";import{t as x}from"./AdminSelect-BsjBHdZj.js";import{t as S}from"./StatusBadge-D-XqK4sa.js";var re={class:`checks-list-page`},ie={class:`admin-page-header`},ae={class:`checks-list-page__summary`},oe={key:0},C={class:`checks-list-page__filters admin-card`},w={class:`checks-list-page__search`},T={class:`checks-list-page__table admin-card desktop-only`},E={class:`admin-table-wrap`},D={class:`admin-table`},O=[`onClick`],k={dir:`ltr`},A={class:`admin-action-group`},j=[`disabled`,`onClick`],M=[`disabled`,`onClick`],N=[`onClick`],P={key:0,class:`checks-list-page__empty`},F={class:`compact-only admin-card-list`},I={class:`admin-card-item__header`},L={class:`admin-card-item__title`},se={class:`admin-card-item__meta`},R={key:0},z={class:`admin-card-item__actions`},B=[`disabled`,`onClick`],V=[`disabled`,`onClick`],H=[`onClick`],U={key:0,class:`checks-list-page__empty`},W=h(v({__name:`ChecksListView`,setup(h){let v=n(),W=e(),G=u([]),K=u(``),q=u(`all`),J=u(null),ce=[{value:`all`,label:`همه وضعیتها`},{value:`pending_review`,label:`در انتظار بررسی`},{value:`approved`,label:`تأیید شده`},{value:`rejected`,label:`رد شده`}],Y=b(()=>{let e=G.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=b(()=>G.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 le(){let e=await ne.list();G.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 ue(){try{G.value=await d.list()}catch{try{await le()}catch(e){W.error(e instanceof y?e.message:`بارگذاری چکها انجام نشد.`)}}}c(()=>{ue()});function Q(e){v.push(`/orders/${e.orderId}/checks`)}async function $(e,t){J.value=e.id;try{let n=await d.updateStatus(e.id,{status:t}),r=G.value.findIndex(t=>t.id===e.id);r!==-1&&(G.value[r]={...G.value[r],...n,orderNumber:e.orderNumber,customerName:e.customerName,orderStatus:e.orderStatus,settlementType:e.settlementType}),W.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}catch(e){W.error(e instanceof y?e.message:`بهروزرسانی وضعیت چک انجام نشد.`)}finally{J.value=null}}return(e,n)=>(o(),s(`div`,re,[t(`div`,ie,[n[2]||=t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`چکها`),t(`p`,{class:`admin-page-header__breadcrumb`},`مالی / همه چکهای سفارشها`)],-1),t(`div`,ae,[t(`span`,null,p(G.value.length)+` چک`,1),X.value?(o(),s(`span`,oe,p(X.value)+` در انتظار بررسی`,1)):r(``,!0)])]),t(`div`,C,[t(`div`,w,[i(te,{name:`search`,size:18}),l(t(`input`,{"onUpdate:modelValue":n[0]||=e=>K.value=e,type:`search`,class:`checks-list-page__search-input`,placeholder:`جستجو در شماره سفارش، مشتری، بانک، صیاد...`},null,512),[[ee,K.value]])]),i(x,{modelValue:q.value,"onUpdate:modelValue":n[1]||=e=>q.value=e,class:`checks-list-page__status-select`,"aria-label":`فیلتر وضعیت چک`,options:ce},null,8,[`modelValue`])]),t(`div`,T,[t(`div`,E,[t(`table`,D,[n[3]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`شماره سفارش`),t(`th`,null,`مشتری`),t(`th`,null,`ردیف`),t(`th`,null,`مبلغ`),t(`th`,null,`بانک`),t(`th`,null,`شناسه صیادی`),t(`th`,null,`سررسید`),t(`th`,null,`وضعیت`),t(`th`,null,`عملیات`)])],-1),t(`tbody`,null,[(o(!0),s(a,null,f(Y.value,e=>(o(),s(`tr`,{key:e.id},[t(`td`,null,[t(`button`,{type:`button`,class:`checks-list-page__order-link`,onClick:t=>Q(e)},p(e.orderNumber||e.orderId),9,O)]),t(`td`,null,p(e.customerName||`—`),1),t(`td`,null,p(e.row),1),t(`td`,null,p(g(_)(e.amount)),1),t(`td`,null,p(e.bankName||`—`),1),t(`td`,k,p(e.sayadId||`—`),1),t(`td`,null,p(e.dueDate.slice(0,10)),1),t(`td`,null,[i(S,{status:Z(e.status)},null,8,[`status`])]),t(`td`,null,[t(`div`,A,[e.status===`pending_review`?(o(),s(a,{key:0},[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,j),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,M)],64)):r(``,!0),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e)},` جزئیات سفارش `,8,N)])])]))),128))])])]),Y.value.length?r(``,!0):(o(),s(`p`,P,` چکی با این فیلتر یافت نشد. `))]),t(`div`,F,[(o(!0),s(a,null,f(Y.value,e=>(o(),s(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,I,[t(`p`,L,p(e.orderNumber||e.orderId)+` — چک `+p(e.row),1),i(S,{status:Z(e.status)},null,8,[`status`])]),t(`div`,se,[t(`span`,null,p(e.customerName||`—`),1),t(`span`,null,p(g(_)(e.amount)),1),t(`span`,null,p(e.bankName||`—`),1),t(`span`,null,`سررسید `+p(e.dueDate.slice(0,10)),1),e.createdAt?(o(),s(`span`,R,`ثبت `+p(g(m)(e.createdAt)),1)):r(``,!0)]),t(`div`,z,[e.status===`pending_review`?(o(),s(a,{key:0},[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`approved`)},` تأیید `,8,B),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:J.value===e.id,onClick:t=>$(e,`rejected`)},` رد `,8,V)],64)):r(``,!0),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e)},` جزئیات سفارش `,8,H)])]))),128)),Y.value.length?r(``,!0):(o(),s(`p`,U,` چکی با این فیلتر یافت نشد. `))])]))}}),[[`__scopeId`,`data-v-c611455f`]]);export{W as default};
\ No newline at end of file
diff --git a/dist/assets/CompaniesView-CfFrdLAS.js b/dist/assets/CompaniesView-CfFrdLAS.js
new file mode 100644
index 0000000..5316886
--- /dev/null
+++ b/dist/assets/CompaniesView-CfFrdLAS.js
@@ -0,0 +1 @@
+import{A as e,B as t,D as n,G as r,H as i,I as ee,K as a,L as o,O as te,P as s,Q as c,U as l,V as ne,X as re,at as u,b as ie,ct as d,et as f,f as p,ft as m,it as h,j as ae,k as oe,q as g,st as se,w as _,z as v}from"./index-dG7O4aC2.js";import{n as ce,r as le,t as y}from"./ActiveSwitchCell-DxxSF-SL.js";var ue={class:`companies-page`},de={key:1,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`],b=[`onClick`],x={key:2,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`},N={class:`admin-form__field`},xe={class:`logo-upload`},Se={key:0,class:`logo-upload__preview-wrap`},Ce=[`src`],we={key:1,class:`logo-upload__dropzone`,for:`company-logo-file`},Te={class:`admin-form__field`},Ee={class:`admin-form__field`},De={class:`admin-form__row`},P={class:`admin-form__field`},Oe={class:`admin-form__field`},ke=[`disabled`],Ae=2097152,F=ae(g({__name:`CompaniesView`,setup(ae){let g=[`image/png`,`image/jpeg`,`image/webp`,`image/svg+xml`],F=n(),I=e(),L=d([]),R=d(null),z=d(null),B=d(null),V=d(null),H=d(!1);async function je(){try{L.value=await p.list()}catch(e){I.error(e instanceof _?e.message:`بارگذاری شرکتها انجام نشد.`)}}re(()=>{je()});let U=()=>({name:``,description:``,displayOrder:L.value.length+1,isActive:!0}),W=se(U()),G=d(``),Me=v(()=>R.value!==null),Ne=v(()=>R.value===`edit`?`ویرایش شرکت`:`افزودن شرکت`),Pe=v(()=>R.value===`edit`?`ذخیره تغییرات`:`ثبت شرکت`),Fe=v(()=>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 Ie(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>Ae){G.value=`حداکثر حجم تصویر ۲ مگابایت است.`;return}G.value=``;let n=new FileReader;n.onload=()=>{B.value=n.result},n.readAsDataURL(t)}async function Le(){B.value&&await te({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(L.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 p.update(z.value,{name:e,description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||1,isActive:W.isActive,logoUrl:B.value}),n=L.value.findIndex(e=>e.id===z.value);n!==-1&&(L.value[n]={...L.value[n],...t}),I.success(`اطلاعات شرکت بهروزرسانی شد.`)}else{let t=await p.create({name:e,slug:ie(e),description:W.description.trim()||void 0,displayOrder:Number(W.displayOrder)||L.value.length+1,isActive:W.isActive,logoUrl:B.value});L.value.push(t),I.success(`شرکت جدید ثبت شد.`)}Y()}catch(e){I.error(e instanceof _?e.message:`ذخیره شرکت انجام نشد.`)}finally{H.value=!1}}async function Z(e,t){await p.setActive(e,t)}function Q(e){F.push(`/companies/${e}/accounts`)}function $(e){return e.trim().charAt(0)||`؟`}return(e,n)=>(c(),l(`div`,ue,[t(`div`,{class:`admin-page-header`},[n[5]||=t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`مدیریت شرکتها`),t(`p`,{class:`admin-page-header__breadcrumb`},`تنظیمات / شرکتها`)],-1),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:q},` افزودن شرکت `)]),L.value.length?(c(),l(`div`,de,[t(`div`,fe,[t(`table`,pe,[n[6]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`لوگو`),t(`th`,{class:`numeric`},`ترتیب`),t(`th`,{class:`status`},`وضعیت`),t(`th`,null,`توضیحات`),t(`th`,null,`نام شرکت`),t(`th`,{class:`actions`},`عملیات`)])],-1),t(`tbody`,null,[(c(!0),l(o,null,f(L.value,e=>(c(),l(`tr`,{key:e.id},[t(`td`,null,[e.logoUrl?(c(),l(`img`,{key:0,src:e.logoUrl,alt:`لوگوی ${e.name}`,class:`company-logo`},null,8,me)):(c(),l(`div`,he,m($(e.name)),1))]),t(`td`,ge,m(e.displayOrder),1),t(`td`,_e,[a(y,{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`])]),t(`td`,null,m(e.description),1),t(`td`,null,m(e.name),1),t(`td`,ve,[t(`div`,ye,[t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>J(e)},` ویرایش `,8,be),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e.id)},` حسابها `,8,b)])])]))),128))])])])])):(c(),ne(ce,{key:0,class:`admin-card`,icon:`companies`,title:`شرکتی ثبت نشده`,description:`برای شروع، اولین شرکت را ثبت کنید.`},{default:h(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:q},` افزودن شرکت `)]),_:1})),L.value.length?(c(),l(`div`,x,[(c(!0),l(o,null,f(L.value,e=>(c(),l(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,S,[t(`div`,C,[e.logoUrl?(c(),l(`img`,{key:0,src:e.logoUrl,alt:`لوگوی ${e.name}`,class:`company-logo`},null,8,w)):(c(),l(`div`,T,m($(e.name)),1)),t(`div`,null,[t(`p`,E,m(e.name),1),t(`p`,D,m(e.description),1)])]),a(y,{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`])]),t(`div`,O,[t(`span`,null,`ترتیب: `+m(e.displayOrder),1)]),t(`div`,k,[t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>J(e)},` ویرایش `,8,A),t(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--xs`,onClick:t=>Q(e.id)},` حسابها `,8,j)])]))),128))])):i(``,!0),a(oe,{open:Me.value,title:Ne.value,onClose:Y},{footer:h(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Y},` انصراف `),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!Fe.value||H.value,onClick:X},m(Pe.value),9,ke)]),default:h(()=>[t(`form`,{class:`admin-form`,onSubmit:ee(X,[`prevent`])},[G.value?(c(),l(`p`,M,m(G.value),1)):i(``,!0),t(`div`,N,[n[8]||=t(`label`,null,[r(`لوگو `),t(`span`,{class:`admin-form__required`},`*`)],-1),t(`div`,xe,[B.value?(c(),l(`div`,Se,[t(`img`,{src:B.value,alt:`پیشنمایش لوگو`,class:`logo-upload__preview`},null,8,Ce),t(`button`,{type:`button`,class:`logo-upload__remove`,onClick:Le},` حذف تصویر `)])):(c(),l(`label`,we,[...n[7]||=[t(`span`,{class:`logo-upload__icon`},`+`,-1),t(`span`,{class:`logo-upload__text`},`انتخاب یا رها کردن تصویر لوگو`,-1),t(`span`,{class:`logo-upload__hint`},`PNG، JPG، WEBP یا SVG — حداکثر ۲ مگابایت`,-1)]])),t(`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:Ie},null,544),B.value?(c(),l(`button`,{key:2,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm logo-upload__change`,onClick:n[0]||=e=>V.value?.click()},` تغییر تصویر `)):i(``,!0)])]),t(`div`,Te,[n[9]||=t(`label`,{for:`company-name`},[r(`نام شرکت `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`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]])]),t(`div`,Ee,[n[10]||=t(`label`,{for:`company-description`},`توضیحات`,-1),u(t(`textarea`,{id:`company-description`,"onUpdate:modelValue":n[2]||=e=>W.description=e,class:`admin-form__textarea`,placeholder:`تولید و عرضه انواع پارچه`,rows:`3`},null,512),[[s,W.description]])]),t(`div`,De,[t(`div`,P,[n[11]||=t(`label`,{for:`company-order`},`ترتیب نمایش`,-1),u(t(`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}]])]),t(`div`,Oe,[a(le,{modelValue:W.isActive,"onUpdate:modelValue":n[4]||=e=>W.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-caae8f52`]]);export{F as default};
\ No newline at end of file
diff --git a/dist/assets/CompaniesView-CrPUhk7I.css b/dist/assets/CompaniesView-CrPUhk7I.css
new file mode 100644
index 0000000..636cc7a
--- /dev/null
+++ b/dist/assets/CompaniesView-CrPUhk7I.css
@@ -0,0 +1 @@
+.companies-page__table[data-v-caae8f52]{overflow:hidden}.companies-page__card-logo[data-v-caae8f52]{align-items:center;gap:12px;display:flex}.companies-page__card-desc[data-v-caae8f52]{color:var(--color-text-muted);margin:4px 0 0;font-size:.8125rem;font-weight:400}.company-logo[data-v-caae8f52]{border-radius:var(--radius-sm);object-fit:contain;background:var(--color-bg);border:1px solid var(--color-border);width:40px;height:40px}.company-logo--fallback[data-v-caae8f52]{background:var(--color-primary);color:#fff;justify-content:center;align-items:center;font-size:1rem;font-weight:700;display:flex}.logo-upload[data-v-caae8f52]{flex-direction:column;gap:10px;display:flex}.logo-upload__input[data-v-caae8f52]{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.logo-upload__dropzone[data-v-caae8f52]{border:2px dashed var(--color-border);border-radius:var(--radius-md);background:var(--color-border-light);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:28px 16px;transition:border-color .15s,background .15s;display:flex}.logo-upload__dropzone[data-v-caae8f52]:hover{border-color:var(--color-primary);background:var(--color-info-light)}.logo-upload__icon[data-v-caae8f52]{background:var(--color-surface);border:1px solid var(--color-border);width:40px;height:40px;color:var(--color-text-muted);border-radius:50%;justify-content:center;align-items:center;font-size:1.5rem;line-height:1;display:flex}.logo-upload__text[data-v-caae8f52]{color:var(--color-text);font-size:.875rem;font-weight:600}.logo-upload__hint[data-v-caae8f52]{color:var(--color-text-muted);font-size:.75rem}.logo-upload__preview-wrap[data-v-caae8f52]{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-border-light);flex-direction:column;align-items:center;gap:10px;padding:16px;display:flex}.logo-upload__preview[data-v-caae8f52]{object-fit:contain;border-radius:var(--radius-sm);background:var(--color-surface);border:1px solid var(--color-border);width:80px;height:80px}.logo-upload__remove[data-v-caae8f52]{color:var(--color-danger);cursor:pointer;background:0 0;border:none;padding:0;font-size:.8125rem;font-weight:600}.logo-upload__remove[data-v-caae8f52]:hover{text-decoration:underline}.logo-upload__change[data-v-caae8f52]{align-self:flex-start}
diff --git a/dist/assets/CustomersView-BYpoFcAd.js b/dist/assets/CustomersView-BYpoFcAd.js
new file mode 100644
index 0000000..c7f5b84
--- /dev/null
+++ b/dist/assets/CustomersView-BYpoFcAd.js
@@ -0,0 +1 @@
+import{A as e,B as t,G as n,H as r,I as ee,K as i,L as a,P as o,Q as s,T as te,U as c,V as ne,X as l,a as re,at as u,ct as d,et as f,ft as p,i as ie,it as m,j as ae,k as oe,lt as h,p as g,q as _,st as se,w as v,z as y}from"./index-dG7O4aC2.js";import{t as ce}from"./AdminSelect-BsjBHdZj.js";import{r as b}from"./adminLabels-Cz9ccm1Z.js";import{n as le,r as ue,t as x}from"./ActiveSwitchCell-DxxSF-SL.js";var de={class:`customers-page`},fe={class:`customers-page__search admin-card`},pe={key:1,class:`customers-page__table admin-card desktop-only`},me={class:`admin-table-wrap`},he={class:`admin-table`},ge={class:`numeric`},_e={class:`numeric`},ve={class:`status`},S={class:`actions`},C=[`onClick`],w={key:2,class:`compact-only admin-card-list`},T={class:`admin-card-item__header`},E={class:`admin-card-item__title`},D={class:`admin-card-item__header-actions`},O=[`onClick`],k={class:`admin-card-item__meta`},A={key:0,class:`admin-form__error`,role:`alert`},j={class:`admin-form__field`},M={class:`admin-form__row`},N={class:`admin-form__field`},P={class:`admin-form__field`},F={class:`admin-form__row`},ye={class:`admin-form__field`},be={class:`admin-form__field`},xe={class:`admin-form__field`},Se=[`disabled`],Ce={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},I=ae(_({__name:`CustomersView`,setup(ae){let _=d([]),I=d(``),L=d(null),R=d(null),z=d(``),B=d(!1),V=e();function H(e){if(e==null)return`-`;if(typeof e==`number`)return Number.isFinite(e)?String(e):`-`;let t=e.trim();return!t||t===`—`?`-`:t}function U(e){return e==null||!Number.isFinite(e)?`-`:re(e)}let W=[{value:`wholesale`,label:`عمدهفروش`},{value:`retail`,label:`خردهفروش`}],G=()=>({name:``,phone:``,nationalId:``,customerType:`wholesale`,companyName:``,isActive:!0}),K=se(G()),we=y(()=>L.value!==null),Te=y(()=>L.value===`edit`?`ویرایش مشتری`:`افزودن مشتری`),q=y(()=>K.name.trim()&&K.phone.trim()&&K.nationalId.trim()),J=y(()=>{let e=I.value.trim();return e?_.value.filter(t=>t.name.includes(e)||t.phone.includes(e)||t.nationalId.includes(e)||t.companyName.includes(e)):_.value});async function Ee(){try{_.value=await g.list()}catch(e){V.error(e instanceof v?e.message:`بارگذاری مشتریان انجام نشد.`)}}l(()=>{Ee()});function Y(){L.value=`add`,R.value=null,Object.assign(K,G()),z.value=``}function X(e){L.value=`edit`,R.value=e.id,K.name=e.name,K.phone=e.phone,K.nationalId=e.nationalId,K.customerType=e.customerType,K.companyName=e.companyName,K.isActive=e.isActive,z.value=``}function Z(){L.value=null,R.value=null,z.value=``}async function Q(){if(!q.value){z.value=`نام، تلفن و شناسه ملی الزامی هستند.`;return}B.value=!0;let e={name:K.name.trim(),phone:K.phone.trim(),nationalId:K.nationalId.trim(),customerType:K.customerType,isActive:K.isActive};try{if(L.value===`edit`&&R.value){let t=await g.update(R.value,e),n=_.value.findIndex(e=>e.id===R.value);n!==-1&&(_.value[n]={..._.value[n],...t})}else{let t=await g.create(e);_.value.unshift(t)}V.success(L.value===`edit`?`اطلاعات مشتری بهروزرسانی شد.`:`مشتری جدید ثبت شد.`),Z()}catch(e){V.error(e instanceof v?e.message:`ذخیره مشتری انجام نشد.`)}finally{B.value=!1}}async function $(e,t){await g.setActive(e,t)}function De(){I.value=``}return(e,l)=>(s(),c(`div`,de,[t(`div`,{class:`admin-page-header`},[l[7]||=t(`div`,null,[t(`h1`,{class:`admin-page-header__title`},`مشتریان`),t(`p`,{class:`admin-page-header__breadcrumb`},`مدیریت / مشتریان`)],-1),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` افزودن مشتری `)]),t(`div`,fe,[i(te,{name:`search`,size:18}),u(t(`input`,{"onUpdate:modelValue":l[0]||=e=>I.value=e,type:`search`,class:`customers-page__search-input`,placeholder:`جستجو در نام، تلفن، شناسه ملی...`},null,512),[[o,I.value]])]),J.value.length?(s(),c(`div`,pe,[t(`div`,me,[t(`table`,he,[l[8]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`نام مشتری`),t(`th`,null,`تلفن`),t(`th`,null,`شناسه ملی`),t(`th`,null,`نوع`),t(`th`,null,`شرکت`),t(`th`,{class:`numeric`},`تعداد سفارش`),t(`th`,{class:`numeric`},`مجموع متراژ`),t(`th`,{class:`status`},`وضعیت`),t(`th`,null,`تاریخ ثبت`),t(`th`,{class:`actions`},`عملیات`)])],-1),t(`tbody`,null,[(s(!0),c(a,null,f(J.value,e=>(s(),c(`tr`,{key:e.id},[t(`td`,null,p(H(e.name)),1),t(`td`,null,p(H(e.phone)),1),t(`td`,null,p(H(e.nationalId)),1),t(`td`,null,p(H(h(b)[e.customerType])),1),t(`td`,null,p(H(e.companyName)),1),t(`td`,ge,p(H(e.orderCount)),1),t(`td`,_e,p(U(e.totalMeterage)),1),t(`td`,ve,[i(x,{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`])]),t(`td`,null,p(H(h(ie)(e.registeredAt))),1),t(`td`,S,[t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,C)])]))),128))])])])])):(s(),ne(le,{key:0,class:`admin-card`,icon:`customers`,title:I.value.trim()?`نتیجهای یافت نشد`:`مشتریان ثبت شده`,description:I.value.trim()?`عبارت جستجو را تغییر دهید یا فیلترها را پاک کنید.`:`برای شروع، اولین مشتری را ثبت کنید.`},{default:m(()=>[I.value.trim()?(s(),c(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:De},` پاک کردن جستجو `)):(s(),c(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:Y},` افزودن مشتری `))]),_:1},8,[`title`,`description`])),J.value.length?(s(),c(`div`,w,[(s(!0),c(a,null,f(J.value,e=>(s(),c(`article`,{key:e.id,class:`admin-card-item`},[t(`div`,T,[t(`p`,E,p(H(e.name)),1),t(`div`,D,[i(x,{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`]),t(`button`,{type:`button`,class:`admin-btn admin-btn--ghost admin-btn--xs`,onClick:t=>X(e)},` ویرایش `,8,O)])]),t(`div`,k,[t(`span`,null,p(H(e.phone)),1),t(`span`,null,p(H(h(b)[e.customerType])),1),t(`span`,null,p(H(e.companyName)),1),t(`span`,null,p(H(e.orderCount))+` سفارش · `+p(U(e.totalMeterage)),1)])]))),128))])):r(``,!0),i(oe,{open:we.value,title:Te.value,size:`lg`,onClose:Z},{footer:m(()=>[t(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:Z},`انصراف`),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!q.value||B.value,onClick:Q},[B.value?(s(),c(`span`,Ce)):r(``,!0),n(` `+p(L.value===`edit`?`ذخیره تغییرات`:`ثبت مشتری`),1)],8,Se)]),default:m(()=>[t(`form`,{class:`admin-form`,onSubmit:ee(Q,[`prevent`])},[z.value?(s(),c(`p`,A,p(z.value),1)):r(``,!0),t(`div`,j,[l[9]||=t(`label`,{for:`customer-name`},[n(`نام مشتری `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`input`,{id:`customer-name`,"onUpdate:modelValue":l[1]||=e=>K.name=e,type:`text`,class:`admin-input`},null,512),[[o,K.name]])]),t(`div`,M,[t(`div`,N,[l[10]||=t(`label`,{for:`customer-phone`},[n(`تلفن `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`input`,{id:`customer-phone`,"onUpdate:modelValue":l[2]||=e=>K.phone=e,type:`tel`,class:`admin-input`,inputmode:`tel`,dir:`ltr`},null,512),[[o,K.phone]])]),t(`div`,P,[l[11]||=t(`label`,{for:`customer-national-id`},[n(`شناسه ملی `),t(`span`,{class:`admin-form__required`},`*`)],-1),u(t(`input`,{id:`customer-national-id`,"onUpdate:modelValue":l[3]||=e=>K.nationalId=e,type:`text`,class:`admin-input`,inputmode:`numeric`,dir:`ltr`},null,512),[[o,K.nationalId]])])]),t(`div`,F,[t(`div`,ye,[l[12]||=t(`label`,null,`نوع مشتری`,-1),i(ce,{modelValue:K.customerType,"onUpdate:modelValue":l[4]||=e=>K.customerType=e,block:``,"aria-label":`نوع مشتری`,options:W},null,8,[`modelValue`])]),t(`div`,be,[l[13]||=t(`label`,{for:`customer-company`},`شرکت مرتبط`,-1),u(t(`input`,{id:`customer-company`,"onUpdate:modelValue":l[5]||=e=>K.companyName=e,type:`text`,class:`admin-input`},null,512),[[o,K.companyName]])])]),t(`div`,xe,[i(ue,{modelValue:K.isActive,"onUpdate:modelValue":l[6]||=e=>K.isActive=e,label:`وضعیت`},null,8,[`modelValue`])])],32)]),_:1},8,[`open`,`title`])]))}}),[[`__scopeId`,`data-v-1898ef43`]]);export{I as default};
\ No newline at end of file
diff --git a/dist/assets/CustomersView-BfXhxAth.css b/dist/assets/CustomersView-BfXhxAth.css
new file mode 100644
index 0000000..b34c2f1
--- /dev/null
+++ b/dist/assets/CustomersView-BfXhxAth.css
@@ -0,0 +1 @@
+.customers-page__search[data-v-1898ef43]{color:var(--color-text-muted);align-items:center;gap:10px;margin-bottom:16px;padding:10px 14px;display:flex}.customers-page__search-input[data-v-1898ef43]{background:0 0;border:none;outline:none;flex:1;font-size:.875rem}.customers-page__table[data-v-1898ef43]{overflow:hidden}
diff --git a/dist/assets/DashboardView-B4W3rp-i.js b/dist/assets/DashboardView-B4W3rp-i.js
new file mode 100644
index 0000000..63af721
--- /dev/null
+++ b/dist/assets/DashboardView-B4W3rp-i.js
@@ -0,0 +1 @@
+import{A as e,B as t,D as n,G as r,H as i,K as a,L as o,Q as s,T as c,U as l,V as u,X as d,ct as f,dt as p,et as m,ft as h,h as g,i as _,it as v,j as y,lt as b,m as x,n as S,nt as C,o as w,q as T,ut as E,w as D,z as O}from"./index-dG7O4aC2.js";import{t as k}from"./StatusBadge-D-XqK4sa.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`],P=[`x1`,`x2`,`y1`,`y2`],te=[`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=y(T({__name:`SalesAreaChart`,props:{data:{},title:{},subtitle:{},height:{default:160},color:{default:`#17379f`},unit:{default:`میلیارد تومان`},labels:{}},setup(e){let n=e,r=f(null),a={top:12,right:8,bottom:8,left:8},c=O(()=>Math.max(...n.data,.001)),u=O(()=>{let e=B-a.left-a.right,t=V-a.top-a.bottom,r=e/Math.max(n.data.length-1,1);return n.data.map((e,n)=>({x:a.left+n*r,y:a.top+t-e/c.value*t,value:e,index:n}))}),d=O(()=>u.value.map(e=>`${e.x},${e.y}`).join(` `)),g=O(()=>{let e=V-a.bottom,t=u.value[0],n=u.value[u.value.length-1];return!t||!n?``:`${t.x},${e} ${d.value} ${n.x},${e}`}),_=O(()=>{let e=V-a.top-a.bottom;return[0,.5,1].map(t=>a.top+e*t)}),v=O(()=>r.value===null?null:u.value[r.value]??null);function y(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(s(),l(`div`,ee,[e.title||e.subtitle?(s(),l(`div`,A,[t(`div`,null,[e.title?(s(),l(`h3`,j,h(e.title),1)):i(``,!0),e.subtitle?(s(),l(`p`,M,h(e.subtitle),1)):i(``,!0)])])):i(``,!0),t(`div`,{class:`sales-chart__body`,style:p({height:`${e.height}px`})},[(s(),l(`svg`,{class:`sales-chart__svg`,viewBox:`0 0 ${B} ${V}`,preserveAspectRatio:`none`,role:`img`,"aria-label":e.title||`نمودار فروش`,onMousemove:y,onMouseleave:x},[(s(!0),l(o,null,m(_.value,(e,t)=>(s(),l(`line`,{key:t,x1:a.left,x2:B-a.right,y1:e,y2:e,class:`sales-chart__grid`},null,8,P))),128)),g.value?(s(),l(`polygon`,{key:0,points:g.value,class:`sales-chart__area`,style:p({fill:`${e.color}22`})},null,12,te)):i(``,!0),t(`polyline`,{points:d.value,class:`sales-chart__line`,style:p({stroke:e.color})},null,12,F),v.value?(s(),l(o,{key:1},[t(`line`,{x1:v.value.x,x2:v.value.x,y1:a.top,y2:V-a.bottom,class:`sales-chart__cursor`},null,8,I),t(`circle`,{cx:v.value.x,cy:v.value.y,r:`4`,class:`sales-chart__dot`,style:p({fill:e.color})},null,12,L)],64)):i(``,!0)],40,N)),v.value?(s(),l(`div`,{key:0,class:`sales-chart__tooltip`,style:p({left:`${v.value.x/B*100}%`})},[t(`span`,R,h(e.labels?.[v.value.index]??`روز ${v.value.index+1}`),1),t(`strong`,null,h(b(w)(v.value.value))+` `+h(e.unit),1)],4)):i(``,!0)],4),e.labels?.length?(s(),l(`div`,z,[(s(!0),l(o,null,m(e.labels,(e,t)=>(s(),l(`span`,{key:t},h(e),1))),128))])):i(``,!0)]))}}),[[`__scopeId`,`data-v-7c631ba3`]]),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=n(),r=e(),i=f(G()),a=f([]),o=f(Array.from({length:28},()=>0)),s=f([`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`]),c=f([]),l=f(!1),u=O(()=>[{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=O(()=>{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(){l.value=!0;try{let e=await x.get();i.value=e.stats,a.value=(e.recentOrders??[]).map(e=>g(e)),o.value=e.salesChartData?.length?e.salesChartData:Array.from({length:28},()=>0),s.value=e.chartAxisLabels?.length?e.chartAxisLabels:[`۱`,`۷`,`۱۴`,`۲۱`,`۲۸`],c.value=e.checkDeadlines??[]}catch(e){r.error(e instanceof D?e.message:`بارگذاری داشبورد انجام نشد.`)}finally{l.value=!1}}d(()=>{m()});function h(){t.push(`/orders`)}return{checkDeadlines:c,dashboardStats:i,recentOrders:a,chartPoints:p,salesChartData:o,chartAxisLabels:s,statCards:u,loading:l,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`},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=y(T({__name:`DesktopDashboard`,setup(e){let{checkDeadlines:n,dashboardStats:i,recentOrders:u,salesChartData:d,chartAxisLabels:f,goOrders:g,statCards:y}=K();return(e,x)=>{let w=C(`RouterLink`);return s(),l(`div`,q,[t(`div`,J,[t(`button`,Y,[a(c,{name:`calendar`,size:16}),x[1]||=r(` امروز `,-1)])]),t(`div`,X,[(s(!0),l(o,null,m(b(y),e=>(s(),l(`div`,{key:e.label,class:`admin-stat-card`},[t(`div`,{class:`admin-stat-card__icon`,style:p({background:b(U)[e.tone],color:b(W)[e.tone]})},[a(c,{name:e.icon,size:20},null,8,[`name`])],4),t(`p`,Z,h(e.label),1),t(`p`,Q,h(e.value),1),a(w,{to:e.link,class:`admin-stat-card__link`},{default:v(()=>[...x[2]||=[r(`مشاهده سفارشها`,-1)]]),_:1},8,[`to`])]))),128)),t(`div`,ne,[t(`div`,re,[t(`div`,null,[x[3]||=t(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),t(`p`,ie,h(b(S)(b(i).todaySales)),1),t(`span`,ae,` +`+h(b(i).todaySalesGrowth)+`% نسبت به دیروز `,1)]),a(c,{name:`calendar`,size:20,class:`dashboard__sales-icon`})]),x[4]||=t(`svg`,{class:`dashboard__sparkline`,viewBox:`0 0 120 32`,preserveAspectRatio:`none`},[t(`polyline`,{fill:`none`,stroke:`#159660`,"stroke-width":`2`,points:`0,24 20,18 40,22 60,12 80,16 100,8 120,14`})],-1)])]),t(`div`,oe,[t(`div`,se,[a(H,{title:`فروش ماه جاری`,subtitle:b(S)(b(i).monthSales),data:b(d),labels:b(f),unit:`میلیارد`,height:168},null,8,[`subtitle`,`data`,`labels`])]),t(`div`,ce,[x[7]||=t(`div`,{class:`dashboard__card-header`},[t(`h2`,{class:`dashboard__card-title`},`سفارشهای اخیر`)],-1),t(`div`,le,[t(`table`,ue,[x[5]||=t(`thead`,null,[t(`tr`,null,[t(`th`,null,`شماره سفارش`),t(`th`,null,`مشتری`),t(`th`,null,`شرکت`),t(`th`,null,`وضعیت`),t(`th`,null,`تاریخ ثبت`)])],-1),t(`tbody`,null,[(s(!0),l(o,null,m(b(u),e=>(s(),l(`tr`,{key:e.id},[t(`td`,null,h(e.orderNumber),1),t(`td`,null,h(e.customerName),1),t(`td`,null,h(e.companyName),1),t(`td`,null,[a(k,{status:e.status},null,8,[`status`])]),t(`td`,null,h(b(_)(e.createdAt)),1)]))),128))])])]),t(`div`,de,[t(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:x[0]||=(...e)=>b(g)&&b(g)(...e)},[x[6]||=r(` مشاهده همه سفارشها `,-1),a(c,{name:`chevron-left`,size:16})])])]),t(`div`,fe,[x[9]||=t(`div`,{class:`dashboard__card-header`},[t(`h2`,{class:`dashboard__card-title`},`سررسید چکها`)],-1),t(`ul`,pe,[(s(!0),l(o,null,m(b(n),e=>(s(),l(`li`,{key:e.id,class:`dashboard__deadline-item`},[t(`span`,{class:E([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},h(e.label),3),t(`span`,me,h(e.count)+` فقره`,1),t(`span`,he,h(b(S)(e.amount)),1)]))),128))]),t(`div`,ge,[a(w,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm`},{default:v(()=>[x[8]||=r(` مشاهده همه `,-1),a(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=T({__name:`CompactDashboard`,setup(e){let{checkDeadlines:n,dashboardStats:i,recentOrders:d,salesChartData:f,chartAxisLabels:g,goOrders:y,statCards:x}=K();return(e,w)=>{let T=C(`RouterLink`);return s(),l(`div`,ve,[t(`div`,ye,[t(`button`,be,[a(c,{name:`calendar`,size:16}),w[1]||=r(` امروز `,-1)])]),t(`div`,xe,[(s(!0),l(o,null,m(b(x),e=>(s(),l(`div`,{key:e.label,class:`admin-stat-card`},[t(`div`,{class:`admin-stat-card__icon`,style:p({background:b(U)[e.tone],color:b(W)[e.tone]})},[a(c,{name:e.icon,size:20},null,8,[`name`])],4),t(`p`,Se,h(e.label),1),t(`p`,Ce,h(e.value),1),a(T,{to:e.link,class:`admin-stat-card__link`},{default:v(()=>[...w[2]||=[r(`مشاهده`,-1)]]),_:1},8,[`to`])]))),128)),t(`div`,we,[w[3]||=t(`p`,{class:`admin-stat-card__label`},`فروش امروز`,-1),t(`p`,$,h(b(S)(b(i).todaySales)),1),t(`span`,Te,` +`+h(b(i).todaySalesGrowth)+`% نسبت به دیروز `,1)])]),t(`div`,Ee,[t(`section`,De,[a(H,{title:`فروش ماه جاری`,subtitle:b(S)(b(i).monthSales),data:b(f),labels:b(g),unit:`میلیارد`,height:140},null,8,[`subtitle`,`data`,`labels`])]),t(`section`,Oe,[w[5]||=t(`h2`,{class:`compact-section-card__title`},`سفارشهای اخیر`,-1),t(`div`,ke,[(s(!0),l(o,null,m(b(d),e=>(s(),u(T,{key:e.id,to:`/orders`,class:`admin-card-item block no-underline text-inherit`},{default:v(()=>[t(`div`,Ae,[t(`p`,je,h(e.orderNumber),1),a(k,{status:e.status},null,8,[`status`])]),t(`div`,Me,[t(`span`,null,h(e.customerName),1),t(`span`,null,h(b(_)(e.createdAt)),1)])]),_:2},1024))),128))]),t(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm inline-flex mt-3`,onClick:w[0]||=(...e)=>b(y)&&b(y)(...e)},[w[4]||=r(` مشاهده همه سفارشها `,-1),a(c,{name:`chevron-left`,size:16})])]),t(`section`,Ne,[w[7]||=t(`h2`,{class:`compact-section-card__title`},`سررسید چکها`,-1),t(`ul`,Pe,[(s(!0),l(o,null,m(b(n),e=>(s(),l(`li`,{key:e.id,class:`flex flex-wrap items-center gap-2 text-sm`},[t(`span`,{class:E([`admin-badge`,{"admin-badge--danger":e.tone===`danger`,"admin-badge--warning":e.tone===`warning`,"admin-badge--neutral":e.tone===`neutral`}])},h(e.label),3),t(`span`,null,h(e.count)+` فقره`,1),t(`strong`,Fe,h(b(S)(e.amount)),1)]))),128))]),a(T,{to:`/checks`,class:`admin-btn admin-btn--outline admin-btn--sm inline-flex mt-3 no-underline`},{default:v(()=>[w[6]||=r(` مشاهده همه `,-1),a(c,{name:`chevron-left`,size:16})]),_:1})])])])}}}),Le=T({__name:`DashboardView`,setup(e){return(e,t)=>(s(),l(o,null,[a(_e,{class:`desktop-only`}),a(Ie,{class:`compact-only`})],64))}});export{Le as default};
\ No newline at end of file
diff --git a/dist/assets/DashboardView-Dt8n-iF2.css b/dist/assets/DashboardView-Dt8n-iF2.css
new file mode 100644
index 0000000..b8e780a
--- /dev/null
+++ b/dist/assets/DashboardView-Dt8n-iF2.css
@@ -0,0 +1 @@
+.sales-chart__header[data-v-7c631ba3]{margin-bottom:12px}.sales-chart__title[data-v-7c631ba3]{margin:0;font-size:.9375rem;font-weight:700}.sales-chart__subtitle[data-v-7c631ba3]{color:var(--color-text-muted);margin:4px 0 0;font-size:.8125rem}.sales-chart__body[data-v-7c631ba3]{position:relative}.sales-chart__svg[data-v-7c631ba3]{width:100%;height:100%;display:block}.sales-chart__grid[data-v-7c631ba3]{stroke:var(--color-border);stroke-width:1px;stroke-dasharray:4 4}.sales-chart__line[data-v-7c631ba3]{fill:none;stroke-width:2.25px;stroke-linecap:round;stroke-linejoin:round}.sales-chart__cursor[data-v-7c631ba3]{stroke:var(--color-border);stroke-width:1px;stroke-dasharray:3 3}.sales-chart__dot[data-v-7c631ba3]{stroke:#fff;stroke-width:2px}.sales-chart__tooltip[data-v-7c631ba3]{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-surface);min-width:120px;box-shadow:var(--shadow-sm);pointer-events:none;text-align:center;padding:8px 10px;position:absolute;top:8px;transform:translate(-50%)}.sales-chart__tooltip-label[data-v-7c631ba3]{color:var(--color-text-muted);margin-bottom:2px;font-size:.6875rem;display:block}.sales-chart__tooltip strong[data-v-7c631ba3]{font-size:.8125rem}.sales-chart__axis[data-v-7c631ba3]{color:var(--color-text-muted);justify-content:space-between;margin-top:8px;font-size:.6875rem;display:flex}.dashboard__toolbar[data-v-bf2ebdae]{justify-content:flex-end;margin-bottom:16px;display:flex}.dashboard__stats[data-v-bf2ebdae]{grid-template-columns:repeat(5,1fr);gap:16px;margin-bottom:20px;display:grid}.dashboard__sales-header[data-v-bf2ebdae]{justify-content:space-between;align-items:flex-start;display:flex}.dashboard__sales-value[data-v-bf2ebdae]{font-size:1.25rem!important}.dashboard__sales-growth[data-v-bf2ebdae]{color:var(--color-success);font-size:.75rem;font-weight:600}.dashboard__sales-icon[data-v-bf2ebdae]{color:var(--color-text-muted)}.dashboard__sparkline[data-v-bf2ebdae]{width:100%;height:32px;margin-top:8px}.dashboard__grid[data-v-bf2ebdae]{grid-template-columns:1fr 1.4fr .9fr;gap:16px;display:grid}.dashboard__chart-card[data-v-bf2ebdae],.dashboard__orders-card[data-v-bf2ebdae],.dashboard__checks-card[data-v-bf2ebdae]{padding:20px}.dashboard__chart-card[data-v-bf2ebdae] .sales-chart__header{margin-bottom:0}.dashboard__card-header[data-v-bf2ebdae]{margin-bottom:16px}.dashboard__card-title[data-v-bf2ebdae]{margin:0;font-size:.9375rem;font-weight:700}.dashboard__card-value[data-v-bf2ebdae]{margin:4px 0 0;font-size:1.125rem;font-weight:700}.dashboard__chart[data-v-bf2ebdae]{width:100%;height:140px}.dashboard__chart-axis[data-v-bf2ebdae]{color:var(--color-text-muted);justify-content:space-between;margin-top:8px;font-size:.6875rem;display:flex}.dashboard__card-footer[data-v-bf2ebdae]{border-top:1px solid var(--color-border-light);justify-content:flex-start;margin-top:12px;padding-top:12px;display:flex}.dashboard__card-footer .admin-btn[data-v-bf2ebdae]{text-decoration:none}.dashboard__deadline-list[data-v-bf2ebdae]{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.dashboard__deadline-item[data-v-bf2ebdae]{grid-template-columns:auto 1fr auto auto;align-items:center;gap:10px;font-size:.8125rem;display:grid}.dashboard__deadline-count[data-v-bf2ebdae]{color:var(--color-text-muted)}.dashboard__deadline-amount[data-v-bf2ebdae]{font-size:.75rem;font-weight:600}
diff --git a/dist/assets/IRANSansWeb(FaNum)-BLA2CtIC.woff2 b/dist/assets/IRANSansWeb(FaNum)-BLA2CtIC.woff2
new file mode 100644
index 0000000..c3dcbab
Binary files /dev/null and b/dist/assets/IRANSansWeb(FaNum)-BLA2CtIC.woff2 differ
diff --git a/dist/assets/IRANSansWeb(FaNum)_Black-BFAfOkt4.woff2 b/dist/assets/IRANSansWeb(FaNum)_Black-BFAfOkt4.woff2
new file mode 100644
index 0000000..fc008ef
Binary files /dev/null and b/dist/assets/IRANSansWeb(FaNum)_Black-BFAfOkt4.woff2 differ
diff --git a/dist/assets/IRANSansWeb(FaNum)_Bold-C8urhp07.woff2 b/dist/assets/IRANSansWeb(FaNum)_Bold-C8urhp07.woff2
new file mode 100644
index 0000000..69f7c66
Binary files /dev/null and b/dist/assets/IRANSansWeb(FaNum)_Bold-C8urhp07.woff2 differ
diff --git a/dist/assets/IRANSansWeb(FaNum)_Light-B637MNLG.woff2 b/dist/assets/IRANSansWeb(FaNum)_Light-B637MNLG.woff2
new file mode 100644
index 0000000..40f5b09
Binary files /dev/null and b/dist/assets/IRANSansWeb(FaNum)_Light-B637MNLG.woff2 differ
diff --git a/dist/assets/IRANSansWeb(FaNum)_Medium-C2CKjrKB.woff2 b/dist/assets/IRANSansWeb(FaNum)_Medium-C2CKjrKB.woff2
new file mode 100644
index 0000000..8273b0a
Binary files /dev/null and b/dist/assets/IRANSansWeb(FaNum)_Medium-C2CKjrKB.woff2 differ
diff --git a/dist/assets/LoginView-D7iZwKPi.js b/dist/assets/LoginView-D7iZwKPi.js
new file mode 100644
index 0000000..8feadb0
--- /dev/null
+++ b/dist/assets/LoginView-D7iZwKPi.js
@@ -0,0 +1 @@
+import{A as e,B as t,C as n,D as r,E as i,G as a,H as o,I as s,K as c,M as l,N as u,P as d,Q as f,T as p,U as m,W as h,at as g,ct as _,ft as v,j as y,lt as b,q as x,z as S}from"./index-dG7O4aC2.js";var C={class:`login-page`},w={class:`login-page__form-wrap`},T={class:`login-page__card admin-card`},E={key:0,class:`admin-form__error`,role:`alert`},D={class:`admin-form__field`},O={class:`login-page__input-wrap`},k={class:`login-page__field-icon`,"aria-hidden":`true`},A={class:`admin-form__field`},j={class:`login-page__input-wrap login-page__input-wrap--password`},M={class:`login-page__field-icon`,"aria-hidden":`true`},N=[`type`],P=[`aria-label`],F={class:`login-page__remember`},I=[`disabled`],L={key:0,class:`admin-btn__spinner`,"aria-hidden":`true`},R=y(x({__name:`LoginView`,setup(y){let x=r(),R=i(),z=n(),B=e(),V=_(``),H=_(``),U=_(!0),W=_(!1),G=S(()=>V.value.trim().length>0&&H.value.length>0);function K(e){return e.replace(/[۰-۹]/g,e=>String(`۰۱۲۳۴۵۶۷۸۹`.indexOf(e))).replace(/[٠-٩]/g,e=>String(`٠١٢٣٤٥٦٧٨٩`.indexOf(e)))}async function q(){if(!G.value){z.error=`لطفاً شماره موبایل و رمز عبور را وارد کنید.`;return}if(!await z.login(K(V.value.trim()),H.value,U.value))return;B.success(`خوش آمدید، ${z.fullName}`);let e=typeof R.query.redirect==`string`?R.query.redirect:`/`;x.replace(e)}return(e,n)=>(f(),m(`div`,C,[t(`div`,w,[t(`div`,T,[n[10]||=t(`div`,{class:`login-page__header`},[t(`h2`,{class:`login-page__title`},`ورود به پنل مدیریت`),t(`p`,{class:`login-page__subtitle`},`برای ادامه، اطلاعات حساب کاربری خود را وارد کنید.`)],-1),t(`form`,{class:`admin-form login-page__form`,onSubmit:s(q,[`prevent`])},[b(z).error?(f(),m(`p`,E,v(b(z).error),1)):o(``,!0),t(`div`,D,[n[6]||=t(`label`,{for:`login-phone`},`شماره موبایل`,-1),t(`div`,O,[t(`span`,k,[c(p,{name:`phone`,size:18})]),g(t(`input`,{id:`login-phone`,"onUpdate:modelValue":n[0]||=e=>V.value=e,type:`tel`,class:`admin-input login-page__input`,placeholder:`۰۹۱۲۱۱۱۱۲۲۲۲`,autocomplete:`username`,inputmode:`tel`,dir:`ltr`,onInput:n[1]||=e=>b(z).clearError()},null,544),[[d,V.value]])])]),t(`div`,A,[n[7]||=t(`label`,{for:`login-password`},`رمز عبور`,-1),t(`div`,j,[t(`span`,M,[c(p,{name:`lock`,size:18})]),g(t(`input`,{id:`login-password`,"onUpdate:modelValue":n[2]||=e=>H.value=e,type:W.value?`text`:`password`,class:`admin-input login-page__input login-page__input--with-toggle`,placeholder:`رمز عبور`,autocomplete:`current-password`,onInput:n[3]||=e=>b(z).clearError()},null,40,N),[[u,H.value]]),t(`button`,{type:`button`,class:`login-page__toggle-password`,"aria-label":W.value?`پنهان کردن رمز`:`نمایش رمز`,onClick:n[4]||=e=>W.value=!W.value},[c(p,{name:W.value?`eye-off`:`eye`,size:18},null,8,[`name`])],8,P)])]),t(`label`,F,[g(t(`input`,{"onUpdate:modelValue":n[5]||=e=>U.value=e,type:`checkbox`},null,512),[[l,U.value]]),n[8]||=t(`span`,null,`مرا به خاطر بسپار`,-1)]),t(`button`,{type:`submit`,class:`admin-btn admin-btn--primary login-page__submit`,disabled:!G.value||b(z).loading},[b(z).loading?(f(),m(`span`,L)):o(``,!0),n[9]||=a(` ورود به پنل `,-1)],8,I)],32)])]),n[11]||=h(`