Files
machartaa_admin_dist/dist/assets/index-b451ef1d.js
T
2026-08-23 20:07:06 +03:30

2 lines
33 KiB
JavaScript

import{_ as De}from"./BasicMainCard-b6358749.js";import{_ as Le}from"./BasicModal.vue_vue_type_style_index_0_lang-e1cd5348.js";import{_ as Oe}from"./BasicTextArea.vue_vue_type_style_index_0_lang-49ae04e4.js";import{_ as Be}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-df682920.js";import{_ as Re}from"./BasicInput.vue_vue_type_style_index_0_lang-0f7fe263.js";import{_ as je,u as ye}from"./useBaseTable-d7cd0f4c.js";import{_ as Ne}from"./button.vue_vue_type_style_index_0_lang-5ec31ef5.js";import{g as Ge,a as qe,b as Ee,c as Ve,d as Ke,e as Je,f as He,h as We,u as Xe,i as Ze,j as Qe,t as Ye,k as et,l as tt,m as at}from"./subscription-727d0c76.js";import{t as fe}from"./useDataTime-fe4b1957.js";import{I as q}from"./Icon-98831d4d.js";import{O as Fe,d as _e,i as f,j as M,x as Me,G as d,o as h,c as U,F as K,b as n,e as s,t as Z,s as lt,w as r,f as P,h as be,y as st,k as H,l as o,n as F,bI as nt,K as xe,L as it}from"./index-ffa60a07.js";import{g as ot}from"./index-34d75fb4.js";import{e as he,g as we}from"./convert-2ad76038.js";import{_ as rt,v as ke,t as Ie}from"./AudienceSegmentPicker.vue_vue_type_script_setup_true_lang-3ddf3fab.js";import{F as $e}from"./index-8f583d38.js";import{I as Te}from"./index-f396abcf.js";import{R as W,C as ve}from"./index-f5f9d56c.js";import{M as X}from"./index-d1c80ae6.js";import{a as ut}from"./index-4243bdee.js";import{I as dt}from"./index-4a0fa615.js";import{T as Ue}from"./index-c7f085be.js";import{S as ct}from"./index-567b7465.js";import{T as V}from"./isSymbol-6d79c27a.js";import{U as mt}from"./index-8ca74419.js";import"./Grid-ac34307b.js";import"./index-0606b83a.js";import"./Col-89f9984b.js";import"./styleChecker-76ccead7.js";import"./isPlainObject-3a12fb85.js";import"./vnode-57257037.js";import"./_plugin-vue_export-helper-30c9b7f0.js";import"./usePrice-bc935b83.js";import"./updateLocale-d02f2975.js";import"./index-f66de646.js";import"./shallowequal-01dca49b.js";import"./useState-377df27f.js";import"./useMemo-6bc58734.js";import"./FormItemContext-73e37c2d.js";import"./omit-8be067f7.js";import"./lodash-f10c309b.js";import"./index-4ed74117.js";import"./Badge-697bc2f0.js";import"./isNumeric-3f69e2aa.js";import"./index-1fda93f9.js";import"./index-321fdf78.js";import"./index-61d3d393.js";import"./supabaseTableQuery-f60c02e5.js";import"./dayjs-f5d1ce9b.js";import"./_flatRest-337b9ea4.js";import"./toArray-fdacf69b.js";import"./index-cae1f6fd.js";import"./SearchOutlined-6637041c.js";import"./index-771c6b16.js";import"./DialogWrap-c8f763fd.js";import"./pickAttrs-4d40f82c.js";import"./css-aae66f86.js";import"./isMobile-e2e89480.js";import"./useRefs-b02214fc.js";import"./index-44c7d16f.js";function Ce(c){return Number(c||0).toLocaleString("fa-IR")}const pt=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:c=>(c.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:c=>Ce(c.record.price)},{title:"تخفیف %",dataIndex:"discount_percent",key:"discount_percent",width:90,align:"center"},{title:"قیمت نهایی",dataIndex:"final_price",key:"final_price",customRender:c=>Ce(c.record.final_price)},{title:"فعال",dataIndex:"is_active",key:"is_active",customRender:c=>c.record.is_active?"بله":"خیر"},{title:"ترتیب",dataIndex:"sort_order",key:"sort_order",width:80,align:"center"},{title:"ایجاد",dataIndex:"created_at",key:"created_at",customRender:c=>fe(c.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function vt(c){return Number(c||0).toLocaleString("fa-IR")}const Pe={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},Se={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},ft=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,sortable:!1,width:70,align:"center",customRender:c=>(c.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:c=>vt(c.record.final_price)},{title:"پرداخت",dataIndex:"payment_status",key:"payment_status",type:"Select",filterField:"payment_status",sortField:"payment_status",filterComponentProps:{options:Object.entries(Pe).map(([c,C])=>({label:C,value:c})),allowClear:!0,placeholder:"انتخاب وضعیت پرداخت"},customRender:c=>Pe[c.record.payment_status]||c.record.payment_status},{title:"وضعیت",dataIndex:"status",key:"status",type:"Select",filterField:"status",sortField:"status",filterComponentProps:{options:Object.entries(Se).map(([c,C])=>({label:C,value:c})),allowClear:!0,placeholder:"انتخاب وضعیت"},customRender:c=>Se[c.record.status]||c.record.status},{title:"انقضا",dataIndex:"expires_at",key:"expires_at",type:"DateTime",sortField:"expires_at",customRender:c=>c.record.expires_at?fe(c.record.expires_at):"-"},{title:"تاریخ خرید",dataIndex:"created_at",key:"created_at",type:"DateTime",sortField:"created_at",customRender:c=>fe(c.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",filterable:!1,sortable:!1,width:140,align:"center"}];async function Ae(){return await Fe.get("/admin/subscription/payment-gateway")}async function _t(c){return(await Fe.put("/admin/subscription/payment-gateway",c)).settings??await Ae()}const gt={class:"max-w-2xl space-y-4"},yt=n("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم می‌شود. اپ کاربر از همین تنظیمات برای اتصال به زرین‌پال استفاده می‌کند. ",-1),bt={key:0,class:"py-8 text-center"},xt=n("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرین‌پال (Merchant ID)",-1),ht=n("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),wt=n("div",{class:"text-xs text-gray-500 mt-1"},[P(" مسیر callback به‌صورت خودکار اضافه می‌شود: "),n("code",null,"/subscriptions/callback")],-1),kt={class:"flex items-center gap-3"},It=n("span",{class:"text-sm"},"فعال بودن درگاه زرین‌پال",-1),$t={class:"flex items-center gap-3"},Tt=n("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),Ut=_e({__name:"PaymentGatewaySettings",setup(c){const C=f(!0),v=f(!1),p=f({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),A=M(()=>{var _;return p.value.zarinpal_enabled?p.value.zarinpal_sandbox?!0:!!((_=p.value.zarinpal_merchant_id)!=null&&_.trim()):!1}),z=M(()=>{var _;return p.value.zarinpal_enabled?p.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرین‌پال انجام می‌شود.":(_=p.value.zarinpal_merchant_id)!=null&&_.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمی‌توانند پرداخت کنند."}),y=M(()=>A.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");Me(async()=>{try{p.value=await Ae()}catch(_){d.error((_==null?void 0:_.message)||"خطا در بارگذاری تنظیمات")}finally{C.value=!1}});async function D(){var _,k;if(!((_=p.value.subscription_app_callback_url)!=null&&_.trim())){d.warning("آدرس بازگشت از درگاه الزامی است");return}if(p.value.zarinpal_enabled&&!p.value.zarinpal_sandbox&&!((k=p.value.zarinpal_merchant_id)!=null&&k.trim())){d.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}v.value=!0;try{p.value=await _t(p.value),d.success("تنظیمات درگاه ذخیره شد")}catch(I){d.error((I==null?void 0:I.message)||"خطا در ذخیره")}finally{v.value=!1}}return(_,k)=>{const I=Re,L=Be,B=Ne;return h(),U("div",gt,[yt,C.value?(h(),U("div",bt,"در حال بارگذاری...")):(h(),U(K,{key:1},[n("div",null,[xt,s(I,{value:p.value.zarinpal_merchant_id,"onUpdate:value":k[0]||(k[0]=x=>p.value.zarinpal_merchant_id=x),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),n("div",null,[ht,s(I,{value:p.value.subscription_app_callback_url,"onUpdate:value":k[1]||(k[1]=x=>p.value.subscription_app_callback_url=x),placeholder:"https://macharta.ir"},null,8,["value"]),wt]),n("div",kt,[s(L,{value:p.value.zarinpal_enabled,"onUpdate:value":k[2]||(k[2]=x=>p.value.zarinpal_enabled=x)},null,8,["value"]),It]),n("div",$t,[s(L,{value:p.value.zarinpal_sandbox,"onUpdate:value":k[3]||(k[3]=x=>p.value.zarinpal_sandbox=x)},null,8,["value"]),Tt]),n("div",{class:lt(["rounded-lg border p-3 text-sm",y.value])},Z(z.value),3),s(B,{type:"primary",loading:v.value,onClick:D},{default:r(()=>[P(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),Ct={key:1,class:"mb-4"},Pt={key:2,class:"text-sm text-gray-500 mb-3"},St={key:3,class:"border-t border-gray-200 pt-4 space-y-3"},Lt=n("div",{class:"font-semibold text-gray-700"},"اطلاع‌رسانی بعد از اعطا",-1),Bt=n("p",{class:"text-xs text-gray-500 m-0"}," یک یا چند کانال را انتخاب کنید. در صورت خالی بودن متن، پیام پیش‌فرض ارسال می‌شود. ",-1),Rt={class:"flex flex-col gap-2"},Nt=_e({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(c,{emit:C}){const v=c,p=ut,A=dt,z=$e,y=$e.Item,D=Te,_=Te.TextArea,k=W.Group,I=f(!1),L=f([]),B=f([]),x=f("user"),R=f("none"),S=f({segments:[]}),N=f(!1),T=f(""),m=be({user_id:void 0,plan_id:void 0,duration_days:null}),l=be({sms:!1,push:!1,modal:!1,smsMessage:"",pushTitle:"",pushBody:"",pushUrl:"/",modalTitle:"",modalBody:"",modalCtaLabel:"متوجه شدم"}),Q=M({get:()=>v.visible,set:t=>C("update:visible",t)}),ne=M(()=>v.mode==="grant"?"ایجاد اشتراک برای کاربر / دسته":"تمدید اشتراک"),ie=M(()=>v.mode!=="grant"?"تمدید":x.value==="segment"?"اعطای اشتراک به دسته":"ایجاد اشتراک"),J=M(()=>L.value.map(t=>{const e=t.name||`${t.first_name||""} ${t.last_name||""}`.trim()||"بدون نام",i=t.phone||"";return{value:t.id,label:i?`${e} — ${i}`:e,searchText:`${e} ${i}`.toLowerCase()}})),Y=M(()=>B.value.map(t=>({value:t.id,label:`${t.title} (${t.duration_days} روز)${t.is_active?"":" — غیرفعال"}`,searchText:String(t.title||"").toLowerCase()}))),j=M(()=>B.value.find(t=>t.id===m.plan_id)||null);function ee(t,e){return String((e==null?void 0:e.searchText)||(e==null?void 0:e.label)||"").toLowerCase().includes(t.toLowerCase())}function te(t,e){return String((e==null?void 0:e.searchText)||(e==null?void 0:e.label)||"").toLowerCase().includes(t.toLowerCase())}function oe(){v.mode==="grant"&&j.value&&!m.duration_days&&(m.duration_days=Number(j.value.duration_days)||null)}function re(){R.value="none",l.sms=!1,l.push=!1,l.modal=!1,l.smsMessage="",l.pushTitle="",l.pushBody="",l.pushUrl="/",l.modalTitle="",l.modalBody="",l.modalCtaLabel="متوجه شدم"}function ue(){if(R.value!=="custom"||!l.sms&&!l.push&&!l.modal)return;const t={sms:l.sms,push:l.push,modal:l.modal};return l.sms&&l.smsMessage.trim()&&(t.smsMessage=l.smsMessage.trim()),l.push&&(l.pushTitle.trim()&&(t.pushTitle=l.pushTitle.trim()),l.pushBody.trim()&&(t.pushBody=l.pushBody.trim()),l.pushUrl.trim()&&(t.pushUrl=l.pushUrl.trim())),l.modal&&(l.modalTitle.trim()&&(t.modalTitle=l.modalTitle.trim()),l.modalBody.trim()&&(t.modalBody=l.modalBody.trim()),l.modalCtaLabel.trim()&&(t.modalCtaLabel=l.modalCtaLabel.trim())),t}function de(){m.user_id=v.lockedUserId||void 0,m.plan_id=void 0,m.duration_days=v.mode==="extend"?30:null,x.value="user",S.value={segments:[]},T.value="",re()}function ae(){C("update:visible",!1)}async function le(){try{const[t,e]=await Promise.all([nt(),Ge()]);L.value=t||[],B.value=e||[]}catch(t){d.error((t==null?void 0:t.message)||"خطا در بارگذاری اطلاعات")}}async function se(){var e,i;const t=ke(S.value);if(t){d.warning(t);return}N.value=!0,T.value="";try{const a=Ie(S.value),g=await qe(a),$=Number((g==null?void 0:g.userCount)??0),b=Array.isArray(g==null?void 0:g.progressItems)?g.progressItems:[];b.length===1?T.value=`${$.toLocaleString("fa-IR")} کاربر (همان آمار پیشرفت چالش ${b[0].sort_order})`:b.length>1?T.value=`${$.toLocaleString("fa-IR")} کاربر یکتا در ${b.length.toLocaleString("fa-IR")} چالش با این شماره`:T.value=`حدود ${$.toLocaleString("fa-IR")} کاربر مخاطب این اعطا خواهند بود`}catch(a){d.error(((i=(e=a==null?void 0:a.response)==null?void 0:e.data)==null?void 0:i.message)||(a==null?void 0:a.message)||"خطا در پیش‌نمایش مخاطب")}finally{N.value=!1}}function ce(t){return new Promise(e=>{X.confirm({title:"اعطای اشتراک گروهی",content:t?`آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟ (${t})`:"آیا از اعطای اشتراک به این دسته مخاطب مطمئن هستید؟",okText:"بله، اعطا شود",cancelText:"انصراف",onOk:()=>e(!0),onCancel:()=>e(!1)})})}async function me(){var t,e;if(v.mode==="grant"){if(!m.plan_id){d.warning("پلن را انتخاب کنید");return}if(x.value==="user"){if(!m.user_id){d.warning("کاربر را انتخاب کنید");return}}else{const i=ke(S.value);if(i){d.warning(i);return}}if(R.value==="custom"&&!l.sms&&!l.push&&!l.modal){d.warning("حداقل یک کانال اطلاع‌رسانی را انتخاب کنید، یا گزینه «هیچکدام» را بزنید");return}}if(v.mode==="extend"){if(!v.purchaseId&&!m.user_id){d.warning("کاربر را انتخاب کنید");return}if(!m.duration_days||m.duration_days<1){d.warning("مدت تمدید را وارد کنید");return}}I.value=!0;try{const i=v.mode==="grant"?ue():void 0;if(v.mode==="grant"&&x.value==="segment"){const a=Ie(S.value);if(!await ce(T.value||void 0))return;const $={plan_id:m.plan_id,...a};m.duration_days&&m.duration_days>0&&($.duration_days=Number(m.duration_days)),i&&($.notify=i);const b=await Ee($),E=Number((b==null?void 0:b.granted)??0),O=Number((b==null?void 0:b.failed)??0);O>0?d.warning(`اشتراک برای ${E.toLocaleString("fa-IR")} کاربر ایجاد شد؛ ${O.toLocaleString("fa-IR")} مورد ناموفق`):d.success((b==null?void 0:b.message)||`اشتراک برای ${E.toLocaleString("fa-IR")} کاربر ایجاد شد`)}else if(v.mode==="grant"){const a={user_id:m.user_id,plan_id:m.plan_id};m.duration_days&&m.duration_days>0&&(a.duration_days=Number(m.duration_days)),i&&(a.notify=i),await Ve(a),d.success("اشتراک ایجاد شد")}else await Ke({purchase_id:v.purchaseId||void 0,user_id:v.purchaseId?void 0:m.user_id,plan_id:m.plan_id||void 0,duration_days:Number(m.duration_days)}),d.success("اشتراک تمدید شد");C("success"),ae()}catch(i){d.error(((e=(t=i==null?void 0:i.response)==null?void 0:t.data)==null?void 0:e.message)||(i==null?void 0:i.message)||"خطا در ذخیره")}finally{I.value=!1}}return st(()=>v.visible,t=>{t&&(de(),(!L.value.length||!B.value.length)&&le())}),Me(()=>{le()}),(t,e)=>{const i=Le;return h(),H(i,{visible:Q.value,"onUpdate:visible":e[18]||(e[18]=a=>Q.value=a),title:ne.value,"ok-text":ie.value,"cancel-text":"انصراف","confirm-loading":I.value,width:t.mode==="grant"?"760px":"560px",onOk:me,onCancel:ae},{default:r(()=>[s(o(z),{layout:"vertical",class:"max-h-[75vh] overflow-y-auto pe-1"},{default:r(()=>[t.mode==="grant"?(h(),U(K,{key:0},[s(o(y),{label:"مخاطب",required:""},{default:r(()=>[s(o(k),{value:x.value,"onUpdate:value":e[0]||(e[0]=a=>x.value=a),class:"flex flex-col gap-2"},{default:r(()=>[s(o(W),{value:"user"},{default:r(()=>[P("یک کاربر")]),_:1}),s(o(W),{value:"segment"},{default:r(()=>[P("دسته کاربران (مثلاً چالش nام را انجام داده‌اند)")]),_:1})]),_:1},8,["value"])]),_:1}),x.value==="user"?(h(),H(o(y),{key:0,label:"کاربر",required:""},{default:r(()=>[s(o(p),{value:m.user_id,"onUpdate:value":e[1]||(e[1]=a=>m.user_id=a),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:J.value,"filter-option":ee,disabled:!!t.lockedUserId},null,8,["value","options","disabled"])]),_:1})):(h(),U("div",Ct,[s(rt,{modelValue:S.value,"onUpdate:modelValue":e[2]||(e[2]=a=>S.value=a),"show-actions":!1,"show-preview":!0,"title-text":"دسته مخاطب برای اعطای اشتراک","preview-loading":N.value,"preview-text":T.value,onPreview:se},null,8,["modelValue","preview-loading","preview-text"])])),s(o(y),{label:"پلن اشتراک",required:""},{default:r(()=>[s(o(p),{value:m.plan_id,"onUpdate:value":e[3]||(e[3]=a=>m.plan_id=a),"show-search":"",placeholder:"انتخاب پلن",options:Y.value,"filter-option":te,onChange:oe},null,8,["value","options"])]),_:1})],64)):(h(),U(K,{key:1},[t.purchaseId?F("",!0):(h(),H(o(y),{key:0,label:"کاربر",required:""},{default:r(()=>[s(o(p),{value:m.user_id,"onUpdate:value":e[4]||(e[4]=a=>m.user_id=a),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:J.value,"filter-option":ee,disabled:!!t.lockedUserId},null,8,["value","options","disabled"])]),_:1})),t.purchaseId?F("",!0):(h(),H(o(y),{key:1,label:"پلن (اختیاری)"},{default:r(()=>[s(o(p),{value:m.plan_id,"onUpdate:value":e[5]||(e[5]=a=>m.plan_id=a),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده می‌شود",options:Y.value,"filter-option":te},null,8,["value","options"])]),_:1}))],64)),s(o(y),{label:t.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:t.mode==="extend"},{default:r(()=>[s(o(A),{value:m.duration_days,"onUpdate:value":e[6]||(e[6]=a=>m.duration_days=a),min:1,class:"w-full",placeholder:t.mode==="grant"?"خالی = مدت پیش‌فرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),t.mode==="grant"&&j.value?(h(),U("div",Pt," مدت پیش‌فرض پلن: "+Z(j.value.duration_days)+" روز ",1)):F("",!0),t.mode==="grant"?(h(),U("div",St,[Lt,s(o(k),{value:R.value,"onUpdate:value":e[7]||(e[7]=a=>R.value=a),class:"flex flex-col gap-2"},{default:r(()=>[s(o(W),{value:"none"},{default:r(()=>[P("هیچکدام — هیچ پیامی ارسال نشود")]),_:1}),s(o(W),{value:"custom"},{default:r(()=>[P("ارسال اطلاع‌رسانی (انتخاب کانال‌ها)")]),_:1})]),_:1},8,["value"]),R.value==="custom"?(h(),U(K,{key:0},[Bt,n("div",Rt,[s(o(ve),{checked:l.sms,"onUpdate:checked":e[8]||(e[8]=a=>l.sms=a)},{default:r(()=>[P("پیامک")]),_:1},8,["checked"]),s(o(ve),{checked:l.push,"onUpdate:checked":e[9]||(e[9]=a=>l.push=a)},{default:r(()=>[P("نوتیفیکیشن (Push)")]),_:1},8,["checked"]),s(o(ve),{checked:l.modal,"onUpdate:checked":e[10]||(e[10]=a=>l.modal=a)},{default:r(()=>[P("پیام مودال ورود به اپ")]),_:1},8,["checked"])]),l.sms?(h(),H(o(y),{key:0,label:"متن پیامک"},{default:r(()=>[s(o(_),{value:l.smsMessage,"onUpdate:value":e[11]||(e[11]=a=>l.smsMessage=a),rows:3,placeholder:"خالی = پیام پیش‌فرض فعال‌سازی اشتراک",maxlength:1e3,"show-count":""},null,8,["value"])]),_:1})):F("",!0),l.push?(h(),U(K,{key:1},[s(o(y),{label:"عنوان نوتیف"},{default:r(()=>[s(o(D),{value:l.pushTitle,"onUpdate:value":e[12]||(e[12]=a=>l.pushTitle=a),placeholder:"فعال‌سازی اشتراک",maxlength:120},null,8,["value"])]),_:1}),s(o(y),{label:"متن نوتیف"},{default:r(()=>[s(o(_),{value:l.pushBody,"onUpdate:value":e[13]||(e[13]=a=>l.pushBody=a),rows:3,placeholder:"خالی = متن پیش‌فرض",maxlength:500,"show-count":""},null,8,["value"])]),_:1}),s(o(y),{label:"لینک نوتیف (اختیاری)"},{default:r(()=>[s(o(D),{value:l.pushUrl,"onUpdate:value":e[14]||(e[14]=a=>l.pushUrl=a),placeholder:"/"},null,8,["value"])]),_:1})],64)):F("",!0),l.modal?(h(),U(K,{key:2},[s(o(y),{label:"عنوان مودال"},{default:r(()=>[s(o(D),{value:l.modalTitle,"onUpdate:value":e[15]||(e[15]=a=>l.modalTitle=a),placeholder:"اشتراک شما فعال شد"},null,8,["value"])]),_:1}),s(o(y),{label:"متن مودال"},{default:r(()=>[s(o(_),{value:l.modalBody,"onUpdate:value":e[16]||(e[16]=a=>l.modalBody=a),rows:3,placeholder:"خالی = متن پیش‌فرض"},null,8,["value"])]),_:1}),s(o(y),{label:"متن دکمه مودال"},{default:r(()=>[s(o(D),{value:l.modalCtaLabel,"onUpdate:value":e[17]||(e[17]=a=>l.modalCtaLabel=a),placeholder:"متوجه شدم"},null,8,["value"])]),_:1})],64)):F("",!0)],64)):F("",!0)])):F("",!0)]),_:1})]),_:1},8,["visible","title","ok-text","confirm-loading","width"])}}}),Ft={class:"flex justify-between items-center mb-4"},Mt=n("h2",null,"لیست خرید اشتراک",-1),At={class:"flex gap-2"},zt={class:"gap-2 flex justify-center"},Dt=n("span",null,"تمدید",-1),Ot=n("span",null,"لغو اشتراک",-1),jt=n("span",null,"حذف",-1),Gt={class:"flex justify-between items-center mb-4"},qt=n("h2",null,"مدیریت اشتراک‌ها",-1),Et={class:"gap-2 flex justify-center"},Vt=n("span",null,"حذف",-1),Kt=n("span",null,"ویرایش",-1),Jt=n("div",{class:"mb-4"},[n("h2",null,"تنظیمات درگاه پرداخت")],-1),Ht={class:"space-y-4 relative"},Wt={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},Xt={class:"grid grid-cols-2 gap-4"},Zt=n("div",{class:"mb-1 text-sm text-gray-600"},"عنوان اشتراک",-1),Qt=n("div",{class:"mb-1 text-sm text-gray-600"},"مدت اشتراک (روز)",-1),Yt={class:"grid grid-cols-3 gap-4"},ea=n("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),ta=n("div",{class:"mb-1 text-sm text-gray-600"},"تخفیف (درصد)",-1),aa=n("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),la={class:"mt-2 font-semibold text-green-700"},sa={class:"grid grid-cols-2 gap-4"},na=n("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),ia=n("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),oa={class:"flex items-center gap-2 mt-2"},ra={class:"text-sm text-gray-600"},ua=n("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),da={class:"flex justify-center"},ca=n("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),ma={key:0},pa=n("div",null,"آپلود تصویر",-1),bl=_e({__name:"index",setup(c){const C=Ue,v=Ue.TabPane,p=f("purchases"),A=f(!1),z=f(!1),y=f(null),[D,_]=ye(),[k,I]=ye(),L=f(!1),B=f("grant"),x=f(null),R=f(null),S=f(!1),N=f([]),T=f(0),m=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,duration_days:30,is_active:!0,sort_order:0}),l=f(m()),Q=M(()=>Je(Number(l.value.price),Number(l.value.discount_percent)).toLocaleString("fa-IR")),ne={columns:pt,api:He,defaultPageLimit:20},ie={columns:ft,api:We,defaultPageLimit:20};function J(){l.value=m(),N.value=[]}function Y(){z.value=!1,y.value=null,J(),A.value=!0}function j(){A.value=!1,J()}function ee(t){return t.type.startsWith("image/")?t.size/1024/1024>=5?(d.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(d.error("فقط فایل تصویری مجاز است"),!1)}async function te(t){const{file:e,onSuccess:i,onError:a,onProgress:g}=t,$=new FormData;$.append("file",e);const b=`${it}/upload/machartaa-img`;T.value++,await new Promise((E,O)=>{const u=new XMLHttpRequest;u.open("POST",b);const G=ot()||localStorage.getItem("tamin_token")||"";u.setRequestHeader("Authorization",`Bearer ${G}`),u.upload.onprogress=w=>{w.lengthComputable&&(g==null||g({percent:Math.round(w.loaded/w.total*100)}))},u.onload=()=>{if(u.status>=200&&u.status<300)try{const w=JSON.parse(u.responseText||"{}"),ze=w.full_src||w.url||w.src||w.path||w.data&&(w.data.full_src||w.data.url||w.data.src||w.data.path)||"",pe=he(ze),ge=we(pe);l.value.image_url=pe,N.value=ge?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:ge,response:{path:pe}}]:[],i==null||i(w,u),d.success("تصویر با موفقیت آپلود شد!"),E()}catch(w){a==null||a(w,u),O(w)}else a==null||a(new Error("خطا در آپلود تصویر"),u),O(new Error("خطا در آپلود تصویر"))},u.onerror=()=>{a==null||a(new Error("خطا در آپلود تصویر"),u),O(new Error("خطا در آپلود تصویر"))},u.onloadend=()=>{T.value=Math.max(0,T.value-1)},u.send($)})}async function oe(){var t;if(T.value>0){d.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((t=l.value.title)!=null&&t.trim())){d.warning("عنوان الزامی است");return}if(!l.value.duration_days||Number(l.value.duration_days)<1){d.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}try{const e={...l.value,price:Number(l.value.price)||0,discount_percent:Number(l.value.discount_percent)||0,duration_days:Number(l.value.duration_days),sort_order:Number(l.value.sort_order)||0};z.value&&y.value?(await Xe(y.value,e),d.success("اشتراک ویرایش شد")):(await Ze(e),d.success("اشتراک افزوده شد")),j(),await _()}catch(e){d.error((e==null?void 0:e.message)||"خطا در ذخیره")}}function re(t){z.value=!0,y.value=t.id;const e=he(t.image_url)||null;l.value={title:t.title||"",description:t.description||"",image_url:e,price:t.price||0,discount_percent:t.discount_percent||0,duration_days:t.duration_days||30,is_active:t.is_active??!0,sort_order:t.sort_order??0};const i=e?we(e):null;N.value=i?[{uid:"-1",name:"image.jpg",status:"done",url:i,response:{path:e}}]:[],A.value=!0}function ue(t){X.confirm({title:"حذف اشتراک",content:`آیا از حذف «${t.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Qe(t.id),d.success("حذف شد"),await _()}catch(e){d.error((e==null?void 0:e.message)||"خطا در حذف")}}})}async function de(t){try{await Ye(t.id,!t.is_active),d.success("وضعیت به‌روز شد"),await _()}catch(e){d.error((e==null?void 0:e.message)||"خطا")}}function ae(){B.value="grant",x.value=null,R.value=null,L.value=!0}async function le(){S.value||X.confirm({title:"همگام‌سازی پرداخت‌های زرین‌پال",content:"لیست تراکنش‌های موفقِ اعتبارسنجی‌نشده از زرین‌پال گرفته می‌شود، با توکن تراکنش‌های اشتراک تطبیق داده می‌شود و در صورت تطبیق، اشتراک کاربر فعال می‌شود. ادامه می‌دهید؟",okText:"همگام‌سازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var t,e;S.value=!0;try{const i=await et(),a=(i==null?void 0:i.data)??i,g=Number((a==null?void 0:a.reconciled_count)||0),$=Number((a==null?void 0:a.total_zarinpal)||0),b=Number((a==null?void 0:a.matched_count)||0);g>0?d.success((a==null?void 0:a.message)||`${g} اشتراک فعال شد.`):d.info((a==null?void 0:a.message)||($>0?`از ${$} تراکنش زرین‌پال، ${b} مورد با اشتراک محلی تطبیق خورد ولی فعال‌سازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجی‌نشده‌ای در زرین‌پال یافت نشد.")),await I()}catch(i){d.error(((e=(t=i==null?void 0:i.response)==null?void 0:t.data)==null?void 0:e.message)||(i==null?void 0:i.message)||"خطا در همگام‌سازی پرداخت‌ها")}finally{S.value=!1}}})}function se(t){B.value="extend",x.value=(t==null?void 0:t.id)??null,R.value=(t==null?void 0:t.user_id)??null,L.value=!0}function ce(t){X.confirm({title:"لغو اشتراک",content:`اشتراک «${t.plan_title}» برای ${t.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع می‌شود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var e,i;try{await tt(t.id),d.success("اشتراک لغو شد"),await I()}catch(a){d.error(((i=(e=a==null?void 0:a.response)==null?void 0:e.data)==null?void 0:i.message)||(a==null?void 0:a.message)||"خطا در لغو")}}})}function me(t){X.confirm({title:"حذف کامل",content:`رکورد خرید «${t.plan_title}» برای ${t.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var e,i;try{await at(t.id),d.success("حذف شد"),await I()}catch(a){d.error(((i=(e=a==null?void 0:a.response)==null?void 0:e.data)==null?void 0:i.message)||(a==null?void 0:a.message)||"خطا در حذف")}}})}return(t,e)=>{const i=Ne,a=je,g=Re,$=Be,b=Oe,E=Le,O=De;return h(),U("div",null,[s(O,null,{default:r(()=>[s(o(C),{activeKey:p.value,"onUpdate:activeKey":e[2]||(e[2]=u=>p.value=u)},{default:r(()=>[s(o(v),{key:"purchases",tab:"خریدهای کاربران"},{default:r(()=>[n("div",Ft,[Mt,n("div",At,[s(i,{loading:S.value,onClick:le},{default:r(()=>[P(" همگام‌سازی پرداخت‌های زرین‌پال ")]),_:1},8,["loading"]),s(i,{onClick:e[0]||(e[0]=u=>se())},{default:r(()=>[P("تمدید اشتراک")]),_:1}),s(i,{type:"primary",onClick:e[1]||(e[1]=u=>ae())},{default:r(()=>[P("ایجاد اشتراک برای کاربر")]),_:1})])]),s(a,xe(ie,{onRegister:o(k)}),{action:r(({record:u})=>[n("div",zt,[s(o(V),{class:"cursor-pointer"},{title:r(()=>[Dt]),default:r(()=>[s(q,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:G=>se(u)},null,8,["onClick"])]),_:2},1024),s(o(V),{class:"cursor-pointer"},{title:r(()=>[Ot]),default:r(()=>[s(q,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:G=>ce(u)},null,8,["onClick"])]),_:2},1024),s(o(V),{class:"cursor-pointer"},{title:r(()=>[jt]),default:r(()=>[s(q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:G=>me(u)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),s(o(v),{key:"plans",tab:"پلن‌های اشتراک"},{default:r(()=>[n("div",Gt,[qt,s(i,{type:"primary",onClick:Y},{default:r(()=>[P("افزودن اشتراک")]),_:1})]),s(a,xe(ne,{ref:"table",onRegister:o(D)}),{action:r(({record:u})=>[n("div",Et,[s(o(V),{class:"cursor-pointer"},{title:r(()=>[n("span",null,Z(u.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:r(()=>[s(q,{icon:u.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:u.is_active?"#F59E0B":"#16A34A",onClick:G=>de(u)},null,8,["icon","color","onClick"])]),_:2},1024),s(o(V),{class:"cursor-pointer"},{title:r(()=>[Vt]),default:r(()=>[s(q,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:G=>ue(u)},null,8,["onClick"])]),_:2},1024),s(o(V),{class:"cursor-pointer"},{title:r(()=>[Kt]),default:r(()=>[s(q,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:G=>re(u)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),s(o(v),{key:"gateway",tab:"تنظیمات درگاه (زرین‌پال)"},{default:r(()=>[Jt,s(Ut)]),_:1})]),_:1},8,["activeKey"]),s(E,{visible:A.value,"onUpdate:visible":e[11]||(e[11]=u=>A.value=u),title:z.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:oe,onCancel:j,width:"70%",confirmLoading:T.value>0},{default:r(()=>[n("div",Ht,[T.value>0?(h(),U("div",Wt,[s(o(ct),{size:"large"})])):F("",!0),n("div",Xt,[n("div",null,[Zt,s(g,{value:l.value.title,"onUpdate:value":e[3]||(e[3]=u=>l.value.title=u),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),n("div",null,[Qt,s(g,{value:l.value.duration_days,"onUpdate:value":e[4]||(e[4]=u=>l.value.duration_days=u),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),n("div",Yt,[n("div",null,[ea,s(g,{value:l.value.price,"onUpdate:value":e[5]||(e[5]=u=>l.value.price=u),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),n("div",null,[ta,s(g,{value:l.value.discount_percent,"onUpdate:value":e[6]||(e[6]=u=>l.value.discount_percent=u),type:"number",min:"0",max:"100",placeholder:"0"},null,8,["value"])]),n("div",null,[aa,n("div",la,Z(Q.value),1)])]),n("div",sa,[n("div",null,[na,s(g,{value:l.value.sort_order,"onUpdate:value":e[7]||(e[7]=u=>l.value.sort_order=u),type:"number",placeholder:"0"},null,8,["value"])]),n("div",null,[ia,n("div",oa,[s($,{value:l.value.is_active,"onUpdate:value":e[8]||(e[8]=u=>l.value.is_active=u)},null,8,["value"]),n("span",ra,Z(l.value.is_active?"فعال":"غیرفعال"),1)])])]),n("div",null,[ua,s(b,{value:l.value.description,"onUpdate:value":e[9]||(e[9]=u=>l.value.description=u),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),n("div",da,[n("div",null,[ca,s(o(mt),{"file-list":N.value,"onUpdate:fileList":e[10]||(e[10]=u=>N.value=u),"before-upload":ee,"custom-request":te,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:r(()=>[N.value.length<1?(h(),U("div",ma,[s(q,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),pa])):F("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),s(Nt,{visible:L.value,"onUpdate:visible":e[12]||(e[12]=u=>L.value=u),mode:B.value,"purchase-id":x.value,"locked-user-id":R.value,onSuccess:o(I)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{bl as default};