Files
tehran_tala/apps/admin-panel/dist/assets/wage-xLt-TJEB.js
T
s.esmaeiliandClaude Opus 5.5 1bc3739e78 Merge release/delivery (IAM single sign-on) into the triage work
Brings the four release/delivery commits (IAM SSO for the admin panel,
both apps and the API; IAM env in docker-compose) onto fix/issues-triage.

Conflicts:
- customer-auth.service.ts imports: both kept.
- both apps' api/client.ts: both kept (AccountingBalance/WageQuote, and
  iamAppUrl).
- all build output (admin-panel, user-app, user-app-v2 dist, and the api
  release bundle): rebuilt from the merged source instead of picking a
  side.

Fixed while verifying:
- The IAM change calls iam.browserBootstrapUrl after every login, but
  the identity-service stand-ins in three test files lacked it. 15 tests
  failed on release/delivery itself.
- SMS relay: SMS_RELAY_PLATFORM was read but never sent, so the gateway
  never got `platform` (documented body: phone, host, text, platform).
  relayConfig() now returns it ("default" → null) and the request carries
  it. sms.service.spec now passes.

All 249 API tests pass; the three front-ends type-check and build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 09:03:53 +03:30

2 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{m as We}from"./index-pLFqZCCf.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}from"./index-CVG99b4v.js";import{_ as Ve}from"./_plugin-vue_export-helper-DlAUqK2U.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":"این صفحه دسترسی «اجرت» می‌خواهد."}))}}}),ft=Ve(mt,[["__scopeId","data-v-cb4f00dc"]]);export{ft as default};