Files
nademitex_admin/dist/assets/CheckManagementView-DFrKKIXW.js
T
mohmdsdgandCopilot 9854842ada fix(auth): secure sessions and app routing
Validate sessions against the API, honor configurable base paths, and route unknown pages to 404. Keep development ports stable so user and admin apps cannot be confused.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-24 20:14:11 +03:30

1 line
11 KiB
JavaScript

import{$ as e,Ct as t,F as n,I as r,J as i,L as a,N as o,Q as ee,V as te,X as s,Y as ne,Z as c,bt as l,dt as u,et as d,i as re,it as f,lt as p,m,n as h,nt as g,q as _,r as v,rt as y,st as ie,x as b,xt as x,y as ae,yt as S,z as oe}from"./index-B2VD3zy8.js";import{c as C}from"./orderStatus-CYVblRJB.js";import{t as w}from"./StatusBadge-D3ThrLrU.js";var se={class:`checks-page`},ce={class:`admin-page-header`},le={key:0,class:`checks-page__order-meta`},ue={class:`checks-page__stats`},de={class:`checks-page__stat`},fe={class:`checks-page__stat`},pe={class:`checks-page__stat`},me={class:`checks-page__stat`},he={class:`admin-tabs`},ge={key:0,class:`admin-empty-placeholder admin-card`},_e={key:1,class:`checks-page__list admin-card`},ve=[`onClick`],ye={class:`check-row__chevron`,"aria-hidden":`true`},be=[`onClick`],T=[`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`},P={class:`checks-page__history-meta`},Pe={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=te(f({__name:`CheckManagementView`,setup(te){let f=n(),F=r(),I=oe(),L=S(`info`),R=S(null),z=S([]),B=S(null),V=S(null),H=S(null),U=s(()=>R.value?ae(R.value):null),ze=s(()=>z.value.reduce((e,t)=>e+t.amount,0)),W=s(()=>z.value.filter(e=>e.status===`pending_review`)),Be=s(()=>z.value.length>0&&z.value.every(e=>e.status===`approved`)),G=s(()=>!Be.value||!R.value?!1:(R.value.rawStatus??R.value.status)===`checks_approved`),K=S(!1),q=s(()=>{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=s(()=>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(f.params.id);try{let[t,n]=await Promise.all([b.get(e),m.listByOrder(e)]);R.value=t,z.value=n,n.length===1&&(V.value=n[0].id)}catch(e){I.error(e instanceof o?e.message:`بارگذاری چک‌ها انجام نشد.`)}}ie(()=>{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){return re(e)}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 m.updateStatus(e.id,{status:t}),r=z.value.findIndex(t=>t.id===e.id);return r!==-1&&(z.value[r]=n),R.value=await b.get(String(f.params.id)),!0}catch(e){return I.error(e instanceof o?e.message:`به‌روزرسانی وضعیت چک انجام نشد.`),!1}finally{B.value=null}}async function $(e,t){if(t!==`approved`&&t!==`rejected`)return;let n=h(e.amount);await a(t===`approved`?{title:`تأیید چک`,message:`آیا از تأیید چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید چک`,cancelLabel:`انصراف`}:{title:`رد چک`,message:`آیا از رد چک ردیف ${e.row} به مبلغ ${n} مطمئن هستید؟`,tone:`danger`,confirmLabel:`رد چک`,cancelLabel:`انصراف`})&&await Q(e,t)&&I.success(t===`approved`?`چک تأیید شد.`:`چک رد شد.`)}async function Ke(){let e=W.value;if(!e.length){I.error(`چکی برای تأیید وجود ندارد.`);return}if(await a({title:`تأیید همه چک‌ها`,message:`آیا از تأیید ${e.length} چک در انتظار بررسی مطمئن هستید؟`,tone:`primary`,confirmLabel:`تأیید همه`,cancelLabel:`انصراف`})){for(let t of e)if(!await Q(t,`approved`))return;I.success(`همه چک‌های در انتظار تأیید شدند.`)}}async function qe(){if(!(!R.value||K.value)&&await a({title:`تأیید نهایی سفارش`,message:`با تأیید نهایی، سفارش از مرحله بررسی چک خارج می‌شود و وارد آماده‌سازی می‌گردد. ادامه می‌دهید؟`,tone:`primary`,confirmLabel:`تأیید نهایی`,cancelLabel:`انصراف`})){K.value=!0;try{let e=await b.updateStatus(R.value.id,{status:`final_approved`,note:`تأیید نهایی پس از تأیید همه چک‌ها`});R.value=e,I.success(`سفارش تأیید نهایی شد.`)}catch(e){I.error(e instanceof o?e.message:`تأیید نهایی انجام نشد.`)}finally{K.value=!1}}}return(n,r)=>(p(),d(`div`,se,[c(`div`,ce,[r[5]||=c(`div`,null,[c(`h1`,{class:`admin-page-header__title`},`مدیریت چک‌های سفارش`)],-1),U.value?(p(),d(`div`,le,[y(w,{status:U.value.status},null,8,[`status`])])):e(``,!0)]),c(`div`,ue,[c(`div`,de,[r[6]||=c(`span`,null,`تعداد`,-1),c(`strong`,null,t(z.value.length),1)]),c(`div`,fe,[r[7]||=c(`span`,null,`راس`,-1),c(`strong`,null,t(R.value?.checkRassDays??`—`)+` روز`,1)]),c(`div`,pe,[r[8]||=c(`span`,null,`مجموع چک`,-1),c(`strong`,null,t(l(h)(ze.value)),1)]),c(`div`,me,[r[9]||=c(`span`,null,`مبلغ سفارش`,-1),c(`strong`,null,t(U.value?.totalAmount?l(h)(U.value.totalAmount):`—`),1)])]),c(`div`,he,[c(`button`,{type:`button`,class:x([`admin-tab`,{active:L.value===`info`}]),onClick:r[0]||=e=>L.value=`info`},` چک‌ها (`+t(z.value.length)+`) `,3),c(`button`,{type:`button`,class:x([`admin-tab`,{active:L.value===`history`}]),onClick:r[1]||=e=>L.value=`history`},` تاریخچه `,2)]),L.value===`info`?(p(),d(i,{key:0},[z.value.length?(p(),d(`div`,_e,[(p(!0),d(i,null,u(z.value,n=>(p(),d(`div`,{key:n.id,class:x([`check-row`,{open:V.value===n.id}])},[c(`button`,{type:`button`,class:`check-row__main`,onClick:e=>Ge(n)},[c(`span`,ye,t(V.value===n.id?`▾`:`◂`),1),n.frontImage||n.backImage?(p(),d(`span`,{key:0,class:`check-row__thumb`,onClick:_(e=>H.value=n.frontImage||n.backImage,[`stop`])},[c(`img`,{src:n.frontImage||n.backImage,alt:``},null,8,T)],8,be)):(p(),d(`span`,E,`بدون عکس`)),c(`span`,D,[c(`strong`,null,`چک `+t(n.row),1),c(`small`,null,[g(t(l(h)(n.amount))+` `,1),n.bankName?(p(),d(i,{key:0},[g(` · `+t(n.bankName),1)],64)):e(``,!0),g(` · `+t(l(v)(n.dueDate)),1)])]),y(w,{status:Y(n.status)},null,8,[`status`])],8,ve),c(`div`,{class:`check-row__actions`,onClick:r[2]||=_(()=>{},[`stop`])},[n.status===`pending_review`?(p(),d(i,{key:0},[c(`button`,{type:`button`,class:`admin-btn admin-btn--outline-success admin-btn--xs`,disabled:B.value===n.id,onClick:e=>$(n,`approved`)},` تأیید `,8,O),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,disabled:B.value===n.id,onClick:e=>$(n,`rejected`)},` رد `,8,k)],64)):e(``,!0)]),V.value===n.id?(p(),d(`div`,A,[Z(n).length?(p(),d(`div`,j,[(p(!0),d(i,null,u(Z(n),e=>(p(),d(`div`,{key:e.label,class:`check-row__field`},[c(`span`,null,t(e.label),1),c(`strong`,{dir:e.ltr?`ltr`:void 0},t(e.value),9,M)]))),128))])):(p(),d(`p`,N,`جزئیات متنی بیشتری ثبت نشده است.`)),c(`div`,xe,[n.frontImage?(p(),d(`button`,{key:0,type:`button`,class:`check-row__photo`,onClick:e=>H.value=n.frontImage},[c(`img`,{src:n.frontImage,alt:`روی چک`},null,8,Ce),r[10]||=c(`span`,null,`روی`,-1)],8,Se)):e(``,!0),n.backImage?(p(),d(`button`,{key:1,type:`button`,class:`check-row__photo`,onClick:e=>H.value=n.backImage},[c(`img`,{src:n.backImage,alt:`پشت چک`},null,8,Te),r[11]||=c(`span`,null,`پشت`,-1)],8,we)):e(``,!0),!n.frontImage&&!n.backImage?(p(),d(`p`,Ee,` تصویری ثبت نشده. `)):e(``,!0)])])):e(``,!0)],2))),128))])):(p(),d(`div`,ge,` چکی برای این سفارش ثبت نشده است. `)),c(`div`,De,[c(`p`,Oe,[G.value?(p(),d(i,{key:0},[g(` همه چک‌ها تأیید شده‌اند. برای ادامه، تأیید نهایی سفارش را ثبت کنید. `)],64)):R.value?.checkRassDate?(p(),d(i,{key:1},[g(` راس: `+t(l(v)(R.value.checkRassDate)),1)],64)):(p(),d(i,{key:2},[g(`راس بر اساس تاریخ ثبت سفارش محاسبه می‌شود.`)],64))]),c(`div`,ke,[G.value?(p(),d(`button`,{key:0,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,disabled:K.value,onClick:qe},t(K.value?`در حال ثبت…`:`تأیید نهایی سفارش`),9,Ae)):e(``,!0),W.value.length?(p(),d(`button`,{key:1,type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,onClick:Ke},` تأیید همه چک‌ها `)):e(``,!0),c(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:He},` بازگشت `)])])],64)):(p(),d(i,{key:1},[!q.value.length&&!J.value.length?(p(),d(`div`,je,` هنوز تاریخچه‌ای ثبت نشده است. `)):(p(),d(`div`,Me,[(p(!0),d(i,null,u(q.value,n=>(p(),d(`article`,{key:n.id,class:`admin-card checks-page__history-item`},[c(`div`,Ne,[c(`strong`,null,t(n.fromStatus?l(C)(n.fromStatus):`—`)+` → `+t(l(C)(n.toStatus)),1),c(`span`,null,t(X(n.changedAt)),1)]),c(`p`,P,`توسط `+t(Ue(n.changedBy)),1),n.note?(p(),d(`p`,Pe,t(n.note),1)):e(``,!0),n.reason?(p(),d(`p`,Fe,`دلیل: `+t(n.reason),1)):e(``,!0)]))),128)),(p(!0),d(i,null,u(J.value,e=>(p(),d(`article`,{key:`note-${e.id}`,class:`admin-card checks-page__history-item`},[c(`div`,Ie,[c(`strong`,null,`یادداشت چک `+t(e.row),1),c(`span`,null,t(X(e.updatedAt)),1)]),y(w,{status:Y(e.status)},null,8,[`status`]),c(`p`,Le,t(e.notes),1)]))),128))]))],64)),(p(),ee(ne,{to:`body`},[H.value?(p(),d(`div`,{key:0,class:`checks-page__lightbox`,onClick:r[4]||=_(e=>H.value=null,[`self`])},[c(`button`,{type:`button`,class:`checks-page__lightbox-close`,onClick:r[3]||=e=>H.value=null},` بستن `),c(`img`,{src:H.value,alt:`پیش‌نمایش`},null,8,Re)])):e(``,!0)]))]))}}),[[`__scopeId`,`data-v-af5e25db`]]);export{F as default};