Files
machartaa_admin_dist/dist/assets/index-63623676.js
T

2 lines
51 KiB
JavaScript

import{_ as wt}from"./BasicMainCard-4c879cc2.js";import{_ as Oe}from"./BasicModal.vue_vue_type_style_index_0_lang-c3b69d02.js";import{_ as kt}from"./BasicTextArea.vue_vue_type_style_index_0_lang-a60ebddb.js";import{_ as Qe}from"./BasicInput.vue_vue_type_style_index_0_lang-9a0053be.js";import{_ as et}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-fb5041dc.js";import{_ as Fe,u as ke}from"./useBaseTable-e35ecaa9.js";import{_ as Me}from"./button.vue_vue_type_style_index_0_lang-b32e1136.js";import{f as It,g as tt,a as St,b as $t,c as Ct,d as Ut,e as Rt,h as Tt,i as Pt,v as Nt,u as Bt,j as Lt,k as At,t as Dt,l as Ot,m as Ft,n as Mt}from"./subscription-65d181a1.js";import{t as be}from"./useDataTime-c7be2668.js";import{I as Q}from"./Icon-85823aa3.js";import{R as at,d as xe,i as w,j as ee,x as $e,H as _,o as P,c as E,F as _e,b as i,e as t,t as re,s as jt,w as n,f as N,h as Ne,z as ye,k as de,l as r,n as V,bK as Et,_ as zt,I as nt,J as lt,K as qt,O as je,L as Ie,M as Gt}from"./index-90ac1a44.js";import{g as Vt}from"./index-ca449155.js";import{e as Re,g as Te}from"./convert-2ad76038.js";import{_ as Kt,v as Ke,t as Je}from"./AudienceSegmentPicker.vue_vue_type_script_setup_true_lang-d8f56f1f.js";import{F as Be,_ as Jt}from"./index-03d99677.js";import{I as Le}from"./index-027c2128.js";import{R as ie,C as Pe,b as Yt}from"./index-788f312f.js";import{M as ve,_ as Zt}from"./index-a413fea1.js";import{_ as it}from"./index-a2503c07.js";import{I as Ee}from"./index-1b39f49f.js";import{_ as Ht}from"./InputDatePicker.vue_vue_type_script_setup_true_lang-3e1713bc.js";import{_ as Wt}from"./CustomTag.vue_vue_type_script_setup_true_lang-6fd0c60b.js";import{T as le}from"./isSymbol-9094e8b7.js";import{T as Ye}from"./index-4d938e91.js";import{S as Xt}from"./index-93d9312f.js";import{U as Ze}from"./index-e50485ad.js";import"./Grid-839ef6d1.js";import"./index-109c99be.js";import"./Col-fddaa6b7.js";import"./styleChecker-1445806f.js";import"./isPlainObject-aab367ce.js";import"./vnode-b0455438.js";import"./_plugin-vue_export-helper-8ee86600.js";import"./usePrice-bc935b83.js";import"./updateLocale-cec40f3d.js";import"./index-cfa536c5.js";import"./shallowequal-36516cfd.js";import"./useState-64f2823f.js";import"./useMemo-9928f29b.js";import"./FormItemContext-64f846db.js";import"./omit-84d71e15.js";import"./lodash-07b825be.js";import"./index-95b42b3e.js";import"./Badge-54a9cc4e.js";import"./isNumeric-3f69e2aa.js";import"./index-5f5223b4.js";import"./index-c0eeee91.js";import"./index-bb804fdd.js";import"./supabaseTableQuery-19bc7c1f.js";import"./dayjs-58e37d43.js";import"./index-08d487b9.js";import"./_flatRest-f2577aae.js";import"./toArray-3936b2d5.js";import"./index-9869a66e.js";import"./SearchOutlined-0eaaa97a.js";import"./index-90f5ddad.js";import"./DialogWrap-6616a498.js";import"./pickAttrs-ba13e92c.js";import"./css-aae66f86.js";import"./isMobile-e2e89480.js";import"./useRefs-2a883b79.js";import"./index-ebd9fdbb.js";function He(e){return Number(e||0).toLocaleString("fa-IR")}const Qt=[{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=>He(e.record.price)},{title:"تخفیف",dataIndex:"discount_percent",key:"discount_percent",width:120,align:"center",customRender:e=>It(Number(e.record.discount_percent||0),e.record.discount_type||"percent")},{title:"قیمت نهایی",dataIndex:"final_price",key:"final_price",customRender:e=>He(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 ea(e){return Number(e||0).toLocaleString("fa-IR")}const We={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},Xe={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},ta=[{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=>ea(e.record.final_price)},{title:"پرداخت",dataIndex:"payment_status",key:"payment_status",type:"Select",filterField:"payment_status",sortField:"payment_status",filterComponentProps:{options:Object.entries(We).map(([e,v])=>({label:v,value:e})),allowClear:!0,placeholder:"انتخاب وضعیت پرداخت"},customRender:e=>We[e.record.payment_status]||e.record.payment_status},{title:"وضعیت",dataIndex:"status",key:"status",type:"Select",filterField:"status",sortField:"status",filterComponentProps:{options:Object.entries(Xe).map(([e,v])=>({label:v,value:e})),allowClear:!0,placeholder:"انتخاب وضعیت"},customRender:e=>Xe[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 at.get("/admin/subscription/payment-gateway")}async function aa(e){return(await at.put("/admin/subscription/payment-gateway",e)).settings??await st()}const na={class:"max-w-2xl space-y-4"},la=i("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم می‌شود. اپ کاربر از همین تنظیمات برای اتصال به زرین‌پال استفاده می‌کند. ",-1),ia={key:0,class:"py-8 text-center"},sa=i("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرین‌پال (Merchant ID)",-1),oa=i("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),ua=i("div",{class:"text-xs text-gray-500 mt-1"},[N(" مسیر callback به‌صورت خودکار اضافه می‌شود: "),i("code",null,"/subscriptions/callback")],-1),ra={class:"flex items-center gap-3"},da=i("span",{class:"text-sm"},"فعال بودن درگاه زرین‌پال",-1),ca={class:"flex items-center gap-3"},ma=i("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),pa=xe({__name:"PaymentGatewaySettings",setup(e){const v=w(!0),m=w(!1),u=w({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),I=ee(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?!0:!!((C=u.value.zarinpal_merchant_id)!=null&&C.trim()):!1}),z=ee(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرین‌پال انجام می‌شود.":(C=u.value.zarinpal_merchant_id)!=null&&C.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمی‌توانند پرداخت کنند."}),R=ee(()=>I.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");$e(async()=>{try{u.value=await st()}catch(C){_.error((C==null?void 0:C.message)||"خطا در بارگذاری تنظیمات")}finally{v.value=!1}});async function F(){var C,S;if(!((C=u.value.subscription_app_callback_url)!=null&&C.trim())){_.warning("آدرس بازگشت از درگاه الزامی است");return}if(u.value.zarinpal_enabled&&!u.value.zarinpal_sandbox&&!((S=u.value.zarinpal_merchant_id)!=null&&S.trim())){_.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}m.value=!0;try{u.value=await aa(u.value),_.success("تنظیمات درگاه ذخیره شد")}catch(B){_.error((B==null?void 0:B.message)||"خطا در ذخیره")}finally{m.value=!1}}return(C,S)=>{const B=Qe,D=et,K=Me;return P(),E("div",na,[la,v.value?(P(),E("div",ia,"در حال بارگذاری...")):(P(),E(_e,{key:1},[i("div",null,[sa,t(B,{value:u.value.zarinpal_merchant_id,"onUpdate:value":S[0]||(S[0]=T=>u.value.zarinpal_merchant_id=T),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),i("div",null,[oa,t(B,{value:u.value.subscription_app_callback_url,"onUpdate:value":S[1]||(S[1]=T=>u.value.subscription_app_callback_url=T),placeholder:"https://macharta.ir"},null,8,["value"]),ua]),i("div",ra,[t(D,{value:u.value.zarinpal_enabled,"onUpdate:value":S[2]||(S[2]=T=>u.value.zarinpal_enabled=T)},null,8,["value"]),da]),i("div",ca,[t(D,{value:u.value.zarinpal_sandbox,"onUpdate:value":S[3]||(S[3]=T=>u.value.zarinpal_sandbox=T)},null,8,["value"]),ma]),i("div",{class:jt(["rounded-lg border p-3 text-sm",R.value])},re(z.value),3),t(K,{type:"primary",loading:m.value,onClick:F},{default:n(()=>[N(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),_a={key:1,class:"mb-4"},va={key:2,class:"text-sm text-gray-500 mb-3"},fa={key:3,class:"border-t border-gray-200 pt-4 space-y-3"},ga=i("div",{class:"font-semibold text-gray-700"},"اطلاع‌رسانی بعد از اعطا",-1),ba=i("p",{class:"text-xs text-gray-500 m-0"}," یک یا چند کانال را انتخاب کنید. در صورت خالی بودن متن، پیام پیش‌فرض ارسال می‌شود. ",-1),ya={class:"flex flex-col gap-2"},xa=xe({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(e,{emit:v}){const m=e,u=it,I=Ee,z=Be,R=Be.Item,F=Le,C=Le.TextArea,S=ie.Group,B=w(!1),D=w([]),K=w([]),T=w("user"),f=w("none"),q=w({segments:[]}),te=w(!1),G=w(""),h=Ne({user_id:void 0,plan_id:void 0,duration_days:null}),o=Ne({sms:!1,push:!1,modal:!1,smsMessage:"",pushTitle:"",pushBody:"",pushUrl:"/",modalTitle:"",modalBody:"",modalCtaLabel:"متوجه شدم"}),J=ee({get:()=>m.visible,set:d=>v("update:visible",d)}),H=ee(()=>m.mode==="grant"?"ایجاد اشتراک برای کاربر / دسته":"تمدید اشتراک"),k=ee(()=>m.mode!=="grant"?"تمدید":T.value==="segment"?"اعطای اشتراک به دسته":"ایجاد اشتراک"),y=ee(()=>D.value.map(d=>{const s=d.name||`${d.first_name||""} ${d.last_name||""}`.trim()||"بدون نام",U=d.phone||"";return{value:d.id,label:U?`${s} — ${U}`:s,searchText:`${s} ${U}`.toLowerCase()}})),L=ee(()=>K.value.map(d=>({value:d.id,label:`${d.title} (${d.duration_days} روز)${d.is_active?"":" — غیرفعال"}`,searchText:String(d.title||"").toLowerCase()}))),Y=ee(()=>K.value.find(d=>d.id===h.plan_id)||null);function ne(d,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(d.toLowerCase())}function c(d,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(d.toLowerCase())}function W(){m.mode==="grant"&&Y.value&&!h.duration_days&&(h.duration_days=Number(Y.value.duration_days)||null)}function se(){f.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 oe(){if(f.value!=="custom"||!o.sms&&!o.push&&!o.modal)return;const d={sms:o.sms,push:o.push,modal:o.modal};return o.sms&&o.smsMessage.trim()&&(d.smsMessage=o.smsMessage.trim()),o.push&&(o.pushTitle.trim()&&(d.pushTitle=o.pushTitle.trim()),o.pushBody.trim()&&(d.pushBody=o.pushBody.trim()),o.pushUrl.trim()&&(d.pushUrl=o.pushUrl.trim())),o.modal&&(o.modalTitle.trim()&&(d.modalTitle=o.modalTitle.trim()),o.modalBody.trim()&&(d.modalBody=o.modalBody.trim()),o.modalCtaLabel.trim()&&(d.modalCtaLabel=o.modalCtaLabel.trim())),d}function ce(){h.user_id=m.lockedUserId||void 0,h.plan_id=void 0,h.duration_days=m.mode==="extend"?30:null,T.value="user",q.value={segments:[]},G.value="",se()}function ue(){v("update:visible",!1)}async function me(){try{const[d,s]=await Promise.all([Et(),tt()]);D.value=d||[],K.value=s||[]}catch(d){_.error((d==null?void 0:d.message)||"خطا در بارگذاری اطلاعات")}}async function fe(){var s,U;const d=Ke(q.value);if(d){_.warning(d);return}te.value=!0,G.value="";try{const p=Je(q.value),X=await St(p),ae=Number((X==null?void 0:X.userCount)??0),O=Array.isArray(X==null?void 0:X.progressItems)?X.progressItems:[];O.length===1?G.value=`${ae.toLocaleString("fa-IR")} کاربر (همان آمار پیشرفت چالش ${O[0].sort_order})`:O.length>1?G.value=`${ae.toLocaleString("fa-IR")} کاربر یکتا در ${O.length.toLocaleString("fa-IR")} چالش با این شماره`:G.value=`حدود ${ae.toLocaleString("fa-IR")} کاربر مخاطب این اعطا خواهند بود`}catch(p){_.error(((U=(s=p==null?void 0:p.response)==null?void 0:s.data)==null?void 0:U.message)||(p==null?void 0:p.message)||"خطا در پیش‌نمایش مخاطب")}finally{te.value=!1}}function $(d){return new Promise(s=>{ve.confirm({title:"اعطای اشتراک گروهی",content:d?`آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟ (${d})`:"آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟",okText:"بله، اعطا شود",cancelText:"انصراف",onOk:()=>s(!0),onCancel:()=>s(!1)})})}async function ge(){var d,s;if(m.mode==="grant"){if(!h.plan_id){_.warning("پلن را انتخاب کنید");return}if(T.value==="user"){if(!h.user_id){_.warning("کاربر را انتخاب کنید");return}}else{const U=Ke(q.value);if(U){_.warning(U);return}}if(f.value==="custom"&&!o.sms&&!o.push&&!o.modal){_.warning("حداقل یک کانال اطلاع‌رسانی را انتخاب کنید، یا گزینه «هیچکدام» را بزنید");return}}if(m.mode==="extend"){if(!m.purchaseId&&!h.user_id){_.warning("کاربر را انتخاب کنید");return}if(!h.duration_days||h.duration_days<1){_.warning("مدت تمدید را وارد کنید");return}}B.value=!0;try{const U=m.mode==="grant"?oe():void 0;if(m.mode==="grant"&&T.value==="segment"){const p=Je(q.value);if(!await $(G.value||void 0))return;const ae={plan_id:h.plan_id,...p};h.duration_days&&h.duration_days>0&&(ae.duration_days=Number(h.duration_days)),U&&(ae.notify=U);const O=await $t(ae),he=Number((O==null?void 0:O.granted)??0),we=Number((O==null?void 0:O.failed)??0);we>0?_.warning(`اشتراک برای ${he.toLocaleString("fa-IR")} کاربر ایجاد شد؛ ${we.toLocaleString("fa-IR")} مورد ناموفق`):_.success((O==null?void 0:O.message)||`اشتراک برای ${he.toLocaleString("fa-IR")} کاربر ایجاد شد`)}else if(m.mode==="grant"){const p={user_id:h.user_id,plan_id:h.plan_id};h.duration_days&&h.duration_days>0&&(p.duration_days=Number(h.duration_days)),U&&(p.notify=U),await Ct(p),_.success("اشتراک ایجاد شد")}else await Ut({purchase_id:m.purchaseId||void 0,user_id:m.purchaseId?void 0:h.user_id,plan_id:h.plan_id||void 0,duration_days:Number(h.duration_days)}),_.success("اشتراک تمدید شد");v("success"),ue()}catch(U){_.error(((s=(d=U==null?void 0:U.response)==null?void 0:d.data)==null?void 0:s.message)||(U==null?void 0:U.message)||"خطا در ذخیره")}finally{B.value=!1}}return ye(()=>m.visible,d=>{d&&(ce(),(!D.value.length||!K.value.length)&&me())}),$e(()=>{me()}),(d,s)=>{const U=Oe;return P(),de(U,{visible:J.value,"onUpdate:visible":s[18]||(s[18]=p=>J.value=p),title:H.value,"ok-text":k.value,"cancel-text":"انصراف","confirm-loading":B.value,width:d.mode==="grant"?"760px":"560px",onOk:ge,onCancel:ue},{default:n(()=>[t(r(z),{layout:"vertical",class:"max-h-[75vh] overflow-y-auto pe-1"},{default:n(()=>[d.mode==="grant"?(P(),E(_e,{key:0},[t(r(R),{label:"مخاطب",required:""},{default:n(()=>[t(r(S),{value:T.value,"onUpdate:value":s[0]||(s[0]=p=>T.value=p),class:"flex flex-col gap-2"},{default:n(()=>[t(r(ie),{value:"user"},{default:n(()=>[N("یک کاربر")]),_:1}),t(r(ie),{value:"segment"},{default:n(()=>[N("دسته کاربران (مثلاً چالش nام را انجام داده‌اند)")]),_:1})]),_:1},8,["value"])]),_:1}),T.value==="user"?(P(),de(r(R),{key:0,label:"کاربر",required:""},{default:n(()=>[t(r(u),{value:h.user_id,"onUpdate:value":s[1]||(s[1]=p=>h.user_id=p),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:y.value,"filter-option":ne,disabled:!!d.lockedUserId},null,8,["value","options","disabled"])]),_:1})):(P(),E("div",_a,[t(Kt,{modelValue:q.value,"onUpdate:modelValue":s[2]||(s[2]=p=>q.value=p),"show-actions":!1,"show-preview":!0,"title-text":"دسته مخاطب برای اعطای اشتراک","preview-loading":te.value,"preview-text":G.value,onPreview:fe},null,8,["modelValue","preview-loading","preview-text"])])),t(r(R),{label:"پلن اشتراک",required:""},{default:n(()=>[t(r(u),{value:h.plan_id,"onUpdate:value":s[3]||(s[3]=p=>h.plan_id=p),"show-search":"",placeholder:"انتخاب پلن",options:L.value,"filter-option":c,onChange:W},null,8,["value","options"])]),_:1})],64)):(P(),E(_e,{key:1},[d.purchaseId?V("",!0):(P(),de(r(R),{key:0,label:"کاربر",required:""},{default:n(()=>[t(r(u),{value:h.user_id,"onUpdate:value":s[4]||(s[4]=p=>h.user_id=p),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:y.value,"filter-option":ne,disabled:!!d.lockedUserId},null,8,["value","options","disabled"])]),_:1})),d.purchaseId?V("",!0):(P(),de(r(R),{key:1,label:"پلن (اختیاری)"},{default:n(()=>[t(r(u),{value:h.plan_id,"onUpdate:value":s[5]||(s[5]=p=>h.plan_id=p),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده می‌شود",options:L.value,"filter-option":c},null,8,["value","options"])]),_:1}))],64)),t(r(R),{label:d.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:d.mode==="extend"},{default:n(()=>[t(r(I),{value:h.duration_days,"onUpdate:value":s[6]||(s[6]=p=>h.duration_days=p),min:1,class:"w-full",placeholder:d.mode==="grant"?"خالی = مدت پیش‌فرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),d.mode==="grant"&&Y.value?(P(),E("div",va," مدت پیش‌فرض پلن: "+re(Y.value.duration_days)+" روز ",1)):V("",!0),d.mode==="grant"?(P(),E("div",fa,[ga,t(r(S),{value:f.value,"onUpdate:value":s[7]||(s[7]=p=>f.value=p),class:"flex flex-col gap-2"},{default:n(()=>[t(r(ie),{value:"none"},{default:n(()=>[N("هیچکدام — هیچ پیامی ارسال نشود")]),_:1}),t(r(ie),{value:"custom"},{default:n(()=>[N("ارسال اطلاع‌رسانی (انتخاب کانال‌ها)")]),_:1})]),_:1},8,["value"]),f.value==="custom"?(P(),E(_e,{key:0},[ba,i("div",ya,[t(r(Pe),{checked:o.sms,"onUpdate:checked":s[8]||(s[8]=p=>o.sms=p)},{default:n(()=>[N("پیامک")]),_:1},8,["checked"]),t(r(Pe),{checked:o.push,"onUpdate:checked":s[9]||(s[9]=p=>o.push=p)},{default:n(()=>[N("نوتیفیکیشن (Push)")]),_:1},8,["checked"]),t(r(Pe),{checked:o.modal,"onUpdate:checked":s[10]||(s[10]=p=>o.modal=p)},{default:n(()=>[N("پیام مودال ورود به اپ")]),_:1},8,["checked"])]),o.sms?(P(),de(r(R),{key:0,label:"متن پیامک"},{default:n(()=>[t(r(C),{value:o.smsMessage,"onUpdate:value":s[11]||(s[11]=p=>o.smsMessage=p),rows:3,placeholder:"خالی = پیام پیش‌فرض فعال‌سازی اشتراک",maxlength:1e3,"show-count":""},null,8,["value"])]),_:1})):V("",!0),o.push?(P(),E(_e,{key:1},[t(r(R),{label:"عنوان نوتیف"},{default:n(()=>[t(r(F),{value:o.pushTitle,"onUpdate:value":s[12]||(s[12]=p=>o.pushTitle=p),placeholder:"فعال‌سازی اشتراک",maxlength:120},null,8,["value"])]),_:1}),t(r(R),{label:"متن نوتیف"},{default:n(()=>[t(r(C),{value:o.pushBody,"onUpdate:value":s[13]||(s[13]=p=>o.pushBody=p),rows:3,placeholder:"خالی = متن پیش‌فرض",maxlength:500,"show-count":""},null,8,["value"])]),_:1}),t(r(R),{label:"لینک نوتیف (اختیاری)"},{default:n(()=>[t(r(F),{value:o.pushUrl,"onUpdate:value":s[14]||(s[14]=p=>o.pushUrl=p),placeholder:"/"},null,8,["value"])]),_:1})],64)):V("",!0),o.modal?(P(),E(_e,{key:2},[t(r(R),{label:"عنوان مودال"},{default:n(()=>[t(r(F),{value:o.modalTitle,"onUpdate:value":s[15]||(s[15]=p=>o.modalTitle=p),placeholder:"اشتراک شما فعال شد"},null,8,["value"])]),_:1}),t(r(R),{label:"متن مودال"},{default:n(()=>[t(r(C),{value:o.modalBody,"onUpdate:value":s[16]||(s[16]=p=>o.modalBody=p),rows:3,placeholder:"خالی = متن پیش‌فرض"},null,8,["value"])]),_:1}),t(r(R),{label:"متن دکمه مودال"},{default:n(()=>[t(r(F),{value:o.modalCtaLabel,"onUpdate:value":s[17]||(s[17]=p=>o.modalCtaLabel=p),placeholder:"متوجه شدم"},null,8,["value"])]),_:1})],64)):V("",!0)],64)):V("",!0)])):V("",!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 ha=[{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(Wt,{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"}],wa=[{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 v=e.record.usage_count??0,m=e.record.usage_limit;return m!=null?`${v} / ${m}`:String(v)}}];function ka(e){if(!e)return"";const v=e.replace(/\//g,"-");return new Date(`${v}T23:59:59.999Z`).toISOString()}function Ia(e){return e?e.slice(0,10).replace(/-/g,"/"):""}function ut(e,v){var u;const m=!!(v!=null&&v.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:m?ka(v):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,v){const u=((await je("subscription_discount_codes",{filters:[{field:"code",op:"eq",value:e}],limit:5,page:1})).rows||[]).find(I=>I.id!==v);if(u!=null&&u.id)throw new Error("این کد تخفیف قبلاً ثبت شده است")}async function dt(e){const{TableEngineRequest:v}=await zt(()=>import("./buildSupabaseQuery-c046d1a6.js"),["assets/buildSupabaseQuery-c046d1a6.js","assets/index-90ac1a44.js","assets/index-0643191e.css"]),m={...e,order:e.order??"-id"},u=await v(m,"subscription_discount_codes");if(Array.isArray(u==null?void 0:u.rows)){const I=u.rows.map((z,R)=>({...z,index:R}));return{...u,rows:I}}return u}async function Sa(e,v){const m=ut(e,v);return await rt(m.code),await nt("subscription_discount_codes",m)}async function $a(e,v,m){const u=ut(v,m);await rt(u.code,e);const I=await lt("subscription_discount_codes",e,u);return Array.isArray(I)?I:[I]}async function Ca(e){await qt("subscription_discount_codes",e)}const Ua={class:"flex justify-between items-center mb-4"},Ra=i("h2",null,"کدهای تخفیف اشتراک",-1),Ta={class:"gap-2 flex justify-center"},Pa=i("span",null,"حذف",-1),Na=i("span",null,"ویرایش",-1),Ba={class:"flex flex-col gap-2"},La={class:"flex flex-col gap-2"},Aa=xe({__name:"SubscriptionDiscountCodes",setup(e){const[v,m]=ke(),u=w({columns:ha,api:dt,defaultPageLimit:20}),I=w(!1),z=w(!1),R=w(null),F=w(!1),C=w(!1),S=w("unlimited"),B=w("unlimited"),D=w(""),K=w(!1),T=w([]),f=Ne({title:"",code:"",is_percent:!0,amount:10,expires_at:null,usage_limit:null,user_usage_limit:1,plan_ids:[],is_active:!0});ye(S,k=>{k==="unlimited"&&(D.value="")}),ye(B,k=>{k==="unlimited"&&(f.usage_limit=null)});function q(){Object.assign(f,{title:"",code:"",is_percent:!0,amount:10,expires_at:null,usage_limit:null,user_usage_limit:1,plan_ids:[],is_active:!0}),S.value="unlimited",B.value="unlimited",D.value=""}function te(){q(),z.value=!1,R.value=null,F.value=!1,I.value=!0}function G(){I.value=!1,F.value=!1,C.value=!1}async function h(){K.value=!0;try{const k=await tt();T.value=(k||[]).map(y=>({label:y.title,value:Number(y.id)}))}catch{T.value=[]}finally{K.value=!1}}async function o(){var k,y;if(!(F.value||C.value)){if(!((k=f.title)!=null&&k.trim())||!((y=f.code)!=null&&y.trim())){_.warning("عنوان و کد تخفیف الزامی است");return}if(!f.amount||f.amount<=0){_.warning("مقدار تخفیف باید بیشتر از صفر باشد");return}if(f.is_percent&&f.amount>100){_.warning("درصد تخفیف نمی‌تواند بیشتر از ۱۰۰ باشد");return}if(S.value==="limited"&&!D.value){_.warning("تاریخ انقضا را وارد کنید");return}if(B.value==="limited"&&(!f.usage_limit||f.usage_limit<1)){_.warning("محدودیت تعداد استفاده را وارد کنید");return}C.value=!0;try{const L=S.value==="limited"?D.value:null;B.value==="unlimited"&&(f.usage_limit=null),z.value&&R.value!=null?(await $a(R.value,f,L),_.success("کد تخفیف با موفقیت ویرایش شد")):(await Sa(f,L),_.success("کد تخفیف با موفقیت ایجاد شد")),I.value=!1,await m()}catch(L){_.error((L==null?void 0:L.message)||"خطا در ذخیره کد تخفیف")}finally{C.value=!1}}}function J(k){k!=null&&k.id&&(q(),z.value=!0,R.value=k.id,f.title=k.title||"",f.code=k.code||"",f.is_percent=k.is_percent??!0,f.amount=Number(k.amount)||0,f.user_usage_limit=k.user_usage_limit??null,f.plan_ids=Array.isArray(k.plan_ids)?k.plan_ids.map(y=>Number(y)):[],f.is_active=k.is_active??!0,k.expires_at?(S.value="limited",D.value=Ia(k.expires_at)):(S.value="unlimited",D.value=""),k.usage_limit!=null?(B.value="limited",f.usage_limit=Number(k.usage_limit)):(B.value="unlimited",f.usage_limit=null),I.value=!0)}function H(k){ve.confirm({title:"حذف کد تخفیف",content:`آیا از حذف «${k.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Ca(k.id),_.success("حذف شد"),await m()}catch(y){_.error((y==null?void 0:y.message)||"خطا در حذف")}}})}return $e(h),(k,y)=>{const L=Me,Y=Fe,ne=Le,c=Jt,W=ie,se=Yt,oe=Ee,ce=it,ue=Zt,me=Be,fe=Oe;return P(),E("div",null,[i("div",Ua,[Ra,t(L,{type:"primary",onClick:te},{default:n(()=>[N("افزودن کد تخفیف")]),_:1})]),t(Y,Ie(u.value,{onRegister:r(v)}),{action:n(({record:$})=>[i("div",Ta,[t(r(le),{class:"cursor-pointer"},{title:n(()=>[Pa]),default:n(()=>[t(Q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:ge=>H($)},null,8,["onClick"])]),_:2},1024),t(r(le),{class:"cursor-pointer"},{title:n(()=>[Na]),default:n(()=>[t(Q,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:ge=>J($)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),t(fe,{visible:I.value,"onUpdate:visible":y[11]||(y[11]=$=>I.value=$),title:z.value?"ویرایش کد تخفیف":"افزودن کد تخفیف",loading:F.value,"destroy-on-close":"",onOk:o,onClose:G,width:"720px"},{default:n(()=>[t(me,{layout:"vertical",class:"grid grid-cols-1 md:grid-cols-2 gap-3"},{default:n(()=>[t(c,{label:"عنوان کد تخفیف",required:"",class:"md:col-span-2"},{default:n(()=>[t(ne,{value:f.title,"onUpdate:value":y[0]||(y[0]=$=>f.title=$),placeholder:"مثال: کمپین اینستاگرام نوروز"},null,8,["value"])]),_:1}),t(c,{label:"کد تخفیف",required:""},{default:n(()=>[t(ne,{value:f.code,"onUpdate:value":y[1]||(y[1]=$=>f.code=$),placeholder:"مثال: NOWROOZ1405",style:{"text-transform":"uppercase"}},null,8,["value"])]),_:1}),t(c,{label:"نوع تخفیف"},{default:n(()=>[t(se,{value:f.is_percent,"onUpdate:value":y[2]||(y[2]=$=>f.is_percent=$)},{default:n(()=>[t(W,{value:!0},{default:n(()=>[N("درصدی")]),_:1}),t(W,{value:!1},{default:n(()=>[N("مبلغی (ریال)")]),_:1})]),_:1},8,["value"])]),_:1}),t(c,{label:f.is_percent?"درصد تخفیف":"مبلغ تخفیف (ریال)",required:""},{default:n(()=>[t(oe,{value:f.amount,"onUpdate:value":y[3]||(y[3]=$=>f.amount=$),style:{width:"100%"},min:1,max:f.is_percent?100:void 0,placeholder:"مقدار تخفیف"},null,8,["value","max"])]),_:1},8,["label"]),t(c,{label:"تاریخ انقضا"},{default:n(()=>[i("div",Ba,[t(se,{value:S.value,"onUpdate:value":y[4]||(y[4]=$=>S.value=$),class:"mb-1"},{default:n(()=>[t(W,{value:"unlimited"},{default:n(()=>[N("نامحدود")]),_:1}),t(W,{value:"limited"},{default:n(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),S.value==="limited"?(P(),de(Ht,{key:0,value:D.value,"onUpdate:value":y[5]||(y[5]=$=>D.value=$)},null,8,["value"])):V("",!0)])]),_:1}),t(c,{label:"محدودیت تعداد استفاده"},{default:n(()=>[i("div",La,[t(se,{value:B.value,"onUpdate:value":y[6]||(y[6]=$=>B.value=$),class:"mb-1"},{default:n(()=>[t(W,{value:"unlimited"},{default:n(()=>[N("نامحدود")]),_:1}),t(W,{value:"limited"},{default:n(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),B.value==="limited"?(P(),de(oe,{key:0,value:f.usage_limit,"onUpdate:value":y[7]||(y[7]=$=>f.usage_limit=$),style:{width:"100%"},min:1,placeholder:"حداکثر تعداد کل"},null,8,["value"])):V("",!0)])]),_:1}),t(c,{label:"تعداد استفاده مجاز برای هر کاربر"},{default:n(()=>[t(oe,{value:f.user_usage_limit,"onUpdate:value":y[8]||(y[8]=$=>f.user_usage_limit=$),style:{width:"100%"},min:1,placeholder:"خالی = نامحدود"},null,8,["value"])]),_:1}),t(c,{label:"اعمال روی پلن‌ها",class:"md:col-span-2"},{default:n(()=>[t(ce,{value:f.plan_ids,"onUpdate:value":y[9]||(y[9]=$=>f.plan_ids=$),mode:"multiple","allow-clear":"",style:{width:"100%"},placeholder:"خالی = همه پلن‌ها",options:T.value,loading:K.value},null,8,["value","options","loading"])]),_:1}),t(c,{label:"فعال"},{default:n(()=>[t(ue,{checked:f.is_active,"onUpdate:checked":y[10]||(y[10]=$=>f.is_active=$)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["visible","title","loading"])])}}}),Da=i("div",{class:"mb-4"},[i("h2",null,"آمار استفاده از کدهای تخفیف")],-1),Oa=xe({__name:"SubscriptionDiscountStats",setup(e){const[v]=ke(),m=w({columns:wa,api:dt,defaultPageLimit:20});return(u,I)=>{const z=Fe;return P(),E("div",null,[Da,t(z,Ie(m.value,{onRegister:r(v)}),null,16,["onRegister"])])}}}),Fa="تخفیف ویژه بازگشت به مدرسه",Ae="subscription_plans_banner_image",De="subscription_plans_banner_visible",ze="subscription_plan_ribbons";async function ct(e){return(await je("configs",{includeIn:{field:"key",values:e},limit:20,page:1})).rows||[]}async function Se(e,v){var u,I;const m=await je("configs",{filters:[{field:"key",op:"eq",value:e}],limit:1,page:1});if((I=(u=m.rows)==null?void 0:u[0])!=null&&I.id){await lt("configs",m.rows[0].id,{value:v});return}await nt("configs",{key:e,value:v})}function Ma(e){return e==null||e===""?!0:e==="yes"||e==="true"||e==="1"}async function mt(){const e=await ct([Ae,De]),v=Object.fromEntries(e.map(u=>[u.key,u.value??""]));return{image:String(v[Ae]||"").trim()||null,visible:Ma(v[De])}}async function ja(e){return await Se(Ae,e.image||""),await Se(De,e.visible?"yes":"no"),mt()}async function qe(){var m;const v=(m=(await ct([ze]))[0])==null?void 0:m.value;if(!v)return{};try{const u=JSON.parse(v);return!u||typeof u!="object"||Array.isArray(u)?{}:Object.fromEntries(Object.entries(u).map(([I,z])=>[String(I),String(z??"")]))}catch{return{}}}async function Ea(e,v){const m=await qe();m[String(e)]=v.trim(),await Se(ze,JSON.stringify(m))}async function za(e){const v=await qe();Object.prototype.hasOwnProperty.call(v,String(e))&&(delete v[String(e)],await Se(ze,JSON.stringify(v)))}function qa(e,v,m){const u=String(e);return Object.prototype.hasOwnProperty.call(m,u)?m[u]:Number(v)>0?Fa:""}const Ga={class:"flex justify-between items-center mb-4"},Va=i("h2",null,"لیست خرید اشتراک",-1),Ka={class:"flex gap-2"},Ja={class:"gap-2 flex justify-center"},Ya=i("span",null,"تمدید",-1),Za=i("span",null,"لغو اشتراک",-1),Ha=i("span",null,"حذف",-1),Wa={class:"flex justify-between items-center mb-4"},Xa=i("h2",null,"مدیریت اشتراک‌ها",-1),Qa={class:"rounded-xl border border-gray-200 p-4 mb-4"},en=i("div",{class:"font-semibold mb-1"},"بنر لیست اشتراک",-1),tn=i("div",{class:"text-sm text-gray-500 mb-3"}," این تصویر بالای لیست پلن‌ها در اپ کاربر نمایش داده می‌شود. تا وقتی تصویری آپلود و ذخیره نشود، بنر در اپ دیده نمی‌شود. ",-1),an={class:"flex items-center gap-2 mb-3"},nn={class:"text-sm text-gray-600"},ln={key:0},sn=i("div",null,"آپلود تصویر بنر",-1),on={class:"gap-2 flex justify-center"},un=i("span",null,"حذف",-1),rn=i("span",null,"ویرایش",-1),dn=i("div",{class:"mb-4"},[i("h2",null,"تنظیمات درگاه پرداخت")],-1),cn={class:"space-y-4 relative"},mn={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},pn={class:"grid grid-cols-2 gap-4"},_n=i("div",{class:"mb-1 text-sm text-gray-600"},"عنوان اشتراک",-1),vn=i("div",{class:"mb-1 text-sm text-gray-600"},"مدت اشتراک (روز)",-1),fn={class:"grid grid-cols-2 gap-4"},gn=i("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),bn=i("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),yn={class:"mt-2 font-semibold text-green-700"},xn={class:"grid grid-cols-2 gap-4"},hn=i("div",{class:"mb-1 text-sm text-gray-600"},"نوع تخفیف",-1),wn={class:"mb-1 text-sm text-gray-600"},kn={class:"grid grid-cols-2 gap-4"},In=i("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),Sn=i("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),$n={class:"flex items-center gap-2 mt-2"},Cn={class:"text-sm text-gray-600"},Un=i("div",{class:"mb-1 text-sm text-gray-600"},"متن روبان روی کارت",-1),Rn=i("div",{class:"text-xs text-gray-500 mt-1"}," روی کارت همین پلن در اپ کاربر نشان داده می‌شود. اگر خالی ذخیره شود، روبان نمایش داده نمی‌شود. ",-1),Tn=i("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),Pn={class:"flex justify-center"},Nn=i("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),Bn={key:0},Ln=i("div",null,"آپلود تصویر",-1),ql=xe({__name:"index",setup(e){const v=Ye,m=Ye.TabPane,u=ie.Group,I=ie,z=Ee,R=w("purchases"),F=w(!1),C=w(!1),S=w(null),[B,D]=ke(),[K,T]=ke(),f=w(!1),q=w("grant"),te=w(null),G=w(null),h=w(!1),o=w([]),J=w(0),H=w(""),k=w({}),y=w(!1),L=w({image:null,visible:!0}),Y=w([]),ne=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,discount_type:"percent",duration_days:30,is_active:!0,sort_order:0}),c=w(ne());ye(()=>c.value.discount_type,l=>{l==="percent"&&Number(c.value.discount_percent)>100&&(c.value.discount_percent=100),Number(c.value.discount_percent)<0&&(c.value.discount_percent=0)}),ye(()=>c.value.discount_percent,l=>{const a=Number(l);if(Number.isFinite(a)){if(a<0){c.value.discount_percent=0;return}c.value.discount_type==="percent"&&a>100&&(c.value.discount_percent=100)}});const W=ee(()=>Rt(Number(c.value.price),Number(c.value.discount_percent),c.value.discount_type).toLocaleString("fa-IR")),se={columns:Qt,api:Tt,defaultPageLimit:20},oe={columns:ta,api:Pt,defaultPageLimit:20};function ce(){c.value=ne(),o.value=[],H.value=""}function ue(l){L.value=l;const a=Re(l.image)||null;L.value.image=a;const g=a?Te(a):null;Y.value=g?[{uid:"-banner",name:"banner.jpg",status:"done",url:g,response:{path:a}}]:[]}async function me(){try{const[l,a]=await Promise.all([mt(),qe()]);ue(l),k.value=a}catch(l){_.error((l==null?void 0:l.message)||"خطا در بارگذاری تنظیمات نمایش اشتراک")}}function fe(){return L.value.image=null,!0}async function $(){if(J.value>0){_.warning("لطفاً تا پایان آپلود صبر کنید");return}y.value=!0;try{const l=await ja({image:L.value.image,visible:L.value.visible});ue(l),_.success(l.visible?"بنر ذخیره شد":"بنر مخفی شد")}catch(l){_.error((l==null?void 0:l.message)||"خطا در ذخیره بنر")}finally{y.value=!1}}function ge(){C.value=!1,S.value=null,ce(),F.value=!0}function d(){F.value=!1,ce()}function s(l){return l.type.startsWith("image/")?l.size/1024/1024>=5?(_.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(_.error("فقط فایل تصویری مجاز است"),!1)}async function U(l,a){const{file:g,onSuccess:x,onError:M,onProgress:Z}=l,pe=new FormData;pe.append("file",g);const Ce=`${Gt}/upload/machartaa-img`;J.value++,await new Promise((Ue,b)=>{const A=new XMLHttpRequest;A.open("POST",Ce);const yt=Vt()||localStorage.getItem("tamin_token")||"";A.setRequestHeader("Authorization",`Bearer ${yt}`),A.upload.onprogress=j=>{j.lengthComputable&&(Z==null||Z({percent:Math.round(j.loaded/j.total*100)}))},A.onload=()=>{if(A.status>=200&&A.status<300)try{const j=JSON.parse(A.responseText||"{}"),xt=j.full_src||j.url||j.src||j.path||j.data&&(j.data.full_src||j.data.url||j.data.src||j.data.path)||"",Ve=Re(xt),ht=Te(Ve);a(Ve,ht),x==null||x(j,A),_.success("تصویر با موفقیت آپلود شد!"),Ue()}catch(j){M==null||M(j,A),b(j)}else M==null||M(new Error("خطا در آپلود تصویر"),A),b(new Error("خطا در آپلود تصویر"))},A.onerror=()=>{M==null||M(new Error("خطا در آپلود تصویر"),A),b(new Error("خطا در آپلود تصویر"))},A.onloadend=()=>{J.value=Math.max(0,J.value-1)},A.send(pe)})}function p(l,a,g){l.value=g?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:g,response:{path:a}}]:[]}function X(l){return U(l,(a,g)=>{c.value.image_url=a,p(o,a,g)})}function ae(l){return U(l,(a,g)=>{L.value.image=a,p(Y,a,g)})}function O(l){if(Array.isArray(l))return O(l[0]);if(!l||typeof l!="object")return null;const a=l,g=Number(a.id);return Number.isFinite(g)?g:a.data!=null?O(a.data):null}async function he(){var a;if(J.value>0){_.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((a=c.value.title)!=null&&a.trim())){_.warning("عنوان الزامی است");return}if(!c.value.duration_days||Number(c.value.duration_days)<1){_.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}const l=Nt(c.value.discount_type,Number(c.value.discount_percent));if(!l.ok){_.warning(l.message);return}try{const g={...c.value,price:Number(c.value.price)||0,discount_percent:l.discount_percent,discount_type:l.discount_type,duration_days:Number(c.value.duration_days),sort_order:Number(c.value.sort_order)||0};let x=S.value;if(C.value&&S.value)await Bt(S.value,g);else{const M=await Lt(g);x=O(M)}x?(await Ea(x,H.value),k.value={...k.value,[String(x)]:H.value.trim()},_.success(C.value?"اشتراک ویرایش شد":"اشتراک افزوده شد")):_.warning("اشتراک ذخیره شد، اما متن روبان ذخیره نشد. پلن را دوباره ویرایش کنید."),d(),await D()}catch(g){_.error((g==null?void 0:g.message)||"خطا در ذخیره")}}function we(l){C.value=!0,S.value=l.id;const a=Re(l.image_url)||null;c.value={title:l.title||"",description:l.description||"",image_url:a,price:l.price||0,discount_percent:l.discount_percent||0,discount_type:l.discount_type==="simple"?"simple":"percent",duration_days:l.duration_days||30,is_active:l.is_active??!0,sort_order:l.sort_order??0},H.value=qa(l.id,l.discount_percent,k.value);const g=a?Te(a):null;o.value=g?[{uid:"-1",name:"image.jpg",status:"done",url:g,response:{path:a}}]:[],F.value=!0}function pt(l){ve.confirm({title:"حذف اشتراک",content:`آیا از حذف «${l.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await At(l.id),await za(l.id);const a={...k.value};delete a[String(l.id)],k.value=a,_.success("حذف شد"),await D()}catch(a){_.error((a==null?void 0:a.message)||"خطا در حذف")}}})}async function _t(l){try{await Dt(l.id,!l.is_active),_.success("وضعیت به‌روز شد"),await D()}catch(a){_.error((a==null?void 0:a.message)||"خطا")}}$e(()=>{me()});function vt(){q.value="grant",te.value=null,G.value=null,f.value=!0}async function ft(){h.value||ve.confirm({title:"همگام‌سازی پرداخت‌های زرین‌پال",content:"لیست تراکنش‌های موفقِ اعتبارسنجی‌نشده از زرین‌پال گرفته می‌شود، با توکن تراکنش‌های اشتراک تطبیق داده می‌شود و در صورت تطبیق، اشتراک کاربر فعال می‌شود. ادامه می‌دهید؟",okText:"همگام‌سازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var l,a;h.value=!0;try{const g=await Ot(),x=(g==null?void 0:g.data)??g,M=Number((x==null?void 0:x.reconciled_count)||0),Z=Number((x==null?void 0:x.total_zarinpal)||0),pe=Number((x==null?void 0:x.matched_count)||0);M>0?_.success((x==null?void 0:x.message)||`${M} اشتراک فعال شد.`):_.info((x==null?void 0:x.message)||(Z>0?`از ${Z} تراکنش زرین‌پال، ${pe} مورد با اشتراک محلی تطبیق خورد ولی فعال‌سازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجی‌نشده‌ای در زرین‌پال یافت نشد.")),await T()}catch(g){_.error(((a=(l=g==null?void 0:g.response)==null?void 0:l.data)==null?void 0:a.message)||(g==null?void 0:g.message)||"خطا در همگام‌سازی پرداخت‌ها")}finally{h.value=!1}}})}function Ge(l){q.value="extend",te.value=(l==null?void 0:l.id)??null,G.value=(l==null?void 0:l.user_id)??null,f.value=!0}function gt(l){ve.confirm({title:"لغو اشتراک",content:`اشتراک «${l.plan_title}» برای ${l.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع می‌شود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,g;try{await Ft(l.id),_.success("اشتراک لغو شد"),await T()}catch(x){_.error(((g=(a=x==null?void 0:x.response)==null?void 0:a.data)==null?void 0:g.message)||(x==null?void 0:x.message)||"خطا در لغو")}}})}function bt(l){ve.confirm({title:"حذف کامل",content:`رکورد خرید «${l.plan_title}» برای ${l.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,g;try{await Mt(l.id),_.success("حذف شد"),await T()}catch(x){_.error(((g=(a=x==null?void 0:x.response)==null?void 0:a.data)==null?void 0:g.message)||(x==null?void 0:x.message)||"خطا در حذف")}}})}return(l,a)=>{const g=Me,x=Fe,M=et,Z=Qe,pe=kt,Ce=Oe,Ue=wt;return P(),E("div",null,[t(Ue,null,{default:n(()=>[t(r(v),{activeKey:R.value,"onUpdate:activeKey":a[4]||(a[4]=b=>R.value=b)},{default:n(()=>[t(r(m),{key:"purchases",tab:"خریدهای کاربران"},{default:n(()=>[i("div",Ga,[Va,i("div",Ka,[t(g,{loading:h.value,onClick:ft},{default:n(()=>[N(" همگام‌سازی پرداخت‌های زرین‌پال ")]),_:1},8,["loading"]),t(g,{onClick:a[0]||(a[0]=b=>Ge())},{default:n(()=>[N("تمدید اشتراک")]),_:1}),t(g,{type:"primary",onClick:a[1]||(a[1]=b=>vt())},{default:n(()=>[N("ایجاد اشتراک برای کاربر")]),_:1})])]),t(x,Ie(oe,{onRegister:r(K)}),{action:n(({record:b})=>[i("div",Ja,[t(r(le),{class:"cursor-pointer"},{title:n(()=>[Ya]),default:n(()=>[t(Q,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:A=>Ge(b)},null,8,["onClick"])]),_:2},1024),t(r(le),{class:"cursor-pointer"},{title:n(()=>[Za]),default:n(()=>[t(Q,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:A=>gt(b)},null,8,["onClick"])]),_:2},1024),t(r(le),{class:"cursor-pointer"},{title:n(()=>[Ha]),default:n(()=>[t(Q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:A=>bt(b)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(r(m),{key:"plans",tab:"پلن‌های اشتراک"},{default:n(()=>[i("div",Wa,[Xa,t(g,{type:"primary",onClick:ge},{default:n(()=>[N("افزودن اشتراک")]),_:1})]),i("div",Qa,[en,tn,i("div",an,[t(M,{value:L.value.visible,"onUpdate:value":a[2]||(a[2]=b=>L.value.visible=b)},null,8,["value"]),i("span",nn,re(L.value.visible?"نمایش بنر":"بنر مخفی است"),1)]),t(r(Ze),{"file-list":Y.value,"onUpdate:fileList":a[3]||(a[3]=b=>Y.value=b),"before-upload":s,"custom-request":ae,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:fe},{default:n(()=>[Y.value.length<1?(P(),E("div",ln,[t(Q,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),sn])):V("",!0)]),_:1},8,["file-list"]),t(g,{type:"primary",class:"mt-2",loading:y.value,onClick:$},{default:n(()=>[N(" ذخیره بنر ")]),_:1},8,["loading"])]),t(x,Ie(se,{ref:"table",onRegister:r(B)}),{action:n(({record:b})=>[i("div",on,[t(r(le),{class:"cursor-pointer"},{title:n(()=>[i("span",null,re(b.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:n(()=>[t(Q,{icon:b.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:b.is_active?"#F59E0B":"#16A34A",onClick:A=>_t(b)},null,8,["icon","color","onClick"])]),_:2},1024),t(r(le),{class:"cursor-pointer"},{title:n(()=>[un]),default:n(()=>[t(Q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:A=>pt(b)},null,8,["onClick"])]),_:2},1024),t(r(le),{class:"cursor-pointer"},{title:n(()=>[rn]),default:n(()=>[t(Q,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:A=>we(b)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(r(m),{key:"gateway",tab:"تنظیمات درگاه (زرین‌پال)"},{default:n(()=>[dn,t(pa)]),_:1}),t(r(m),{key:"discount-codes",tab:"کد تخفیف"},{default:n(()=>[t(Aa)]),_:1}),t(r(m),{key:"discount-stats",tab:"آمار کدهای تخفیف"},{default:n(()=>[t(Oa)]),_:1})]),_:1},8,["activeKey"]),t(Ce,{visible:F.value,"onUpdate:visible":a[15]||(a[15]=b=>F.value=b),title:C.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:he,onCancel:d,width:"70%",confirmLoading:J.value>0},{default:n(()=>[i("div",cn,[J.value>0?(P(),E("div",mn,[t(r(Xt),{size:"large"})])):V("",!0),i("div",pn,[i("div",null,[_n,t(Z,{value:c.value.title,"onUpdate:value":a[5]||(a[5]=b=>c.value.title=b),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),i("div",null,[vn,t(Z,{value:c.value.duration_days,"onUpdate:value":a[6]||(a[6]=b=>c.value.duration_days=b),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),i("div",fn,[i("div",null,[gn,t(Z,{value:c.value.price,"onUpdate:value":a[7]||(a[7]=b=>c.value.price=b),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),i("div",null,[bn,i("div",yn,re(W.value),1)])]),i("div",xn,[i("div",null,[hn,t(r(u),{value:c.value.discount_type,"onUpdate:value":a[8]||(a[8]=b=>c.value.discount_type=b),class:"mt-1"},{default:n(()=>[t(r(I),{value:"percent"},{default:n(()=>[N("درصدی")]),_:1}),t(r(I),{value:"simple"},{default:n(()=>[N("مبلغی (ریال)")]),_:1})]),_:1},8,["value"])]),i("div",null,[i("div",wn,re(c.value.discount_type==="simple"?"مبلغ تخفیف (ریال)":"درصد تخفیف (۰ تا ۱۰۰)"),1),t(r(z),{value:c.value.discount_percent,"onUpdate:value":a[9]||(a[9]=b=>c.value.discount_percent=b),style:{width:"100%"},min:0,max:c.value.discount_type==="percent"?100:void 0,precision:0,placeholder:c.value.discount_type==="percent"?"مثلاً ۲۰":"مثلاً ۵۰۰۰۰۰"},null,8,["value","max","placeholder"])])]),i("div",kn,[i("div",null,[In,t(Z,{value:c.value.sort_order,"onUpdate:value":a[10]||(a[10]=b=>c.value.sort_order=b),type:"number",placeholder:"0"},null,8,["value"])]),i("div",null,[Sn,i("div",$n,[t(M,{value:c.value.is_active,"onUpdate:value":a[11]||(a[11]=b=>c.value.is_active=b)},null,8,["value"]),i("span",Cn,re(c.value.is_active?"فعال":"غیرفعال"),1)])])]),i("div",null,[Un,t(Z,{value:H.value,"onUpdate:value":a[12]||(a[12]=b=>H.value=b),placeholder:"مثلاً تخفیف ویژه بازگشت به مدرسه"},null,8,["value"]),Rn]),i("div",null,[Tn,t(pe,{value:c.value.description,"onUpdate:value":a[13]||(a[13]=b=>c.value.description=b),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),i("div",Pn,[i("div",null,[Nn,t(r(Ze),{"file-list":o.value,"onUpdate:fileList":a[14]||(a[14]=b=>o.value=b),"before-upload":s,"custom-request":X,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:n(()=>[o.value.length<1?(P(),E("div",Bn,[t(Q,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),Ln])):V("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),t(xa,{visible:f.value,"onUpdate:visible":a[16]||(a[16]=b=>f.value=b),mode:q.value,"purchase-id":te.value,"locked-user-id":G.value,onSuccess:r(T)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{ql as default};