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>
1 line
29 KiB
JavaScript
1 line
29 KiB
JavaScript
import{$ as e,Ct as t,F as n,G as r,H as i,I as a,J as o,N as s,P as c,Q as l,R as u,S as d,St as f,V as p,X as m,Y as h,Z as g,_t as _,a as v,at as y,bt as b,ct as x,dt as S,et as C,g as w,gt as T,h as E,ht as D,i as O,it as k,k as A,lt as j,mt as M,n as N,nt as P,o as F,ot as I,q as L,rt as R,st as z,tt as B,ut as V,vt as H,x as U,xt as W,y as G,yt as K,z as q}from"./index-B2VD3zy8.js";import{t as J}from"./AdminSelect-BeLNl2Qz.js";import{r as Y}from"./adminLabels-Cz9ccm1Z.js";import{c as X,i as Z,n as Q,o as ee,s as te,t as ne}from"./orderStatus-CYVblRJB.js";import{t as re}from"./StatusBadge-D3ThrLrU.js";function ie(){let e=n(),t=a(),r=q(),i=K([]),o=K([]),c=new Set(Q.map(e=>e.key));function l(){let t=typeof e.query.tab==`string`?e.query.tab:``;return c.has(t)?t:`all`}let u=K([]),d=K(l()),f=K(``),p=K(``),h=K(!1),g=K(!1),_=K(!1),v=K(``),y=K(!1),b=()=>({customerId:``,customerName:``,customerPhone:``,items:[]}),x=H(b()),S=m(()=>x.customerId.length>0&&x.items.length>0),C=m(()=>{let e=[...o.value];return e.sort((e,t)=>Number(t.isActive)-Number(e.isActive)||e.name.localeCompare(t.name,`fa`)),e});function T(e){let t=o.value.find(t=>t.id===e);x.customerId=e,x.customerName=t?.name??``,x.customerPhone=t?.phone??``}async function D(){try{o.value=await w.list()}catch(e){r.error(e instanceof s?e.message:`بارگذاری مشتریان انجام نشد.`)}}let O=m(()=>{let e=u.value;if(d.value!==`all`&&(e=e.filter(e=>e.status===d.value)),p.value.trim()){let t=p.value.trim();e=e.filter(e=>e.orderNumber.includes(t)||e.customerName.includes(t))}return e}),k=m(()=>u.value.find(e=>e.id===f.value)??null);function A(e){let t=e.trim();if(t)return u.value.find(e=>e.id===t||e.orderNumber.toUpperCase()===t.toUpperCase())}async function j(){let n=typeof e.query.order==`string`?e.query.order:``;if(!n||!u.value.length)return;let r=A(n);if(!r){p.value=n;return}let i=typeof e.query.focus==`string`?e.query.focus:``;if(i===`pricing`){await t.replace(`/orders/${r.id}/pricing`);return}if(i===`checks`){await t.replace(`/orders/${r.id}/checks`);return}F(r),p.value=r.orderNumber}async function N(){try{let[e,t,n]=await Promise.all([U.list(),E.list(),w.list()]);u.value=e.map(e=>G(e)),i.value=t,o.value=n,await j()}catch(e){r.error(e instanceof s?e.message:`بارگذاری سفارشها انجام نشد.`)}}z(()=>{N()}),M(()=>[e.query.order,e.query.focus],()=>{j()}),M(()=>e.query.tab,()=>{let e=l();d.value!==e&&(d.value=e)}),M(d,n=>{let r=typeof e.query.tab==`string`?e.query.tab:`all`,i=n===`all`?void 0:n;(r===`all`?void 0:r)!==i&&t.replace({query:{...e.query,tab:i}})});function P(e,t=!1){f.value=e.id,t&&(g.value=!0)}function F(e){f.value=e.id,_.value=!0}function I(){g.value=!1}function L(){_.value=!1}function R(e){return e?e===`check`?`چکی`:`نقدی`:`انتخابنشده`}let B=K(!1);async function V(e){if(B.value)return null;B.value=!0;try{let t=await U.updateStatus(e.orderId,{status:e.status,note:e.note,reason:e.reason,force:e.force}),n=G(t),i=u.value.findIndex(t=>t.id===e.orderId);return i>=0&&(u.value[i]={...u.value[i],...n}),r.success(`وضعیت سفارش به «${X(e.status)}» تغییر کرد.`),n}catch(e){return r.error(e instanceof s?e.message:`تغییر وضعیت انجام نشد.`),null}finally{B.value=!1}}function W(e){t.push(`/orders/${e.id}/pricing`)}function J(e){t.push(`/orders/${e.id}/checks`)}function Y(e){t.push({path:`/cash-payments`,query:{order:e.orderNumber}})}function Z(){Object.assign(x,b()),v.value=``,h.value=!0,D()}function ee(){h.value=!1,v.value=``}function te(e){return x.items.some(t=>t.productId===e.productId)?(v.value=`این محصول قبلاً به سفارش اضافه شده است.`,!1):(x.items.push(e),v.value=``,!0)}function ne(e){x.items=x.items.filter(t=>t.productId!==e)}async function re(){if(!S.value){v.value=`انتخاب مشتری و حداقل یک محصول الزامی است.`;return}y.value=!0;try{let e=await U.create({customerId:x.customerId||void 0,userId:x.customerId||void 0,customerName:x.customerName.trim(),customerPhone:x.customerPhone.trim()||void 0,items:x.items.map(e=>({productId:e.productId,meterage:e.meterage}))}),t=G(e);u.value.unshift(t),f.value=t.id,r.success(`سفارش جدید ثبت شد.`),ee()}catch(e){r.error(e instanceof s?e.message:`ثبت سفارش انجام نشد.`)}finally{y.value=!1}}return{companies:i,customers:o,activeCustomers:C,applyCustomer:T,loadCustomers:D,orderList:u,activeTab:d,selectedOrderId:f,searchQuery:p,showAddModal:h,showDetailPanel:g,showDetailModal:_,formError:v,form:x,addFormItem:te,removeFormItem:ne,isFormValid:S,filteredOrders:O,selectedOrder:k,selectOrder:P,openOrderDetail:F,closeDetailPanel:I,closeDetailModal:L,settlementLabel:R,changeStatus:V,statusSaving:B,goPricing:W,goChecks:J,goCashReceipt:Y,openAddModal:Z,closeAddModal:ee,submitAddOrder:re,saving:y}}var ae=Symbol(`orders-page`);function oe(){let e=ie();return V(ae,e),e}function se(){let e=y(ae);if(!e)throw Error(`Orders page context is missing`);return e}var ce={class:`order-detail__hero`},$={class:`order-detail__hero-text`},le={class:`order-detail__id`},ue={key:0,class:`order-detail__raw-status`},de={class:`order-detail__actions no-print`},fe=[`disabled`],pe={class:`order-detail__panels`},me={class:`order-detail__section`},he={class:`order-detail__info`},ge={class:`order-detail__info-row`},_e={class:`order-detail__info-value`},ve={class:`order-detail__info-row`},ye={class:`order-detail__info-value order-detail__info-value--phone`,dir:`ltr`},be={class:`order-detail__info-row`},xe={class:`order-detail__info-value`},Se={class:`order-detail__info-row`},Ce={class:`order-detail__info-value`},we={class:`order-detail__section`},Te={class:`order-detail__info`},Ee={class:`order-detail__info-row`},De={class:`order-detail__info-value`},Oe={class:`order-detail__info-row`},ke={class:`order-detail__info-value`},Ae={class:`order-detail__info-row`},je={class:`order-detail__info-value`},Me={class:`order-detail__info-row`},Ne={class:`order-detail__info-value`},Pe={key:0,class:`order-detail__section`},Fe={key:0,class:`admin-table-wrap order-detail__table`},Ie={class:`admin-table admin-table--compact`},Le={key:1,class:`order-detail__items`},Re={class:`order-detail__item-head`},ze={class:`order-detail__item-meta`},Be={key:0},Ve={key:1},He={key:2,class:`order-detail__item-total`},Ue={class:`order-detail__section order-detail__status no-print`},We={class:`order-detail__status-head`},Ge={class:`order-detail__manual`},Ke={key:0,class:`order-detail__status-hint`},qe={key:1,class:`order-detail__status-hint`},Je={key:2,class:`order-detail__status-form`},Ye={class:`admin-form__field`},Xe={class:`admin-form__field`},Ze={for:`status-note`},Qe=[`disabled`],$e=p(k({__name:`OrderDetailContent`,props:{order:{},settlementLabel:{},layout:{default:`compact`},statusSaving:{type:Boolean}},emits:[`pricing`,`checks`,`cashReceipt`,`finalApprove`,`status`],setup(n,{emit:a}){let s=n,l=a,u=K(!1),d=K(``),f=K(``),p=Object.keys(Z),h=m(()=>s.order.allowedTransitions??[]),_=m(()=>u.value?p.filter(e=>e!==s.order.rawStatus):[...h.value]),y=m(()=>[{value:``,label:`انتخاب کنید…`},..._.value.map(e=>({value:e,label:X(e)}))]),x=m(()=>u.value),w=m(()=>!!d.value&&(!x.value||f.value.trim().length>0)),E=m(()=>s.layout===`desktop`),D=m(()=>ne[s.order.status]?.label??s.order.status),O=m(()=>{let e=X(s.order.rawStatus);return!e||e===D.value?``:e}),k=m(()=>{let e=s.order.customerType;return e?Y[e]??s.order.customerType??`—`:`—`}),A=m(()=>te(s.order)),P=m(()=>ee(s.order)),I=m(()=>s.order.settlementMethod===`check`&&!A.value),L=m(()=>s.order.settlementMethod===`cash`&&!A.value&&s.order.rawStatus!==`cash_confirmed`),z=m(()=>A.value?`pricing`:P.value?`final`:I.value?`checks`:L.value?`cash`:null);M([()=>s.order.id,u],()=>{d.value=``,f.value=``});function B(){if(!d.value||!w.value)return;let e=f.value.trim()||void 0;l(`status`,{orderId:s.order.id,status:d.value,note:e,reason:u.value?e:void 0,force:u.value||void 0}),d.value=``,f.value=``}return(a,s)=>(j(),C(`div`,{class:W([`order-detail`,`order-detail--${n.layout}`])},[g(`header`,ce,[g(`div`,$,[g(`div`,le,[g(`strong`,null,t(n.order.orderNumber),1),R(re,{status:n.order.status},null,8,[`status`])]),O.value?(j(),C(`p`,ue,t(O.value),1)):e(``,!0)]),g(`div`,de,[A.value?(j(),C(`button`,{key:0,type:`button`,class:W([`admin-btn admin-btn--sm`,z.value===`pricing`?`admin-btn--primary`:`admin-btn--outline`]),onClick:s[0]||=e=>l(`pricing`)},` قیمتگذاری سفارش `,2)):e(``,!0),I.value?(j(),C(`button`,{key:1,type:`button`,class:W([`admin-btn admin-btn--sm`,z.value===`checks`?`admin-btn--primary`:`admin-btn--outline`]),onClick:s[1]||=e=>l(`checks`)},` مدیریت چکها `,2)):e(``,!0),L.value?(j(),C(`button`,{key:2,type:`button`,class:W([`admin-btn admin-btn--sm`,z.value===`cash`?`admin-btn--primary`:`admin-btn--outline`]),onClick:s[2]||=e=>l(`cashReceipt`)},` رسید پرداخت `,2)):e(``,!0),P.value?(j(),C(`button`,{key:3,type:`button`,class:W([`admin-btn admin-btn--sm`,z.value===`final`?`admin-btn--primary`:`admin-btn--outline`]),disabled:n.statusSaving,onClick:s[3]||=e=>l(`finalApprove`)},` تأیید نهایی `,10,fe)):e(``,!0)])]),g(`div`,pe,[g(`section`,me,[s[11]||=g(`h3`,{class:`order-detail__section-title`},`اطلاعات مشتری`,-1),g(`div`,he,[g(`div`,ge,[R(c,{name:`building`,size:16}),s[7]||=g(`span`,{class:`order-detail__info-label`},`مشتری`,-1),g(`span`,_e,t(n.order.customerName),1)]),g(`div`,ve,[R(c,{name:`phone`,size:16}),s[8]||=g(`span`,{class:`order-detail__info-label`},`تلفن`,-1),g(`span`,ye,t(n.order.customerPhone??`—`),1)]),g(`div`,be,[R(c,{name:`id-card`,size:16}),s[9]||=g(`span`,{class:`order-detail__info-label`},`شناسه ملی`,-1),g(`span`,xe,t(n.order.customerNationalId??`—`),1)]),g(`div`,Se,[R(c,{name:`user`,size:16}),s[10]||=g(`span`,{class:`order-detail__info-label`},`نوع مشتری`,-1),g(`span`,Ce,t(k.value),1)])])]),g(`section`,we,[s[16]||=g(`h3`,{class:`order-detail__section-title`},`اطلاعات سفارش`,-1),g(`div`,Te,[g(`div`,Ee,[s[12]||=g(`span`,{class:`order-detail__info-label`},`شرکت`,-1),g(`span`,De,t(n.order.companyName),1)]),g(`div`,Oe,[s[13]||=g(`span`,{class:`order-detail__info-label`},`روش تسویه`,-1),g(`span`,ke,t(n.settlementLabel(n.order.settlementMethod)),1)]),g(`div`,Ae,[s[14]||=g(`span`,{class:`order-detail__info-label`},`متراژ کل`,-1),g(`span`,je,t(b(v)(n.order.meterage)),1)]),g(`div`,Me,[s[15]||=g(`span`,{class:`order-detail__info-label`},`مبلغ کل`,-1),g(`span`,Ne,t(n.order.totalAmount==null?`پس از قیمتگذاری`:b(N)(n.order.totalAmount)),1)])])])]),n.order.items?.length?(j(),C(`section`,Pe,[s[18]||=g(`h3`,{class:`order-detail__section-title`},`محصولات سفارش`,-1),E.value?(j(),C(`div`,Fe,[g(`table`,Ie,[s[17]||=g(`thead`,null,[g(`tr`,null,[g(`th`,null,`شرکت`),g(`th`,null,`کالیته`),g(`th`,null,`محصول`),g(`th`,null,`رنگ`),g(`th`,null,`متراژ`),g(`th`,null,`قیمت`),g(`th`,null,`مبلغ`)])],-1),g(`tbody`,null,[(j(!0),C(o,null,S(n.order.items,e=>(j(),C(`tr`,{key:e.id},[g(`td`,null,t(e.companyName||n.order.companyName),1),g(`td`,null,t(e.catalogCode),1),g(`td`,null,t(e.productName),1),g(`td`,null,t(e.color),1),g(`td`,null,t(b(F)(e.confirmedMeterage??e.requestedMeterage)),1),g(`td`,null,t(e.supplyPrice==null?`—`:b(N)(e.supplyPrice)),1),g(`td`,null,t(e.totalAmount==null?`—`:b(N)(e.totalAmount)),1)]))),128))])])])):(j(),C(`ul`,Le,[(j(!0),C(o,null,S(n.order.items,n=>(j(),C(`li`,{key:n.id,class:`order-detail__item`},[g(`div`,Re,[g(`strong`,null,t(n.productName),1),g(`span`,null,t(n.catalogCode),1)]),g(`div`,ze,[n.companyName?(j(),C(`span`,Be,t(n.companyName),1)):e(``,!0),g(`span`,null,t(n.color),1),g(`span`,null,t(b(v)(n.confirmedMeterage??n.requestedMeterage)),1),n.supplyPrice==null?e(``,!0):(j(),C(`span`,Ve,t(b(N)(n.supplyPrice)),1)),n.totalAmount==null?e(``,!0):(j(),C(`span`,He,t(b(N)(n.totalAmount)),1))])]))),128))]))])):e(``,!0),g(`section`,Ue,[g(`div`,We,[s[20]||=g(`h3`,{class:`order-detail__section-title`},`تغییر وضعیت`,-1),g(`label`,Ge,[T(g(`input`,{"onUpdate:modelValue":s[4]||=e=>u.value=e,type:`checkbox`},null,512),[[i,u.value]]),s[19]||=g(`span`,null,`تغییر دستی`,-1)])]),u.value?(j(),C(`p`,Ke,` این گذر خارج از روال استاندارد است؛ ثبت یادداشت اجباری است. `)):_.value.length?e(``,!0):(j(),C(`p`,qe,` در این وضعیت گذر خودکاری وجود ندارد. برای تغییر، حالت دستی را فعال کنید. `)),_.value.length?(j(),C(`div`,Je,[g(`div`,Ye,[s[21]||=g(`label`,null,`وضعیت بعدی`,-1),R(J,{modelValue:d.value,"onUpdate:modelValue":s[5]||=e=>d.value=e,block:``,"aria-label":`وضعیت بعدی`,placeholder:`انتخاب کنید…`,options:y.value},null,8,[`modelValue`,`options`])]),g(`div`,Xe,[g(`label`,Ze,` یادداشت`+t(x.value?` (اجباری)`:` (اختیاری)`),1),T(g(`input`,{id:`status-note`,"onUpdate:modelValue":s[6]||=e=>f.value=e,type:`text`,class:`admin-input`,placeholder:`دلیل یا توضیح این تغییر`},null,512),[[r,f.value]])]),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,disabled:!w.value||n.statusSaving,onClick:B},t(n.statusSaving?`در حال ثبت…`:`ثبت وضعیت`),9,Qe)])):e(``,!0)])],2))}}),[[`__scopeId`,`data-v-bfe77a62`]]),et={class:`orders-page`},tt={class:`orders-page__list-panel admin-card`},nt={class:`orders-page__list-header`},rt={class:`orders-page__list-actions`},it={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},at={class:`orders-page__search`},ot={class:`admin-tabs`},st=[`onClick`],ct={class:`admin-table-wrap`},lt={class:`admin-table admin-table--compact`},ut=[`onClick`],dt={class:`orders-page__actions-cell`},ft=[`aria-expanded`,`onClick`],pt={type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`},mt=p(k({__name:`DesktopOrdersPage`,setup(n){let i=A(`(min-width: 1280px)`),{activeTab:a,selectedOrderId:s,searchQuery:d,filteredOrders:p,selectedOrder:m,showDetailModal:y,openOrderDetail:w,closeDetailModal:E,settlementLabel:k,goPricing:M,goChecks:F,goCashReceipt:V,changeStatus:H,statusSaving:U,openAddModal:G}=se(),q=K(null),J=K({});function Y(){q.value=null}async function X(e,t){if(t.stopPropagation(),q.value?.id===e.id){Y();return}let n=t.currentTarget.getBoundingClientRect();q.value=e,await I();let r=Math.min(Math.max(8,n.right-168),window.innerWidth-168-8);J.value={position:`fixed`,top:`${n.bottom+4}px`,left:`${r}px`,width:`168px`}}function Z(){Y()}z(()=>{document.addEventListener(`click`,Z),window.addEventListener(`scroll`,Y,!0),window.addEventListener(`resize`,Y)}),x(()=>{document.removeEventListener(`click`,Z),window.removeEventListener(`scroll`,Y,!0),window.removeEventListener(`resize`,Y)});function ne(){m.value&&(E(),M(m.value))}function ie(){m.value&&(E(),F(m.value))}function ae(){m.value&&(E(),V(m.value))}function oe(){m.value&&H({orderId:m.value.id,status:`final_approved`,note:`تأیید نهایی سفارش`})}function ce(){if(!m.value)return;document.documentElement.classList.add(`printing-order-detail`);let e=()=>{document.documentElement.classList.remove(`printing-order-detail`),window.removeEventListener(`afterprint`,e)};window.addEventListener(`afterprint`,e),window.setTimeout(e,6e4),window.print()}function $(e){let t=q.value;if(t){if(Y(),e===`detail`){w(t);return}if(e===`pricing`){M(t);return}if(e===`checks`){F(t);return}if(e===`final`){H({orderId:t.id,status:`final_approved`,note:`تأیید نهایی سفارش`});return}V(t)}}return(n,x)=>(j(),C(`div`,et,[g(`div`,tt,[g(`div`,nt,[x[9]||=g(`div`,null,[g(`h2`,{class:`orders-page__list-title`},`سفارشها`)],-1),g(`div`,rt,[g(`button`,it,[R(c,{name:`filter`,size:16}),x[8]||=P(` فیلتر `,-1)]),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:x[0]||=(...e)=>b(G)&&b(G)(...e)},` سفارش جدید `)])]),g(`div`,at,[R(c,{name:`search`,size:18}),T(g(`input`,{"onUpdate:modelValue":x[1]||=e=>_(d)?d.value=e:null,type:`search`,placeholder:`جستجو در شماره سفارش، مشتری...`,class:`orders-page__search-input`},null,512),[[r,b(d)]])]),g(`div`,ot,[(j(!0),C(o,null,S(b(Q),n=>(j(),C(`button`,{key:n.key,type:`button`,class:W([`admin-tab`,{active:b(a)===n.key}]),onClick:e=>a.value=n.key},[P(t(n.label)+` `,1),`count`in n&&n.count?(j(),C(o,{key:0},[P(` (`+t(n.count)+`)`,1)],64)):e(``,!0)],10,st))),128))]),g(`div`,ct,[g(`table`,lt,[x[10]||=g(`thead`,null,[g(`tr`,null,[g(`th`,null,`شماره سفارش`),g(`th`,null,`مشتری`),g(`th`,null,`روش تسویه`),g(`th`,null,`مبلغ کل`),g(`th`,null,`متراژ`),g(`th`,null,`وضعیت`),g(`th`,null,`تاریخ ثبت`),g(`th`,null,`عملیات`)])],-1),g(`tbody`,null,[(j(!0),C(o,null,S(b(p),e=>(j(),C(`tr`,{key:e.id,class:W({"is-selected":b(s)===e.id}),onClick:t=>b(w)(e)},[g(`td`,null,t(e.orderNumber),1),g(`td`,null,t(e.customerName),1),g(`td`,null,t(b(k)(e.settlementMethod)),1),g(`td`,null,t(e.totalAmount?b(N)(e.totalAmount):`—`),1),g(`td`,null,t(b(v)(e.meterage)),1),g(`td`,null,[R(re,{status:e.status},null,8,[`status`])]),g(`td`,null,t(b(O)(e.createdAt)),1),g(`td`,dt,[g(`button`,{type:`button`,class:`orders-page__more-btn`,"aria-expanded":q.value?.id===e.id,"aria-haspopup":`menu`,"aria-label":`عملیات سفارش`,onClick:t=>X(e,t)},[R(c,{name:`more`,size:18})],8,ft)])],10,ut))),128))])])]),x[11]||=B(`<div class="admin-pagination" data-v-cfed03e1><span data-v-cfed03e1>نمایش ۱ تا ۷ از ۱۰۳ سفارش</span><div class="admin-pagination__pages" data-v-cfed03e1><button type="button" class="admin-pagination__page active" data-v-cfed03e1>۱</button><button type="button" class="admin-pagination__page" data-v-cfed03e1>۲</button><button type="button" class="admin-pagination__page" data-v-cfed03e1>۳</button><span data-v-cfed03e1>...</span><button type="button" class="admin-pagination__page" data-v-cfed03e1>۱۲</button></div></div>`,1)]),(j(),l(h,{to:`body`},[q.value?(j(),C(`div`,{key:0,class:`orders-page__menu`,role:`menu`,style:f(J.value),onClick:x[7]||=L(()=>{},[`stop`])},[g(`button`,{type:`button`,role:`menuitem`,class:`orders-page__menu-item`,onClick:x[2]||=e=>$(`detail`)},` جزئیات سفارش `),q.value&&b(te)(q.value)?(j(),C(`button`,{key:0,type:`button`,role:`menuitem`,class:`orders-page__menu-item`,onClick:x[3]||=e=>$(`pricing`)},` قیمتگذاری `)):e(``,!0),q.value.settlementMethod===`check`?(j(),C(`button`,{key:1,type:`button`,role:`menuitem`,class:`orders-page__menu-item`,onClick:x[4]||=e=>$(`checks`)},` مدیریت چکها `)):e(``,!0),q.value.settlementMethod===`cash`&&q.value.rawStatus!==`cash_confirmed`?(j(),C(`button`,{key:2,type:`button`,role:`menuitem`,class:`orders-page__menu-item`,onClick:x[5]||=e=>$(`cash`)},` رسید پرداخت `)):e(``,!0),b(ee)(q.value)?(j(),C(`button`,{key:3,type:`button`,role:`menuitem`,class:`orders-page__menu-item`,onClick:x[6]||=e=>$(`final`)},` تأیید نهایی `)):e(``,!0)],4)):e(``,!0)])),R(u,{open:b(i)&&b(y)&&!!b(m),title:`جزئیات سفارش`,size:`xl`,onClose:b(E)},{footer:D(()=>[g(`button`,pt,[R(c,{name:`sms`,size:16}),x[12]||=P(` ارسال پیامک `,-1)]),g(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:ce},[R(c,{name:`print`,size:16}),x[13]||=P(` چاپ `,-1)])]),default:D(()=>[b(m)?(j(),l($e,{key:0,order:b(m),layout:`desktop`,"settlement-label":b(k),"status-saving":b(U),onPricing:ne,onChecks:ie,onCashReceipt:ae,onFinalApprove:oe,onStatus:b(H)},null,8,[`order`,`settlement-label`,`status-saving`,`onStatus`])):e(``,!0)]),_:1},8,[`open`,`onClose`])]))}}),[[`__scopeId`,`data-v-cfed03e1`]]),ht={class:`compact-orders`},gt={class:`compact-page-header`},_t={class:`compact-page-header__row`},vt={class:`compact-page-header__actions`},yt={key:0,class:`compact-orders__filter-dot`,"aria-hidden":`true`},bt={class:`orders-page__search admin-card`},xt={key:0,class:`compact-orders__filter-chip admin-card`},St={key:1,class:`admin-tabs compact-orders__tabs`},Ct=[`onClick`],wt={class:`compact-orders__filter-form`,role:`listbox`,"aria-label":`وضعیت سفارش`},Tt=[`aria-selected`,`onClick`],Et={key:0,class:`compact-orders__filter-check`,"aria-hidden":`true`},Dt={class:`admin-card-list`},Ot=[`onClick`],kt={class:`admin-card-item__header`},At={class:`admin-card-item__title`},jt={class:`admin-card-item__meta`},Mt={key:0,class:`admin-detail-panel__inner`},Nt={class:`admin-detail-panel__header`},Pt={class:`admin-detail-panel__body`},Ft=p(k({__name:`CompactOrdersPage`,setup(n){let i=A(`(max-width: 767px)`),a=A(`(max-width: 1279px)`),{activeTab:s,selectedOrderId:d,searchQuery:f,filteredOrders:p,selectedOrder:h,showDetailPanel:y,showDetailModal:x,selectOrder:w,openOrderDetail:E,closeDetailPanel:k,closeDetailModal:M,settlementLabel:F,goPricing:I,goChecks:L,goCashReceipt:z,changeStatus:B,statusSaving:V,openAddModal:H}=se(),U=K(!1),G=m(()=>s.value!==`all`),q=m(()=>Q.find(e=>e.key===s.value)?.label??`همه`);function J(){U.value=!0}function Y(){U.value=!1}function X(){s.value=`all`,U.value=!1}function Z(e){s.value=e,U.value=!1}function ee(e){if(i.value){w(e,!0);return}E(e)}function te(){h.value&&(M(),k(),I(h.value))}function ne(){h.value&&(M(),k(),L(h.value))}function ie(){h.value&&(M(),k(),z(h.value))}function ae(){h.value&&B({orderId:h.value.id,status:`final_approved`,note:`تأیید نهایی سفارش`})}return(n,m)=>(j(),C(`div`,ht,[g(`div`,gt,[g(`div`,_t,[m[4]||=g(`div`,null,[g(`h2`,{class:`compact-page-header__title`},`سفارشها`)],-1),g(`div`,vt,[g(`button`,{type:`button`,class:W([`admin-btn admin-btn--outline admin-btn--sm`,{"admin-btn--filter-active":G.value}]),onClick:J},[R(c,{name:`filter`,size:16}),m[3]||=P(` فیلتر `,-1),G.value?(j(),C(`span`,yt)):e(``,!0)],2),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,onClick:m[0]||=(...e)=>b(H)&&b(H)(...e)},` سفارش جدید `)])])]),g(`div`,bt,[R(c,{name:`search`,size:18}),T(g(`input`,{"onUpdate:modelValue":m[1]||=e=>_(f)?f.value=e:null,type:`search`,placeholder:`جستجو در شماره سفارش، مشتری...`,class:`orders-page__search-input`},null,512),[[r,b(f)]])]),b(i)&&G.value?(j(),C(`div`,xt,[g(`span`,null,`وضعیت: `+t(q.value),1),g(`button`,{type:`button`,class:`compact-orders__filter-clear`,onClick:X},`پاک کردن`)])):e(``,!0),b(i)?e(``,!0):(j(),C(`div`,St,[(j(!0),C(o,null,S(b(Q),n=>(j(),C(`button`,{key:n.key,type:`button`,class:W([`admin-tab`,{active:b(s)===n.key}]),onClick:e=>s.value=n.key},[P(t(n.label)+` `,1),`count`in n&&n.count?(j(),C(o,{key:0},[P(` (`+t(n.count)+`)`,1)],64)):e(``,!0)],10,Ct))),128))])),R(u,{open:U.value,title:`فیلتر سفارشها`,onClose:Y},{footer:D(()=>[g(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:X},` پاک کردن `),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,onClick:Y},` بستن `)]),default:D(()=>[g(`div`,wt,[(j(!0),C(o,null,S(b(Q),n=>(j(),C(`button`,{key:n.key,type:`button`,class:W([`compact-orders__filter-option`,{"is-active":b(s)===n.key}]),role:`option`,"aria-selected":b(s)===n.key,onClick:e=>Z(n.key)},[g(`span`,null,t(n.label),1),b(s)===n.key?(j(),C(`span`,Et,`✓`)):e(``,!0)],10,Tt))),128))])]),_:1},8,[`open`]),g(`div`,Dt,[(j(!0),C(o,null,S(b(p),e=>(j(),C(`button`,{key:e.id,type:`button`,class:W([`admin-card-item`,{selected:b(d)===e.id}]),onClick:t=>ee(e)},[g(`div`,kt,[g(`p`,At,t(e.orderNumber),1),R(re,{status:e.status},null,8,[`status`])]),g(`div`,jt,[g(`span`,null,[m[5]||=g(`strong`,null,`مشتری:`,-1),P(` `+t(e.customerName),1)]),g(`span`,null,[m[6]||=g(`strong`,null,`متراژ:`,-1),P(` `+t(b(v)(e.meterage)),1)]),g(`span`,null,[m[7]||=g(`strong`,null,`مبلغ:`,-1),P(` `+t(e.totalAmount?b(N)(e.totalAmount):`—`),1)]),g(`span`,null,t(b(O)(e.createdAt)),1)])],10,Ot))),128))]),g(`div`,{class:W([`admin-detail-panel compact-orders__mobile-panel`,{open:b(i)&&b(y)&&b(h)}])},[b(h)?(j(),C(`div`,Mt,[g(`div`,Nt,[g(`button`,{type:`button`,class:`admin-detail-panel__back`,"aria-label":`بازگشت به لیست`,onClick:m[2]||=(...e)=>b(k)&&b(k)(...e)},[R(c,{name:`chevron-back`,size:20})]),m[8]||=g(`h2`,{class:`admin-detail-panel__title`},`جزئیات سفارش`,-1)]),g(`div`,Pt,[R($e,{order:b(h),"settlement-label":b(F),"status-saving":b(V),onPricing:te,onChecks:ne,onCashReceipt:ie,onFinalApprove:ae,onStatus:b(B)},null,8,[`order`,`settlement-label`,`status-saving`,`onStatus`])])])):e(``,!0)],2),R(u,{open:b(a)&&!b(i)&&b(x)&&!!b(h),title:`جزئیات سفارش`,size:`xl`,onClose:b(M)},{default:D(()=>[b(h)?(j(),l($e,{key:0,order:b(h),"settlement-label":b(F),"status-saving":b(V),onPricing:te,onChecks:ne,onCashReceipt:ie,onFinalApprove:ae,onStatus:b(B)},null,8,[`order`,`settlement-label`,`status-saving`,`onStatus`])):e(``,!0)]),_:1},8,[`open`,`onClose`])]))}}),[[`__scopeId`,`data-v-fe86c1c8`]]),It={key:0,class:`admin-form__error`,role:`alert`},Lt={class:`admin-form__field`},Rt={key:0,class:`admin-form__hint`},zt={class:`admin-form__row`},Bt={class:`admin-form__field`},Vt={class:`admin-form__field`},Ht={key:1,class:`order-add__items`},Ut=[`onClick`],Wt={key:2,class:`admin-form__hint`},Gt=[`disabled`],Kt=p(k({__name:`OrderAddModal`,setup(n){let{showAddModal:i,formError:a,form:c,isFormValid:f,activeCustomers:p,applyCustomer:h,addFormItem:_,removeFormItem:v,closeAddModal:y,submitAddOrder:x}=se(),w=q(),E=K([]),O=H({productId:``,meterage:0}),k=m(()=>p.value.map(e=>{let t=e.phone?` — ${e.phone}`:``,n=e.isActive===!1?` (غیرفعال)`:``;return{value:e.id,label:`${e.name}${t}${n}`}})),A=m(()=>E.value.filter(e=>e.isActive!==!1).map(e=>({value:e.id,label:`${e.name} — ${e.catalogCode} (${e.companyName})`}))),N=m(()=>E.value.find(e=>e.id===O.productId)??null);M(()=>c.customerId,e=>{if(!e){c.customerName=``,c.customerPhone=``;return}h(e)}),M(i,async e=>{if(e){O.productId=``,O.meterage=0;try{E.value=await d.list({activeOnly:!0})}catch(e){w.error(e instanceof s?e.message:`بارگذاری محصولات انجام نشد.`)}}}),M(()=>O.productId,e=>{let t=E.value.find(t=>t.id===e);t&&(O.meterage=t.rollMeters||t.minMeterage||t.orderStep||50)});function I(){let e=N.value;if(!e){a.value=`محصول را انتخاب کنید.`;return}if(!O.meterage||O.meterage<=0){a.value=`متراژ باید بزرگتر از صفر باشد.`;return}_({productId:e.id,productName:e.name,catalogCode:e.catalogCode,meterage:O.meterage}),O.productId=``,O.meterage=0}return(n,s)=>(j(),l(u,{open:b(i),title:`پیشسفارش جدید`,size:`lg`,onClose:b(y)},{footer:D(()=>[g(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:s[4]||=(...e)=>b(y)&&b(y)(...e)},` انصراف `),g(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!b(f),onClick:s[5]||=(...e)=>b(x)&&b(x)(...e)},` ثبت پیشسفارش `,8,Gt)]),default:D(()=>[g(`form`,{class:`admin-form`,onSubmit:s[3]||=L((...e)=>b(x)&&b(x)(...e),[`prevent`])},[b(a)?(j(),C(`p`,It,t(b(a)),1)):e(``,!0),s[9]||=g(`p`,{class:`admin-form__hint`},` مثل سفارش مشتری: ابتدا اقلام ثبت میشود، قیمتگذاری و تسویه بعداً انجام میشود. `,-1),g(`div`,Lt,[s[6]||=g(`label`,{id:`order-customer-label`},[P(` مشتری `),g(`span`,{class:`admin-form__required`},`*`)],-1),R(J,{id:`order-customer`,modelValue:b(c).customerId,"onUpdate:modelValue":s[0]||=e=>b(c).customerId=e,block:``,searchable:``,"aria-label":`انتخاب مشتری از لیست`,placeholder:`انتخاب مشتری از لیست`,"search-placeholder":`جستجوی نام یا موبایل…`,options:k.value},null,8,[`modelValue`,`options`]),k.value.length?e(``,!0):(j(),C(`p`,Rt,` مشتریای در سیستم نیست. ابتدا از بخش «مشتریان» یک مشتری ثبت کنید. `))]),g(`div`,zt,[g(`div`,Bt,[s[7]||=g(`label`,null,`محصول`,-1),R(J,{modelValue:O.productId,"onUpdate:modelValue":s[1]||=e=>O.productId=e,block:``,searchable:``,"aria-label":`انتخاب محصول`,placeholder:`جستجو و انتخاب محصول`,"search-placeholder":`نام، کد یا کالیته…`,options:A.value},null,8,[`modelValue`,`options`])]),g(`div`,Vt,[s[8]||=g(`label`,{for:`order-item-meterage`},`متراژ (متر)`,-1),T(g(`input`,{id:`order-item-meterage`,"onUpdate:modelValue":s[2]||=e=>O.meterage=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[r,O.meterage,void 0,{number:!0}]])])]),g(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:I},` افزودن به اقلام `),b(c).items.length?(j(),C(`div`,Ht,[(j(!0),C(o,null,S(b(c).items,e=>(j(),C(`div`,{key:e.productId,class:`order-add__item`},[g(`div`,null,[g(`strong`,null,t(e.productName),1),g(`span`,null,`کالیته `+t(e.catalogCode)+` — `+t(b(F)(e.meterage))+` متر`,1)]),g(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,onClick:t=>b(v)(e.productId)},` حذف `,8,Ut)]))),128))])):(j(),C(`p`,Wt,`هنوز محصولی به پیشسفارش اضافه نشده است.`))],32)]),_:1},8,[`open`,`onClose`]))}}),[[`__scopeId`,`data-v-291a46f0`]]),qt=k({__name:`OrdersView`,setup(e){return oe(),(e,t)=>(j(),C(o,null,[R(mt,{class:`desktop-only`}),R(Ft,{class:`compact-only`}),R(Kt)],64))}});export{qt as default}; |