Files
nademitex_admin/dist/assets/OrderPricingView-CvBkBKTY.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
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};