PageSourceSearch

https://mintminer.com/assets/AdminPaymentPlansView-yCWl26-i.js

js mintminer.com collected 2026-10-06 08:10:42 UTC 15,543 bytes, 5 lines download raw bytes

1import{a as Y,g as X,_ as G,a4 as D,j as Z}from"./index-BB-1BiLf.js";import{b as ee,a as T}from"./apiError-BcAuv_LF.js";import{_ as te}from"./AppLayout.vue_vue_type_script_setup_true_lang-DU-NXSvm.js";import{D as ae}from"./DataTable-BszWCXiN.js";import{_ as ne}from"./ConfirmDialog.vue_vue_type_script_setup_true_lang-G7SCzKKv.js";import{_ as K}from"./GroupBadge.vue_vue_type_script_setup_true_lang-YJMvDS0Z.js";import{d as Q,r as x,q as se,c as q,w as le,D as I,u as l,K as g,B as e,z as k,E,Q as C,H as b,G as r,W as P,k as h,A as S,U as re,C as f,o as ie}from"./vendor-vue-Dzwqm9Y9.js";import{f as H,c as oe}from"./currency-DpW1WrYL.js";import{S as W}from"./Select-unWSiPwC.js";import{d as L}from"./platformColors-DkrFx9Dx.js";import{u as J}from"./vendor-i18n-BuoWFzps.js";import"./vendor-misc-B-nM3tYW.js";import"./AppHeader.vue_vue_type_style_index_0_scoped_80f3916c_lang-CWJeTQGo.js";import"./useClipboard-00CrFCqB.js";import"./featureFlags-DuhANbyz.js";import"./LocaleSwitcher-DwqRgoPh.js";/* empty css                                                                       */import"./peak-rate-qZGUWdry.js";import"./PlatformIcon.vue_vue_type_script_setup_true_lang-Day_FQoY.js";const de={class:"grid grid-cols-2 gap-4"},ue={class:"input-label"},me={class:"input-label"},pe={key:1},ce={key:0,class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-dark-600 dark:bg-dark-800"},ye={class:"mb-2 flex items-center gap-2"},fe={class:"grid grid-cols-2 gap-2 text-xs"},_e={class:"text-gray-500"},ge={class:"ml-1 font-medium text-gray-700 dark:text-gray-300"},ve={class:"text-gray-500"},be={class:"ml-1 font-medium text-gray-700 dark:text-gray-300"},xe={class:"text-gray-500"},he={class:"ml-1 font-medium text-gray-700 dark:text-gray-300"},ke={class:"input-label"},we={class:"grid grid-cols-2 gap-4"},$e={class:"input-label"},Ce={key:0,class:"mt-1 text-xs font-medium text-primary-600 dark:text-primary-400"},Pe={key:0},Se={class:"input-label"},Ve={class:"grid grid-cols-2 gap-4"},Ue={class:"input-label"},De={class:"input-label"},Ee={class:"grid grid-cols-2 gap-4"},Ne={class:"input-label"},Ae={class:"input-label"},Me=["placeholder"],qe={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Be={class:"input-label"},je=["placeholder"],Ge={class:"mt-1 text-xs text-gray-500 dark:text-gray-400"},Ie={class:"flex items-center gap-3"},Re={class:"text-sm text-gray-700 dark:text-gray-300"},ze={class:"flex justify-end gap-3"},Fe=["disabled"],Oe=Q({__name:"PlanEditDialog",props:{show:{type:Boolean},plan:{},groups:{},paymentConfig:{}},emits:["close","saved"],setup(B,{emit:d}){const u=B,V=d,{t:n}=J(),w=Y(),U=x(!1),a=se({name:"",group_id:null,description:"",price:0,original_price:0,currency:"",validity_days:30,validity_unit:"days",sort_order:0,for_sale:!0}),_=x(""),R=q(()=>[{value:"days",label:n("payment.admin.days")},{value:"weeks",label:n("payment.admin.weeks")},{value:"months",label:n("payment.admin.months")}]),z=q(()=>u.groups.filter(o=>o.subscription_type==="subscription").map(o=>({value:o.id,label:`${o.name} — ${o.platform} (${o.rate_multiplier}x)`,platform:o.platform}))),c=q(()=>a.group_id&&u.groups.find(o=>o.id===a.group_id)||null);function N(o){return Math.round(o*100)/100}function A(o){return Math.ceil(o*100)/100}const v=q(()=>{var i,m;const o=Number(a.price)||0,t=Number((i=u.paymentConfig)==null?void 0:i.subscription_usd_to_cny_rate)||0;if(o<=0||t<=0)return null;const s=N(o*t),$=Number((m=u.paymentConfig)==null?void 0:m.recharge_fee_rate)||0,F=$>0?A(s*$/100):0,O=$>0?N(s+F):s;return{amount:H(s,"CNY"),feeRate:$,total:H(O,"CNY")}});le(()=>u.show,o=>{o&&(u.plan?(Object.assign(a,{name:u.plan.name,group_id:u.plan.group_id,description:u.plan.description,price:u.plan.price,original_price:u.plan.original_price||0,currency:u.plan.currency||"",validity_days:u.plan.validity_days,validity_unit:u.plan.validity_unit||"days",sort_order:u.plan.sort_order||0,for_sale:u.plan.for_sale}),_.value=(u.plan.features||[]).join(`
2`)):(Object.assign(a,{name:"",group_id:null,description:"",price:0,original_price:0,currency:"",validity_days:30,validity_unit:"days",sort_order:0,for_sale:!0}),_.value=""))});function j(){const o=_.value.split(`
3`).map(t=>
3t.trim()).filter(Boolean).join(`
4`);return{name:a.name,group_id:a.group_id,description:a.description,price:a.price,original_price:a.original_price||0,currency:a.currency.trim().toUpperCase(),validity_days:a.validity_days,validity_unit:a.validity_unit,sort_order:a.sort_order,for_sale:a.for_sale,features:o}}async function M(){if(!a.group_id){w.showError(n("payment.admin.groupRequired"));return}if(!a.price||a.price<=0){w.showError(n("payment.admin.priceRequired"));return}if(!a.validity_days||a.validity_days<1){w.showError(n("payment.admin.validityRequired"));return}U.value=!0;try{const o=j();u.plan?await D.updatePlan(u.plan.id,o):await D.createPlan(o),w.showSuccess(n("common.saved")),V("close"),V("saved")}catch(o){w.showError(ee(o,n("common.error")))}finally{U.value=!1}}return(o,t)=>(f(),I(X,{show:B.show,title:B.plan?l(n)("payment.admin.editPlan"):l(n)("payment.admin.createPlan"),width:"wide",onClose:t[12]||(t[12]=s=>V("close"))},{footer:g(()=>[e("div",ze,[e("button",{type:"button",onClick:t[11]||(t[11]=s=>V("close")),class:"btn btn-secondary"},r(l(n)("common.cancel")),1),e("button",{type:"submit",form:"plan-form",disabled:U.value,class:"btn btn-primary"},r(U.value?l(n)("common.saving"):l(n)("common.save")),9,Fe)])]),default:g(()=>[e("form",{id:"plan-form",onSubmit:re(M,["prevent"]),class:"space-y-4"},[e("div",de,[e("div",null,[e("label",ue,[b(r(l(n)("payment.admin.planName"))+" ",1),t[13]||(t[13]=e("span",{class:"text-red-500"},"*",-1))]),C(e("input",{"onUpdate:modelValue":t[0]||(t[0]=s=>a.name=s),type:"text",class:"input",required:""},null,512),[[P,a.name]])]),e("div",null,[e("label",me,[b(r(l(n)("payment.admin.group"))+" ",1),t[14]||(t[14]=e("span",{class:"text-red-500"},"*",-1))]),h(W,{modelValue:a.group_id,"onUpdate:modelValue":t[1]||(t[1]=s=>a.group_id=s),options:z.value,placeholder:l(n)("payment.admin.selectGroup"),class:"w-full"},{selected:g(({option:s})=>[s!=null&&s.platform?(f(),k("span",{key:0,class:S(l(L)(String(s.platform)))},r(s.label),3)):(f(),k("span",pe,r((s==null?void 0:s.label)||l(n)("payment.admin.selectGroup")),1))]),option:g(({option:s,selected:$})=>[e("span",{class:S(["flex-1 truncate text-left",s.platform?l(L)(String(s.platform)):""])},r(s.label),3),$?(f(),I(G,{key:0,name:"check",size:"sm",class:"text-primary-500","stroke-width":2})):E("",!0)]),_:1},8,["modelValue","options","placeholder"])])]),c.value?(f(),k("div",ce,[e("div",ye,[h(K,{name:c.value.name,platform:c.value.platform,"rate-multiplier":c.value.rate_multiplier},null,8,["name","platform","rate-multiplier"])]),e("div",fe,[e("div",null,[e("span",_e,r(l(n)("payment.admin.dailyLimit"))+":",1),t[15]||(t[15]=b()),e("span",ge,r(c.value.daily_limit_usd!=null?"$"+c.value.daily_limit_usd:l(n)("payment.admin.unlimited")),1)]),e("div",null,[e("span",ve,r(l(n)("payment.admin.weeklyLimit"))+":",1),t[16]||(t[16]=b()),e("span",be,r(c.value.weekly_limit_usd!=null?"$"+c.value.weekly_limit_usd:l(n)("payment.admin.unlimited")),1)]),e("div",null,[e("span",xe,r(l(n)("payment.admin.monthlyLimit"))+":",1),t[17]||(t[17]=b()),e("span",he,r(c.value.monthly_limit_usd!=null?"$"+c.value.monthly_limit_usd:l(n)("payment.admin.unlimited")),1)])])])):E("",!0),e("div",null,[e("label",ke,[b(r(l(n)("payment.admin.planDescription"))+" ",1),t[18]||(t[18]=e("span",{class:"text-red-500"},"*",-1))]),C(e("textarea",{"onUpdate:modelValue":t[2]||(t[2]=s=>a.description=s),rows:"2",class:"input",required:""},null,512),[[P,a.description]])]),e("div",we,[e("div",null,[e("label",$e,[b(r(l(n)("payment.admin.price"))+" ",1),t[19]||(t[19]=e("span",{class:"text-red-500"},"*",-1))]),C(e("input",{"onUpdate:modelValue":t[3]||(t[3]=s=>a.price=s),type:"number",step:"0.01",min:"0.01",class:"input",required:""},null,512),[[P,a.price,void 0,{number:!0}]]),v.value?(f(),k("p",Ce,[b(r(l(n)("payment.admin.subscriptionCnyPayPreview",{amount:v.value.amount}))+" ",1),v.value.feeRate>0?(f(),k("span",Pe,r(l(n)("payment.admin.subscriptionCnyPayPreviewWithFee",{feeRate:v.value.feeRate,total:v.value.total})),1)):E("",!0)])):E("",!0)]),e("div",null,[e("label",Se,r(l(n)("payment.admin.originalPrice")),1),C(e("input",{"onUpdate:modelValue":t[4]||(t[4]=s=>a.original_price=s),type:"number",step:"0.01",min:"0",class:"input"},null,512),[[P,a.original_price,void 0,{number:!0}]])])]),e("div",Ve,[e("div",null,[e("label",Ue,[b(r(l(n)("payment.admin.validity"))+" ",1),t[20]||(t[20]=e("span",{class:"text-red-500"},"*",-1))]),C(e("input",{"onUpdate:modelValue":t[5]||(t[5]=s=>a.validity_days=s),type:"number",min:"1",class:"input",required:""},null,512),[[P,a.validity_days,void 0,{number:!0}]])]),e("div",null,[e("label",De,[b(r(l(n)("payment.admin.validityUnit"))+" ",1),t[21]||(t[21]=e("span",{class:"text-red-500"},"*",-1))]),h(W,{modelValue:a.validity_unit,"onUpdate:modelValue":t[6]||(t[6]=s=>a.validity_unit=s),options:R.value},null,8,["modelValue","options"])])]),e("div",Ee,[e("div",null,[e("label",Ne,r(l(n)("payment.admin.sortOrder")),1),C(e("input",{"onUpdate:modelValue":t[7]||(t[7]=s=>a.sort_order=s),type:"number",min:"0",class:"input"},null,512),[[P,a.sort_order,void 0,{number:!0}]])]),e("div",null,[e("label",Ae,r(l(n)("payment.admin.currency")),1),C(e("input",{"onUpdate:modelValue":t[8]||(t[8]=s=>a.currency=s),type:"text",maxlength:"3",class:"input uppercase",placeholder:l(n)("payment.admin.currencyPlaceholder")},null,8,Me),[[P,a.currency]]),e("p",qe,r(l(n)("payment.admin.currencyHint")),1)])]),e("div",null,[e("label",Be,r(l(n)("payment.admin.features")),1),C(e("textarea",{"onUpdate:modelValue":t[9]||(t[9]=s=>_.value=s),rows:"3",class:"input",placeholder:l(n)("payment.admin.featuresPlaceholder")},null,8,je),[[P,_.value]]),e("p",Ge,r(l(n)("payment.admin.featuresHint")),1)]),e("div",Ie,[e("label",Re,r(l(n)("payment.admin.forSale")),1),e("button",{type:"button",class:S(["relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",a.for_sale?"bg-primary-500":"bg-gray-300 dark:bg-dark-600"]),onClick:t[10
4]||(t[10]=s=>a.for_sale=!a.for_sale)},[e("span",{class:S(["pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",a.for_sale?"translate-x-5":"translate-x-0"])},null,2)],2)])],32)]),_:1},8,["show","title"]))}}),Te={class:"space-y-4"},Le={class:"flex items-center justify-end gap-2"},He=["disabled","title"],We={key:0,class:"text-sm"},Ye={class:"text-gray-400"},Ke={class:"ml-1 badge badge-danger"},Qe={key:2,class:"text-sm text-gray-400"},Je={class:"text-sm"},Xe={class:"font-medium text-gray-900 dark:text-white"},Ze={key:0,class:"ml-1 text-xs text-gray-400"},et={key:1,class:"ml-1 text-xs text-gray-400 line-through"},tt={class:"text-sm"},at=["onClick"],nt={class:"flex items-center gap-2"},st=["onClick"],lt={class:"text-xs"},rt=["onClick"],it={class:"text-xs"},Vt=Q({__name:"AdminPaymentPlansView",setup(B){const{t:d}=J(),u=Y();function V(i){return oe(i||"USD")}const n=x([]),w=x(null);async function U(){try{n.value=await Z.groups.getAll()}catch{}}async function a(){try{const i=await D.getConfig();w.value=i.data}catch{}}function _(i){return n.value.find(m=>m.id===i)}function R(i){return i>0&&!n.value.find(m=>m.id===i)}function z(i){const m=_(i);return m?L(m.platform):"text-gray-900 dark:text-white"}const c=x(!1),N=x([]),A=x(!1),v=x(!1),j=x(null),M=x(null),o=q(()=>[{key:"id",label:"ID"},{key:"name",label:d("payment.admin.planName")},{key:"group_id",label:d("payment.admin.group")},{key:"price",label:d("payment.admin.price")},{key:"validity_days",label:d("payment.admin.validity")},{key:"for_sale",label:d("payment.admin.forSale")},{key:"sort_order",label:d("payment.admin.sortOrder")},{key:"actions",label:d("common.actions")}]);async function t(){c.value=!0;try{const i=await D.getPlans();N.value=(i.data||[]).map(m=>({...m,features:typeof m.features=="string"?m.features.split(`
5`).map(p=>p.trim()).filter(Boolean):m.features||[]}))}catch(i){u.showError(T(i,d,"payment.errors",d("common.error")))}finally{c.value=!1}}function s(i){j.value=i,A.value=!0}async function $(i){try{await D.updatePlan(i.id,{for_sale:!i.for_sale}),i.for_sale=!i.for_sale}catch(m){u.showError(T(m,d,"payment.errors",d("common.error")))}}function F(i){M.value=i.id,v.value=!0}async function O(){if(M.value)try{await D.deletePlan(M.value),u.showSuccess(d("common.deleted")),v.value=!1,t()}catch(i){u.showError(T(i,d,"payment.errors",d("common.error")))}}return ie(()=>{U(),a(),t()}),(i,m)=>(f(),I(te,null,{default:g(()=>[e("div",Te,[e("div",Le,[e("button",{onClick:t,disabled:c.value,class:"btn btn-secondary",title:l(d)("common.refresh")},[h(G,{name:"refresh",size:"md",class:S(c.value?"animate-spin":"")},null,8,["class"])],8,He),e("button",{onClick:m[0]||(m[0]=p=>s(null)),class:"btn btn-primary"},r(l(d)("payment.admin.createPlan")),1)]),h(ae,{columns:o.value,data:N.value,loading:c.value},{"cell-name":g(({value:p,row:y})=>[e("span",{class:S(["text-sm font-medium",z(y.group_id)])},r(p),3)]),"cell-group_id":g(({value:p})=>[R(p)?(f(),k("span",We,[e("span",Ye,"#"+r(p),1),e("span",Ke,r(l(d)("payment.admin.groupMissing")),1)])):_(p)?(f(),I(K,{key:1,name:_(p).name,platform:_(p).platform,"rate-multiplier":_(p).rate_multiplier},null,8,["name","platform","rate-multiplier"])):(f(),k("span",Qe,"-"))]),"cell-price":g(({value:p,row:y})=>[e("div",Je,[e("span",Xe,r(V(y.currency))+r((p??0).toFixed(2)),1),y.currency?(f(),k("span",Ze,r(y.currency),1)):E("",!0),y.original_price?(f(),k("span",et,r(V(y.currency))+r(y.original_price.toFixed(2)),1)):E("",!0)])]),"cell-validity_days":g(({value:p,row:y})=>[e("span",tt,r(p)+" "+r(l(d)("payment.admin."+(y.validity_unit||"days"))),1)]),"cell-for_sale":g(({value:p,row:y})=>[e("button",{type:"button",class:S(["relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-primary-500 focus:ring-offset-2",p?"bg-primary-500":"bg-gray-300 dark:bg-dark-600"]),onClick:ot=>$(y)},[e("span",{class:S(["pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out",p?"translate-x-4":"translate-x-0"])}
5,null,2)],10,at)]),"cell-actions":g(({row:p})=>[e("div",nt,[e("button",{onClick:y=>s(p),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-blue-50 hover:text-blue-600 dark:hover:bg-blue-900/20 dark:hover:text-blue-400"},[h(G,{name:"edit",size:"sm"}),e("span",lt,r(l(d)("common.edit")),1)],8,st),e("button",{onClick:y=>F(p),class:"flex flex-col items-center gap-0.5 rounded-lg p-1.5 text-gray-500 transition-colors hover:bg-red-50 hover:text-red-600 dark:hover:bg-red-900/20 dark:hover:text-red-400"},[h(G,{name:"trash",size:"sm"}),e("span",it,r(l(d)("common.delete")),1)],8,rt)])]),_:1},8,["columns","data","loading"])]),h(Oe,{show:A.value,plan:j.value,groups:n.value,"payment-config":w.value,onClose:m[1]||(m[1]=p=>A.value=!1),onSaved:t},null,8,["show","plan","groups","payment-config"]),h(ne,{show:v.value,title:l(d)("payment.admin.deletePlan"),message:l(d)("payment.admin.deletePlanConfirm"),"confirm-text":l(d)("common.delete"),danger:"",onConfirm:O,onCancel:m[2]||(m[2]=p=>v.value=!1)},null,8,["show","title","message","confirm-text"])]),_:1}))}});export{Vt as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.