2 lines
27 KiB
JavaScript
2 lines
27 KiB
JavaScript
import{_ as Ue}from"./BasicMainCard-4207a822.js";import{_ as ye}from"./BasicModal.vue_vue_type_style_index_0_lang-12600cfe.js";import{_ as Be}from"./BasicTextArea.vue_vue_type_style_index_0_lang-af1bc459.js";import{_ as xe}from"./BaseSwitch.vue_vue_type_script_setup_true_lang-5d13f90f.js";import{_ as he}from"./BasicInput.vue_vue_type_style_index_0_lang-1dcca595.js";import{_ as ze,u as ce}from"./useBaseTable-09dec183.js";import{_ as we}from"./button.vue_vue_type_style_index_0_lang-485aa400.js";import{g as Fe,a as De,b as Ee,c as Me,d as Oe,e as je,u as Ze,f as qe,h as Ke,t as Ge,i as He,j as Ve,k as Xe}from"./subscription-3ed8216f.js";import{t as ie}from"./useDataTime-c34f53fe.js";import{I as M}from"./Icon-b61699b8.js";import{G as ae,d as oe,g as x,h as R,v as ke,D as d,o as L,c as O,F as Ye,a as t,b as n,t as X,p as Je,w as p,e as Z,r as We,E as Qe,i as Q,j as f,k as q,bE as et,H as de,I as tt}from"./index-5a216054.js";import{g as at}from"./index-4e7d1e3d.js";import{e as pe,g as me}from"./convert-2ad76038.js";import{F as _e}from"./index-d9ae5dff.js";import{a as st}from"./index-14d22686.js";import{I as nt}from"./index-ad637ad3.js";import{T as ve}from"./index-a94d8106.js";import{M as ee}from"./index-21b3e11b.js";import{S as lt}from"./index-efc9438a.js";import{T as j}from"./isSymbol-67342ebb.js";import{U as it}from"./index-1dde6b67.js";import"./Grid-91e1bfd6.js";import"./index-704d428b.js";import"./Col-a3540e0e.js";import"./styleChecker-559f6f42.js";import"./isPlainObject-3c9a77e7.js";import"./vnode-4ae36afb.js";import"./_plugin-vue_export-helper-bf156267.js";import"./index-f7d24d7c.js";import"./SearchOutlined-4a9dd4f9.js";import"./omit-0e04d816.js";import"./FormItemContext-c093a4c8.js";import"./index-35a2fbcb.js";import"./index-70ec4858.js";import"./usePrice-bc935b83.js";import"./updateLocale-67e6a89b.js";import"./index-bc659f42.js";import"./shallowequal-9390c690.js";import"./useState-aaca7c53.js";import"./useMemo-f3fe2319.js";import"./lodash-724580df.js";import"./index-7e28a3d1.js";import"./Badge-f954f9ce.js";import"./isNumeric-3f69e2aa.js";import"./index-16772af6.js";import"./index-fe5d35f1.js";import"./index-8a5836b4.js";import"./index-99d6fd3f.js";import"./DialogWrap-104be95a.js";import"./pickAttrs-ca601ed4.js";import"./css-aae66f86.js";import"./toArray-6764992d.js";import"./index-89aa8d2e.js";import"./supabaseTableQuery-8ab5665d.js";import"./_flatRest-65586b5d.js";import"./isMobile-e2e89480.js";import"./useRefs-88e72f09.js";import"./index-8c21a425.js";function fe(a){return Number(a||0).toLocaleString("fa-IR")}const ot=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,width:70,align:"center",customRender:a=>(a.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:a=>fe(a.record.price)},{title:"تخفیف %",dataIndex:"discount_percent",key:"discount_percent",width:90,align:"center"},{title:"قیمت نهایی",dataIndex:"final_price",key:"final_price",customRender:a=>fe(a.record.final_price)},{title:"فعال",dataIndex:"is_active",key:"is_active",customRender:a=>a.record.is_active?"بله":"خیر"},{title:"ترتیب",dataIndex:"sort_order",key:"sort_order",width:80,align:"center"},{title:"ایجاد",dataIndex:"created_at",key:"created_at",customRender:a=>ie(a.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",slot:"action",filterable:!1,align:"center"}];function rt(a){return Number(a||0).toLocaleString("fa-IR")}const ge={pending:"در انتظار",paid:"پرداخت شده",failed:"ناموفق",cancelled:"لغو شده"},be={pending:"در انتظار",active:"فعال",expired:"منقضی",cancelled:"لغو شده"},ut=[{title:"ردیف",dataIndex:"id",key:"id",filterable:!1,sortable:!1,width:70,align:"center",customRender:a=>(a.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:a=>rt(a.record.final_price)},{title:"پرداخت",dataIndex:"payment_status",key:"payment_status",type:"Select",filterField:"payment_status",sortField:"payment_status",filterComponentProps:{options:Object.entries(ge).map(([a,g])=>({label:g,value:a})),allowClear:!0,placeholder:"انتخاب وضعیت پرداخت"},customRender:a=>ge[a.record.payment_status]||a.record.payment_status},{title:"وضعیت",dataIndex:"status",key:"status",type:"Select",filterField:"status",sortField:"status",filterComponentProps:{options:Object.entries(be).map(([a,g])=>({label:g,value:a})),allowClear:!0,placeholder:"انتخاب وضعیت"},customRender:a=>be[a.record.status]||a.record.status},{title:"انقضا",dataIndex:"expires_at",key:"expires_at",type:"DateTime",sortField:"expires_at",customRender:a=>a.record.expires_at?ie(a.record.expires_at):"-"},{title:"تاریخ خرید",dataIndex:"created_at",key:"created_at",type:"DateTime",sortField:"created_at",customRender:a=>ie(a.record.created_at)},{title:"عملیات",dataIndex:"action",key:"action",filterable:!1,sortable:!1,width:140,align:"center"}],U={ZARINPAL_MERCHANT_ID:"zarinpal_merchant_id",ZARINPAL_SANDBOX:"zarinpal_sandbox",SUBSCRIPTION_CALLBACK_URL:"subscription_app_callback_url",ZARINPAL_ENABLED:"zarinpal_enabled"},ct=Object.values(U);function dt(a){const g=(a[U.ZARINPAL_SANDBOX]||"no").toLowerCase(),m=(a[U.ZARINPAL_ENABLED]||"yes").toLowerCase();return{zarinpal_merchant_id:a[U.ZARINPAL_MERCHANT_ID]||"",zarinpal_sandbox:g==="yes"||g==="true"||g==="1",zarinpal_enabled:m!=="no"&&m!=="false"&&m!=="0",subscription_app_callback_url:a[U.SUBSCRIPTION_CALLBACK_URL]||"https://macharta.ir"}}async function te(a,g){const{data:m,error:c}=await ae.from("configs").select("id").eq("key",a).maybeSingle();if(c)throw c;if(m!=null&&m.id){const{data:I,error:T}=await ae.from("configs").update({value:g}).eq("key",a).select("id");if(T)throw T;if(!(I!=null&&I.length))throw new Error("ذخیره انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.");return}const{data:k,error:P}=await ae.from("configs").insert({key:a,value:g}).select("id");if(P)throw P;if(!(k!=null&&k.length))throw new Error("ایجاد تنظیم انجام نشد. لطفاً migration دسترسی configs را در Supabase اجرا کنید.")}async function Ie(){const{data:a,error:g}=await ae.from("configs").select("key, value").in("key",ct);if(g)throw g;const m=(a||[]).reduce((c,k)=>(c[k.key]=k.value??"",c),{});return dt(m)}async function pt(a){return await te(U.ZARINPAL_MERCHANT_ID,a.zarinpal_merchant_id.trim()),await te(U.ZARINPAL_SANDBOX,a.zarinpal_sandbox?"yes":"no"),await te(U.ZARINPAL_ENABLED,a.zarinpal_enabled?"yes":"no"),await te(U.SUBSCRIPTION_CALLBACK_URL,a.subscription_app_callback_url.trim().replace(/\/$/,"")),Ie()}const mt={class:"max-w-2xl space-y-4"},_t=t("p",{class:"text-sm text-gray-600 mb-4"}," کد مرچنت و آدرس بازگشت از درگاه در اینجا تنظیم میشود. اپ کاربر از همین تنظیمات برای اتصال به زرینپال استفاده میکند. ",-1),vt={key:0,class:"py-8 text-center"},ft=t("div",{class:"mb-1 text-sm text-gray-600"},"کد مرچنت زرینپال (Merchant ID)",-1),gt=t("div",{class:"mb-1 text-sm text-gray-600"},"آدرس بازگشت از درگاه (URL اپ کاربر)",-1),bt=t("div",{class:"text-xs text-gray-500 mt-1"},[Z(" مسیر callback بهصورت خودکار اضافه میشود: "),t("code",null,"/subscriptions/callback")],-1),yt={class:"flex items-center gap-3"},xt=t("span",{class:"text-sm"},"فعال بودن درگاه زرینپال",-1),ht={class:"flex items-center gap-3"},wt=t("span",{class:"text-sm"},"حالت تست (Sandbox)",-1),kt=oe({__name:"PaymentGatewaySettings",setup(a){const g=x(!0),m=x(!1),c=x({zarinpal_merchant_id:"",zarinpal_sandbox:!1,zarinpal_enabled:!0,subscription_app_callback_url:"https://macharta.ir"}),k=R(()=>{var b;return c.value.zarinpal_enabled?c.value.zarinpal_sandbox?!0:!!((b=c.value.zarinpal_merchant_id)!=null&&b.trim()):!1}),P=R(()=>{var b;return c.value.zarinpal_enabled?c.value.zarinpal_sandbox?"حالت تست فعال است — پرداخت از sandbox زرینپال انجام میشود.":(b=c.value.zarinpal_merchant_id)!=null&&b.trim()?"درگاه برای پرداخت واقعی آماده است.":"کد مرچنت وارد نشده — درگاه آماده پرداخت واقعی نیست.":"درگاه غیرفعال است — کاربران نمیتوانند پرداخت کنند."}),I=R(()=>k.value?"bg-green-50 border-green-200 text-green-800":"bg-amber-50 border-amber-200 text-amber-800");ke(async()=>{try{c.value=await Ie()}catch(b){d.error((b==null?void 0:b.message)||"خطا در بارگذاری تنظیمات")}finally{g.value=!1}});async function T(){var b,y;if(!((b=c.value.subscription_app_callback_url)!=null&&b.trim())){d.warning("آدرس بازگشت از درگاه الزامی است");return}if(c.value.zarinpal_enabled&&!c.value.zarinpal_sandbox&&!((y=c.value.zarinpal_merchant_id)!=null&&y.trim())){d.warning("برای پرداخت واقعی، کد مرچنت الزامی است");return}m.value=!0;try{c.value=await pt(c.value),d.success("تنظیمات درگاه ذخیره شد")}catch(r){d.error((r==null?void 0:r.message)||"خطا در ذخیره")}finally{m.value=!1}}return(b,y)=>{const r=he,N=xe,z=we;return L(),O("div",mt,[_t,g.value?(L(),O("div",vt,"در حال بارگذاری...")):(L(),O(Ye,{key:1},[t("div",null,[ft,n(r,{value:c.value.zarinpal_merchant_id,"onUpdate:value":y[0]||(y[0]=C=>c.value.zarinpal_merchant_id=C),placeholder:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"},null,8,["value"])]),t("div",null,[gt,n(r,{value:c.value.subscription_app_callback_url,"onUpdate:value":y[1]||(y[1]=C=>c.value.subscription_app_callback_url=C),placeholder:"https://macharta.ir"},null,8,["value"]),bt]),t("div",yt,[n(N,{value:c.value.zarinpal_enabled,"onUpdate:value":y[2]||(y[2]=C=>c.value.zarinpal_enabled=C)},null,8,["value"]),xt]),t("div",ht,[n(N,{value:c.value.zarinpal_sandbox,"onUpdate:value":y[3]||(y[3]=C=>c.value.zarinpal_sandbox=C)},null,8,["value"]),wt]),t("div",{class:Je(["rounded-lg border p-3 text-sm",I.value])},X(P.value),3),n(z,{type:"primary",loading:m.value,onClick:T},{default:p(()=>[Z(" ذخیره تنظیمات درگاه ")]),_:1},8,["loading"])],64))])}}}),It={key:3,class:"text-sm text-gray-500"},Ct=oe({__name:"AdminUserSubscriptionModal",props:{visible:{type:Boolean},mode:{},purchaseId:{},lockedUserId:{}},emits:["update:visible","success"],setup(a,{emit:g}){const m=a,c=st,k=nt,P=_e,I=_e.Item,T=x(!1),b=x([]),y=x([]),r=We({user_id:void 0,plan_id:void 0,duration_days:null}),N=R({get:()=>m.visible,set:l=>g("update:visible",l)}),z=R(()=>m.mode==="grant"?"ایجاد اشتراک برای کاربر":"تمدید اشتراک"),C=R(()=>m.mode==="grant"?"ایجاد اشتراک":"تمدید"),K=R(()=>b.value.map(l=>{const u=l.name||`${l.first_name||""} ${l.last_name||""}`.trim()||"بدون نام",h=l.phone||"";return{value:l.id,label:h?`${u} — ${h}`:u,searchText:`${u} ${h}`.toLowerCase()}})),F=R(()=>y.value.map(l=>({value:l.id,label:`${l.title} (${l.duration_days} روز)${l.is_active?"":" — غیرفعال"}`,searchText:String(l.title||"").toLowerCase()}))),A=R(()=>y.value.find(l=>l.id===r.plan_id)||null);function B(l,u){return String((u==null?void 0:u.searchText)||(u==null?void 0:u.label)||"").toLowerCase().includes(l.toLowerCase())}function G(l,u){return String((u==null?void 0:u.searchText)||(u==null?void 0:u.label)||"").toLowerCase().includes(l.toLowerCase())}function _(){m.mode==="grant"&&A.value&&!r.duration_days&&(r.duration_days=Number(A.value.duration_days)||null)}function se(){r.user_id=m.lockedUserId||void 0,r.plan_id=void 0,r.duration_days=m.mode==="extend"?30:null}function Y(){g("update:visible",!1)}async function J(){try{const[l,u]=await Promise.all([et(),Fe()]);b.value=l||[],y.value=u||[]}catch(l){d.error((l==null?void 0:l.message)||"خطا در بارگذاری اطلاعات")}}async function W(){var l,u;if(m.mode==="grant"){if(!r.user_id){d.warning("کاربر را انتخاب کنید");return}if(!r.plan_id){d.warning("پلن را انتخاب کنید");return}}if(m.mode==="extend"){if(!m.purchaseId&&!r.user_id){d.warning("کاربر را انتخاب کنید");return}if(!r.duration_days||r.duration_days<1){d.warning("مدت تمدید را وارد کنید");return}}T.value=!0;try{if(m.mode==="grant"){const h={user_id:r.user_id,plan_id:r.plan_id};r.duration_days&&r.duration_days>0&&(h.duration_days=Number(r.duration_days)),await De(h),d.success("اشتراک ایجاد شد")}else await Ee({purchase_id:m.purchaseId||void 0,user_id:m.purchaseId?void 0:r.user_id,plan_id:r.plan_id||void 0,duration_days:Number(r.duration_days)}),d.success("اشتراک تمدید شد");g("success"),Y()}catch(h){d.error(((u=(l=h==null?void 0:h.response)==null?void 0:l.data)==null?void 0:u.message)||(h==null?void 0:h.message)||"خطا در ذخیره")}finally{T.value=!1}}return Qe(()=>m.visible,l=>{l&&(se(),(!b.value.length||!y.value.length)&&J())}),ke(()=>{J()}),(l,u)=>{const h=ye;return L(),Q(h,{visible:N.value,"onUpdate:visible":u[4]||(u[4]=$=>N.value=$),title:z.value,"ok-text":C.value,"cancel-text":"انصراف","confirm-loading":T.value,width:"560px",onOk:W,onCancel:Y},{default:p(()=>[n(f(P),{layout:"vertical"},{default:p(()=>[l.mode==="grant"||l.mode==="extend"&&!l.purchaseId?(L(),Q(f(I),{key:0,label:"کاربر",required:""},{default:p(()=>[n(f(c),{value:r.user_id,"onUpdate:value":u[0]||(u[0]=$=>r.user_id=$),"show-search":"",placeholder:"جستجو با نام یا موبایل",options:K.value,"filter-option":B,disabled:!!l.lockedUserId},null,8,["value","options","disabled"])]),_:1})):q("",!0),l.mode==="grant"?(L(),Q(f(I),{key:1,label:"پلن اشتراک",required:""},{default:p(()=>[n(f(c),{value:r.plan_id,"onUpdate:value":u[1]||(u[1]=$=>r.plan_id=$),"show-search":"",placeholder:"انتخاب پلن",options:F.value,"filter-option":G,onChange:_},null,8,["value","options"])]),_:1})):q("",!0),l.mode==="extend"&&!l.purchaseId?(L(),Q(f(I),{key:2,label:"پلن (اختیاری)"},{default:p(()=>[n(f(c),{value:r.plan_id,"onUpdate:value":u[2]||(u[2]=$=>r.plan_id=$),"show-search":"","allow-clear":"",placeholder:"در صورت خالی بودن از پلن فعال کاربر استفاده میشود",options:F.value,"filter-option":G},null,8,["value","options"])]),_:1})):q("",!0),n(f(I),{label:l.mode==="grant"?"مدت (روز) — اختیاری برای جایگزینی مدت پلن":"مدت تمدید (روز)",required:l.mode==="extend"},{default:p(()=>[n(f(k),{value:r.duration_days,"onUpdate:value":u[3]||(u[3]=$=>r.duration_days=$),min:1,class:"w-full",placeholder:l.mode==="grant"?"خالی = مدت پیشفرض پلن":"مثلاً ۳۰"},null,8,["value","placeholder"])]),_:1},8,["label","required"]),l.mode==="grant"&&A.value?(L(),O("div",It," مدت پیشفرض پلن: "+X(A.value.duration_days)+" روز ",1)):q("",!0)]),_:1})]),_:1},8,["visible","title","ok-text","confirm-loading"])}}}),St={class:"flex justify-between items-center mb-4"},Pt=t("h2",null,"لیست خرید اشتراک",-1),At={class:"flex gap-2"},$t={class:"gap-2 flex justify-center"},Lt=t("span",null,"تمدید",-1),Tt=t("span",null,"لغو اشتراک",-1),Nt=t("span",null,"حذف",-1),Rt={class:"flex justify-between items-center mb-4"},Ut=t("h2",null,"مدیریت اشتراکها",-1),Bt={class:"gap-2 flex justify-center"},zt=t("span",null,"حذف",-1),Ft=t("span",null,"ویرایش",-1),Dt=t("div",{class:"mb-4"},[t("h2",null,"تنظیمات درگاه پرداخت")],-1),Et={class:"space-y-4 relative"},Mt={key:0,class:"absolute inset-0 bg-white/60 z-10 flex items-center justify-center"},Ot={class:"grid grid-cols-2 gap-4"},jt=t("div",{class:"mb-1 text-sm text-gray-600"},"عنوان اشتراک",-1),Zt=t("div",{class:"mb-1 text-sm text-gray-600"},"مدت اشتراک (روز)",-1),qt={class:"grid grid-cols-3 gap-4"},Kt=t("div",{class:"mb-1 text-sm text-gray-600"},"مبلغ (ریال)",-1),Gt=t("div",{class:"mb-1 text-sm text-gray-600"},"تخفیف (درصد)",-1),Ht=t("div",{class:"mb-1 text-sm text-gray-600"},"قیمت نهایی (ریال)",-1),Vt={class:"mt-2 font-semibold text-green-700"},Xt={class:"grid grid-cols-2 gap-4"},Yt=t("div",{class:"mb-1 text-sm text-gray-600"},"ترتیب نمایش",-1),Jt=t("div",{class:"mb-1 text-sm text-gray-600"},"وضعیت",-1),Wt={class:"flex items-center gap-2 mt-2"},Qt={class:"text-sm text-gray-600"},ea=t("div",{class:"mb-1 text-sm text-gray-600"},"توضیحات",-1),ta={class:"flex justify-center"},aa=t("div",{class:"mb-1 text-sm text-gray-600"},"تصویر اشتراک",-1),sa={key:0},na=t("div",null,"آپلود تصویر",-1),us=oe({__name:"index",setup(a){const g=ve,m=ve.TabPane,c=x("purchases"),k=x(!1),P=x(!1),I=x(null),[T,b]=ce(),[y,r]=ce(),N=x(!1),z=x("grant"),C=x(null),K=x(null),F=x(!1),A=x([]),B=x(0),G=()=>({title:"",description:"",image_url:null,price:0,discount_percent:0,duration_days:30,is_active:!0,sort_order:0}),_=x(G()),se=R(()=>Me(Number(_.value.price),Number(_.value.discount_percent)).toLocaleString("fa-IR")),Y={columns:ot,api:Oe,defaultPageLimit:20},J={columns:ut,api:je,defaultPageLimit:20};function W(){_.value=G(),A.value=[]}function l(){P.value=!1,I.value=null,W(),k.value=!0}function u(){k.value=!1,W()}function h(i){return i.type.startsWith("image/")?i.size/1024/1024>=5?(d.error("حجم تصویر باید کمتر از 5MB باشد"),!1):!0:(d.error("فقط فایل تصویری مجاز است"),!1)}async function $(i){const{file:e,onSuccess:v,onError:o,onProgress:S}=i,D=new FormData;D.append("file",e);const H=`${tt}/upload/machartaa-img`;B.value++,await new Promise((ne,V)=>{const s=new XMLHttpRequest;s.open("POST",H);const E=at()||localStorage.getItem("tamin_token")||"";s.setRequestHeader("Authorization",`Bearer ${E}`),s.upload.onprogress=w=>{w.lengthComputable&&(S==null||S({percent:Math.round(w.loaded/w.total*100)}))},s.onload=()=>{if(s.status>=200&&s.status<300)try{const w=JSON.parse(s.responseText||"{}"),Re=w.full_src||w.url||w.src||w.path||w.data&&(w.data.full_src||w.data.url||w.data.src||w.data.path)||"",le=pe(Re),ue=me(le);_.value.image_url=le,A.value=ue?[{uid:`${Date.now()}`,name:"image.jpg",status:"done",url:ue,response:{path:le}}]:[],v==null||v(w,s),d.success("تصویر با موفقیت آپلود شد!"),ne()}catch(w){o==null||o(w,s),V(w)}else o==null||o(new Error("خطا در آپلود تصویر"),s),V(new Error("خطا در آپلود تصویر"))},s.onerror=()=>{o==null||o(new Error("خطا در آپلود تصویر"),s),V(new Error("خطا در آپلود تصویر"))},s.onloadend=()=>{B.value=Math.max(0,B.value-1)},s.send(D)})}async function Ce(){var i;if(B.value>0){d.warning("لطفاً تا پایان آپلود صبر کنید");return}if(!((i=_.value.title)!=null&&i.trim())){d.warning("عنوان الزامی است");return}if(!_.value.duration_days||Number(_.value.duration_days)<1){d.warning("مدت اشتراک باید حداقل ۱ روز باشد");return}try{const e={..._.value,price:Number(_.value.price)||0,discount_percent:Number(_.value.discount_percent)||0,duration_days:Number(_.value.duration_days),sort_order:Number(_.value.sort_order)||0};P.value&&I.value?(await Ze(I.value,e),d.success("اشتراک ویرایش شد")):(await qe(e),d.success("اشتراک افزوده شد")),u(),await b()}catch(e){d.error((e==null?void 0:e.message)||"خطا در ذخیره")}}function Se(i){P.value=!0,I.value=i.id;const e=pe(i.image_url)||null;_.value={title:i.title||"",description:i.description||"",image_url:e,price:i.price||0,discount_percent:i.discount_percent||0,duration_days:i.duration_days||30,is_active:i.is_active??!0,sort_order:i.sort_order??0};const v=e?me(e):null;A.value=v?[{uid:"-1",name:"image.jpg",status:"done",url:v,response:{path:e}}]:[],k.value=!0}function Pe(i){ee.confirm({title:"حذف اشتراک",content:`آیا از حذف «${i.title}» مطمئن هستید؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{try{await Ke(i.id),d.success("حذف شد"),await b()}catch(e){d.error((e==null?void 0:e.message)||"خطا در حذف")}}})}async function Ae(i){try{await Ge(i.id,!i.is_active),d.success("وضعیت بهروز شد"),await b()}catch(e){d.error((e==null?void 0:e.message)||"خطا")}}function $e(){z.value="grant",C.value=null,K.value=null,N.value=!0}async function Le(){F.value||ee.confirm({title:"همگامسازی پرداختهای زرینپال",content:"لیست تراکنشهای موفقِ اعتبارسنجینشده از زرینپال گرفته میشود، با توکن تراکنشهای اشتراک تطبیق داده میشود و در صورت تطبیق، اشتراک کاربر فعال میشود. ادامه میدهید؟",okText:"همگامسازی",cancelText:"انصراف",centered:!0,onOk:async()=>{var i,e;F.value=!0;try{const v=await He(),o=(v==null?void 0:v.data)??v,S=Number((o==null?void 0:o.reconciled_count)||0),D=Number((o==null?void 0:o.total_zarinpal)||0),H=Number((o==null?void 0:o.matched_count)||0);S>0?d.success((o==null?void 0:o.message)||`${S} اشتراک فعال شد.`):d.info((o==null?void 0:o.message)||(D>0?`از ${D} تراکنش زرینپال، ${H} مورد با اشتراک محلی تطبیق خورد ولی فعالسازی انجام نشد.`:"تراکنش موفقِ اعتبارسنجینشدهای در زرینپال یافت نشد.")),await r()}catch(v){d.error(((e=(i=v==null?void 0:v.response)==null?void 0:i.data)==null?void 0:e.message)||(v==null?void 0:v.message)||"خطا در همگامسازی پرداختها")}finally{F.value=!1}}})}function re(i){z.value="extend",C.value=(i==null?void 0:i.id)??null,K.value=(i==null?void 0:i.user_id)??null,N.value=!0}function Te(i){ee.confirm({title:"لغو اشتراک",content:`اشتراک «${i.plan_title}» برای ${i.user_name||"کاربر"} لغو شود؟ اعتبار کاربر قطع میشود.`,okText:"بله، لغو کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var e,v;try{await Ve(i.id),d.success("اشتراک لغو شد"),await r()}catch(o){d.error(((v=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:v.message)||(o==null?void 0:o.message)||"خطا در لغو")}}})}function Ne(i){ee.confirm({title:"حذف کامل",content:`رکورد خرید «${i.plan_title}» برای ${i.user_name||"کاربر"} کامل حذف شود؟`,okText:"بله، حذف کن",cancelText:"انصراف",okType:"danger",centered:!0,onOk:async()=>{var e,v;try{await Xe(i.id),d.success("حذف شد"),await r()}catch(o){d.error(((v=(e=o==null?void 0:o.response)==null?void 0:e.data)==null?void 0:v.message)||(o==null?void 0:o.message)||"خطا در حذف")}}})}return(i,e)=>{const v=we,o=ze,S=he,D=xe,H=Be,ne=ye,V=Ue;return L(),O("div",null,[n(V,null,{default:p(()=>[n(f(g),{activeKey:c.value,"onUpdate:activeKey":e[2]||(e[2]=s=>c.value=s)},{default:p(()=>[n(f(m),{key:"purchases",tab:"خریدهای کاربران"},{default:p(()=>[t("div",St,[Pt,t("div",At,[n(v,{loading:F.value,onClick:Le},{default:p(()=>[Z(" همگامسازی پرداختهای زرینپال ")]),_:1},8,["loading"]),n(v,{onClick:e[0]||(e[0]=s=>re())},{default:p(()=>[Z("تمدید اشتراک")]),_:1}),n(v,{type:"primary",onClick:e[1]||(e[1]=s=>$e())},{default:p(()=>[Z("ایجاد اشتراک برای کاربر")]),_:1})])]),n(o,de(J,{onRegister:f(y)}),{action:p(({record:s})=>[t("div",$t,[n(f(j),{class:"cursor-pointer"},{title:p(()=>[Lt]),default:p(()=>[n(M,{icon:"vuesax-linear:add-circle",color:"#059669",onClick:E=>re(s)},null,8,["onClick"])]),_:2},1024),n(f(j),{class:"cursor-pointer"},{title:p(()=>[Tt]),default:p(()=>[n(M,{icon:"vuesax-linear:close-circle",color:"#F59E0B",onClick:E=>Te(s)},null,8,["onClick"])]),_:2},1024),n(f(j),{class:"cursor-pointer"},{title:p(()=>[Nt]),default:p(()=>[n(M,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:E=>Ne(s)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),n(f(m),{key:"plans",tab:"پلنهای اشتراک"},{default:p(()=>[t("div",Rt,[Ut,n(v,{type:"primary",onClick:l},{default:p(()=>[Z("افزودن اشتراک")]),_:1})]),n(o,de(Y,{ref:"table",onRegister:f(T)}),{action:p(({record:s})=>[t("div",Bt,[n(f(j),{class:"cursor-pointer"},{title:p(()=>[t("span",null,X(s.is_active?"غیرفعال کردن":"فعال کردن"),1)]),default:p(()=>[n(M,{icon:s.is_active?"vuesax-linear:eye-slash":"vuesax-linear:eye",color:s.is_active?"#F59E0B":"#16A34A",onClick:E=>Ae(s)},null,8,["icon","color","onClick"])]),_:2},1024),n(f(j),{class:"cursor-pointer"},{title:p(()=>[zt]),default:p(()=>[n(M,{icon:"vuesax-linear:trash",color:"#DC2626",onClick:E=>Pe(s)},null,8,["onClick"])]),_:2},1024),n(f(j),{class:"cursor-pointer"},{title:p(()=>[Ft]),default:p(()=>[n(M,{icon:"vuesax-linear:edit",color:"#1D4ED8",onClick:E=>Se(s)},null,8,["onClick"])]),_:2},1024)])]),_:1},16,["onRegister"])]),_:1}),n(f(m),{key:"gateway",tab:"تنظیمات درگاه (زرینپال)"},{default:p(()=>[Dt,n(kt)]),_:1})]),_:1},8,["activeKey"]),n(ne,{visible:k.value,"onUpdate:visible":e[11]||(e[11]=s=>k.value=s),title:P.value?"ویرایش اشتراک":"افزودن اشتراک",onOk:Ce,onCancel:u,width:"70%",confirmLoading:B.value>0},{default:p(()=>[t("div",Et,[B.value>0?(L(),O("div",Mt,[n(f(lt),{size:"large"})])):q("",!0),t("div",Ot,[t("div",null,[jt,n(S,{value:_.value.title,"onUpdate:value":e[3]||(e[3]=s=>_.value.title=s),placeholder:"مثلاً اشتراک یک ماهه"},null,8,["value"])]),t("div",null,[Zt,n(S,{value:_.value.duration_days,"onUpdate:value":e[4]||(e[4]=s=>_.value.duration_days=s),type:"number",min:"1",placeholder:"30"},null,8,["value"])])]),t("div",qt,[t("div",null,[Kt,n(S,{value:_.value.price,"onUpdate:value":e[5]||(e[5]=s=>_.value.price=s),type:"number",min:"0",placeholder:"100000"},null,8,["value"])]),t("div",null,[Gt,n(S,{value:_.value.discount_percent,"onUpdate:value":e[6]||(e[6]=s=>_.value.discount_percent=s),type:"number",min:"0",max:"100",placeholder:"0"},null,8,["value"])]),t("div",null,[Ht,t("div",Vt,X(se.value),1)])]),t("div",Xt,[t("div",null,[Yt,n(S,{value:_.value.sort_order,"onUpdate:value":e[7]||(e[7]=s=>_.value.sort_order=s),type:"number",placeholder:"0"},null,8,["value"])]),t("div",null,[Jt,t("div",Wt,[n(D,{value:_.value.is_active,"onUpdate:value":e[8]||(e[8]=s=>_.value.is_active=s)},null,8,["value"]),t("span",Qt,X(_.value.is_active?"فعال":"غیرفعال"),1)])])]),t("div",null,[ea,n(H,{value:_.value.description,"onUpdate:value":e[9]||(e[9]=s=>_.value.description=s),placeholder:"توضیحات اشتراک",rows:4},null,8,["value"])]),t("div",ta,[t("div",null,[aa,n(f(it),{"file-list":A.value,"onUpdate:fileList":e[10]||(e[10]=s=>A.value=s),"before-upload":h,"custom-request":$,accept:"image/*","max-count":1,"list-type":"picture-card"},{default:p(()=>[A.value.length<1?(L(),O("div",sa,[n(M,{icon:"vuesax-linear:image",class:"text-2xl mb-2"}),na])):q("",!0)]),_:1},8,["file-list"])])])])]),_:1},8,["visible","title","confirmLoading"]),n(Ct,{visible:N.value,"onUpdate:visible":e[12]||(e[12]=s=>N.value=s),mode:z.value,"purchase-id":C.value,"locked-user-id":K.value,onSuccess:f(r)},null,8,["visible","mode","purchase-id","locked-user-id","onSuccess"])]),_:1})])}}});export{us as default};
|