2 lines
16 KiB
JavaScript
2 lines
16 KiB
JavaScript
import{m as We}from"./index-CNoJT7bc.js";import{d as Ae,u as Le,m as Me,v as De,b,c as s,w as o,a as h,l as $,x as K,z as Q,r as c,y as X,o as m,n as l,f as d,t as r,i as k,F as C,e as q,s as G,p as y,_ as Ve}from"./index-Du-kGM0u.js";const Ye={key:0,class:"wage"},Fe={class:"status"},Ee={class:"formula","aria-live":"polite"},He={key:0,class:"formula__op"},Re={key:0,class:"chip chip--zero"},Ie={key:1,class:"formula__limits"},Je={class:"term__head"},Ke={class:"term__label"},Qe={class:"hint"},Xe={key:0,class:"term__body"},Ze={class:"term"},et={class:"term__body"},tt={class:"limits"},at={class:"limit"},lt={class:"limit"},st={class:"limit"},nt={class:"sample"},ot={key:1,class:"cmp"},ut={key:2,class:"hint warn"},it={class:"hist__meta"},rt={class:"hint"},mt=Ae({__name:"wage",setup(dt){const ge=Le(),ye=e=>!!ge.hasPermission(e),O=$(!1),W=$(!1),i=$(null),n=X({version:1,variantCoef:"1",customerCoef:"1",promotionCoef:"1",promotionPick:"max",constant:"0",min:null,max:null,decimals:null}),f=X({rashWeightGrams:10,quantity:1,variantPercent:7,customerPercent:3,promotionPercent:0}),w=$(null),U=$(""),P=$(!1),A=(e,t)=>{var g,p;const v=(p=(g=e==null?void 0:e.response)==null?void 0:g.data)==null?void 0:p.message;return Array.isArray(v)?v.join("، "):v??t},Z=e=>e===null?null:Number(e),j=e=>e==null||Number.isNaN(e)?"0":String(e),ee=X({variant:1,customer:1,promotion:1});function L(e){const t=`${e}Coef`,v=y({get:()=>Number(n[t])!==0,set:p=>{p||(ee[e]=Number(n[t])||1),n[t]=p?String(ee[e]||1):"0"}}),g=y({get:()=>Number(n[t]),set:p=>n[t]=j(p)});return{enabled:v,coef:g}}const ke=[{key:"variant",label:"اجرت مدل",sign:"+",help:"اجرتی که روی هر مدل (واریانت) کالا ثبت شده است.",...L("variant")},{key:"customer",label:"درصد اختصاصی مشتری",sign:"+",help:"درصدی که روی پروندهی هر مشتری ثبت شده (معمولاً ۳).",...L("customer")},{key:"promotion",label:"تخفیف فعال",sign:"−",help:"تخفیفهای فعالِ مربوط به همان کالا، دستهبندی یا برند. سیستم قدیم فقط بیشترین را کم میکرد.",...L("promotion")}],te=y({get:()=>Number(n.constant),set:e=>n.constant=j(e)}),M=y({get:()=>n.min!==null,set:e=>n.min=e?n.min??"0":null}),D=y({get:()=>n.max!==null,set:e=>n.max=e?n.max??"20":null}),V=y({get:()=>n.decimals!==null,set:e=>n.decimals=e?n.decimals??2:null}),ae=y({get:()=>Z(n.min),set:e=>n.min=j(e)}),le=y({get:()=>Z(n.max),set:e=>n.max=j(e)}),se=y({get:()=>n.decimals,set:e=>n.decimals=e??0}),_=e=>String(e).replace(/\d/g,t=>"۰۱۲۳۴۵۶۷۸۹"[Number(t)]).replace(".","٫"),Y=e=>Number(e)===1?"":`${_(e)} × `;function ne(e){const t=[];return Number(e.variantCoef)&&t.push({key:"variant",sign:"+",text:`${Y(e.variantCoef)}اجرت مدل`}),Number(e.customerCoef)&&t.push({key:"customer",sign:"+",text:`${Y(e.customerCoef)}درصد مشتری`}),Number(e.promotionCoef)&&t.push({key:"promotion",sign:"−",text:`${Y(e.promotionCoef)}${e.promotionPick==="max"?"بیشترین تخفیف":"جمع تخفیفها"}`}),Number(e.constant)&&t.push({key:"constant",sign:Number(e.constant)<0?"−":"+",text:`${_(Math.abs(Number(e.constant)))}٪`}),t}const oe=y(()=>ne(n));function ue(e){const t=[];return e.min!==null&&t.push(`حداقل ${_(e.min)}٪`),e.max!==null&&t.push(`حداکثر ${_(e.max)}٪`),e.decimals!==null&&t.push(`گرد تا ${_(e.decimals)} رقم اعشار`),t.join(" · ")}const ie=y(()=>ue(n));function re(e){const v=ne(e).map((p,R)=>`${R>0||p.sign==="−"?` ${p.sign} `:""}${p.text}`).join("")||"۰",g=ue(e);return`اجرت نهایی = ${v}${g?` (${g})`:""}`}const me=e=>`${_(e.rashWeightGrams)} گرم × ${_(e.quantity)}، اجرت مدل ${_(e.variantPercent)}٪، مشتری ${_(e.customerPercent)}٪، تخفیف ${_(e.promotionPercent)}٪`,N=e=>`${_(Number(e))}٪`,T=e=>`${_(Number(e))} گرم`,de=e=>e?_(We(e).format("jYYYY/jM/jD HH:mm")):"",xe=[{key:"v",label:"سهم اجرت مدل",fmt:e=>N(e.variantTerm)},{key:"c",label:"سهم درصد مشتری",fmt:e=>N(e.customerTerm)},{key:"p",label:"سهم تخفیف (کم میشود)",fmt:e=>N(e.promotionTerm)},{key:"k",label:"مقدار ثابت",fmt:e=>N(e.constant)},{key:"b",label:"قبل از محدودیت",fmt:e=>N(e.beforeLimits)},{key:"f",label:"اجرت نهایی",fmt:e=>N(e.finalPercent),strong:!0},{key:"w",label:"اجرت به گرم",fmt:e=>T(e.wageGrams)},{key:"t",label:"وزن کل فاکتور",fmt:e=>T(e.totalGrams),strong:!0}],ce=(e,t)=>["variantCoef","customerCoef","promotionCoef","constant","min","max"].every(v=>(e[v]===null?null:Number(e[v]))===(t[v]===null?null:Number(t[v])))&&e.promotionPick===t.promotionPick&&e.decimals===t.decimals,B=y(()=>!!i.value&&!ce(n,i.value.formula)),we=e=>!!i.value&&ce(e,i.value.legacy),pe=y(()=>B.value&&P.value&&!U.value&&!!w.value);function z(e){Object.assign(n,{...e})}function F(e){Object.assign(f,{rashWeightGrams:Number(e.rashWeightGrams),quantity:Number(e.quantity),variantPercent:Number(e.variantPercent),customerPercent:Number(e.customerPercent),promotionPercent:Number(e.promotionPercent)})}async function Ne(){O.value=!0;try{const{data:e}=await K.get("admin/pricing/wage-formula");i.value=e,z(e.formula),F(e.sample),P.value=!1}catch(e){Q.error(A(e,"خطا در دریافت فرمول اجرت"))}finally{O.value=!1}}let E=0,H=null;async function ve(){const e=++E;try{const{data:t}=await K.post("admin/pricing/wage-formula/preview",{formula:{...n},sample:{...f}});if(e!==E)return;w.value=t,U.value=""}catch(t){if(e!==E)return;U.value=A(t,"محاسبهی نمونه انجام نشد")}}Me([()=>({...n}),()=>({...f})],()=>{P.value=!1,H&&clearTimeout(H),H=setTimeout(ve,250)},{deep:!0});function he(){i.value&&z(i.value.legacy)}function Pe(){i.value&&z(i.value.formula)}function $e(){i.value&&F(i.value.sample)}async function Ce(){W.value=!0;try{const{data:e}=await K.put("admin/pricing/wage-formula",{formula:{...n},sample:{...f}});i.value=e,z(e.formula),F(e.sample),P.value=!1,Q.success("فرمول اجرت ثبت شد و از همین حالا اعمال میشود")}catch(e){Q.error(A(e,"خطا در ثبت فرمول"))}finally{W.value=!1}}return De(async()=>{await Ne(),await ve()}),(e,t)=>{const v=c("a-tag"),g=c("a-card"),p=c("a-button"),R=c("a-switch"),x=c("a-input-number"),fe=c("a-radio-button"),Ue=c("a-radio-group"),Te=c("a-divider"),S=c("a-checkbox"),be=c("a-col"),I=c("a-alert"),Ge=c("a-popconfirm"),je=c("a-row"),J=c("a-descriptions-item"),Be=c("a-descriptions"),ze=c("a-collapse-panel"),Se=c("a-collapse"),qe=c("a-spin"),Oe=c("a-result");return ye("config.wage")?(m(),b("div",Ye,[s(qe,{spinning:O.value},{default:o(()=>[s(g,{class:"mb-4",bordered:!1},{default:o(()=>{var a;return[l("div",Fe,[t[15]||(t[15]=l("div",null,[l("div",{class:"status__title"},"فرمول اجرت سفارشهای اپلیکیشن"),l("div",{class:"hint"}," اجرتی که مشتری در اپ میبیند و اجرتی که روی فاکتور میآید، هر دو با همین فرمول در سرور حساب میشوند. اجرتی که اپراتور در پنل برای یک سفارش دستی وارد میکند، دست نمیخورد. ")],-1)),(a=i.value)!=null&&a.isLegacyDefault?(m(),h(v,{key:0,color:"blue"},{default:o(()=>[...t[14]||(t[14]=[d("فرمول سیستم قدیم (پیشفرض)",-1)])]),_:1})):i.value?(m(),h(v,{key:1,color:"green"},{default:o(()=>{var u;return[d(" تأییدشده در "+r(de(i.value.approvedAt))+" — "+r((u=i.value.approvedBy)==null?void 0:u.name),1)]}),_:1})):k("",!0)])]}),_:1}),s(je,{gutter:[16,16]},{default:o(()=>[s(be,{xs:24,xl:12},{default:o(()=>[s(g,{title:"ساختار فرمول"},{extra:o(()=>[s(p,{size:"small",disabled:we(n),onClick:he},{default:o(()=>[...t[16]||(t[16]=[d("بازگشت به فرمول سیستم قدیم",-1)])]),_:1},8,["disabled"])]),default:o(()=>[l("div",Ee,[t[17]||(t[17]=l("span",{class:"formula__lhs"},"اجرت نهایی =",-1)),(m(!0),b(C,null,q(oe.value,(a,u)=>(m(),b(C,{key:a.key},[u>0||a.sign==="−"?(m(),b("span",He,r(a.sign),1)):k("",!0),l("span",{class:G(["chip",`chip--${a.key}`])},r(a.text),3)],64))),128)),oe.value.length?k("",!0):(m(),b("span",Re,"۰")),ie.value?(m(),b("div",Ie,r(ie.value),1)):k("",!0)]),(m(),b(C,null,q(ke,a=>l("div",{class:"term",key:a.key},[l("div",Je,[s(R,{checked:a.enabled.value,"onUpdate:checked":u=>a.enabled.value=u,size:"small"},null,8,["checked","onUpdate:checked"]),l("span",Ke,r(a.label),1),l("span",{class:G(["chip chip--sm",`chip--${a.key}`])},r(a.sign),3)]),l("div",Qe,r(a.help),1),a.enabled.value?(m(),b("div",Xe,[t[20]||(t[20]=l("span",null,"ضریب",-1)),s(x,{value:a.coef.value,"onUpdate:value":u=>a.coef.value=u,step:.1,min:-10,max:10,class:"num"},null,8,["value","onUpdate:value"]),a.key==="promotion"?(m(),h(Ue,{key:0,value:n.promotionPick,"onUpdate:value":t[0]||(t[0]=u=>n.promotionPick=u),size:"small","button-style":"solid"},{default:o(()=>[s(fe,{value:"max"},{default:o(()=>[...t[18]||(t[18]=[d("بیشترین تخفیف",-1)])]),_:1}),s(fe,{value:"sum"},{default:o(()=>[...t[19]||(t[19]=[d("جمع تخفیفها",-1)])]),_:1})]),_:1},8,["value"])):k("",!0)])):k("",!0)])),64)),l("div",Ze,[t[21]||(t[21]=l("div",{class:"term__head"},[l("span",{class:"term__label"},"مقدار ثابت (درصد)"),l("span",{class:"chip chip--sm chip--constant"},"±")],-1)),t[22]||(t[22]=l("div",{class:"hint"},"به همهی اجرتها اضافه میشود؛ عدد منفی کم میکند. صفر یعنی بیاثر.",-1)),l("div",et,[s(x,{value:te.value,"onUpdate:value":t[1]||(t[1]=a=>te.value=a),step:.1,min:-100,max:100,class:"num","addon-after":"٪"},null,8,["value"])])]),s(Te,{orientation:"right",class:"divider"},{default:o(()=>[...t[23]||(t[23]=[d("محدودیت و گرد کردن",-1)])]),_:1}),l("div",tt,[l("div",at,[s(S,{checked:M.value,"onUpdate:checked":t[2]||(t[2]=a=>M.value=a)},{default:o(()=>[...t[24]||(t[24]=[d("حداقل اجرت",-1)])]),_:1},8,["checked"]),s(x,{value:ae.value,"onUpdate:value":t[3]||(t[3]=a=>ae.value=a),disabled:!M.value,step:.5,class:"num","addon-after":"٪"},null,8,["value","disabled"])]),l("div",lt,[s(S,{checked:D.value,"onUpdate:checked":t[4]||(t[4]=a=>D.value=a)},{default:o(()=>[...t[25]||(t[25]=[d("حداکثر اجرت",-1)])]),_:1},8,["checked"]),s(x,{value:le.value,"onUpdate:value":t[5]||(t[5]=a=>le.value=a),disabled:!D.value,step:.5,class:"num","addon-after":"٪"},null,8,["value","disabled"])]),l("div",st,[s(S,{checked:V.value,"onUpdate:checked":t[6]||(t[6]=a=>V.value=a)},{default:o(()=>[...t[26]||(t[26]=[d("گرد کردن",-1)])]),_:1},8,["checked"]),s(x,{value:se.value,"onUpdate:value":t[7]||(t[7]=a=>se.value=a),disabled:!V.value,min:0,max:4,precision:0,class:"num","addon-after":"رقم اعشار"},null,8,["value","disabled"])])])]),_:1})]),_:1}),s(be,{xs:24,xl:12},{default:o(()=>[s(g,{title:"نمونه — نتیجه را قبل از ثبت ببینید"},{extra:o(()=>[s(p,{size:"small",type:"link",disabled:!i.value,onClick:$e},{default:o(()=>[...t[27]||(t[27]=[d("نمونهی ثبتشده",-1)])]),_:1},8,["disabled"])]),default:o(()=>{var a;return[l("div",nt,[l("label",null,[t[28]||(t[28]=d("وزن خام",-1)),s(x,{value:f.rashWeightGrams,"onUpdate:value":t[8]||(t[8]=u=>f.rashWeightGrams=u),min:0,step:.1,class:"num","addon-after":"گرم"},null,8,["value"])]),l("label",null,[t[29]||(t[29]=d("تعداد",-1)),s(x,{value:f.quantity,"onUpdate:value":t[9]||(t[9]=u=>f.quantity=u),min:1,max:1e3,precision:0,class:"num"},null,8,["value"])]),l("label",null,[t[30]||(t[30]=d("اجرت مدل",-1)),s(x,{value:f.variantPercent,"onUpdate:value":t[10]||(t[10]=u=>f.variantPercent=u),step:.5,class:"num","addon-after":"٪"},null,8,["value"])]),l("label",null,[t[31]||(t[31]=d("درصد مشتری",-1)),s(x,{value:f.customerPercent,"onUpdate:value":t[11]||(t[11]=u=>f.customerPercent=u),step:.5,class:"num","addon-after":"٪"},null,8,["value"])]),l("label",null,[t[32]||(t[32]=d("تخفیف فعال",-1)),s(x,{value:f.promotionPercent,"onUpdate:value":t[12]||(t[12]=u=>f.promotionPercent=u),min:0,max:100,step:.5,class:"num","addon-after":"٪"},null,8,["value"])])]),U.value?(m(),h(I,{key:0,type:"error","show-icon":"",class:"mb-4",message:U.value},null,8,["message"])):k("",!0),w.value?(m(),b("table",ot,[l("thead",null,[l("tr",null,[t[33]||(t[33]=l("th",null,null,-1)),t[34]||(t[34]=l("th",null,"فرمول فعلی",-1)),l("th",{class:G({changed:B.value})},r(B.value?"پیشنویس شما":"پیشنویس (بدون تغییر)"),3)])]),l("tbody",null,[(m(),b(C,null,q(xe,u=>l("tr",{key:u.key,class:G({strong:u.strong})},[l("td",null,r(u.label),1),l("td",null,r(u.fmt(w.value.current)),1),l("td",{class:G({diff:u.fmt(w.value.current)!==u.fmt(w.value.draft)})},r(u.fmt(w.value.draft)),3)],2)),64))])])):k("",!0),(a=w.value)!=null&&a.draft.limitedBy?(m(),b("div",ut," در پیشنویس، "+r(w.value.draft.limitedBy==="min"?"حداقل":"حداکثر")+" اجرت روی نتیجه اثر گذاشت. ",1)):k("",!0)]}),_:1}),s(g,{class:"mt-4",title:"تأیید و ثبت"},{default:o(()=>[B.value?(m(),b(C,{key:1},[s(I,{type:"warning","show-icon":"",class:"mb-4",message:"تا «تأیید و ثبت» نزنید هیچ چیزی عوض نمیشود.",description:"بعد از ثبت، همهی سفارشهای جدید اپ و اجرتی که اپ نشان میدهد با فرمول جدید حساب میشوند. سفارشهای ثبتشدهی قبلی تغییری نمیکنند."}),s(S,{checked:P.value,"onUpdate:checked":t[13]||(t[13]=a=>P.value=a),class:"mb-4"},{default:o(()=>[...t[35]||(t[35]=[d(" نتیجهی نمونه را بررسی کردم و درست است. ",-1)])]),_:1},8,["checked"]),l("div",null,[s(Ge,{title:"فرمول جدید از همین حالا برای سفارشهای اپ اعمال شود؟","ok-text":"بله، ثبت شود","cancel-text":"انصراف",disabled:!pe.value,onConfirm:Ce},{default:o(()=>[s(p,{type:"primary",disabled:!pe.value,loading:W.value},{default:o(()=>[...t[36]||(t[36]=[d("تأیید و ثبت فرمول",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["disabled"]),s(p,{class:"ms",onClick:Pe},{default:o(()=>[...t[37]||(t[37]=[d("لغو تغییرات",-1)])]),_:1})])],64)):(m(),h(I,{key:0,type:"info","show-icon":"",message:"تغییری نسبت به فرمول فعلی ندادهاید.",class:"mb-4"}))]),_:1})]),_:1})]),_:1}),i.value?(m(),h(g,{key:0,class:"mt-4",title:"نمونهی مرجعِ فرمول فعلی"},{default:o(()=>[t[38]||(t[38]=l("div",{class:"hint mb-4"}," این نمونه همراه فرمول فعلی ثبت شده است؛ هر کس فرمول را ببیند میداند با چه عددی بررسی و تأیید شده. ",-1)),s(Be,{size:"small",bordered:"",column:{xs:1,md:3}},{default:o(()=>[s(J,{label:"فرمول"},{default:o(()=>[d(r(re(i.value.formula)),1)]),_:1}),s(J,{label:"نمونه"},{default:o(()=>[d(r(me(i.value.sample)),1)]),_:1}),s(J,{label:"نتیجه"},{default:o(()=>[d(" اجرت "+r(N(i.value.result.finalPercent))+" — "+r(T(i.value.result.wageGrams))+" اجرت، "+r(T(i.value.result.totalGrams))+" وزن کل ",1)]),_:1})]),_:1}),i.value.history.length?(m(),h(Se,{key:0,ghost:"",class:"mt-4"},{default:o(()=>[s(ze,{key:"h",header:`نسخههای قبلی (${i.value.history.length})`},{default:o(()=>[(m(!0),b(C,null,q(i.value.history,(a,u)=>{var _e;return m(),b("div",{key:u,class:"hist"},[l("div",it,r(de(a.approvedAt))+" — "+r((_e=a.approvedBy)==null?void 0:_e.name),1),l("div",null,r(re(a.formula)),1),l("div",rt,r(me(a.sample))+" ← اجرت "+r(N(a.result.finalPercent))+"، وزن کل "+r(T(a.result.totalGrams)),1)])}),128))]),_:1},8,["header"])]),_:1})):k("",!0)]),_:1})):k("",!0)]),_:1},8,["spinning"])])):(m(),h(Oe,{key:1,status:"403",title:"دسترسی ندارید","sub-title":"این صفحه دسترسی «اجرت» میخواهد."}))}}}),vt=Ve(mt,[["__scopeId","data-v-2540dc46"]]);export{vt as default};
|