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
13 KiB
JavaScript
1 line
13 KiB
JavaScript
import{$ as e,Ct as t,F as n,G as r,I as i,J as a,L as o,N as s,P as c,Q as ee,R as te,S as ne,V as re,X as l,Z as u,bt as d,dt as f,et as p,gt as m,ht as h,it as g,lt as _,mt as ie,n as v,nt as y,o as b,q as ae,rt as x,st as oe,vt as se,x as S,y as ce,yt as C,z as le}from"./index-B2VD3zy8.js";import{t as ue}from"./AdminPageSkeleton-BJpm6oxf.js";import{t as de}from"./AdminSelect-BeLNl2Qz.js";import{r as fe}from"./orderStatus-CYVblRJB.js";import{t as pe}from"./StatusBadge-D3ThrLrU.js";import{t as w}from"./AdminCurrencyInput-DxQX_Gwe.js";var me={class:`pricing-page`},he={class:`admin-page-header`},ge={class:`admin-action-group`},_e=[`disabled`],ve=[`disabled`],ye={class:`pricing-page__summary admin-card`},be={class:`pricing-page__order-meta`},xe={class:`pricing-page__order-id`},Se={class:`pricing-page__customer`},Ce={class:`admin-summary-grid`},we={class:`admin-summary-item`},Te={class:`admin-summary-item__value`},Ee={class:`admin-summary-item`},De={class:`admin-summary-item__value`},T={class:`admin-summary-item`},E={class:`admin-summary-item__value`},Oe={class:`pricing-page__table admin-card desktop-only`},ke={class:`admin-table-wrap`},Ae={class:`admin-table`},je=[`onUpdate:modelValue`],Me=[`onClick`],Ne={class:`compact-only admin-card-list pricing-page__compact-items`},Pe={class:`admin-card-item__header`},Fe={class:`admin-card-item__title`},Ie={class:`pricing-page__item-index`},Le={class:`admin-card-item__meta`},Re={key:0},ze={class:`pricing-page__compact-fields`},Be=[`onUpdate:modelValue`],Ve={key:0,class:`pricing-page__line-total`},He={class:`admin-card-item__actions`},Ue=[`onClick`],We={class:`admin-form-grid`},Ge={class:`admin-form-field`},Ke={class:`admin-form-field`},qe={class:`admin-footer-actions`},Je=[`disabled`],D=[`disabled`],Ye={class:`pricing-page__invoice-hint`},Xe={key:0,class:`admin-form__error`,role:`alert`},Ze={class:`admin-form__field`},Qe={class:`admin-form__row`},$e={class:`admin-form__field`},et={class:`admin-form__field`},tt=[`disabled`],O=re(g({__name:`OrderPricingView`,setup(re){let g=n(),O=i(),k=le(),A=C(null),j=C([]),M=C(0),N=C(``),P=C(!1),F=C(``),I=C(!1),L=C(!1),R=C(!0),z=C([]),B=C([]),V=()=>({productId:``,requestedMeterage:50,confirmedMeterage:50}),H=se(V()),nt=l(()=>z.value.filter(e=>e.isActive!==!1).map(e=>({value:e.id,label:`${e.name} — ${e.catalogCode} (${e.companyName})`}))),U=l(()=>H.productId.length>0&&H.requestedMeterage>0),W=l(()=>A.value?ce(A.value):null),G=l(()=>A.value?!fe.includes(A.value.status):!1),K=l(()=>!!A.value?.finalAmount&&!G.value);async function rt(){R.value=!0;try{let e=await S.get(String(g.params.id));A.value=e,j.value=(e.items??[]).map(q),M.value=e.shippingCost??0,B.value=[],z.value=await ne.list({activeOnly:!0})}catch(e){k.error(e instanceof s?e.message:`بارگذاری سفارش انجام نشد.`)}finally{R.value=!1}}oe(()=>{rt()});function q(e){return{id:e.id,productId:e.productId,catalogCode:e.catalogCode,productName:e.productName,color:e.color,requestedMeterage:e.requestedMeterage,confirmedMeterage:e.confirmedMeterage,supplyPrice:e.supplyPrice,totalAmount:e.totalAmount,companyId:e.companyId,companyName:e.companyName}}function it(){O.push(`/orders`)}async function J(e){let t=j.value.find(t=>t.id===e);await o({title:`حذف محصول`,message:t?`آیا از حذف «${t.productName}» از سفارش مطمئن هستید؟`:`آیا از حذف این محصول از سفارش مطمئن هستید؟`,confirmLabel:`حذف`,cancelLabel:`انصراف`,tone:`danger`})&&(e.startsWith(`new-`)||B.value.push(e),j.value=j.value.filter(t=>t.id!==e))}ie(()=>H.productId,e=>{let t=z.value.find(t=>t.id===e);if(!t)return;let n=t.rollMeters||t.minMeterage||t.orderStep||50;H.requestedMeterage=n,H.confirmedMeterage=n});function Y(){Object.assign(H,V()),F.value=``,P.value=!0}function X(){P.value=!1,F.value=``}function Z(){if(!U.value){F.value=`محصول و متراژ الزامی هستند.`;return}let e=z.value.find(e=>e.id===H.productId);if(!e){F.value=`محصول انتخابشده یافت نشد.`;return}if(j.value.some(t=>t.productId===e.id||t.catalogCode===e.catalogCode&&t.productName===e.name)){F.value=`این محصول در سفارش هست.`;return}j.value.push({id:`new-${crypto.randomUUID().slice(0,8)}`,productId:e.id,catalogCode:e.catalogCode,productName:e.name,color:e.color||`—`,requestedMeterage:H.requestedMeterage,confirmedMeterage:H.confirmedMeterage||H.requestedMeterage,supplyPrice:e.price,totalAmount:null,companyId:A.value?.companyId,companyName:e.companyName||A.value?.companyName}),X()}async function Q(){if(A.value){if(!j.value.length){k.error(`سفارش باید حداقل یک قلم داشته باشد.`);return}I.value=!0;try{let e=await S.updatePricing(A.value.id,{items:j.value.map(e=>e.id.startsWith(`new-`)?{productId:e.productId,requestedMeterage:e.requestedMeterage,confirmedMeterage:e.confirmedMeterage??void 0,supplyPrice:e.supplyPrice??void 0}:{id:e.id,confirmedMeterage:e.confirmedMeterage??void 0,supplyPrice:e.supplyPrice??void 0}),deletedItemIds:B.value,shippingCost:M.value,note:N.value.trim()||void 0});A.value=e,j.value=(e.items??[]).map(q),B.value=[],k.success(`قیمتگذاری ذخیره شد.`)}catch(e){k.error(e instanceof s?e.message:`ذخیره قیمتگذاری انجام نشد.`)}finally{I.value=!1}}}async function $(){if(A.value){if(!A.value.finalAmount){k.error(`ابتدا قیمتگذاری را ذخیره کنید تا مبلغ فاکتور مشخص شود.`);return}if(await o({title:`ارسال فاکتور برای مشتری`,message:`فاکتور ${v(A.value.finalAmount)} برای مشتری ارسال میشود و او روش تسویه را انتخاب میکند. ادامه میدهید؟`,confirmLabel:`ارسال فاکتور`,cancelLabel:`انصراف`})){L.value=!0;try{let e=await S.updateStatus(A.value.id,{status:`awaiting_settlement`,note:N.value.trim()||void 0});A.value=e,k.success(`فاکتور برای مشتری ارسال شد.`)}catch(e){k.error(e instanceof s?e.message:`ارسال فاکتور انجام نشد.`)}finally{L.value=!1}}}}return(n,i)=>(_(),p(`div`,me,[u(`div`,he,[i[5]||=u(`div`,null,[u(`h1`,{class:`admin-page-header__title`},`قیمتگذاری سفارش`)],-1),u(`div`,ge,[u(`button`,{type:`button`,class:`admin-btn admin-btn--success admin-btn--sm`,disabled:I.value||R.value,onClick:Q},t(I.value?`در حال ذخیره…`:`ذخیره قیمتگذاری`),9,_e),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary admin-btn--sm`,disabled:!K.value||L.value||I.value,onClick:$},t(L.value?`در حال ارسال…`:`ارسال فاکتور برای مشتری`),9,ve),u(`button`,{type:`button`,class:`admin-btn admin-btn--outline admin-btn--sm`,onClick:it},` بازگشت `)])]),R.value?(_(),ee(ue,{key:0,variant:`detail`})):W.value?(_(),p(a,{key:1},[u(`div`,ye,[u(`div`,be,[u(`div`,null,[u(`strong`,xe,t(W.value.orderNumber),1),u(`p`,Se,t(W.value.customerName),1),x(pe,{status:W.value.status},null,8,[`status`])])]),u(`div`,Ce,[u(`div`,we,[i[6]||=u(`p`,{class:`admin-summary-item__label`},`مجموع مبلغ`,-1),u(`p`,Te,t(W.value.totalAmount?d(v)(W.value.totalAmount):`—`),1)]),u(`div`,Ee,[i[7]||=u(`p`,{class:`admin-summary-item__label`},`هزینه حمل`,-1),u(`p`,De,t(d(v)(M.value)),1)]),u(`div`,T,[i[8]||=u(`p`,{class:`admin-summary-item__label`},`مبلغ نهایی`,-1),u(`p`,E,t(A.value?.finalAmount?d(v)(A.value.finalAmount):`—`),1)])])]),u(`div`,Oe,[u(`div`,ke,[u(`table`,Ae,[i[9]||=u(`thead`,null,[u(`tr`,null,[u(`th`,null,`ردیف`),u(`th`,null,`شرکت`),u(`th`,null,`کالیته`),u(`th`,null,`محصول`),u(`th`,null,`رنگ / نوع`),u(`th`,null,`متراژ درخواستی`),u(`th`,null,`متراژ تأیید شده`),u(`th`,null,`قیمت تأمینی (واحد)`),u(`th`,null,`مبلغ کل (تومان)`),u(`th`,null,`عملیات`)])],-1),u(`tbody`,null,[(_(!0),p(a,null,f(j.value,(e,n)=>(_(),p(`tr`,{key:e.id},[u(`td`,null,t(n+1),1),u(`td`,null,t(e.companyName||A.value?.companyName||`—`),1),u(`td`,null,t(e.catalogCode),1),u(`td`,null,t(e.productName),1),u(`td`,null,t(e.color),1),u(`td`,null,t(d(b)(e.requestedMeterage)),1),u(`td`,null,[m(u(`input`,{"onUpdate:modelValue":t=>e.confirmedMeterage=t,type:`number`,class:`admin-input admin-input--sm`},null,8,je),[[r,e.confirmedMeterage,void 0,{number:!0}]])]),u(`td`,null,[x(w,{modelValue:e.supplyPrice,"onUpdate:modelValue":t=>e.supplyPrice=t,"input-class":`admin-input admin-input--sm`,placeholder:`—`},null,8,[`modelValue`,`onUpdate:modelValue`])]),u(`td`,null,t(e.totalAmount?d(v)(e.totalAmount):`—`),1),u(`td`,null,[u(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,onClick:t=>J(e.id)},` حذف `,8,Me)])]))),128))])])]),u(`button`,{type:`button`,class:`admin-btn admin-btn--ghost pricing-page__add-btn`,onClick:Y},[x(c,{name:`products`,size:16}),i[10]||=y(` افزودن محصول `,-1)])]),u(`div`,Ne,[(_(!0),p(a,null,f(j.value,(n,a)=>(_(),p(`article`,{key:n.id,class:`admin-card-item`},[u(`div`,Pe,[u(`p`,Fe,t(n.productName),1),u(`span`,Ie,`#`+t(a+1),1)]),u(`div`,Le,[n.companyName||A.value?.companyName?(_(),p(`span`,Re,t(n.companyName||A.value?.companyName),1)):e(``,!0),u(`span`,null,`کالیته `+t(n.catalogCode),1),u(`span`,null,t(n.color),1),u(`span`,null,`درخواست: `+t(d(b)(n.requestedMeterage))+` متر`,1)]),u(`div`,ze,[u(`label`,null,[i[11]||=y(` متراژ تأیید شده `,-1),m(u(`input`,{"onUpdate:modelValue":e=>n.confirmedMeterage=e,type:`number`,class:`admin-input`},null,8,Be),[[r,n.confirmedMeterage,void 0,{number:!0}]])]),u(`label`,null,[i[12]||=y(` قیمت تأمینی `,-1),x(w,{modelValue:n.supplyPrice,"onUpdate:modelValue":e=>n.supplyPrice=e,placeholder:`—`},null,8,[`modelValue`,`onUpdate:modelValue`])]),n.totalAmount?(_(),p(`p`,Ve,` مبلغ کل: `+t(d(v)(n.totalAmount)),1)):e(``,!0)]),u(`div`,He,[u(`button`,{type:`button`,class:`admin-btn admin-btn--outline-danger admin-btn--xs`,onClick:e=>J(n.id)},` حذف `,8,Ue)])]))),128)),u(`button`,{type:`button`,class:`admin-btn admin-btn--ghost`,onClick:Y},[x(c,{name:`products`,size:16}),i[13]||=y(` افزودن محصول `,-1)])]),u(`div`,We,[u(`div`,Ge,[i[14]||=u(`label`,null,`هزینه حمل (تومان)`,-1),x(w,{modelValue:M.value,"onUpdate:modelValue":i[0]||=e=>M.value=e,"allow-empty":!1},null,8,[`modelValue`])]),u(`div`,Ke,[i[15]||=u(`label`,null,`توضیحات برای مشتری`,-1),m(u(`textarea`,{"onUpdate:modelValue":i[1]||=e=>N.value=e,placeholder:`توضیحات خود را وارد کنید...`},null,512),[[r,N.value]])])]),u(`div`,qe,[u(`button`,{type:`button`,class:`admin-btn admin-btn--success`,disabled:I.value,onClick:Q},t(I.value?`در حال ذخیره…`:`ذخیره قیمتگذاری`),9,Je),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!K.value||L.value||I.value,onClick:$},t(L.value?`در حال ارسال…`:`ارسال فاکتور برای مشتری`),9,D)]),u(`p`,Ye,[G.value?(_(),p(a,{key:0},[y(` فاکتور این سفارش برای مشتری ارسال شده است؛ انتخاب روش تسویه در اختیار اوست. `)],64)):K.value?(_(),p(a,{key:1},[y(` مبلغ نهایی آماده است. با ارسال فاکتور، مشتری برای انتخاب نقدی یا چک مطلع میشود. `)],64)):(_(),p(a,{key:2},[y(` ابتدا قیمت واحد اقلام و هزینه حمل را ذخیره کنید تا مبلغ نهایی فاکتور ساخته شود. `)],64))])],64)):e(``,!0),x(te,{open:P.value,title:`افزودن محصول`,size:`lg`,onClose:X},{footer:h(()=>[u(`button`,{type:`button`,class:`admin-btn admin-btn--outline`,onClick:X},` انصراف `),u(`button`,{type:`button`,class:`admin-btn admin-btn--primary`,disabled:!U.value,onClick:Z},` افزودن به سفارش `,8,tt)]),default:h(()=>[u(`form`,{class:`admin-form`,onSubmit:ae(Z,[`prevent`])},[F.value?(_(),p(`p`,Xe,t(F.value),1)):e(``,!0),u(`div`,Ze,[i[16]||=u(`label`,null,[y(`محصول `),u(`span`,{class:`admin-form__required`},`*`)],-1),x(de,{modelValue:H.productId,"onUpdate:modelValue":i[2]||=e=>H.productId=e,block:``,searchable:``,"aria-label":`انتخاب محصول`,placeholder:`جستجو و انتخاب محصول`,"search-placeholder":`نام، کد یا کالیته…`,options:nt.value},null,8,[`modelValue`,`options`])]),u(`div`,Qe,[u(`div`,$e,[i[17]||=u(`label`,{for:`requested-meterage`},[y(` متراژ درخواستی `),u(`span`,{class:`admin-form__required`},`*`)],-1),m(u(`input`,{id:`requested-meterage`,"onUpdate:modelValue":i[3]||=e=>H.requestedMeterage=e,type:`number`,min:`1`,class:`admin-input`},null,512),[[r,H.requestedMeterage,void 0,{number:!0}]])]),u(`div`,et,[i[18]||=u(`label`,{for:`confirmed-meterage`},`متراژ تأیید شده`,-1),m(u(`input`,{id:`confirmed-meterage`,"onUpdate:modelValue":i[4]||=e=>H.confirmedMeterage=e,type:`number`,min:`0`,class:`admin-input`},null,512),[[r,H.confirmedMeterage,void 0,{number:!0}]])])])],32)]),_:1},8,[`open`])]))}}),[[`__scopeId`,`data-v-ba142b4c`]]);export{O as default}; |