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

2 lines
50 KiB
JavaScript

import{_ as ht}from"./BasicMainCard-f15cc82d.js";import{_ as Oe}from"./BasicModal.vue_vue_type_style_index_0_lang-3186fd13.js";import{_ as wt}from"./BasicTextArea.vue_vue_type_style_index_0_lang-f7b2fc60.js";import{_ as Xe}from"./BasicInput.vue_vue_type_style_index_0_lang-8f3a56f0.js";import{_ as Qe}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-e9f1c563.js";import{_ as Fe,u as we}from"./useBaseTable-e684a9eb.js";import{_ as Me}from"./button.vue_vue_type_style_index_0_lang-de1581fe.js";import{f as kt,g as et,a as It,b as St,c as $t,d as Ct,e as Ut,h as Rt,i as Tt,u as Pt,j as Bt,k as Nt,t as Lt,l as At,m as Dt,n as Ot}from"./subscription-630ad458.js";import{t as be}from"./useDataTime-284d8334.js";import{I as ee}from"./Icon-623de3ea.js";import{R as tt,d as ye,i as w,j as te,x as Se,H as m,o as B,c as E,F as ve,b as n,e as t,t as ue,s as Ft,w as l,f as N,h as Pe,z as Be,k as re,l as d,n as Y,bK as Mt,_ as jt,I as at,J as lt,K as Et,O as je,L as ke,M as zt}from"./index-185c08ed.js";import{g as qt}from"./index-58ff633a.js";import{e as Ue,g as Re}from"./convert-2ad76038.js";import{_ as Gt,v as Ve,t as Ke}from"./AudienceSegmentPicker.vue_vue_type_script_setup_true_lang-18409336.js";import{F as Ne,_ as Vt}from"./index-82269ca5.js";import{I as Le}from"./index-a29d0cc7.js";import{R as se,C as Te,b as Kt}from"./index-33777d70.js";import{M as fe,_ as Jt}from"./index-2573091c.js";import{_ as nt}from"./index-0ee37254.js";import{I as it}from"./index-978007e9.js";import{_ as Yt}from"./InputDatePicker.vue_vue_type_script_setup_true_lang-7067ec3b.js";import{_ as Zt}from"./CustomTag.vue_vue_type_script_setup_true_lang-be5073f4.js";import{T as ie}from"./isSymbol-18d6b370.js";import{T as Je}from"./index-c3741845.js";import{S as Ht}from"./index-5a721f2f.js";import{U as Ye}from"./index-c950ff98.js";import"./Grid-337aeaf9.js";import"./index-229a6022.js";import"./Col-2d184441.js";import"./styleChecker-7bb1c6f5.js";import"./isPlainObject-5638f45d.js";import"./vnode-8a371720.js";import"./_plugin-vue_export-helper-e26fbd9a.js";import"./usePrice-bc935b83.js";import"./updateLocale-d0f4ef4d.js";import"./index-f463cb03.js";import"./shallowequal-6622fb79.js";import"./useState-50bb8c1f.js";import"./useMemo-4f3c1eb4.js";import"./FormItemContext-2d3e7341.js";import"./omit-d93eaa18.js";import"./lodash-0633e973.js";import"./index-9383b001.js";import"./Badge-51142f0a.js";import"./isNumeric-3f69e2aa.js";import"./index-9e9f857b.js";import"./index-a2809ce1.js";import"./index-77ae4c49.js";import"./supabaseTableQuery-ebcdd1b8.js";import"./dayjs-67625168.js";import"./index-836b96c1.js";import"./_flatRest-947e7901.js";import"./toArray-da31f78e.js";import"./index-1f485cc0.js";import"./SearchOutlined-d9b8def2.js";import"./index-975de3f6.js";import"./DialogWrap-9863a7c0.js";import"./pickAttrs-e062aa3e.js";import"./css-aae66f86.js";import"./isMobile-e2e89480.js";import"./useRefs-b56c6fdc.js";import"./index-b2f5f66c.js";function Ze(e){return Number(e||0).toLocaleString("fa-IR")}const Wt=[{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:120,align:"center",customRender:e=>kt(Number(e.record.discount_percent||0),e.record.discount_type||"percent")},{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 Xt(e){return Number(e||0).toLocaleString("fa-IR")}const He={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},We={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},Qt=[{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=>Xt(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,_])=>({label:_,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,_])=>({label:_,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 ea(e){return(await tt.put("/admin/subscription/payment-gateway",e)).settings??await st()}const ta={class:"max-w-2xl space-y-4"},aa=n("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم می‌شود. اپ کاربر از همین تنظیمات برای اتصال به زرین‌پال استفاده می‌کند. ",-1),la={key:0,class:"py-8 text-center"},na=n("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرین‌پال (Merchant ID)",-1),ia=n("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),sa=n("div",{class:"text-xs text-gray-500 mt-1"},[N(" مسیر callback به‌صورت خودکار اضافه می‌شود: "),n("code",null,"/subscriptions/callback")],-1),oa={class:"flex items-center gap-3"},ua=n("span",{class:"text-sm"},"فعال بودن درگاه زرین‌پال",-1),ra={class:"flex items-center gap-3"},da=n("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),ca=ye({__name:"PaymentGatewaySettings",setup(e){const _=w(!0),c=w(!1),u=w({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),I=te(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?!0:!!((C=u.value.zarinpal_merchant_id)!=null&&C.trim()):!1}),A=te(()=>{var C;return u.value.zarinpal_enabled?u.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرین‌پال انجام می‌شود.":(C=u.value.zarinpal_merchant_id)!=null&&C.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمی‌توانند پرداخت کنند."}),$=te(()=>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){m.error((C==null?void 0:C.message)||"خطا در بارگذاری تنظیمات")}finally{_.value=!1}});async function D(){var C,U;if(!((C=u.value.subscription_app_callback_url)!=null&&C.trim())){m.warning("آدرس بازگشت از درگاه الزامی است");return}if(u.value.zarinpal_enabled&&!u.value.zarinpal_sandbox&&!((U=u.value.zarinpal_merchant_id)!=null&&U.trim())){m.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}c.value=!0;try{u.value=await ea(u.value),m.success("تنظیمات درگاه ذخیره شد")}catch(T){m.error((T==null?void 0:T.message)||"خطا در ذخیره")}finally{c.value=!1}}return(C,U)=>{const T=Xe,O=Qe,q=Me;return B(),E("div",ta,[aa,_.value?(B(),E("div",la,"در حال بارگذاری...")):(B(),E(ve,{key:1},[n("div",null,[na,t(T,{value:u.value.zarinpal_merchant_id,"onUpdate:value":U[0]||(U[0]=P=>u.value.zarinpal_merchant_id=P),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),n("div",null,[ia,t(T,{value:u.value.subscription_app_callback_url,"onUpdate:value":U[1]||(U[1]=P=>u.value.subscription_app_callback_url=P),placeholder:"https://macharta.ir"},null,8,["value"]),sa]),n("div",oa,[t(O,{value:u.value.zarinpal_enabled,"onUpdate:value":U[2]||(U[2]=P=>u.value.zarinpal_enabled=P)},null,8,["value"]),ua]),n("div",ra,[t(O,{value:u.value.zarinpal_sandbox,"onUpdate:value":U[3]||(U[3]=P=>u.value.zarinpal_sandbox=P)},null,8,["value"]),da]),n("div",{class:Ft(["rounded-lg border p-3 text-sm",$.value])},ue(A.value),3),t(q,{type:"primary",loading:c.value,onClick:D},{default:l(()=>[N(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),ma={key:1,class:"mb-4"},pa={key:2,class:"text-sm text-gray-500 mb-3"},_a={key:3,class:"border-t border-gray-200 pt-4 space-y-3"},va=n("div",{class:"font-semibold text-gray-700"},"اطلاع‌رسانی بعد از اعطا",-1),fa=n("p",{class:"text-xs text-gray-500 m-0"}," یک یا چند کانال را انتخاب کنید. در صورت خالی بودن متن، پیام پیش‌فرض ارسال می‌شود. ",-1),ga={class:"flex flex-col gap-2"},ba=ye({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(e,{emit:_}){const c=e,u=nt,I=it,A=Ne,$=Ne.Item,D=Le,C=Le.TextArea,U=se.Group,T=w(!1),O=w([]),q=w([]),P=w("user"),v=w("none"),G=w({segments:[]}),ae=w(!1),V=w(""),x=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:"متوجه شدم"}),Z=te({get:()=>c.visible,set:r=>_("update:visible",r)}),W=te(()=>c.mode==="grant"?"ایجاد اشتراک برای کاربر / دسته":"تمدید اشتراک"),k=te(()=>c.mode!=="grant"?"تمدید":P.value==="segment"?"اعطای اشتراک به دسته":"ایجاد اشتراک"),f=te(()=>O.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()}})),F=te(()=>q.value.map(r=>({value:r.id,label:`${r.title} (${r.duration_days} روز)${r.is_active?"":" — غیرفعال"}`,searchText:String(r.title||"").toLowerCase()}))),le=te(()=>q.value.find(r=>r.id===x.plan_id)||null);function y(r,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(r.toLowerCase())}function K(r,s){return String((s==null?void 0:s.searchText)||(s==null?void 0:s.label)||"").toLowerCase().includes(r.toLowerCase())}function X(){c.mode==="grant"&&le.value&&!x.duration_days&&(x.duration_days=Number(le.value.duration_days)||null)}function oe(){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 ne(){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 de(){x.user_id=c.lockedUserId||void 0,x.plan_id=void 0,x.duration_days=c.mode==="extend"?30:null,P.value="user",G.value={segments:[]},V.value="",oe()}function ce(){_("update:visible",!1)}async function me(){try{const[r,s]=await Promise.all([Mt(),et()]);O.value=r||[],q.value=s||[]}catch(r){m.error((r==null?void 0:r.message)||"خطا در بارگذاری اطلاعات")}}async function ge(){var s,R;const r=Ve(G.value);if(r){m.warning(r);return}ae.value=!0,V.value="";try{const p=Ke(G.value),Q=await It(p),H=Number((Q==null?void 0:Q.userCount)??0),z=Array.isArray(Q==null?void 0:Q.progressItems)?Q.progressItems:[];z.length===1?V.value=`${H.toLocaleString("fa-IR")} کاربر (همان آمار پیشرفت چالش ${z[0].sort_order})`:z.length>1?V.value=`${H.toLocaleString("fa-IR")} کاربر یکتا در ${z.length.toLocaleString("fa-IR")} چالش با این شماره`:V.value=`حدود ${H.toLocaleString("fa-IR")} کاربر مخاطب این اعطا خواهند بود`}catch(p){m.error(((R=(s=p==null?void 0:p.response)==null?void 0:s.data)==null?void 0:R.message)||(p==null?void 0:p.message)||"خطا در پیش‌نمایش مخاطب")}finally{ae.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 pe(){var r,s;if(c.mode==="grant"){if(!x.plan_id){m.warning("پلن را انتخاب کنید");return}if(P.value==="user"){if(!x.user_id){m.warning("کاربر را انتخاب کنید");return}}else{const R=Ve(G.value);if(R){m.warning(R);return}}if(v.value==="custom"&&!o.sms&&!o.push&&!o.modal){m.warning("حداقل یک کانال اطلاع‌رسانی را انتخاب کنید، یا گزینه «هیچکدام» را بزنید");return}}if(c.mode==="extend"){if(!c.purchaseId&&!x.user_id){m.warning("کاربر را انتخاب کنید");return}if(!x.duration_days||x.duration_days<1){m.warning("مدت تمدید را وارد کنید");return}}T.value=!0;try{const R=c.mode==="grant"?ne():void 0;if(c.mode==="grant"&&P.value==="segment"){const p=Ke(G.value);if(!await S(V.value||void 0))return;const H={plan_id:x.plan_id,...p};x.duration_days&&x.duration_days>0&&(H.duration_days=Number(x.duration_days)),R&&(H.notify=R);const z=await St(H),xe=Number((z==null?void 0:z.granted)??0),he=Number((z==null?void 0:z.failed)??0);he>0?m.warning(`اشتراک برای ${xe.toLocaleString("fa-IR")} کاربر ایجاد شد؛ ${he.toLocaleString("fa-IR")} مورد ناموفق`):m.success((z==null?void 0:z.message)||`اشتراک برای ${xe.toLocaleString("fa-IR")} کاربر ایجاد شد`)}else if(c.mode==="grant"){const p={user_id:x.user_id,plan_id:x.plan_id};x.duration_days&&x.duration_days>0&&(p.duration_days=Number(x.duration_days)),R&&(p.notify=R),await $t(p),m.success("اشتراک ایجاد شد")}else await Ct({purchase_id:c.purchaseId||void 0,user_id:c.purchaseId?void 0:x.user_id,plan_id:x.plan_id||void 0,duration_days:Number(x.duration_days)}),m.success("اشتراک تمدید شد");_("success"),ce()}catch(R){m.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&&(de(),(!O.value.length||!q.value.length)&&me())}),Se(()=>{me()}),(r,s)=>{const R=Oe;return B(),re(R,{visible:Z.value,"onUpdate:visible":s[18]||(s[18]=p=>Z.value=p),title:W.value,"ok-text":k.value,"cancel-text":"انصراف","confirm-loading":T.value,width:r.mode==="grant"?"760px":"560px",onOk:pe,onCancel:ce},{default:l(()=>[t(d(A),{layout:"vertical",class:"max-h-[75vh] overflow-y-auto pe-1"},{default:l(()=>[r.mode==="grant"?(B(),E(ve,{key:0},[t(d($),{label:"مخاطب",required:""},{default:l(()=>[t(d(U),{value:P.value,"onUpdate:value":s[0]||(s[0]=p=>P.value=p),class:"flex flex-col gap-2"},{default:l(()=>[t(d(se),{value:"user"},{default:l(()=>[N("یک کاربر")]),_:1}),t(d(se),{value:"segment"},{default:l(()=>[N("دسته کاربران (مثلاً چالش nام را انجام داده‌اند)")]),_:1})]),_:1},8,["value"])]),_:1}),P.value==="user"?(B(),re(d($),{key:0,label:"کاربر",required:""},{default:l(()=>[t(d(u),{value:x.user_id,"onUpdate:value":s[1]||(s[1]=p=>x.user_id=p),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:f.value,"filter-option":y,disabled:!!r.lockedUserId},null,8,["value","options","disabled"])]),_:1})):(B(),E("div",ma,[t(Gt,{modelValue:G.value,"onUpdate:modelValue":s[2]||(s[2]=p=>G.value=p),"show-actions":!1,"show-preview":!0,"title-text":"دسته مخاطب برای اعطای اشتراک","preview-loading":ae.value,"preview-text":V.value,onPreview:ge},null,8,["modelValue","preview-loading","preview-text"])])),t(d($),{label:"پلن اشتراک",required:""},{default:l(()=>[t(d(u),{value:x.plan_id,"onUpdate:value":s[3]||(s[3]=p=>x.plan_id=p),"show-search":"",placeholder:"انتخاب پلن",options:F.value,"filter-option":K,onChange:X},null,8,["value","options"])]),_:1})],64)):(B(),E(ve,{key:1},[r.purchaseId?Y("",!0):(B(),re(d($),{key:0,label:"کاربر",required:""},{default:l(()=>[t(d(u),{value:x.user_id,"onUpdate:value":s[4]||(s[4]=p=>x.user_id=p),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:f.value,"filter-option":y,disabled:!!r.lockedUserId},null,8,["value","options","disabled"])]),_:1})),r.purchaseId?Y("",!0):(B(),re(d($),{key:1,label:"پلن (اختیاری)"},{default:l(()=>[t(d(u),{value:x.plan_id,"onUpdate:value":s[5]||(s[5]=p=>x.plan_id=p),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده می‌شود",options:F.value,"filter-option":K},null,8,["value","options"])]),_:1}))],64)),t(d($),{label:r.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:r.mode==="extend"},{default:l(()=>[t(d(I),{value:x.duration_days,"onUpdate:value":s[6]||(s[6]=p=>x.duration_days=p),min:1,class:"w-full",placeholder:r.mode==="grant"?"خالی = مدت پیش‌فرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),r.mode==="grant"&&le.value?(B(),E("div",pa," مدت پیش‌فرض پلن: "+ue(le.value.duration_days)+" روز ",1)):Y("",!0),r.mode==="grant"?(B(),E("div",_a,[va,t(d(U),{value:v.value,"onUpdate:value":s[7]||(s[7]=p=>v.value=p),class:"flex flex-col gap-2"},{default:l(()=>[t(d(se),{value:"none"},{default:l(()=>[N("هیچکدام — هیچ پیامی ارسال نشود")]),_:1}),t(d(se),{value:"custom"},{default:l(()=>[N("ارسال اطلاع‌رسانی (انتخاب کانال‌ها)")]),_:1})]),_:1},8,["value"]),v.value==="custom"?(B(),E(ve,{key:0},[fa,n("div",ga,[t(d(Te),{checked:o.sms,"onUpdate:checked":s[8]||(s[8]=p=>o.sms=p)},{default:l(()=>[N("پیامک")]),_:1},8,["checked"]),t(d(Te),{checked:o.push,"onUpdate:checked":s[9]||(s[9]=p=>o.push=p)},{default:l(()=>[N("نوتیفیکیشن (Push)")]),_:1},8,["checked"]),t(d(Te),{checked:o.modal,"onUpdate:checked":s[10]||(s[10]=p=>o.modal=p)},{default:l(()=>[N("پیام مودال ورود به اپ")]),_:1},8,["checked"])]),o.sms?(B(),re(d($),{key:0,label:"متن پیامک"},{default:l(()=>[t(d(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})):Y("",!0),o.push?(B(),E(ve,{key:1},[t(d($),{label:"عنوان نوتیف"},{default:l(()=>[t(d(D),{value:o.pushTitle,"onUpdate:value":s[12]||(s[12]=p=>o.pushTitle=p),placeholder:"فعال‌سازی اشتراک",maxlength:120},null,8,["value"])]),_:1}),t(d($),{label:"متن نوتیف"},{default:l(()=>[t(d(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(d($),{label:"لینک نوتیف (اختیاری)"},{default:l(()=>[t(d(D),{value:o.pushUrl,"onUpdate:value":s[14]||(s[14]=p=>o.pushUrl=p),placeholder:"/"},null,8,["value"])]),_:1})],64)):Y("",!0),o.modal?(B(),E(ve,{key:2},[t(d($),{label:"عنوان مودال"},{default:l(()=>[t(d(D),{value:o.modalTitle,"onUpdate:value":s[15]||(s[15]=p=>o.modalTitle=p),placeholder:"اشتراک شما فعال شد"},null,8,["value"])]),_:1}),t(d($),{label:"متن مودال"},{default:l(()=>[t(d(C),{value:o.modalBody,"onUpdate:value":s[16]||(s[16]=p=>o.modalBody=p),rows:3,placeholder:"خالی = متن پیش‌فرض"},null,8,["value"])]),_:1}),t(d($),{label:"متن دکمه مودال"},{default:l(()=>[t(d(D),{value:o.modalCtaLabel,"onUpdate:value":s[17]||(s[17]=p=>o.modalCtaLabel=p),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 ya=[{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(Zt,{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"}],xa=[{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 _=e.record.usage_count??0,c=e.record.usage_limit;return c!=null?`${_} / ${c}`:String(_)}}];function ha(e){if(!e)return"";const _=e.replace(/\//g,"-");return new Date(`${_}T23:59:59.999Z`).toISOString()}function wa(e){return e?e.slice(0,10).replace(/-/g,"/"):""}function ut(e,_){var u;const c=!!(_!=null&&_.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?ha(_):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,_){const u=((await je("subscription_discount_codes",{filters:[{field:"code",op:"eq",value:e}],limit:5,page:1})).rows||[]).find(I=>I.id!==_);if(u!=null&&u.id)throw new Error("این کد تخفیف قبلاً ثبت شده است")}async function dt(e){const{TableEngineRequest:_}=await jt(()=>import("./buildSupabaseQuery-32cb26f7.js"),["assets/buildSupabaseQuery-32cb26f7.js","assets/index-185c08ed.js","assets/index-0643191e.css"]),c={...e,order:e.order??"-id"},u=await _(c,"subscription_discount_codes");if(Array.isArray(u==null?void 0:u.rows)){const I=u.rows.map((A,$)=>({...A,index:$}));return{...u,rows:I}}return u}async function ka(e,_){const c=ut(e,_);return await rt(c.code),await at("subscription_discount_codes",c)}async function Ia(e,_,c){const u=ut(_,c);await rt(u.code,e);const I=await lt("subscription_discount_codes",e,u);return Array.isArray(I)?I:[I]}async function Sa(e){await Et("subscription_discount_codes",e)}const $a={class:"flex justify-between items-center mb-4"},Ca=n("h2",null,"کدهای تخفیف اشتراک",-1),Ua={class:"gap-2 flex justify-center"},Ra=n("span",null,"حذف",-1),Ta=n("span",null,"ویرایش",-1),Pa={class:"flex flex-col gap-2"},Ba={class:"flex flex-col gap-2"},Na=ye({__name:"SubscriptionDiscountCodes",setup(e){const[_,c]=we(),u=w({columns:ya,api:dt,defaultPageLimit:20}),I=w(!1),A=w(!1),$=w(null),D=w(!1),C=w(!1),U=w("unlimited"),T=w("unlimited"),O=w(""),q=w(!1),P=w([]),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"&&(O.value="")}),Be(T,k=>{k==="unlimited"&&(v.usage_limit=null)});function G(){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",O.value=""}function ae(){G(),A.value=!1,$.value=null,D.value=!1,I.value=!0}function V(){I.value=!1,D.value=!1,C.value=!1}async function x(){q.value=!0;try{const k=await et();P.value=(k||[]).map(f=>({label:f.title,value:Number(f.id)}))}catch{P.value=[]}finally{q.value=!1}}async function o(){var k,f;if(!(D.value||C.value)){if(!((k=v.title)!=null&&k.trim())||!((f=v.code)!=null&&f.trim())){m.warning("عنوان و کد تخفیف الزامی است");return}if(!v.amount||v.amount<=0){m.warning("مقدار تخفیف باید بیشتر از صفر باشد");return}if(v.is_percent&&v.amount>100){m.warning("درصد تخفیف نمی‌تواند بیشتر از ۱۰۰ باشد");return}if(U.value==="limited"&&!O.value){m.warning("تاریخ انقضا را وارد کنید");return}if(T.value==="limited"&&(!v.usage_limit||v.usage_limit<1)){m.warning("محدودیت تعداد استفاده را وارد کنید");return}C.value=!0;try{const F=U.value==="limited"?O.value:null;T.value==="unlimited"&&(v.usage_limit=null),A.value&&$.value!=null?(await Ia($.value,v,F),m.success("کد تخفیف با موفقیت ویرایش شد")):(await ka(v,F),m.success("کد تخفیف با موفقیت ایجاد شد")),I.value=!1,await c()}catch(F){m.error((F==null?void 0:F.message)||"خطا در ذخیره کد تخفیف")}finally{C.value=!1}}}function Z(k){k!=null&&k.id&&(G(),A.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(f=>Number(f)):[],v.is_active=k.is_active??!0,k.expires_at?(U.value="limited",O.value=wa(k.expires_at)):(U.value="unlimited",O.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 W(k){fe.confirm({title:"حذف کد تخفیف",content:`آیا از حذف «${k.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Sa(k.id),m.success("حذف شد"),await c()}catch(f){m.error((f==null?void 0:f.message)||"خطا در حذف")}}})}return Se(x),(k,f)=>{const F=Me,le=Fe,y=Le,K=Vt,X=se,oe=Kt,ne=it,de=nt,ce=Jt,me=Ne,ge=Oe;return B(),E("div",null,[n("div",$a,[Ca,t(F,{type:"primary",onClick:ae},{default:l(()=>[N("افزودن کد تخفیف")]),_:1})]),t(le,ke(u.value,{onRegister:d(_)}),{action:l(({record:S})=>[n("div",Ua,[t(d(ie),{class:"cursor-pointer"},{title:l(()=>[Ra]),default:l(()=>[t(ee,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:pe=>W(S)},null,8,["onClick"])]),_:2},1024),t(d(ie),{class:"cursor-pointer"},{title:l(()=>[Ta]),default:l(()=>[t(ee,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:pe=>Z(S)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"]),t(ge,{visible:I.value,"onUpdate:visible":f[11]||(f[11]=S=>I.value=S),title:A.value?"ویرایش کد تخفیف":"افزودن کد تخفیف",loading:D.value,"destroy-on-close":"",onOk:o,onClose:V,width:"720px"},{default:l(()=>[t(me,{layout:"vertical",class:"grid grid-cols-1 md:grid-cols-2 gap-3"},{default:l(()=>[t(K,{label:"عنوان کد تخفیف",required:"",class:"md:col-span-2"},{default:l(()=>[t(y,{value:v.title,"onUpdate:value":f[0]||(f[0]=S=>v.title=S),placeholder:"مثال: کمپین اینستاگرام نوروز"},null,8,["value"])]),_:1}),t(K,{label:"کد تخفیف",required:""},{default:l(()=>[t(y,{value:v.code,"onUpdate:value":f[1]||(f[1]=S=>v.code=S),placeholder:"مثال: NOWROOZ1405",style:{"text-transform":"uppercase"}},null,8,["value"])]),_:1}),t(K,{label:"نوع تخفیف"},{default:l(()=>[t(oe,{value:v.is_percent,"onUpdate:value":f[2]||(f[2]=S=>v.is_percent=S)},{default:l(()=>[t(X,{value:!0},{default:l(()=>[N("درصدی")]),_:1}),t(X,{value:!1},{default:l(()=>[N("مبلغی (ریال)")]),_:1})]),_:1},8,["value"])]),_:1}),t(K,{label:v.is_percent?"درصد تخفیف":"مبلغ تخفیف (ریال)",required:""},{default:l(()=>[t(ne,{value:v.amount,"onUpdate:value":f[3]||(f[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(K,{label:"تاریخ انقضا"},{default:l(()=>[n("div",Pa,[t(oe,{value:U.value,"onUpdate:value":f[4]||(f[4]=S=>U.value=S),class:"mb-1"},{default:l(()=>[t(X,{value:"unlimited"},{default:l(()=>[N("نامحدود")]),_:1}),t(X,{value:"limited"},{default:l(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),U.value==="limited"?(B(),re(Yt,{key:0,value:O.value,"onUpdate:value":f[5]||(f[5]=S=>O.value=S)},null,8,["value"])):Y("",!0)])]),_:1}),t(K,{label:"محدودیت تعداد استفاده"},{default:l(()=>[n("div",Ba,[t(oe,{value:T.value,"onUpdate:value":f[6]||(f[6]=S=>T.value=S),class:"mb-1"},{default:l(()=>[t(X,{value:"unlimited"},{default:l(()=>[N("نامحدود")]),_:1}),t(X,{value:"limited"},{default:l(()=>[N("محدود")]),_:1})]),_:1},8,["value"]),T.value==="limited"?(B(),re(ne,{key:0,value:v.usage_limit,"onUpdate:value":f[7]||(f[7]=S=>v.usage_limit=S),style:{width:"100%"},min:1,placeholder:"حداکثر تعداد کل"},null,8,["value"])):Y("",!0)])]),_:1}),t(K,{label:"تعداد استفاده مجاز برای هر کاربر"},{default:l(()=>[t(ne,{value:v.user_usage_limit,"onUpdate:value":f[8]||(f[8]=S=>v.user_usage_limit=S),style:{width:"100%"},min:1,placeholder:"خالی = نامحدود"},null,8,["value"])]),_:1}),t(K,{label:"اعمال روی پلن‌ها",class:"md:col-span-2"},{default:l(()=>[t(de,{value:v.plan_ids,"onUpdate:value":f[9]||(f[9]=S=>v.plan_ids=S),mode:"multiple","allow-clear":"",style:{width:"100%"},placeholder:"خالی = همه پلن‌ها",options:P.value,loading:q.value},null,8,["value","options","loading"])]),_:1}),t(K,{label:"فعال"},{default:l(()=>[t(ce,{checked:v.is_active,"onUpdate:checked":f[10]||(f[10]=S=>v.is_active=S)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["visible","title","loading"])])}}}),La=n("div",{class:"mb-4"},[n("h2",null,"آمار استفاده از کدهای تخفیف")],-1),Aa=ye({__name:"SubscriptionDiscountStats",setup(e){const[_]=we(),c=w({columns:xa,api:dt,defaultPageLimit:20});return(u,I)=>{const A=Fe;return B(),E("div",null,[La,t(A,ke(c.value,{onRegister:d(_)}),null,16,["onRegister"])])}}}),Da="تخفیف ویژه بازگشت به مدرسه",Ae="subscription_plans_banner_image",De="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,_){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:_});return}await at("configs",{key:e,value:_})}function Oa(e){return e==null||e===""?!0:e==="yes"||e==="true"||e==="1"}async function mt(){const e=await ct([Ae,De]),_=Object.fromEntries(e.map(u=>[u.key,u.value??""]));return{image:String(_[Ae]||"").trim()||null,visible:Oa(_[De])}}async function Fa(e){return await Ie(Ae,e.image||""),await Ie(De,e.visible?"yes":"no"),mt()}async function ze(){var c;const _=(c=(await ct([Ee]))[0])==null?void 0:c.value;if(!_)return{};try{const u=JSON.parse(_);return!u||typeof u!="object"||Array.isArray(u)?{}:Object.fromEntries(Object.entries(u).map(([I,A])=>[String(I),String(A??"")]))}catch{return{}}}async function Ma(e,_){const c=await ze();c[String(e)]=_.trim(),await Ie(Ee,JSON.stringify(c))}async function ja(e){const _=await ze();Object.prototype.hasOwnProperty.call(_,String(e))&&(delete _[String(e)],await Ie(Ee,JSON.stringify(_)))}function Ea(e,_,c){const u=String(e);return Object.prototype.hasOwnProperty.call(c,u)?c[u]:Number(_)>0?Da:""}const za={class:"flex justify-between items-center mb-4"},qa=n("h2",null,"لیست خرید اشتراک",-1),Ga={class:"flex gap-2"},Va={class:"gap-2 flex justify-center"},Ka=n("span",null,"تمدید",-1),Ja=n("span",null,"لغو اشتراک",-1),Ya=n("span",null,"حذف",-1),Za={class:"flex justify-between items-center mb-4"},Ha=n("h2",null,"مدیریت اشتراک‌ها",-1),Wa={class:"rounded-xl border border-gray-200 p-4 mb-4"},Xa=n("div",{class:"font-semibold mb-1"},"بنر لیست اشتراک",-1),Qa=n("div",{class:"text-sm text-gray-500 mb-3"}," این تصویر بالای لیست پلن‌ها در اپ کاربر نمایش داده می‌شود. تا وقتی تصویری آپلود و ذخیره نشود، بنر در اپ دیده نمی‌شود. ",-1),el={class:"flex items-center gap-2 mb-3"},tl={class:"text-sm text-gray-600"},al={key:0},ll=n("div",null,"آپلود تصویر بنر",-1),nl={class:"gap-2 flex justify-center"},il=n("span",null,"حذف",-1),sl=n("span",null,"ویرایش",-1),ol=n("div",{class:"mb-4"},[n("h2",null,"تنظیمات درگاه پرداخت")],-1),ul={class:"space-y-4 relative"},rl={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},dl={class:"grid grid-cols-2 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={class:"grid grid-cols-2 gap-4"},_l=n("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),vl=n("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),fl={class:"mt-2 font-semibold text-green-700"},gl={class:"grid grid-cols-2 gap-4"},bl=n("div",{class:"mb-1 text-sm text-gray-600"},"نوع تخفیف",-1),yl={class:"mb-1 text-sm text-gray-600"},xl={class:"grid grid-cols-2 gap-4"},hl=n("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),wl=n("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),kl={class:"flex items-center gap-2 mt-2"},Il={class:"text-sm text-gray-600"},Sl=n("div",{class:"mb-1 text-sm text-gray-600"},"متن روبان روی کارت",-1),$l=n("div",{class:"text-xs text-gray-500 mt-1"}," روی کارت همین پلن در اپ کاربر نشان داده می‌شود. اگر خالی ذخیره شود، روبان نمایش داده نمی‌شود. ",-1),Cl=n("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),Ul={class:"flex justify-center"},Rl=n("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),Tl={key:0},Pl=n("div",null,"آپلود تصویر",-1),En=ye({__name:"index",setup(e){const _=Je,c=Je.TabPane,u=se.Group,I=se,A=w("purchases"),$=w(!1),D=w(!1),C=w(null),[U,T]=we(),[O,q]=we(),P=w(!1),v=w("grant"),G=w(null),ae=w(null),V=w(!1),x=w([]),o=w(0),Z=w(""),W=w({}),k=w(!1),f=w({image:null,visible:!0}),F=w([]),le=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,discount_type:"percent",duration_days:30,is_active:!0,sort_order:0}),y=w(le()),K=te(()=>Ut(Number(y.value.price),Number(y.value.discount_percent),y.value.discount_type).toLocaleString("fa-IR")),X={columns:Wt,api:Rt,defaultPageLimit:20},oe={columns:Qt,api:Tt,defaultPageLimit:20};function ne(){y.value=le(),x.value=[],Z.value=""}function de(i){f.value=i;const a=Ue(i.image)||null;f.value.image=a;const g=a?Re(a):null;F.value=g?[{uid:"-banner",name:"banner.jpg",status:"done",url:g,response:{path:a}}]:[]}async function ce(){try{const[i,a]=await Promise.all([mt(),ze()]);de(i),W.value=a}catch(i){m.error((i==null?void 0:i.message)||"خطا در بارگذاری تنظیمات نمایش اشتراک")}}function me(){return f.value.image=null,!0}async function ge(){if(o.value>0){m.warning("لطفاً تا پایان آپلود صبر کنید");return}k.value=!0;try{const i=await Fa({image:f.value.image,visible:f.value.visible});de(i),m.success(i.visible?"بنر ذخیره شد":"بنر مخفی شد")}catch(i){m.error((i==null?void 0:i.message)||"خطا در ذخیره بنر")}finally{k.value=!1}}function S(){D.value=!1,C.value=null,ne(),$.value=!0}function pe(){$.value=!1,ne()}function r(i){return i.type.startsWith("image/")?i.size/1024/1024>=5?(m.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(m.error("فقط فایل تصویری مجاز است"),!1)}async function s(i,a){const{file:g,onSuccess:h,onError:M,onProgress:J}=i,_e=new FormData;_e.append("file",g);const $e=`${zt}/upload/machartaa-img`;o.value++,await new Promise((Ce,b)=>{const L=new XMLHttpRequest;L.open("POST",$e);const bt=qt()||localStorage.getItem("tamin_token")||"";L.setRequestHeader("Authorization",`Bearer ${bt}`),L.upload.onprogress=j=>{j.lengthComputable&&(J==null||J({percent:Math.round(j.loaded/j.total*100)}))},L.onload=()=>{if(L.status>=200&&L.status<300)try{const j=JSON.parse(L.responseText||"{}"),yt=j.full_src||j.url||j.src||j.path||j.data&&(j.data.full_src||j.data.url||j.data.src||j.data.path)||"",Ge=Ue(yt),xt=Re(Ge);a(Ge,xt),h==null||h(j,L),m.success("تصویر با موفقیت آپلود شد!"),Ce()}catch(j){M==null||M(j,L),b(j)}else M==null||M(new Error("خطا در آپلود تصویر"),L),b(new Error("خطا در آپلود تصویر"))},L.onerror=()=>{M==null||M(new Error("خطا در آپلود تصویر"),L),b(new Error("خطا در آپلود تصویر"))},L.onloadend=()=>{o.value=Math.max(0,o.value-1)},L.send(_e)})}function R(i,a,g){i.value=g?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:g,response:{path:a}}]:[]}function p(i){return s(i,(a,g)=>{y.value.image_url=a,R(x,a,g)})}function Q(i){return s(i,(a,g)=>{f.value.image=a,R(F,a,g)})}function H(i){if(Array.isArray(i))return H(i[0]);if(!i||typeof i!="object")return null;const a=i,g=Number(a.id);return Number.isFinite(g)?g:a.data!=null?H(a.data):null}async function z(){var a;if(o.value>0){m.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((a=y.value.title)!=null&&a.trim())){m.warning("عنوان الزامی است");return}if(!y.value.duration_days||Number(y.value.duration_days)<1){m.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}const i=Number(y.value.discount_percent)||0;if(i<0){m.warning("مقدار تخفیف نمی‌تواند منفی باشد");return}if(y.value.discount_type==="percent"&&i>100){m.warning("درصد تخفیف نمی‌تواند بیشتر از ۱۰۰ باشد");return}if(y.value.discount_type==="simple"&&i>Number(y.value.price||0)){m.warning("مبلغ تخفیف نمی‌تواند بیشتر از قیمت پلن باشد");return}try{const g={...y.value,price:Number(y.value.price)||0,discount_percent:i,discount_type:y.value.discount_type==="simple"?"simple":"percent",duration_days:Number(y.value.duration_days),sort_order:Number(y.value.sort_order)||0};let h=C.value;if(D.value&&C.value)await Pt(C.value,g);else{const M=await Bt(g);h=H(M)}h?(await Ma(h,Z.value),W.value={...W.value,[String(h)]:Z.value.trim()},m.success(D.value?"اشتراک ویرایش شد":"اشتراک افزوده شد")):m.warning("اشتراک ذخیره شد، اما متن روبان ذخیره نشد. پلن را دوباره ویرایش کنید."),pe(),await T()}catch(g){m.error((g==null?void 0:g.message)||"خطا در ذخیره")}}function xe(i){D.value=!0,C.value=i.id;const a=Ue(i.image_url)||null;y.value={title:i.title||"",description:i.description||"",image_url:a,price:i.price||0,discount_percent:i.discount_percent||0,discount_type:i.discount_type==="simple"?"simple":"percent",duration_days:i.duration_days||30,is_active:i.is_active??!0,sort_order:i.sort_order??0},Z.value=Ea(i.id,i.discount_percent,W.value);const g=a?Re(a):null;x.value=g?[{uid:"-1",name:"image.jpg",status:"done",url:g,response:{path:a}}]:[],$.value=!0}function he(i){fe.confirm({title:"حذف اشتراک",content:`آیا از حذف «${i.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Nt(i.id),await ja(i.id);const a={...W.value};delete a[String(i.id)],W.value=a,m.success("حذف شد"),await T()}catch(a){m.error((a==null?void 0:a.message)||"خطا در حذف")}}})}async function pt(i){try{await Lt(i.id,!i.is_active),m.success("وضعیت به‌روز شد"),await T()}catch(a){m.error((a==null?void 0:a.message)||"خطا")}}Se(()=>{ce()});function _t(){v.value="grant",G.value=null,ae.value=null,P.value=!0}async function vt(){V.value||fe.confirm({title:"همگام‌سازی پرداخت‌های زرین‌پال",content:"لیست تراکنش‌های موفقِ اعتبارسنجی‌نشده از زرین‌پال گرفته می‌شود، با توکن تراکنش‌های اشتراک تطبیق داده می‌شود و در صورت تطبیق، اشتراک کاربر فعال می‌شود. ادامه می‌دهید؟",okText:"همگام‌سازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var i,a;V.value=!0;try{const g=await At(),h=(g==null?void 0:g.data)??g,M=Number((h==null?void 0:h.reconciled_count)||0),J=Number((h==null?void 0:h.total_zarinpal)||0),_e=Number((h==null?void 0:h.matched_count)||0);M>0?m.success((h==null?void 0:h.message)||`${M} اشتراک فعال شد.`):m.info((h==null?void 0:h.message)||(J>0?`از ${J} تراکنش زرین‌پال، ${_e} مورد با اشتراک محلی تطبیق خورد ولی فعال‌سازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجی‌نشده‌ای در زرین‌پال یافت نشد.")),await q()}catch(g){m.error(((a=(i=g==null?void 0:g.response)==null?void 0:i.data)==null?void 0:a.message)||(g==null?void 0:g.message)||"خطا در همگام‌سازی پرداخت‌ها")}finally{V.value=!1}}})}function qe(i){v.value="extend",G.value=(i==null?void 0:i.id)??null,ae.value=(i==null?void 0:i.user_id)??null,P.value=!0}function ft(i){fe.confirm({title:"لغو اشتراک",content:`اشتراک «${i.plan_title}» برای ${i.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع می‌شود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,g;try{await Dt(i.id),m.success("اشتراک لغو شد"),await q()}catch(h){m.error(((g=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:g.message)||(h==null?void 0:h.message)||"خطا در لغو")}}})}function gt(i){fe.confirm({title:"حذف کامل",content:`رکورد خرید «${i.plan_title}» برای ${i.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var a,g;try{await Ot(i.id),m.success("حذف شد"),await q()}catch(h){m.error(((g=(a=h==null?void 0:h.response)==null?void 0:a.data)==null?void 0:g.message)||(h==null?void 0:h.message)||"خطا در حذف")}}})}return(i,a)=>{const g=Me,h=Fe,M=Qe,J=Xe,_e=wt,$e=Oe,Ce=ht;return B(),E("div",null,[t(Ce,null,{default:l(()=>[t(d(_),{activeKey:A.value,"onUpdate:activeKey":a[4]||(a[4]=b=>A.value=b)},{default:l(()=>[t(d(c),{key:"purchases",tab:"خریدهای کاربران"},{default:l(()=>[n("div",za,[qa,n("div",Ga,[t(g,{loading:V.value,onClick:vt},{default:l(()=>[N(" همگام‌سازی پرداخت‌های زرین‌پال ")]),_:1},8,["loading"]),t(g,{onClick:a[0]||(a[0]=b=>qe())},{default:l(()=>[N("تمدید اشتراک")]),_:1}),t(g,{type:"primary",onClick:a[1]||(a[1]=b=>_t())},{default:l(()=>[N("ایجاد اشتراک برای کاربر")]),_:1})])]),t(h,ke(oe,{onRegister:d(O)}),{action:l(({record:b})=>[n("div",Va,[t(d(ie),{class:"cursor-pointer"},{title:l(()=>[Ka]),default:l(()=>[t(ee,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:L=>qe(b)},null,8,["onClick"])]),_:2},1024),t(d(ie),{class:"cursor-pointer"},{title:l(()=>[Ja]),default:l(()=>[t(ee,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:L=>ft(b)},null,8,["onClick"])]),_:2},1024),t(d(ie),{class:"cursor-pointer"},{title:l(()=>[Ya]),default:l(()=>[t(ee,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:L=>gt(b)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(d(c),{key:"plans",tab:"پلن‌های اشتراک"},{default:l(()=>[n("div",Za,[Ha,t(g,{type:"primary",onClick:S},{default:l(()=>[N("افزودن اشتراک")]),_:1})]),n("div",Wa,[Xa,Qa,n("div",el,[t(M,{value:f.value.visible,"onUpdate:value":a[2]||(a[2]=b=>f.value.visible=b)},null,8,["value"]),n("span",tl,ue(f.value.visible?"نمایش بنر":"بنر مخفی است"),1)]),t(d(Ye),{"file-list":F.value,"onUpdate:fileList":a[3]||(a[3]=b=>F.value=b),"before-upload":r,"custom-request":Q,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:me},{default:l(()=>[F.value.length<1?(B(),E("div",al,[t(ee,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),ll])):Y("",!0)]),_:1},8,["file-list"]),t(g,{type:"primary",class:"mt-2",loading:k.value,onClick:ge},{default:l(()=>[N(" ذخیره بنر ")]),_:1},8,["loading"])]),t(h,ke(X,{ref:"table",onRegister:d(U)}),{action:l(({record:b})=>[n("div",nl,[t(d(ie),{class:"cursor-pointer"},{title:l(()=>[n("span",null,ue(b.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:l(()=>[t(ee,{icon:b.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:b.is_active?"#F59E0B":"#16A34A",onClick:L=>pt(b)},null,8,["icon","color","onClick"])]),_:2},1024),t(d(ie),{class:"cursor-pointer"},{title:l(()=>[il]),default:l(()=>[t(ee,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:L=>he(b)},null,8,["onClick"])]),_:2},1024),t(d(ie),{class:"cursor-pointer"},{title:l(()=>[sl]),default:l(()=>[t(ee,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:L=>xe(b)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),t(d(c),{key:"gateway",tab:"تنظیمات درگاه (زرین‌پال)"},{default:l(()=>[ol,t(ca)]),_:1}),t(d(c),{key:"discount-codes",tab:"کد تخفیف"},{default:l(()=>[t(Na)]),_:1}),t(d(c),{key:"discount-stats",tab:"آمار کدهای تخفیف"},{default:l(()=>[t(Aa)]),_:1})]),_:1},8,["activeKey"]),t($e,{visible:$.value,"onUpdate:visible":a[15]||(a[15]=b=>$.value=b),title:D.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:z,onCancel:pe,width:"70%",confirmLoading:o.value>0},{default:l(()=>[n("div",ul,[o.value>0?(B(),E("div",rl,[t(d(Ht),{size:"large"})])):Y("",!0),n("div",dl,[n("div",null,[cl,t(J,{value:y.value.title,"onUpdate:value":a[5]||(a[5]=b=>y.value.title=b),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),n("div",null,[ml,t(J,{value:y.value.duration_days,"onUpdate:value":a[6]||(a[6]=b=>y.value.duration_days=b),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),n("div",pl,[n("div",null,[_l,t(J,{value:y.value.price,"onUpdate:value":a[7]||(a[7]=b=>y.value.price=b),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),n("div",null,[vl,n("div",fl,ue(K.value),1)])]),n("div",gl,[n("div",null,[bl,t(d(u),{value:y.value.discount_type,"onUpdate:value":a[8]||(a[8]=b=>y.value.discount_type=b),class:"mt-1"},{default:l(()=>[t(d(I),{value:"percent"},{default:l(()=>[N("درصدی")]),_:1}),t(d(I),{value:"simple"},{default:l(()=>[N("مبلغی (ریال)")]),_:1})]),_:1},8,["value"])]),n("div",null,[n("div",yl,ue(y.value.discount_type==="simple"?"مبلغ تخفیف (ریال)":"درصد تخفیف"),1),t(J,{value:y.value.discount_percent,"onUpdate:value":a[9]||(a[9]=b=>y.value.discount_percent=b),type:"number",min:"0",max:y.value.discount_type==="percent"?100:void 0,placeholder:"0"},null,8,["value","max"])])]),n("div",xl,[n("div",null,[hl,t(J,{value:y.value.sort_order,"onUpdate:value":a[10]||(a[10]=b=>y.value.sort_order=b),type:"number",placeholder:"0"},null,8,["value"])]),n("div",null,[wl,n("div",kl,[t(M,{value:y.value.is_active,"onUpdate:value":a[11]||(a[11]=b=>y.value.is_active=b)},null,8,["value"]),n("span",Il,ue(y.value.is_active?"فعال":"غیرفعال"),1)])])]),n("div",null,[Sl,t(J,{value:Z.value,"onUpdate:value":a[12]||(a[12]=b=>Z.value=b),placeholder:"مثلاً تخفیف ویژه بازگشت به مدرسه"},null,8,["value"]),$l]),n("div",null,[Cl,t(_e,{value:y.value.description,"onUpdate:value":a[13]||(a[13]=b=>y.value.description=b),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),n("div",Ul,[n("div",null,[Rl,t(d(Ye),{"file-list":x.value,"onUpdate:fileList":a[14]||(a[14]=b=>x.value=b),"before-upload":r,"custom-request":p,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(()=>[x.value.length<1?(B(),E("div",Tl,[t(ee,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),Pl])):Y("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),t(ba,{visible:P.value,"onUpdate:visible":a[16]||(a[16]=b=>P.value=b),mode:v.value,"purchase-id":G.value,"locked-user-id":ae.value,onSuccess:d(q)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{En as default};