Files
machartaa_admin_dist/dist/assets/index-41cedfa3.js
T
2026-10-04 13:31:09 +03:30

2 lines
49 KiB
JavaScript

import{_ as yt}from"./BasicMainCard-ff1543bd.js";import{_ as De}from"./BasicModal.vue_vue_type_style_index_0_lang-6296deb9.js";import{_ as xt}from"./BasicTextArea.vue_vue_type_style_index_0_lang-46e82d82.js";import{_ as Xe}from"./BasicInput.vue_vue_type_style_index_0_lang-06536e2e.js";import{_ as Qe}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-0d6b57d1.js";import{_ as Fe,u as we}from"./useBaseTable-e18d3b32.js";import{_ as Me}from"./button.vue_vue_type_style_index_0_lang-fbfa965d.js";import{g as et,a as ht,b as wt,c as kt,d as It,e as St,f as $t,h as Ct,u as Ut,i as Tt,j as Rt,t as Pt,k as Bt,l as Nt,m as Lt}from"./subscription-728bba27.js";import{t as be}from"./useDataTime-206d8d2e.js";import{I as X}from"./Icon-671f08f9.js";import{R as tt,d as ye,i as h,j as Q,x as Se,H as _,o as P,c as M,F as pe,b as n,e as t,t as ve,s as At,w as l,f as N,h as Pe,z as Be,k as oe,l as d,n as Y,bK as Ot,_ as Dt,I as at,J as lt,K as Ft,O as je,L as ke,M as Mt}from"./index-c678e119.js";import{g as jt}from"./index-af384b16.js";import{e as Ue,g as Te}from"./convert-2ad76038.js";import{_ as Et,v as Ge,t as Ke}from"./AudienceSegmentPicker.vue_vue_type_script_setup_true_lang-ec8b5075.js";import{F as Ne,_ as zt}from"./index-679d69b0.js";import{I as Le}from"./index-e517c667.js";import{R as _e,C as Re,b as qt}from"./index-05e85885.js";import{M as fe,_ as Vt}from"./index-66da2c76.js";import{_ as nt}from"./index-01af60d8.js";import{I as it}from"./index-da91aa99.js";import{_ as Gt}from"./InputDatePicker.vue_vue_type_script_setup_true_lang-fb1f156c.js";import{_ as Kt}from"./CustomTag.vue_vue_type_script_setup_true_lang-9b0b90b0.js";import{T as ne}from"./isSymbol-5130882b.js";import{T as Je}from"./index-88858982.js";import{S as Jt}from"./index-5203b45e.js";import{U as Ye}from"./index-ff90b762.js";import"./Grid-192c1e72.js";import"./index-2a1871d2.js";import"./Col-65d77001.js";import"./styleChecker-c202e4d7.js";import"./isPlainObject-2f8cd8cc.js";import"./vnode-34fe2aaf.js";import"./_plugin-vue_export-helper-edd5ed68.js";import"./usePrice-bc935b83.js";import"./updateLocale-e9df593e.js";import"./index-c5016c96.js";import"./shallowequal-93b92d94.js";import"./useState-fb1fd992.js";import"./useMemo-3527b8f5.js";import"./FormItemContext-53695780.js";import"./omit-30cc2465.js";import"./lodash-2343a0ae.js";import"./index-064013c2.js";import"./Badge-b566fed9.js";import"./isNumeric-3f69e2aa.js";import"./index-d768dcac.js";import"./index-ea10bb13.js";import"./index-31ed7972.js";import"./supabaseTableQuery-e9feb810.js";import"./dayjs-aec3eaaf.js";import"./index-30b2d9cf.js";import"./_flatRest-89cece1c.js";import"./toArray-acd138e5.js";import"./index-27b4bb6d.js";import"./SearchOutlined-445bfd70.js";import"./index-d80ea252.js";import"./DialogWrap-0297f46d.js";import"./pickAttrs-09168c62.js";import"./css-aae66f86.js";import"./isMobile-e2e89480.js";import"./useRefs-d469f03d.js";import"./index-e3658ae2.js";function Ze(e){return Number(e||0).toLocaleString("fa-IR")}const Yt=[{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=>Ze(e.record.price)},{title:"تخفیف %",dataIndex:"discount_percent",key:"discount_percent",width:90,align:"center"},{title:"قیمت نهایی",dataIndex:"final_price",key:"final_price",customRender:e=>Ze(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=>be(e.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function Zt(e){return Number(e||0).toLocaleString("fa-IR")}const He={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},We={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},Ht=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,sortable:!1,width:70,align:"center",customRender:e=>(e.record.index??0)+1},{title:"کاربر",dataIndex:"user_name",key:"user_name",filterField:"user_name",sortField:"user_name"},{title:"موبایل",dataIndex:"user_phone",key:"user_phone",filterField:"user_phone",sortField:"user_phone"},{title:"پلن",dataIndex:"plan_title",key:"plan_title",sortField:"plan_title"},{title:"مبلغ",dataIndex:"final_price",key:"final_price",type:"Number",sortField:"final_price",customRender:e=>Zt(e.record.final_price)},{title:"پرداخت",dataIndex:"payment_status",key:"payment_status",type:"Select",filterField:"payment_status",sortField:"payment_status",filterComponentProps:{options:Object.entries(He).map(([e,p])=>({label:p,value:e})),allowClear:!0,placeholder:"انتخاب وضعیت پرداخت"},customRender:e=>He[e.record.payment_status]||e.record.payment_status},{title:"وضعیت",dataIndex:"status",key:"status",type:"Select",filterField:"status",sortField:"status",filterComponentProps:{options:Object.entries(We).map(([e,p])=>({label:p,value:e})),allowClear:!0,placeholder:"انتخاب وضعیت"},customRender:e=>We[e.record.status]||e.record.status},{title:"انقضا",dataIndex:"expires_at",key:"expires_at",type:"DateTime",sortField:"expires_at",customRender:e=>e.record.expires_at?be(e.record.expires_at):"-"},{title:"تاریخ خرید",dataIndex:"created_at",key:"created_at",type:"DateTime",sortField:"created_at",customRender:e=>be(e.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",filterable:!1,sortable:!1,width:140,align:"center"}];async function st(){return await tt.get("/admin/subscription/payment-gateway")}async function Wt(e){return(await tt.put("/admin/subscription/payment-gateway",e)).settings??await st()}const Xt={class:"max-w-2xl space-y-4"},Qt=n("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم می‌شود. اپ کاربر از همین تنظیمات برای اتصال به زرین‌پال استفاده می‌کند. ",-1),ea={key:0,class:"py-8 text-center"},ta=n("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرین‌پال (Merchant ID)",-1),aa=n("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),la=n("div",{class:"text-xs text-gray-500 mt-1"},[N(" مسیر callback به‌صورت خودکار اضافه می‌شود: "),n("code",null,"/subscriptions/callback")],-1),na={class:"flex items-center gap-3"},ia=n("span",{class:"text-sm"},"فعال بودن درگاه زرین‌پال",-1),sa={class:"flex items-center gap-3"},oa=n("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),ua=ye({__name:"PaymentGatewaySettings",setup(e){const p=h(!0),c=h(!1),u=h({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),I=Q(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?!0:!!((C=u.value.zarinpal_merchant_id)!=null&&C.trim()):!1}),L=Q(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرین‌پال انجام می‌شود.":(C=u.value.zarinpal_merchant_id)!=null&&C.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمی‌توانند پرداخت کنند."}),$=Q(()=>I.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");Se(async()=>{try{u.value=await st()}catch(C){_.error((C==null?void 0:C.message)||"خطا در بارگذاری تنظیمات")}finally{p.value=!1}});async function G(){var C,U;if(!((C=u.value.subscription_app_callback_url)!=null&&C.trim())){_.warning("آدرس بازگشت از درگاه الزامی است");return}if(u.value.zarinpal_enabled&&!u.value.zarinpal_sandbox&&!((U=u.value.zarinpal_merchant_id)!=null&&U.trim())){_.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}c.value=!0;try{u.value=await Wt(u.value),_.success("تنظیمات درگاه ذخیره شد")}catch(T){_.error((T==null?void 0:T.message)||"خطا در ذخیره")}finally{c.value=!1}}return(C,U)=>{const T=Xe,A=Qe,q=Me;return P(),M("div",Xt,[Qt,p.value?(P(),M("div",ea,"در حال بارگذاری...")):(P(),M(pe,{key:1},[n("div",null,[ta,t(T,{value:u.value.zarinpal_merchant_id,"onUpdate:value":U[0]||(U[0]=B=>u.value.zarinpal_merchant_id=B),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),n("div",null,[aa,t(T,{value:u.value.subscription_app_callback_url,"onUpdate:value":U[1]||(U[1]=B=>u.value.subscription_app_callback_url=B),placeholder:"https://macharta.ir"},null,8,["value"]),la]),n("div",na,[t(A,{value:u.value.zarinpal_enabled,"onUpdate:value":U[2]||(U[2]=B=>u.value.zarinpal_enabled=B)},null,8,["value"]),ia]),n("div",sa,[t(A,{value:u.value.zarinpal_sandbox,"onUpdate:value":U[3]||(U[3]=B=>u.value.zarinpal_sandbox=B)},null,8,["value"]),oa]),n("div",{class:At(["rounded-lg border p-3 text-sm",$.value])},ve(L.value),3),t(q,{type:"primary",loading:c.value,onClick:G},{default:l(()=>[N(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),ra={key:1,class:"mb-4"},da={key:2,class:"text-sm text-gray-500 mb-3"},ca={key:3,class:"border-t border-gray-200 pt-4 space-y-3"},ma=n("div",{class:"font-semibold text-gray-700"},"اطلاع‌رسانی بعد از اعطا",-1),pa=n("p",{class:"text-xs text-gray-500 m-0"}," یک یا چند کانال را انتخاب کنید. در صورت خالی بودن متن، پیام پیش‌فرض ارسال می‌شود. ",-1),_a={class:"flex flex-col gap-2"},va=ye({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(e,{emit:p}){const c=e,u=nt,I=it,L=Ne,$=Ne.Item,G=Le,C=Le.TextArea,U=_e.Group,T=h(!1),A=h([]),q=h([]),B=h("user"),v=h("none"),E=h({segments:[]}),Z=h(!1),D=h(""),b=Pe({user_id:void 0,plan_id:void 0,duration_days:null}),o=Pe({sms:!1,push:!1,modal:!1,smsMessage:"",pushTitle:"",pushBody:"",pushUrl:"/",modalTitle:"",modalBody:"",modalCtaLabel:"متوجه شدم"}),te=Q({get:()=>c.visible,set:r=>p("update:visible",r)}),K=Q(()=>c.mode==="grant"?"ایجاد اشتراک برای کاربر / دسته":"تمدید اشتراک"),k=Q(()=>c.mode!=="grant"?"تمدید":B.value==="segment"?"اعطای اشتراک به دسته":"ایجاد اشتراک"),y=Q(()=>A.value.map(r=>{const s=r.name||`${r.first_name||""} ${r.last_name||""}`.trim()||"بدون نام",R=r.phone||"";return{value:r.id,label:R?`${s} — ${R}`:s,searchText:`${s} ${R}`.toLowerCase()}})),x=Q(()=>q.value.map(r=>({value:r.id,label:`${r.title} (${r.duration_days} روز)${r.is_active?"":" — غیرفعال"}`,searchText:String(r.title||"").toLowerCase()}))),ae=Q(()=>q.value.find(r=>r.id===b.plan_id)||null);function ie(r,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(r.toLowerCase())}function V(r,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(r.toLowerCase())}function H(){c.mode==="grant"&&ae.value&&!b.duration_days&&(b.duration_days=Number(ae.value.duration_days)||null)}function le(){v.value="none",o.sms=!1,o.push=!1,o.modal=!1,o.smsMessage="",o.pushTitle="",o.pushBody="",o.pushUrl="/",o.modalTitle="",o.modalBody="",o.modalCtaLabel="متوجه شدم"}function se(){if(v.value!=="custom"||!o.sms&&!o.push&&!o.modal)return;const r={sms:o.sms,push:o.push,modal:o.modal};return o.sms&&o.smsMessage.trim()&&(r.smsMessage=o.smsMessage.trim()),o.push&&(o.pushTitle.trim()&&(r.pushTitle=o.pushTitle.trim()),o.pushBody.trim()&&(r.pushBody=o.pushBody.trim()),o.pushUrl.trim()&&(r.pushUrl=o.pushUrl.trim())),o.modal&&(o.modalTitle.trim()&&(r.modalTitle=o.modalTitle.trim()),o.modalBody.trim()&&(r.modalBody=o.modalBody.trim()),o.modalCtaLabel.trim()&&(r.modalCtaLabel=o.modalCtaLabel.trim())),r}function ge(){b.user_id=c.lockedUserId||void 0,b.plan_id=void 0,b.duration_days=c.mode==="extend"?30:null,B.value="user",E.value={segments:[]},D.value="",le()}function ue(){p("update:visible",!1)}async function re(){try{const[r,s]=await Promise.all([Ot(),et()]);A.value=r||[],q.value=s||[]}catch(r){_.error((r==null?void 0:r.message)||"خطا در بارگذاری اطلاعات")}}async function de(){var s,R;const r=Ge(E.value);if(r){_.warning(r);return}Z.value=!0,D.value="";try{const m=Ke(E.value),W=await ht(m),ee=Number((W==null?void 0:W.userCount)??0),j=Array.isArray(W==null?void 0:W.progressItems)?W.progressItems:[];j.length===1?D.value=`${ee.toLocaleString("fa-IR")} کاربر (همان آمار پیشرفت چالش ${j[0].sort_order})`:j.length>1?D.value=`${ee.toLocaleString("fa-IR")} کاربر یکتا در ${j.length.toLocaleString("fa-IR")} چالش با این شماره`:D.value=`حدود ${ee.toLocaleString("fa-IR")} کاربر مخاطب این اعطا خواهند بود`}catch(m){_.error(((R=(s=m==null?void 0:m.response)==null?void 0:s.data)==null?void 0:R.message)||(m==null?void 0:m.message)||"خطا در پیش‌نمایش مخاطب")}finally{Z.value=!1}}function S(r){return new Promise(s=>{fe.confirm({title:"اعطای اشتراک گروهی",content:r?`آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟ (${r})`:"آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟",okText:"بله، اعطا شود",cancelText:"انصراف",onOk:()=>s(!0),onCancel:()=>s(!1)})})}async function ce(){var r,s;if(c.mode==="grant"){if(!b.plan_id){_.warning("پلن را انتخاب کنید");return}if(B.value==="user"){if(!b.user_id){_.warning("کاربر را انتخاب کنید");return}}else{const R=Ge(E.value);if(R){_.warning(R);return}}if(v.value==="custom"&&!o.sms&&!o.push&&!o.modal){_.warning("حداقل یک کانال اطلاع‌رسانی را انتخاب کنید، یا گزینه «هیچکدام» را بزنید");return}}if(c.mode==="extend"){if(!c.purchaseId&&!b.user_id){_.warning("کاربر را انتخاب کنید");return}if(!b.duration_days||b.duration_days<1){_.warning("مدت تمدید را وارد کنید");return}}T.value=!0;try{const R=c.mode==="grant"?se():void 0;if(c.mode==="grant"&&B.value==="segment"){const m=Ke(E.value);if(!await S(D.value||void 0))return;const ee={plan_id:b.plan_id,...m};b.duration_days&&b.duration_days>0&&(ee.duration_days=Number(b.duration_days)),R&&(ee.notify=R);const j=await wt(ee),xe=Number((j==null?void 0:j.granted)??0),he=Number((j==null?void 0:j.failed)??0);he>0?_.warning(`اشتراک برای ${xe.toLocaleString("fa-IR")} کاربر ایجاد شد؛ ${he.toLocaleString("fa-IR")} مورد ناموفق`):_.success((j==null?void 0:j.message)||`اشتراک برای ${xe.toLocaleString("fa-IR")} کاربر ایجاد شد`)}else if(c.mode==="grant"){const m={user_id:b.user_id,plan_id:b.plan_id};b.duration_days&&b.duration_days>0&&(m.duration_days=Number(b.duration_days)),R&&(m.notify=R),await kt(m),_.success("اشتراک ایجاد شد")}else await It({purchase_id:c.purchaseId||void 0,user_id:c.purchaseId?void 0:b.user_id,plan_id:b.plan_id||void 0,duration_days:Number(b.duration_days)}),_.success("اشتراک تمدید شد");p("success"),ue()}catch(R){_.error(((s=(r=R==null?void 0:R.response)==null?void 0:r.data)==null?void 0:s.message)||(R==null?void 0:R.message)||"خطا در ذخیره")}finally{T.value=!1}}return Be(()=>c.visible,r=>{r&&(ge(),(!A.value.length||!q.value.length)&&re())}),Se(()=>{re()}),(r,s)=>{const R=De;return P(),oe(R,{visible:te.value,"onUpdate:visible":s[18]||(s[18]=m=>te.value=m),title:K.value,"ok-text":k.value,"cancel-text":"انصراف","confirm-loading":T.value,width:r.mode==="grant"?"760px":"560px",onOk:ce,onCancel:ue},{default:l(()=>[t(d(L),{layout:"vertical",class:"max-h-[75vh] overflow-y-auto pe-1"},{default:l(()=>[r.mode==="grant"?(P(),M(pe,{key:0},[t(d($),{label:"مخاطب",required:""},{default:l(()=>[t(d(U),{value:B.value,"onUpdate:value":s[0]||(s[0]=m=>B.value=m),class:"flex flex-col gap-2"},{default:l(()=>[t(d(_e),{value:"user"},{default:l(()=>[N("یک کاربر")]),_:1}),t(d(_e),{value:"segment"},{default:l(()=>[N("دسته کاربران (مثلاً چالش nام را انجام داده‌اند)")]),_:1})]),_:1},8,["value"])]),_:1}),B.value==="user"?(P(),oe(d($),{key:0,label:"کاربر",required:""},{default:l(()=>[t(d(u),{value:b.user_id,"onUpdate:value":s[1]||(s[1]=m=>b.user_id=m),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:y.value,"filter-option":ie,disabled:!!r.lockedUserId},null,8,["value","options","disabled"])]),_:1})):(P(),M("div",ra,[t(Et,{modelValue:E.value,"onUpdate:modelValue":s[2]||(s[2]=m=>E.value=m),"show-actions":!1,"show-preview":!0,"title-text":"دسته مخاطب برای اعطای اشتراک","preview-loading":Z.value,"preview-text":D.value,onPreview:de},null,8,["modelValue","preview-loading","preview-text"])])),t(d($),{label:"پلن اشتراک",required:""},{default:l(()=>[t(d(u),{value:b.plan_id,"onUpdate:value":s[3]||(s[3]=m=>b.plan_id=m),"show-search":"",placeholder:"انتخاب پلن",options:x.value,"filter-option":V,onChange:H},null,8,["value","options"])]),_:1})],64)):(P(),M(pe,{key:1},[r.purchaseId?Y("",!0):(P(),oe(d($),{key:0,label:"کاربر",required:""},{default:l(()=>[t(d(u),{value:b.user_id,"onUpdate:value":s[4]||(s[4]=m=>b.user_id=m),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:y.value,"filter-option":ie,disabled:!!r.lockedUserId},null,8,["value","options","disabled"])]),_:1})),r.purchaseId?Y("",!0):(P(),oe(d($),{key:1,label:"پلن (اختیاری)"},{default:l(()=>[t(d(u),{value:b.plan_id,"onUpdate:value":s[5]||(s[5]=m=>b.plan_id=m),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده می‌شود",options:x.value,"filter-option":V},null,8,["value","options"])]),_:1}))],64)),t(d($),{label:r.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:r.mode==="extend"},{default:l(()=>[t(d(I),{value:b.duration_days,"onUpdate:value":s[6]||(s[6]=m=>b.duration_days=m),min:1,class:"w-full",placeholder:r.mode==="grant"?"خالی = مدت پیش‌فرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),r.mode==="grant"&&ae.value?(P(),M("div",da," مدت پیش‌فرض پلن: "+ve(ae.value.duration_days)+" روز ",1)):Y("",!0),r.mode==="grant"?(P(),M("div",ca,[ma,t(d(U),{value:v.value,"onUpdate:value":s[7]||(s[7]=m=>v.value=m),class:"flex flex-col gap-2"},{default:l(()=>[t(d(_e),{value:"none"},{default:l(()=>[N("هیچکدام — هیچ پیامی ارسال نشود")]),_:1}),t(d(_e),{value:"custom"},{default:l(()=>[N("ارسال اطلاع‌رسانی (انتخاب کانال‌ها)")]),_:1})]),_:1},8,["value"]),v.value==="custom"?(P(),M(pe,{key:0},[pa,n("div",_a,[t(d(Re),{checked:o.sms,"onUpdate:checked":s[8]||(s[8]=m=>o.sms=m)},{default:l(()=>[N("پیامک")]),_:1},8,["checked"]),t(d(Re),{checked:o.push,"onUpdate:checked":s[9]||(s[9]=m=>o.push=m)},{default:l(()=>[N("نوتیفیکیشن (Push)")]),_:1},8,["checked"]),t(d(Re),{checked:o.modal,"onUpdate:checked":s[10]||(s[10]=m=>o.modal=m)},{default:l(()=>[N("پیام مودال ورود به اپ")]),_:1},8,["checked"])]),o.sms?(P(),oe(d($),{key:0,label:"متن پیامک"},{default:l(()=>[t(d(C),{value:o.smsMessage,"onUpdate:value":s[11]||(s[11]=m=>o.smsMessage=m),rows:3,placeholder:"خالی = پیام پیش‌فرض فعال‌سازی اشتراک",maxlength:1e3,"show-count":""},null,8,["value"])]),_:1})):Y("",!0),o.push?(P(),M(pe,{key:1},[t(d($),{label:"عنوان نوتیف"},{default:l(()=>[t(d(G),{value:o.pushTitle,"onUpdate:value":s[12]||(s[12]=m=>o.pushTitle=m),placeholder:"فعال‌سازی اشتراک",maxlength:120},null,8,["value"])]),_:1}),t(d($),{label:"متن نوتیف"},{default:l(()=>[t(d(C),{value:o.pushBody,"onUpdate:value":s[13]||(s[13]=m=>o.pushBody=m),rows:3,placeholder:"خالی = متن پیش‌فرض",maxlength:500,"show-count":""},null,8,["value"])]),_:1}),t(d($),{label:"لینک نوتیف (اختیاری)"},{default:l(()=>[t(d(G),{value:o.pushUrl,"onUpdate:value":s[14]||(s[14]=m=>o.pushUrl=m),placeholder:"/"},null,8,["value"])]),_:1})],64)):Y("",!0),o.modal?(P(),M(pe,{key:2},[t(d($),{label:"عنوان مودال"},{default:l(()=>[t(d(G),{value:o.modalTitle,"onUpdate:value":s[15]||(s[15]=m=>o.modalTitle=m),placeholder:"اشتراک شما فعال شد"},null,8,["value"])]),_:1}),t(d($),{label:"متن مودال"},{default:l(()=>[t(d(C),{value:o.modalBody,"onUpdate:value":s[16]||(s[16]=m=>o.modalBody=m),rows:3,placeholder:"خالی = متن پیش‌فرض"},null,8,["value"])]),_:1}),t(d($),{label:"متن دکمه مودال"},{default:l(()=>[t(d(G),{value:o.modalCtaLabel,"onUpdate:value":s[17]||(s[17]=m=>o.modalCtaLabel=m),placeholder:"متوجه شدم"},null,8,["value"])]),_:1})],64)):Y("",!0)],64)):Y("",!0)])):Y("",!0)]),_:1})]),_:1},8,["visible","title","ok-text","confirm-loading","width"])}}});function ot(e){return e.is_percent?`${Number(e.amount)}٪`:`${Number(e.amount||0).toLocaleString("fa-IR")} ریال`}const fa=[{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:"code",key:"code",width:130},{title:"تخفیف",dataIndex:"amount",key:"amount",width:140,customRender:e=>ot(e.record)},{title:"محدودیت کل",dataIndex:"usage_limit",key:"usage_limit",width:110,align:"center",customRender:e=>e.record.usage_limit!=null?String(e.record.usage_limit):"نامحدود"},{title:"هر کاربر",dataIndex:"user_usage_limit",key:"user_usage_limit",width:100,align:"center",customRender:e=>e.record.user_usage_limit!=null?String(e.record.user_usage_limit):"نامحدود"},{title:"انقضا",dataIndex:"expires_at",key:"expires_at",width:120,customRender:e=>e.record.expires_at?be(e.record.expires_at):"نامحدود"},{title:"استفاده",dataIndex:"usage_count",key:"usage_count",width:90,align:"center",customRender:e=>String(e.record.usage_count??0)},{title:"وضعیت",dataIndex:"is_active",key:"is_active",width:100,customRender:e=>t("div",{class:"flex justify-center"},[t(Kt,{class:"px-3 font-bold py-1",textColor:e!=null&&e.record.is_active?"#65a30d":"#dc2626",bgColor:e!=null&&e.record.is_active?"#ecfccb":"#fee2e2"},{default:()=>[e!=null&&e.record.is_active?"فعال":"غیرفعال"]})])},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}],ga=[{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:"amount",key:"amount",width:150,customRender:e=>ot(e.record)},{title:"محدودیت تعداد",dataIndex:"usage_limit",key:"usage_limit",width:130,align:"center",customRender:e=>e.record.usage_limit!=null?String(e.record.usage_limit):"نامحدود"},{title:"تاریخ انقضا",dataIndex:"expires_at",key:"expires_at",width:130,customRender:e=>e.record.expires_at?be(e.record.expires_at):"نامحدود"},{title:"تعداد استفاده شده",dataIndex:"usage_count",key:"usage_count",width:140,align:"center",customRender:e=>{const p=e.record.usage_count??0,c=e.record.usage_limit;return c!=null?`${p} / ${c}`:String(p)}}];function ba(e){if(!e)return"";const p=e.replace(/\//g,"-");return new Date(`${p}T23:59:59.999Z`).toISOString()}function ya(e){return e?e.slice(0,10).replace(/-/g,"/"):""}function ut(e,p){var u;const c=!!(p!=null&&p.trim());return{title:((u=e.title)==null?void 0:u.trim())??"",code:(e.code??"").trim().toUpperCase(),is_percent:e.is_percent??!0,amount:Number(e.amount??0),expires_at:c?ba(p):null,usage_limit:e.usage_limit==null||e.usage_limit===""?null:Number(e.usage_limit),user_usage_limit:e.user_usage_limit==null||e.user_usage_limit===""?null:Number(e.user_usage_limit),plan_ids:Array.isArray(e.plan_ids)?e.plan_ids.map(I=>Number(I)).filter(I=>I>0):[],is_active:e.is_active??!0,updated_at:new Date().toISOString()}}async function rt(e,p){const u=((await je("subscription_discount_codes",{filters:[{field:"code",op:"eq",value:e}],limit:5,page:1})).rows||[]).find(I=>I.id!==p);if(u!=null&&u.id)throw new Error("این کد تخفیف قبلاً ثبت شده است")}async function dt(e){const{TableEngineRequest:p}=await Dt(()=>import("./buildSupabaseQuery-72aac971.js"),["assets/buildSupabaseQuery-72aac971.js","assets/index-c678e119.js","assets/index-0d7ad6b5.css"]),c={...e,order:e.order??"-id"},u=await p(c,"subscription_discount_codes");if(Array.isArray(u==null?void 0:u.rows)){const I=u.rows.map((L,$)=>({...L,index:$}));return{...u,rows:I}}return u}async function xa(e,p){const c=ut(e,p);return await rt(c.code),await at("subscription_discount_codes",c)}async function ha(e,p,c){const u=ut(p,c);await rt(u.code,e);const I=await lt("subscription_discount_codes",e,u);return Array.isArray(I)?I:[I]}async function wa(e){await Ft("subscription_discount_codes",e)}const ka={class:"flex justify-between items-center mb-4"},Ia=n("h2",null,"کدهای تخفیف اشتراک",-1),Sa={class:"gap-2 flex justify-center"},$a=n("span",null,"حذف",-1),Ca=n("span",null,"ویرایش",-1),Ua={class:"flex flex-col gap-2"},Ta={class:"flex flex-col gap-2"},Ra=ye({__name:"SubscriptionDiscountCodes",setup(e){const[p,c]=we(),u=h({columns:fa,api:dt,defaultPageLimit:20}),I=h(!1),L=h(!1),$=h(null),G=h(!1),C=h(!1),U=h("unlimited"),T=h("unlimited"),A=h(""),q=h(!1),B=h([]),v=Pe({title:"",code:"",is_percent:!0,amount:10,expires_at:null,usage_limit:null,user_usage_limit:1,plan_ids:[],is_active:!0});Be(U,k=>{k==="unlimited"&&(A.value="")}),Be(T,k=>{k==="unlimited"&&(v.usage_limit=null)});function E(){Object.assign(v,{title:"",code:"",is_percent:!0,amount:10,expires_at:null,usage_limit:null,user_usage_limit:1,plan_ids:[],is_active:!0}),U.value="unlimited",T.value="unlimited",A.value=""}function Z(){E(),L.value=!1,$.value=null,G.value=!1,I.value=!0}function D(){I.value=!1,G.value=!1,C.value=!1}async function b(){q.value=!0;try{const k=await et();B.value=(k||[]).map(y=>({label:y.title,value:Number(y.id)}))}catch{B.value=[]}finally{q.value=!1}}async function o(){var k,y;if(!(G.value||C.value)){if(!((k=v.title)!=null&&k.trim())||!((y=v.code)!=null&&y.trim())){_.warning("عنوان و کد تخفیف الزامی است");return}if(!v.amount||v.amount<=0){_.warning("مقدار تخفیف باید بیشتر از صفر باشد");return}if(v.is_percent&&v.amount>100){_.warning("درصد تخفیف نمی‌تواند بیشتر از ۱۰۰ باشد");return}if(U.value==="limited"&&!A.value){_.warning("تاریخ انقضا را وارد کنید");return}if(T.value==="limited"&&(!v.usage_limit||v.usage_limit<1)){_.warning("محدودیت تعداد استفاده را وارد کنید");return}C.value=!0;try{const x=U.value==="limited"?A.value:null;T.value==="unlimited"&&(v.usage_limit=null),L.value&&$.value!=null?(await ha($.value,v,x),_.success("کد تخفیف با موفقیت ویرایش شد")):(await xa(v,x),_.success("کد تخفیف با موفقیت ایجاد شد")),I.value=!1,await c()}catch(x){_.error((x==null?void 0:x.message)||"خطا در ذخیره کد تخفیف")}finally{C.value=!1}}}function te(k){k!=null&&k.id&&(E(),L.value=!0,$.value=k.id,v.title=k.title||"",v.code=k.code||"",v.is_percent=k.is_percent??!0,v.amount=Number(k.amount)||0,v.user_usage_limit=k.user_usage_limit??null,v.plan_ids=Array.isArray(k.plan_ids)?k.plan_ids.map(y=>Number(y)):[],v.is_active=k.is_active??!0,k.expires_at?(U.value="limited",A.value=ya(k.expires_at)):(U.value="unlimited",A.value=""),k.usage_limit!=null?(T.value="limited",v.usage_limit=Number(k.usage_limit)):(T.value="unlimited",v.usage_limit=null),I.value=!0)}function K(k){fe.confirm({title:"حذف کد تخفیف",content:`آیا از حذف «${k.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await wa(k.id),_.success("حذف شد"),await c()}catch(y){_.error((y==null?void 0:y.message)||"خطا در حذف")}}})}return Se(b),(k,y)=>{const x=Me,ae=Fe,ie=Le,V=zt,H=_e,le=qt,se=it,ge=nt,ue=Vt,re=Ne,de=De;return P(),M("div",null,[n("div",ka,[Ia,t(x,{type:"primary",onClick:Z},{default:l(()=>[N("افزودن کد تخفیف")]),_:1})]),t(ae,ke(u.value,{onRegister:d(p)}),{action:l(({record:S})=>[n("div",Sa,[t(d(ne),{class:"cursor-pointer"},{title:l(()=>[$a]),default:l(()=>[t(X,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:ce=>K(S)},null,8,["onClick"])]),_:2},1024),t(d(ne),{class:"cursor-pointer"},{title:l(()=>[Ca]),default:l(()=>[t(X,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:ce=>te(S)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),t(de,{visible:I.value,"onUpdate:visible":y[11]||(y[11]=S=>I.value=S),title:L.value?"ویرایش کد تخفیف":"افزودن کد تخفیف",loading:G.value,"destroy-on-close":"",onOk:o,onClose:D,width:"720px"},{default:l(()=>[t(re,{layout:"vertical",class:"grid grid-cols-1 md:grid-cols-2 gap-3"},{default:l(()=>[t(V,{label:"عنوان کد تخفیف",required:"",class:"md:col-span-2"},{default:l(()=>[t(ie,{value:v.title,"onUpdate:value":y[0]||(y[0]=S=>v.title=S),placeholder:"مثال: کمپین اینستاگرام نوروز"},null,8,["value"])]),_:1}),t(V,{label:"کد تخفیف",required:""},{default:l(()=>[t(ie,{value:v.code,"onUpdate:value":y[1]||(y[1]=S=>v.code=S),placeholder:"مثال: NOWROOZ1405",style:{"text-transform":"uppercase"}},null,8,["value"])]),_:1}),t(V,{label:"نوع تخفیف"},{default:l(()=>[t(le,{value:v.is_percent,"onUpdate:value":y[2]||(y[2]=S=>v.is_percent=S)},{default:l(()=>[t(H,{value:!0},{default:l(()=>[N("درصدی")]),_:1}),t(H,{value:!1},{default:l(()=>[N("مبلغی (ریال)")]),_:1})]),_:1},8,["value"])]),_:1}),t(V,{label:v.is_percent?"درصد تخفیف":"مبلغ تخفیف (ریال)",required:""},{default:l(()=>[t(se,{value:v.amount,"onUpdate:value":y[3]||(y[3]=S=>v.amount=S),style:{width:"100%"},min:1,max:v.is_percent?100:void 0,placeholder:"مقدار تخفیف"},null,8,["value","max"])]),_:1},8,["label"]),t(V,{label:"تاریخ انقضا"},{default:l(()=>[n("div",Ua,[t(le,{value:U.value,"onUpdate:value":y[4]||(y[4]=S=>U.value=S),class:"mb-1"},{default:l(()=>[t(H,{value:"unlimited"},{default:l(()=>[N("نامحدود")]),_:1}),t(H,{value:"limited"},{default:l(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),U.value==="limited"?(P(),oe(Gt,{key:0,value:A.value,"onUpdate:value":y[5]||(y[5]=S=>A.value=S)},null,8,["value"])):Y("",!0)])]),_:1}),t(V,{label:"محدودیت تعداد استفاده"},{default:l(()=>[n("div",Ta,[t(le,{value:T.value,"onUpdate:value":y[6]||(y[6]=S=>T.value=S),class:"mb-1"},{default:l(()=>[t(H,{value:"unlimited"},{default:l(()=>[N("نامحدود")]),_:1}),t(H,{value:"limited"},{default:l(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),T.value==="limited"?(P(),oe(se,{key:0,value:v.usage_limit,"onUpdate:value":y[7]||(y[7]=S=>v.usage_limit=S),style:{width:"100%"},min:1,placeholder:"حداکثر تعداد کل"},null,8,["value"])):Y("",!0)])]),_:1}),t(V,{label:"تعداد استفاده مجاز برای هر کاربر"},{default:l(()=>[t(se,{value:v.user_usage_limit,"onUpdate:value":y[8]||(y[8]=S=>v.user_usage_limit=S),style:{width:"100%"},min:1,placeholder:"خالی = نامحدود"},null,8,["value"])]),_:1}),t(V,{label:"اعمال روی پلن‌ها",class:"md:col-span-2"},{default:l(()=>[t(ge,{value:v.plan_ids,"onUpdate:value":y[9]||(y[9]=S=>v.plan_ids=S),mode:"multiple","allow-clear":"",style:{width:"100%"},placeholder:"خالی = همه پلن‌ها",options:B.value,loading:q.value},null,8,["value","options","loading"])]),_:1}),t(V,{label:"فعال"},{default:l(()=>[t(ue,{checked:v.is_active,"onUpdate:checked":y[10]||(y[10]=S=>v.is_active=S)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["visible","title","loading"])])}}}),Pa=n("div",{class:"mb-4"},[n("h2",null,"آمار استفاده از کدهای تخفیف")],-1),Ba=ye({__name:"SubscriptionDiscountStats",setup(e){const[p]=we(),c=h({columns:ga,api:dt,defaultPageLimit:20});return(u,I)=>{const L=Fe;return P(),M("div",null,[Pa,t(L,ke(c.value,{onRegister:d(p)}),null,16,["onRegister"])])}}}),Na="تخفیف ویژه بازگشت به مدرسه",Ae="subscription_plans_banner_image",Oe="subscription_plans_banner_visible",Ee="subscription_plan_ribbons";async function ct(e){return(await je("configs",{includeIn:{field:"key",values:e},limit:20,page:1})).rows||[]}async function Ie(e,p){var u,I;const c=await je("configs",{filters:[{field:"key",op:"eq",value:e}],limit:1,page:1});if((I=(u=c.rows)==null?void 0:u[0])!=null&&I.id){await lt("configs",c.rows[0].id,{value:p});return}await at("configs",{key:e,value:p})}function La(e){return e==null||e===""?!0:e==="yes"||e==="true"||e==="1"}async function mt(){const e=await ct([Ae,Oe]),p=Object.fromEntries(e.map(u=>[u.key,u.value??""]));return{image:String(p[Ae]||"").trim()||null,visible:La(p[Oe])}}async function Aa(e){return await Ie(Ae,e.image||""),await Ie(Oe,e.visible?"yes":"no"),mt()}async function ze(){var c;const p=(c=(await ct([Ee]))[0])==null?void 0:c.value;if(!p)return{};try{const u=JSON.parse(p);return!u||typeof u!="object"||Array.isArray(u)?{}:Object.fromEntries(Object.entries(u).map(([I,L])=>[String(I),String(L??"")]))}catch{return{}}}async function Oa(e,p){const c=await ze();c[String(e)]=p.trim(),await Ie(Ee,JSON.stringify(c))}async function Da(e){const p=await ze();Object.prototype.hasOwnProperty.call(p,String(e))&&(delete p[String(e)],await Ie(Ee,JSON.stringify(p)))}function Fa(e,p,c){const u=String(e);return Object.prototype.hasOwnProperty.call(c,u)?c[u]:Number(p)>0?Na:""}const Ma={class:"flex justify-between items-center mb-4"},ja=n("h2",null,"لیست خرید اشتراک",-1),Ea={class:"flex gap-2"},za={class:"gap-2 flex justify-center"},qa=n("span",null,"تمدید",-1),Va=n("span",null,"لغو اشتراک",-1),Ga=n("span",null,"حذف",-1),Ka={class:"flex justify-between items-center mb-4"},Ja=n("h2",null,"مدیریت اشتراک‌ها",-1),Ya={class:"rounded-xl border border-gray-200 p-4 mb-4"},Za=n("div",{class:"font-semibold mb-1"},"بنر لیست اشتراک",-1),Ha=n("div",{class:"text-sm text-gray-500 mb-3"}," این تصویر بالای لیست پلن‌ها در اپ کاربر نمایش داده می‌شود. تا وقتی تصویری آپلود و ذخیره نشود، بنر در اپ دیده نمی‌شود. ",-1),Wa={class:"flex items-center gap-2 mb-3"},Xa={class:"text-sm text-gray-600"},Qa={key:0},el=n("div",null,"آپلود تصویر بنر",-1),tl={class:"gap-2 flex justify-center"},al=n("span",null,"حذف",-1),ll=n("span",null,"ویرایش",-1),nl=n("div",{class:"mb-4"},[n("h2",null,"تنظیمات درگاه پرداخت")],-1),il={class:"space-y-4 relative"},sl={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},ol={class:"grid grid-cols-2 gap-4"},ul=n("div",{class:"mb-1 text-sm text-gray-600"},"عنوان اشتراک",-1),rl=n("div",{class:"mb-1 text-sm text-gray-600"},"مدت اشتراک (روز)",-1),dl={class:"grid grid-cols-3 gap-4"},cl=n("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),ml=n("div",{class:"mb-1 text-sm text-gray-600"},"تخفیف (درصد)",-1),pl=n("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),_l={class:"mt-2 font-semibold text-green-700"},vl={class:"grid grid-cols-2 gap-4"},fl=n("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),gl=n("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),bl={class:"flex items-center gap-2 mt-2"},yl={class:"text-sm text-gray-600"},xl=n("div",{class:"mb-1 text-sm text-gray-600"},"متن روبان روی کارت",-1),hl=n("div",{class:"text-xs text-gray-500 mt-1"}," روی کارت همین پلن در اپ کاربر نشان داده می‌شود. اگر خالی ذخیره شود، روبان نمایش داده نمی‌شود. ",-1),wl=n("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),kl={class:"flex justify-center"},Il=n("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),Sl={key:0},$l=n("div",null,"آپلود تصویر",-1),On=ye({__name:"index",setup(e){const p=Je,c=Je.TabPane,u=h("purchases"),I=h(!1),L=h(!1),$=h(null),[G,C]=we(),[U,T]=we(),A=h(!1),q=h("grant"),B=h(null),v=h(null),E=h(!1),Z=h([]),D=h(0),b=h(""),o=h({}),te=h(!1),K=h({image:null,visible:!0}),k=h([]),y=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,duration_days:30,is_active:!0,sort_order:0}),x=h(y()),ae=Q(()=>St(Number(x.value.price),Number(x.value.discount_percent)).toLocaleString("fa-IR")),ie={columns:Yt,api:$t,defaultPageLimit:20},V={columns:Ht,api:Ct,defaultPageLimit:20};function H(){x.value=y(),Z.value=[],b.value=""}function le(i){K.value=i;const a=Ue(i.image)||null;K.value.image=a;const f=a?Te(a):null;k.value=f?[{uid:"-banner",name:"banner.jpg",status:"done",url:f,response:{path:a}}]:[]}async function se(){try{const[i,a]=await Promise.all([mt(),ze()]);le(i),o.value=a}catch(i){_.error((i==null?void 0:i.message)||"خطا در بارگذاری تنظیمات نمایش اشتراک")}}function ge(){return K.value.image=null,!0}async function ue(){if(D.value>0){_.warning("لطفاً تا پایان آپلود صبر کنید");return}te.value=!0;try{const i=await Aa({image:K.value.image,visible:K.value.visible});le(i),_.success(i.visible?"بنر ذخیره شد":"بنر مخفی شد")}catch(i){_.error((i==null?void 0:i.message)||"خطا در ذخیره بنر")}finally{te.value=!1}}function re(){L.value=!1,$.value=null,H(),I.value=!0}function de(){I.value=!1,H()}function S(i){return i.type.startsWith("image/")?i.size/1024/1024>=5?(_.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(_.error("فقط فایل تصویری مجاز است"),!1)}async function ce(i,a){const{file:f,onSuccess:w,onError:z,onProgress:J}=i,me=new FormData;me.append("file",f);const $e=`${Mt}/upload/machartaa-img`;D.value++,await new Promise((Ce,g)=>{const O=new XMLHttpRequest;O.open("POST",$e);const ft=jt()||localStorage.getItem("tamin_token")||"";O.setRequestHeader("Authorization",`Bearer ${ft}`),O.upload.onprogress=F=>{F.lengthComputable&&(J==null||J({percent:Math.round(F.loaded/F.total*100)}))},O.onload=()=>{if(O.status>=200&&O.status<300)try{const F=JSON.parse(O.responseText||"{}"),gt=F.full_src||F.url||F.src||F.path||F.data&&(F.data.full_src||F.data.url||F.data.src||F.data.path)||"",Ve=Ue(gt),bt=Te(Ve);a(Ve,bt),w==null||w(F,O),_.success("تصویر با موفقیت آپلود شد!"),Ce()}catch(F){z==null||z(F,O),g(F)}else z==null||z(new Error("خطا در آپلود تصویر"),O),g(new Error("خطا در آپلود تصویر"))},O.onerror=()=>{z==null||z(new Error("خطا در آپلود تصویر"),O),g(new Error("خطا در آپلود تصویر"))},O.onloadend=()=>{D.value=Math.max(0,D.value-1)},O.send(me)})}function r(i,a,f){i.value=f?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:f,response:{path:a}}]:[]}function s(i){return ce(i,(a,f)=>{x.value.image_url=a,r(Z,a,f)})}function R(i){return ce(i,(a,f)=>{K.value.image=a,r(k,a,f)})}function m(i){if(Array.isArray(i))return m(i[0]);if(!i||typeof i!="object")return null;const a=i,f=Number(a.id);return Number.isFinite(f)?f:a.data!=null?m(a.data):null}async function W(){var i;if(D.value>0){_.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((i=x.value.title)!=null&&i.trim())){_.warning("عنوان الزامی است");return}if(!x.value.duration_days||Number(x.value.duration_days)<1){_.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}try{const a={...x.value,price:Number(x.value.price)||0,discount_percent:Number(x.value.discount_percent)||0,duration_days:Number(x.value.duration_days),sort_order:Number(x.value.sort_order)||0};let f=$.value;if(L.value&&$.value)await Ut($.value,a);else{const w=await Tt(a);f=m(w)}f?(await Oa(f,b.value),o.value={...o.value,[String(f)]:b.value.trim()},_.success(L.value?"اشتراک ویرایش شد":"اشتراک افزوده شد")):_.warning("اشتراک ذخیره شد، اما متن روبان ذخیره نشد. پلن را دوباره ویرایش کنید."),de(),await C()}catch(a){_.error((a==null?void 0:a.message)||"خطا در ذخیره")}}function ee(i){L.value=!0,$.value=i.id;const a=Ue(i.image_url)||null;x.value={title:i.title||"",description:i.description||"",image_url:a,price:i.price||0,discount_percent:i.discount_percent||0,duration_days:i.duration_days||30,is_active:i.is_active??!0,sort_order:i.sort_order??0},b.value=Fa(i.id,i.discount_percent,o.value);const f=a?Te(a):null;Z.value=f?[{uid:"-1",name:"image.jpg",status:"done",url:f,response:{path:a}}]:[],I.value=!0}function j(i){fe.confirm({title:"حذف اشتراک",content:`آیا از حذف «${i.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Rt(i.id),await Da(i.id);const a={...o.value};delete a[String(i.id)],o.value=a,_.success("حذف شد"),await C()}catch(a){_.error((a==null?void 0:a.message)||"خطا در حذف")}}})}async function xe(i){try{await Pt(i.id,!i.is_active),_.success("وضعیت به‌روز شد"),await C()}catch(a){_.error((a==null?void 0:a.message)||"خطا")}}Se(()=>{se()});function he(){q.value="grant",B.value=null,v.value=null,A.value=!0}async function pt(){E.value||fe.confirm({title:"همگام‌سازی پرداخت‌های زرین‌پال",content:"لیست تراکنش‌های موفقِ اعتبارسنجی‌نشده از زرین‌پال گرفته می‌شود، با توکن تراکنش‌های اشتراک تطبیق داده می‌شود و در صورت تطبیق، اشتراک کاربر فعال می‌شود. ادامه می‌دهید؟",okText:"همگام‌سازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var i,a;E.value=!0;try{const f=await Bt(),w=(f==null?void 0:f.data)??f,z=Number((w==null?void 0:w.reconciled_count)||0),J=Number((w==null?void 0:w.total_zarinpal)||0),me=Number((w==null?void 0:w.matched_count)||0);z>0?_.success((w==null?void 0:w.message)||`${z} اشتراک فعال شد.`):_.info((w==null?void 0:w.message)||(J>0?`از ${J} تراکنش زرین‌پال، ${me} مورد با اشتراک محلی تطبیق خورد ولی فعال‌سازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجی‌نشده‌ای در زرین‌پال یافت نشد.")),await T()}catch(f){_.error(((a=(i=f==null?void 0:f.response)==null?void 0:i.data)==null?void 0:a.message)||(f==null?void 0:f.message)||"خطا در همگام‌سازی پرداخت‌ها")}finally{E.value=!1}}})}function qe(i){q.value="extend",B.value=(i==null?void 0:i.id)??null,v.value=(i==null?void 0:i.user_id)??null,A.value=!0}function _t(i){fe.confirm({title:"لغو اشتراک",content:`اشتراک «${i.plan_title}» برای ${i.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع می‌شود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,f;try{await Nt(i.id),_.success("اشتراک لغو شد"),await T()}catch(w){_.error(((f=(a=w==null?void 0:w.response)==null?void 0:a.data)==null?void 0:f.message)||(w==null?void 0:w.message)||"خطا در لغو")}}})}function vt(i){fe.confirm({title:"حذف کامل",content:`رکورد خرید «${i.plan_title}» برای ${i.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,f;try{await Lt(i.id),_.success("حذف شد"),await T()}catch(w){_.error(((f=(a=w==null?void 0:w.response)==null?void 0:a.data)==null?void 0:f.message)||(w==null?void 0:w.message)||"خطا در حذف")}}})}return(i,a)=>{const f=Me,w=Fe,z=Qe,J=Xe,me=xt,$e=De,Ce=yt;return P(),M("div",null,[t(Ce,null,{default:l(()=>[t(d(p),{activeKey:u.value,"onUpdate:activeKey":a[4]||(a[4]=g=>u.value=g)},{default:l(()=>[t(d(c),{key:"purchases",tab:"خریدهای کاربران"},{default:l(()=>[n("div",Ma,[ja,n("div",Ea,[t(f,{loading:E.value,onClick:pt},{default:l(()=>[N(" همگام‌سازی پرداخت‌های زرین‌پال ")]),_:1},8,["loading"]),t(f,{onClick:a[0]||(a[0]=g=>qe())},{default:l(()=>[N("تمدید اشتراک")]),_:1}),t(f,{type:"primary",onClick:a[1]||(a[1]=g=>he())},{default:l(()=>[N("ایجاد اشتراک برای کاربر")]),_:1})])]),t(w,ke(V,{onRegister:d(U)}),{action:l(({record:g})=>[n("div",za,[t(d(ne),{class:"cursor-pointer"},{title:l(()=>[qa]),default:l(()=>[t(X,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:O=>qe(g)},null,8,["onClick"])]),_:2},1024),t(d(ne),{class:"cursor-pointer"},{title:l(()=>[Va]),default:l(()=>[t(X,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:O=>_t(g)},null,8,["onClick"])]),_:2},1024),t(d(ne),{class:"cursor-pointer"},{title:l(()=>[Ga]),default:l(()=>[t(X,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:O=>vt(g)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(d(c),{key:"plans",tab:"پلن‌های اشتراک"},{default:l(()=>[n("div",Ka,[Ja,t(f,{type:"primary",onClick:re},{default:l(()=>[N("افزودن اشتراک")]),_:1})]),n("div",Ya,[Za,Ha,n("div",Wa,[t(z,{value:K.value.visible,"onUpdate:value":a[2]||(a[2]=g=>K.value.visible=g)},null,8,["value"]),n("span",Xa,ve(K.value.visible?"نمایش بنر":"بنر مخفی است"),1)]),t(d(Ye),{"file-list":k.value,"onUpdate:fileList":a[3]||(a[3]=g=>k.value=g),"before-upload":S,"custom-request":R,accept:"image/jpeg,image/png,image/webp,image/gif,image/heic,image/heif,.jpg,.jpeg,.png,.webp,.gif,.heic,.heif","max-count":1,"list-type":"picture-card",onRemove:ge},{default:l(()=>[k.value.length<1?(P(),M("div",Qa,[t(X,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),el])):Y("",!0)]),_:1},8,["file-list"]),t(f,{type:"primary",class:"mt-2",loading:te.value,onClick:ue},{default:l(()=>[N(" ذخیره بنر ")]),_:1},8,["loading"])]),t(w,ke(ie,{ref:"table",onRegister:d(G)}),{action:l(({record:g})=>[n("div",tl,[t(d(ne),{class:"cursor-pointer"},{title:l(()=>[n("span",null,ve(g.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:l(()=>[t(X,{icon:g.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:g.is_active?"#F59E0B":"#16A34A",onClick:O=>xe(g)},null,8,["icon","color","onClick"])]),_:2},1024),t(d(ne),{class:"cursor-pointer"},{title:l(()=>[al]),default:l(()=>[t(X,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:O=>j(g)},null,8,["onClick"])]),_:2},1024),t(d(ne),{class:"cursor-pointer"},{title:l(()=>[ll]),default:l(()=>[t(X,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:O=>ee(g)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(d(c),{key:"gateway",tab:"تنظیمات درگاه (زرین‌پال)"},{default:l(()=>[nl,t(ua)]),_:1}),t(d(c),{key:"discount-codes",tab:"کد تخفیف"},{default:l(()=>[t(Ra)]),_:1}),t(d(c),{key:"discount-stats",tab:"آمار کدهای تخفیف"},{default:l(()=>[t(Ba)]),_:1})]),_:1},8,["activeKey"]),t($e,{visible:I.value,"onUpdate:visible":a[14]||(a[14]=g=>I.value=g),title:L.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:W,onCancel:de,width:"70%",confirmLoading:D.value>0},{default:l(()=>[n("div",il,[D.value>0?(P(),M("div",sl,[t(d(Jt),{size:"large"})])):Y("",!0),n("div",ol,[n("div",null,[ul,t(J,{value:x.value.title,"onUpdate:value":a[5]||(a[5]=g=>x.value.title=g),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),n("div",null,[rl,t(J,{value:x.value.duration_days,"onUpdate:value":a[6]||(a[6]=g=>x.value.duration_days=g),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),n("div",dl,[n("div",null,[cl,t(J,{value:x.value.price,"onUpdate:value":a[7]||(a[7]=g=>x.value.price=g),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),n("div",null,[ml,t(J,{value:x.value.discount_percent,"onUpdate:value":a[8]||(a[8]=g=>x.value.discount_percent=g),type:"number",min:"0",max:"100",placeholder:"0"},null,8,["value"])]),n("div",null,[pl,n("div",_l,ve(ae.value),1)])]),n("div",vl,[n("div",null,[fl,t(J,{value:x.value.sort_order,"onUpdate:value":a[9]||(a[9]=g=>x.value.sort_order=g),type:"number",placeholder:"0"},null,8,["value"])]),n("div",null,[gl,n("div",bl,[t(z,{value:x.value.is_active,"onUpdate:value":a[10]||(a[10]=g=>x.value.is_active=g)},null,8,["value"]),n("span",yl,ve(x.value.is_active?"فعال":"غیرفعال"),1)])])]),n("div",null,[xl,t(J,{value:b.value,"onUpdate:value":a[11]||(a[11]=g=>b.value=g),placeholder:"مثلاً تخفیف ویژه بازگشت به مدرسه"},null,8,["value"]),hl]),n("div",null,[wl,t(me,{value:x.value.description,"onUpdate:value":a[12]||(a[12]=g=>x.value.description=g),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),n("div",kl,[n("div",null,[Il,t(d(Ye),{"file-list":Z.value,"onUpdate:fileList":a[13]||(a[13]=g=>Z.value=g),"before-upload":S,"custom-request":s,accept:"image/jpeg,image/png,image/webp,image/gif,image/heic,image/heif,.jpg,.jpeg,.png,.webp,.gif,.heic,.heif","max-count":1,"list-type":"picture-card"},{default:l(()=>[Z.value.length<1?(P(),M("div",Sl,[t(X,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),$l])):Y("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),t(va,{visible:A.value,"onUpdate:visible":a[15]||(a[15]=g=>A.value=g),mode:q.value,"purchase-id":B.value,"locked-user-id":v.value,onSuccess:d(T)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{On as default};