Files
machartaa_admin_dist/dist/assets/index-52025d4d.js
T
2026-08-08 16:18:13 +03:30

2 lines
30 KiB
JavaScript

import{_ as Be}from"./BasicMainCard-989ffa54.js";import{_ as ye}from"./BasicModal.vue_vue_type_style_index_0_lang-8174f671.js";import{_ as ze}from"./BasicTextArea.vue_vue_type_style_index_0_lang-cb858bfe.js";import{_ as xe}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-9e1881c0.js";import{_ as he}from"./BasicInput.vue_vue_type_style_index_0_lang-f6881b2e.js";import{_ as Ee,u as de}from"./useBaseTable-e1239fc4.js";import{_ as we}from"./button.vue_vue_type_style_index_0_lang-6d9e6004.js";import{_ as De,G as L,J as Y,d as oe,g as k,h as U,v as ke,D as m,o as T,c as q,F as Me,a as n,b as l,t as J,p as Oe,w as v,e as H,r as Fe,E as qe,i as te,j as y,k as j,bB as Ze,H as pe,I as He}from"./index-03881eed.js";import{f as _e,a as je,b as Ke,c as Ge,d as Ve,e as Xe}from"./supabaseTableQuery-95762ff3.js";import{t as re}from"./useDataTime-39d365d2.js";import{I as F}from"./Icon-3cba35ff.js";import{g as Je}from"./index-7ad871fb.js";import{e as me,g as ve}from"./convert-2ad76038.js";import{F as fe}from"./index-0b8e44c3.js";import{a as Ye}from"./index-2b937264.js";import{I as We}from"./index-c7831531.js";import{a as ge}from"./index-577e5a04.js";import{M as ae}from"./index-a6dd452f.js";import{S as Qe}from"./index-c4251c82.js";import{T as Z}from"./isSymbol-72806280.js";import{U as et}from"./index-28c9621f.js";import"./Grid-669bdab6.js";import"./index-67119fea.js";import"./Col-8b6b3139.js";import"./styleChecker-230f1d69.js";import"./isPlainObject-b1bc5d24.js";import"./vnode-dddce04c.js";import"./_plugin-vue_export-helper-7a7517f7.js";import"./index-ef10ea82.js";import"./FormItemContext-77a35a1f.js";import"./omit-0bf0f784.js";import"./usePrice-bc935b83.js";import"./updateLocale-ce915111.js";import"./index-bc659f42.js";import"./index-6e050cc2.js";import"./useState-164294d5.js";import"./lodash-78d38859.js";import"./index-fbef06fa.js";import"./Badge-7d333aab.js";import"./isNumeric-3f69e2aa.js";import"./index-245d34d2.js";import"./index-2245e0eb.js";import"./index-b336c82b.js";import"./DialogWrap-ab772604.js";import"./pickAttrs-bd4d06ea.js";import"./css-aae66f86.js";import"./toArray-9d324686.js";import"./index-d1c6db2d.js";import"./_flatRest-08d5cdb1.js";import"./useRefs-d2ce1514.js";function Ie(e,u){return Math.max(0,Math.round(e*(1-(u||0)/100)))}async function tt(e){const{TableEngineRequest:u}=await De(()=>import("./buildSupabaseQuery-ce8c4b60.js"),["assets/buildSupabaseQuery-ce8c4b60.js","assets/index-03881eed.js","assets/index-8e1e8848.css","assets/supabaseTableQuery-95762ff3.js"]),r={...e};!r.sort&&!r.order&&(r.order="-sort_order");const s=await u(r,"subscription_plans");if(Array.isArray(s==null?void 0:s.rows)){const x=s.rows.map((g,w)=>({...g,index:w,final_price:Ie(Number(g.price),Number(g.discount_percent||0))}));return{...s,rows:x}}return s}const at=new Set(["plan_title","payment_status","status","final_price","expires_at","created_at","user_id","plan_id"]),nt=["plan_title","payment_status","status"];async function st(e){const{limit:u=20,page:r=1,search:s,filters:x}=e;let g=L.from("subscription_purchases").select("*, users(name, phone, first_name, last_name)",{count:"exact"});if(s!=null&&s.trim()){const _=await _e(L,s);g=je(g,s,nt,_)}if(x!=null&&x.length){for(const _ of x)if(!(_.hidden||!_.field)){if(_.field==="user_name"||_.field==="user_phone"){if(["eq","has","like"].includes(_.op)){const t=await _e(L,String(_.value));t.length?g=g.in("user_id",t):g=g.eq("user_id","00000000-0000-0000-0000-000000000000")}continue}at.has(_.field)&&(g=Ke(g,_))}}g=Ge(g,e,"-created_at",["created_at","plan_title","payment_status","status"]),g=Ve(g,r,u);const{data:w,error:C,count:h}=await g;if(C)throw C;return Xe(w,h,e,_=>{const t=Array.isArray(_.users)?_.users[0]:_.users;let A="نامشخص";return t!=null&&t.name?A=t.name:t!=null&&t.first_name||t!=null&&t.last_name?A=`${t.first_name||""} ${t.last_name||""}`.trim():t!=null&&t.phone&&(A=t.phone),{..._,user_name:A,user_phone:(t==null?void 0:t.phone)||""}})}async function it(e){const{data:u,error:r}=await L.from("subscription_plans").insert([{title:e.title,description:e.description||null,image_url:e.image_url,price:e.price,discount_percent:e.discount_percent??0,duration_days:e.duration_days,is_active:e.is_active??!0,sort_order:e.sort_order??0}]).select().single();if(r)throw r;return u}async function lt(e,u){const{data:r,error:s}=await L.from("subscription_plans").update({title:u.title,description:u.description||null,image_url:u.image_url,price:u.price,discount_percent:u.discount_percent??0,duration_days:u.duration_days,is_active:u.is_active??!0,sort_order:u.sort_order??0,updated_at:new Date().toISOString()}).eq("id",e).select();if(s)throw s;return r}async function rt(e){const{error:u}=await L.from("subscription_plans").delete().eq("id",e);if(u)throw u}async function ot(e,u){const{data:r,error:s}=await L.from("subscription_plans").update({is_active:u,updated_at:new Date().toISOString()}).eq("id",e).select();if(s)throw s;return r}async function ut(){const{data:e,error:u}=await L.from("subscription_plans").select("id, title, duration_days, price, discount_percent, is_active").order("sort_order",{ascending:!1}).order("id",{ascending:!1});if(u)throw u;return e||[]}async function ct(){return await Y.post("/admin/subscription/reconcile-pending")}async function dt(e){return await Y.post("/admin/subscription/grant",e)}async function pt(e){return await Y.post("/admin/subscription/extend",e)}async function _t(e){return await Y.post(`/admin/subscription/${e}/cancel`,{mode:"cancel"})}async function mt(e){return await Y.delete(`/admin/subscription/${e}`)}function be(e){return Number(e||0).toLocaleString("fa-IR")}const vt=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:e=>(e.record.index??0)+1},{title:"عنوان",dataIndex:"title",key:"title"},{title:"مدت (روز)",dataIndex:"duration_days",key:"duration_days",width:100,align:"center"},{title:"قیمت (ریال)",dataIndex:"price",key:"price",customRender:e=>be(e.record.price)},{title:"تخفیف %",dataIndex:"discount_percent",key:"discount_percent",width:90,align:"center"},{title:"قیمت نهایی",dataIndex:"final_price",key:"final_price",customRender:e=>be(e.record.final_price)},{title:"فعال",dataIndex:"is_active",key:"is_active",customRender:e=>e.record.is_active?"بله":"خیر"},{title:"ترتیب",dataIndex:"sort_order",key:"sort_order",width:80,align:"center"},{title:"ایجاد",dataIndex:"created_at",key:"created_at",customRender:e=>re(e.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function ft(e){return Number(e||0).toLocaleString("fa-IR")}const gt={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},bt={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},yt=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:e=>(e.record.index??0)+1},{title:"کاربر",dataIndex:"user_name",key:"user_name",filterField:"user_name"},{title:"موبایل",dataIndex:"user_phone",key:"user_phone",filterField:"user_phone"},{title:"پلن",dataIndex:"plan_title",key:"plan_title"},{title:"مبلغ",dataIndex:"final_price",key:"final_price",customRender:e=>ft(e.record.final_price)},{title:"پرداخت",dataIndex:"payment_status",key:"payment_status",customRender:e=>gt[e.record.payment_status]||e.record.payment_status},{title:"وضعیت",dataIndex:"status",key:"status",customRender:e=>bt[e.record.status]||e.record.status},{title:"انقضا",dataIndex:"expires_at",key:"expires_at",customRender:e=>e.record.expires_at?re(e.record.expires_at):"-"},{title:"تاریخ خرید",dataIndex:"created_at",key:"created_at",customRender:e=>re(e.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",filterable:!1,width:140,align:"center"}],B={ZARINPAL_MERCHANT_ID:"zarinpal_merchant_id",ZARINPAL_SANDBOX:"zarinpal_sandbox",SUBSCRIPTION_CALLBACK_URL:"subscription_app_callback_url",ZARINPAL_ENABLED:"zarinpal_enabled"},xt=Object.values(B);function ht(e){const u=(e[B.ZARINPAL_SANDBOX]||"no").toLowerCase(),r=(e[B.ZARINPAL_ENABLED]||"yes").toLowerCase();return{zarinpal_merchant_id:e[B.ZARINPAL_MERCHANT_ID]||"",zarinpal_sandbox:u==="yes"||u==="true"||u==="1",zarinpal_enabled:r!=="no"&&r!=="false"&&r!=="0",subscription_app_callback_url:e[B.SUBSCRIPTION_CALLBACK_URL]||"https://macharta.ir"}}async function ne(e,u){const{data:r,error:s}=await L.from("configs").select("id").eq("key",e).maybeSingle();if(s)throw s;if(r!=null&&r.id){const{data:w,error:C}=await L.from("configs").update({value:u}).eq("key",e).select("id");if(C)throw C;if(!(w!=null&&w.length))throw new Error("ذخیره انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.");return}const{data:x,error:g}=await L.from("configs").insert({key:e,value:u}).select("id");if(g)throw g;if(!(x!=null&&x.length))throw new Error("ایجاد تنظیم انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.")}async function Se(){const{data:e,error:u}=await L.from("configs").select("key, value").in("key",xt);if(u)throw u;const r=(e||[]).reduce((s,x)=>(s[x.key]=x.value??"",s),{});return ht(r)}async function wt(e){return await ne(B.ZARINPAL_MERCHANT_ID,e.zarinpal_merchant_id.trim()),await ne(B.ZARINPAL_SANDBOX,e.zarinpal_sandbox?"yes":"no"),await ne(B.ZARINPAL_ENABLED,e.zarinpal_enabled?"yes":"no"),await ne(B.SUBSCRIPTION_CALLBACK_URL,e.subscription_app_callback_url.trim().replace(/\/$/,"")),Se()}const kt={class:"max-w-2xl space-y-4"},It=n("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم می‌شود. اپ کاربر از همین تنظیمات برای اتصال به زرین‌پال استفاده می‌کند. ",-1),St={key:0,class:"py-8 text-center"},At=n("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرین‌پال (Merchant ID)",-1),Ct=n("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),Pt=n("div",{class:"text-xs text-gray-500 mt-1"},[H(" مسیر callback به‌صورت خودکار اضافه می‌شود: "),n("code",null,"/subscriptions/callback")],-1),$t={class:"flex items-center gap-3"},Lt=n("span",{class:"text-sm"},"فعال بودن درگاه زرین‌پال",-1),Rt={class:"flex items-center gap-3"},Nt=n("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),Tt=oe({__name:"PaymentGatewaySettings",setup(e){const u=k(!0),r=k(!1),s=k({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),x=U(()=>{var h;return s.value.zarinpal_enabled?s.value.zarinpal_sandbox?!0:!!((h=s.value.zarinpal_merchant_id)!=null&&h.trim()):!1}),g=U(()=>{var h;return s.value.zarinpal_enabled?s.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرین‌پال انجام می‌شود.":(h=s.value.zarinpal_merchant_id)!=null&&h.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمی‌توانند پرداخت کنند."}),w=U(()=>x.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");ke(async()=>{try{s.value=await Se()}catch(h){m.error((h==null?void 0:h.message)||"خطا در بارگذاری تنظیمات")}finally{u.value=!1}});async function C(){var h,_;if(!((h=s.value.subscription_app_callback_url)!=null&&h.trim())){m.warning("آدرس بازگشت از درگاه الزامی است");return}if(s.value.zarinpal_enabled&&!s.value.zarinpal_sandbox&&!((_=s.value.zarinpal_merchant_id)!=null&&_.trim())){m.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}r.value=!0;try{s.value=await wt(s.value),m.success("تنظیمات درگاه ذخیره شد")}catch(t){m.error((t==null?void 0:t.message)||"خطا در ذخیره")}finally{r.value=!1}}return(h,_)=>{const t=he,A=xe,E=we;return T(),q("div",kt,[It,u.value?(T(),q("div",St,"در حال بارگذاری...")):(T(),q(Me,{key:1},[n("div",null,[At,l(t,{value:s.value.zarinpal_merchant_id,"onUpdate:value":_[0]||(_[0]=P=>s.value.zarinpal_merchant_id=P),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),n("div",null,[Ct,l(t,{value:s.value.subscription_app_callback_url,"onUpdate:value":_[1]||(_[1]=P=>s.value.subscription_app_callback_url=P),placeholder:"https://macharta.ir"},null,8,["value"]),Pt]),n("div",$t,[l(A,{value:s.value.zarinpal_enabled,"onUpdate:value":_[2]||(_[2]=P=>s.value.zarinpal_enabled=P)},null,8,["value"]),Lt]),n("div",Rt,[l(A,{value:s.value.zarinpal_sandbox,"onUpdate:value":_[3]||(_[3]=P=>s.value.zarinpal_sandbox=P)},null,8,["value"]),Nt]),n("div",{class:Oe(["rounded-lg border p-3 text-sm",w.value])},J(g.value),3),l(E,{type:"primary",loading:r.value,onClick:C},{default:v(()=>[H(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),Ut={key:3,class:"text-sm text-gray-500"},Bt=oe({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(e,{emit:u}){const r=e,s=Ye,x=We,g=fe,w=fe.Item,C=k(!1),h=k([]),_=k([]),t=Fe({user_id:void 0,plan_id:void 0,duration_days:null}),A=U({get:()=>r.visible,set:o=>u("update:visible",o)}),E=U(()=>r.mode==="grant"?"ایجاد اشتراک برای کاربر":"تمدید اشتراک"),P=U(()=>r.mode==="grant"?"ایجاد اشتراک":"تمدید"),K=U(()=>h.value.map(o=>{const p=o.name||`${o.first_name||""} ${o.last_name||""}`.trim()||"بدون نام",I=o.phone||"";return{value:o.id,label:I?`${p} — ${I}`:p,searchText:`${p} ${I}`.toLowerCase()}})),D=U(()=>_.value.map(o=>({value:o.id,label:`${o.title} (${o.duration_days} روز)${o.is_active?"":" — غیرفعال"}`,searchText:String(o.title||"").toLowerCase()}))),R=U(()=>_.value.find(o=>o.id===t.plan_id)||null);function z(o,p){return String((p==null?void 0:p.searchText)||(p==null?void 0:p.label)||"").toLowerCase().includes(o.toLowerCase())}function G(o,p){return String((p==null?void 0:p.searchText)||(p==null?void 0:p.label)||"").toLowerCase().includes(o.toLowerCase())}function f(){r.mode==="grant"&&R.value&&!t.duration_days&&(t.duration_days=Number(R.value.duration_days)||null)}function se(){t.user_id=r.lockedUserId||void 0,t.plan_id=void 0,t.duration_days=r.mode==="extend"?30:null}function W(){u("update:visible",!1)}async function Q(){try{const[o,p]=await Promise.all([Ze(),ut()]);h.value=o||[],_.value=p||[]}catch(o){m.error((o==null?void 0:o.message)||"خطا در بارگذاری اطلاعات")}}async function ee(){var o,p;if(r.mode==="grant"){if(!t.user_id){m.warning("کاربر را انتخاب کنید");return}if(!t.plan_id){m.warning("پلن را انتخاب کنید");return}}if(r.mode==="extend"){if(!r.purchaseId&&!t.user_id){m.warning("کاربر را انتخاب کنید");return}if(!t.duration_days||t.duration_days<1){m.warning("مدت تمدید را وارد کنید");return}}C.value=!0;try{if(r.mode==="grant"){const I={user_id:t.user_id,plan_id:t.plan_id};t.duration_days&&t.duration_days>0&&(I.duration_days=Number(t.duration_days)),await dt(I),m.success("اشتراک ایجاد شد")}else await pt({purchase_id:r.purchaseId||void 0,user_id:r.purchaseId?void 0:t.user_id,plan_id:t.plan_id||void 0,duration_days:Number(t.duration_days)}),m.success("اشتراک تمدید شد");u("success"),W()}catch(I){m.error(((p=(o=I==null?void 0:I.response)==null?void 0:o.data)==null?void 0:p.message)||(I==null?void 0:I.message)||"خطا در ذخیره")}finally{C.value=!1}}return qe(()=>r.visible,o=>{o&&(se(),(!h.value.length||!_.value.length)&&Q())}),ke(()=>{Q()}),(o,p)=>{const I=ye;return T(),te(I,{visible:A.value,"onUpdate:visible":p[4]||(p[4]=N=>A.value=N),title:E.value,"ok-text":P.value,"cancel-text":"انصراف","confirm-loading":C.value,width:"560px",onOk:ee,onCancel:W},{default:v(()=>[l(y(g),{layout:"vertical"},{default:v(()=>[o.mode==="grant"||o.mode==="extend"&&!o.purchaseId?(T(),te(y(w),{key:0,label:"کاربر",required:""},{default:v(()=>[l(y(s),{value:t.user_id,"onUpdate:value":p[0]||(p[0]=N=>t.user_id=N),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:K.value,"filter-option":z,disabled:!!o.lockedUserId},null,8,["value","options","disabled"])]),_:1})):j("",!0),o.mode==="grant"?(T(),te(y(w),{key:1,label:"پلن اشتراک",required:""},{default:v(()=>[l(y(s),{value:t.plan_id,"onUpdate:value":p[1]||(p[1]=N=>t.plan_id=N),"show-search":"",placeholder:"انتخاب پلن",options:D.value,"filter-option":G,onChange:f},null,8,["value","options"])]),_:1})):j("",!0),o.mode==="extend"&&!o.purchaseId?(T(),te(y(w),{key:2,label:"پلن (اختیاری)"},{default:v(()=>[l(y(s),{value:t.plan_id,"onUpdate:value":p[2]||(p[2]=N=>t.plan_id=N),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده می‌شود",options:D.value,"filter-option":G},null,8,["value","options"])]),_:1})):j("",!0),l(y(w),{label:o.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:o.mode==="extend"},{default:v(()=>[l(y(x),{value:t.duration_days,"onUpdate:value":p[3]||(p[3]=N=>t.duration_days=N),min:1,class:"w-full",placeholder:o.mode==="grant"?"خالی = مدت پیش‌فرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),o.mode==="grant"&&R.value?(T(),q("div",Ut," مدت پیش‌فرض پلن: "+J(R.value.duration_days)+" روز ",1)):j("",!0)]),_:1})]),_:1},8,["visible","title","ok-text","confirm-loading"])}}}),zt={class:"flex justify-between items-center mb-4"},Et=n("h2",null,"مدیریت اشتراک‌ها",-1),Dt={class:"gap-2 flex justify-center"},Mt=n("span",null,"حذف",-1),Ot=n("span",null,"ویرایش",-1),Ft={class:"flex justify-between items-center mb-4"},qt=n("h2",null,"لیست خرید اشتراک",-1),Zt={class:"flex gap-2"},Ht={class:"gap-2 flex justify-center"},jt=n("span",null,"تمدید",-1),Kt=n("span",null,"لغو اشتراک",-1),Gt=n("span",null,"حذف",-1),Vt=n("div",{class:"mb-4"},[n("h2",null,"تنظیمات درگاه پرداخت")],-1),Xt={class:"space-y-4 relative"},Jt={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},Yt={class:"grid grid-cols-2 gap-4"},Wt=n("div",{class:"mb-1 text-sm text-gray-600"},"عنوان اشتراک",-1),Qt=n("div",{class:"mb-1 text-sm text-gray-600"},"مدت اشتراک (روز)",-1),ea={class:"grid grid-cols-3 gap-4"},ta=n("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),aa=n("div",{class:"mb-1 text-sm text-gray-600"},"تخفیف (درصد)",-1),na=n("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),sa={class:"mt-2 font-semibold text-green-700"},ia={class:"grid grid-cols-2 gap-4"},la=n("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),ra=n("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),oa={class:"flex items-center gap-2 mt-2"},ua={class:"text-sm text-gray-600"},ca=n("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),da={class:"flex justify-center"},pa=n("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),_a={key:0},ma=n("div",null,"آپلود تصویر",-1),pn=oe({__name:"index",setup(e){const u=ge,r=ge.TabPane,s=k("plans"),x=k(!1),g=k(!1),w=k(null),[C,h]=de(),[_,t]=de(),A=k(!1),E=k("grant"),P=k(null),K=k(null),D=k(!1),R=k([]),z=k(0),G=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,duration_days:30,is_active:!0,sort_order:0}),f=k(G()),se=U(()=>Ie(Number(f.value.price),Number(f.value.discount_percent)).toLocaleString("fa-IR")),W={columns:vt,api:tt,defaultPageLimit:20},Q={columns:yt,api:st,defaultPageLimit:20};function ee(){f.value=G(),R.value=[]}function o(){g.value=!1,w.value=null,ee(),x.value=!0}function p(){x.value=!1,ee()}function I(c){return c.type.startsWith("image/")?c.size/1024/1024>=5?(m.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(m.error("فقط فایل تصویری مجاز است"),!1)}async function N(c){const{file:a,onSuccess:b,onError:d,onProgress:$}=c,M=new FormData;M.append("file",a);const V=`${He}/upload/machartaa-img`;z.value++,await new Promise((ie,X)=>{const i=new XMLHttpRequest;i.open("POST",V);const O=Je()||localStorage.getItem("tamin_token")||"";i.setRequestHeader("Authorization",`Bearer ${O}`),i.upload.onprogress=S=>{S.lengthComputable&&($==null||$({percent:Math.round(S.loaded/S.total*100)}))},i.onload=()=>{if(i.status>=200&&i.status<300)try{const S=JSON.parse(i.responseText||"{}"),Ue=S.full_src||S.url||S.src||S.path||S.data&&(S.data.full_src||S.data.url||S.data.src||S.data.path)||"",le=me(Ue),ce=ve(le);f.value.image_url=le,R.value=ce?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:ce,response:{path:le}}]:[],b==null||b(S,i),m.success("تصویر با موفقیت آپلود شد!"),ie()}catch(S){d==null||d(S,i),X(S)}else d==null||d(new Error("خطا در آپلود تصویر"),i),X(new Error("خطا در آپلود تصویر"))},i.onerror=()=>{d==null||d(new Error("خطا در آپلود تصویر"),i),X(new Error("خطا در آپلود تصویر"))},i.onloadend=()=>{z.value=Math.max(0,z.value-1)},i.send(M)})}async function Ae(){var c;if(z.value>0){m.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((c=f.value.title)!=null&&c.trim())){m.warning("عنوان الزامی است");return}if(!f.value.duration_days||Number(f.value.duration_days)<1){m.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}try{const a={...f.value,price:Number(f.value.price)||0,discount_percent:Number(f.value.discount_percent)||0,duration_days:Number(f.value.duration_days),sort_order:Number(f.value.sort_order)||0};g.value&&w.value?(await lt(w.value,a),m.success("اشتراک ویرایش شد")):(await it(a),m.success("اشتراک افزوده شد")),p(),await h()}catch(a){m.error((a==null?void 0:a.message)||"خطا در ذخیره")}}function Ce(c){g.value=!0,w.value=c.id;const a=me(c.image_url)||null;f.value={title:c.title||"",description:c.description||"",image_url:a,price:c.price||0,discount_percent:c.discount_percent||0,duration_days:c.duration_days||30,is_active:c.is_active??!0,sort_order:c.sort_order??0};const b=a?ve(a):null;R.value=b?[{uid:"-1",name:"image.jpg",status:"done",url:b,response:{path:a}}]:[],x.value=!0}function Pe(c){ae.confirm({title:"حذف اشتراک",content:`آیا از حذف «${c.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await rt(c.id),m.success("حذف شد"),await h()}catch(a){m.error((a==null?void 0:a.message)||"خطا در حذف")}}})}async function $e(c){try{await ot(c.id,!c.is_active),m.success("وضعیت به‌روز شد"),await h()}catch(a){m.error((a==null?void 0:a.message)||"خطا")}}function Le(){E.value="grant",P.value=null,K.value=null,A.value=!0}async function Re(){D.value||ae.confirm({title:"همگام‌سازی پرداخت‌های زرین‌پال",content:"لیست تراکنش‌های موفقِ اعتبارسنجی‌نشده از زرین‌پال گرفته می‌شود، با توکن تراکنش‌های اشتراک تطبیق داده می‌شود و در صورت تطبیق، اشتراک کاربر فعال می‌شود. ادامه می‌دهید؟",okText:"همگام‌سازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var c,a;D.value=!0;try{const b=await ct(),d=(b==null?void 0:b.data)??b,$=Number((d==null?void 0:d.reconciled_count)||0),M=Number((d==null?void 0:d.total_zarinpal)||0),V=Number((d==null?void 0:d.matched_count)||0);$>0?m.success((d==null?void 0:d.message)||`${$} اشتراک فعال شد.`):m.info((d==null?void 0:d.message)||(M>0?`از ${M} تراکنش زرین‌پال، ${V} مورد با اشتراک محلی تطبیق خورد ولی فعال‌سازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجی‌نشده‌ای در زرین‌پال یافت نشد.")),await t()}catch(b){m.error(((a=(c=b==null?void 0:b.response)==null?void 0:c.data)==null?void 0:a.message)||(b==null?void 0:b.message)||"خطا در همگام‌سازی پرداخت‌ها")}finally{D.value=!1}}})}function ue(c){E.value="extend",P.value=(c==null?void 0:c.id)??null,K.value=(c==null?void 0:c.user_id)??null,A.value=!0}function Ne(c){ae.confirm({title:"لغو اشتراک",content:`اشتراک «${c.plan_title}» برای ${c.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع می‌شود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,b;try{await _t(c.id),m.success("اشتراک لغو شد"),await t()}catch(d){m.error(((b=(a=d==null?void 0:d.response)==null?void 0:a.data)==null?void 0:b.message)||(d==null?void 0:d.message)||"خطا در لغو")}}})}function Te(c){ae.confirm({title:"حذف کامل",content:`رکورد خرید «${c.plan_title}» برای ${c.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,b;try{await mt(c.id),m.success("حذف شد"),await t()}catch(d){m.error(((b=(a=d==null?void 0:d.response)==null?void 0:a.data)==null?void 0:b.message)||(d==null?void 0:d.message)||"خطا در حذف")}}})}return(c,a)=>{const b=we,d=Ee,$=he,M=xe,V=ze,ie=ye,X=Be;return T(),q("div",null,[l(X,null,{default:v(()=>[l(y(u),{activeKey:s.value,"onUpdate:activeKey":a[2]||(a[2]=i=>s.value=i)},{default:v(()=>[l(y(r),{key:"plans",tab:"پلن‌های اشتراک"},{default:v(()=>[n("div",zt,[Et,l(b,{type:"primary",onClick:o},{default:v(()=>[H("افزودن اشتراک")]),_:1})]),l(d,pe(W,{ref:"table",onRegister:y(C)}),{action:v(({record:i})=>[n("div",Dt,[l(y(Z),{class:"cursor-pointer"},{title:v(()=>[n("span",null,J(i.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:v(()=>[l(F,{icon:i.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:i.is_active?"#F59E0B":"#16A34A",onClick:O=>$e(i)},null,8,["icon","color","onClick"])]),_:2},1024),l(y(Z),{class:"cursor-pointer"},{title:v(()=>[Mt]),default:v(()=>[l(F,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:O=>Pe(i)},null,8,["onClick"])]),_:2},1024),l(y(Z),{class:"cursor-pointer"},{title:v(()=>[Ot]),default:v(()=>[l(F,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:O=>Ce(i)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),l(y(r),{key:"purchases",tab:"خریدهای کاربران"},{default:v(()=>[n("div",Ft,[qt,n("div",Zt,[l(b,{loading:D.value,onClick:Re},{default:v(()=>[H(" همگام‌سازی پرداخت‌های زرین‌پال ")]),_:1},8,["loading"]),l(b,{onClick:a[0]||(a[0]=i=>ue())},{default:v(()=>[H("تمدید اشتراک")]),_:1}),l(b,{type:"primary",onClick:a[1]||(a[1]=i=>Le())},{default:v(()=>[H("ایجاد اشتراک برای کاربر")]),_:1})])]),l(d,pe(Q,{onRegister:y(_)}),{action:v(({record:i})=>[n("div",Ht,[l(y(Z),{class:"cursor-pointer"},{title:v(()=>[jt]),default:v(()=>[l(F,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:O=>ue(i)},null,8,["onClick"])]),_:2},1024),l(y(Z),{class:"cursor-pointer"},{title:v(()=>[Kt]),default:v(()=>[l(F,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:O=>Ne(i)},null,8,["onClick"])]),_:2},1024),l(y(Z),{class:"cursor-pointer"},{title:v(()=>[Gt]),default:v(()=>[l(F,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:O=>Te(i)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),l(y(r),{key:"gateway",tab:"تنظیمات درگاه (زرین‌پال)"},{default:v(()=>[Vt,l(Tt)]),_:1})]),_:1},8,["activeKey"]),l(ie,{visible:x.value,"onUpdate:visible":a[11]||(a[11]=i=>x.value=i),title:g.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:Ae,onCancel:p,width:"70%",confirmLoading:z.value>0},{default:v(()=>[n("div",Xt,[z.value>0?(T(),q("div",Jt,[l(y(Qe),{size:"large"})])):j("",!0),n("div",Yt,[n("div",null,[Wt,l($,{value:f.value.title,"onUpdate:value":a[3]||(a[3]=i=>f.value.title=i),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),n("div",null,[Qt,l($,{value:f.value.duration_days,"onUpdate:value":a[4]||(a[4]=i=>f.value.duration_days=i),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),n("div",ea,[n("div",null,[ta,l($,{value:f.value.price,"onUpdate:value":a[5]||(a[5]=i=>f.value.price=i),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),n("div",null,[aa,l($,{value:f.value.discount_percent,"onUpdate:value":a[6]||(a[6]=i=>f.value.discount_percent=i),type:"number",min:"0",max:"100",placeholder:"0"},null,8,["value"])]),n("div",null,[na,n("div",sa,J(se.value),1)])]),n("div",ia,[n("div",null,[la,l($,{value:f.value.sort_order,"onUpdate:value":a[7]||(a[7]=i=>f.value.sort_order=i),type:"number",placeholder:"0"},null,8,["value"])]),n("div",null,[ra,n("div",oa,[l(M,{value:f.value.is_active,"onUpdate:value":a[8]||(a[8]=i=>f.value.is_active=i)},null,8,["value"]),n("span",ua,J(f.value.is_active?"فعال":"غیرفعال"),1)])])]),n("div",null,[ca,l(V,{value:f.value.description,"onUpdate:value":a[9]||(a[9]=i=>f.value.description=i),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),n("div",da,[n("div",null,[pa,l(y(et),{"file-list":R.value,"onUpdate:fileList":a[10]||(a[10]=i=>R.value=i),"before-upload":I,"custom-request":N,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:v(()=>[R.value.length<1?(T(),q("div",_a,[l(F,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),ma])):j("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),l(Bt,{visible:A.value,"onUpdate:visible":a[12]||(a[12]=i=>A.value=i),mode:E.value,"purchase-id":P.value,"locked-user-id":K.value,onSuccess:y(t)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{pn as default};