PageSourceSearch

https://e0f.cx/assets/AdminPaymentsPage-D4ih3WdY.js

js e0f.cx collected 2026-09-24 14:59:13 UTC 34,254 bytes, 1 lines download raw bytes

1import{R as Is,a as Ds,r as c,U as me,ar as M,j as e,S as u,m as Oe,G as a,B as o,e as ks,f as i,_ as C,aE as As,d as E,P as d,T as m,aq as g,au as re,a2 as y,l as j,Y as H,ai as he,s as r,aK as Bs,ap as D,a8 as Q,o as z,a9 as p,aa as w,$ as v,t as Ue,aj as $e,at as Ve,ac as h,aA as f,aJ as Ke,ah as xe,n as ue,ag as Z,ad as q,aM as Ge,q as We,ak as je,ab as P}from"./index-DJgzD7sm.js";import{u as Ms}from"./use-debounced-value-DCqVxYTT.js";import{N as b}from"./NumberFormatter-DvIG3fyb.js";import{I as ee}from"./IconReceipt-BQFoFrSa.js";import{I as ge,a as Ps}from"./IconArrowUpRight-DdquPO3M.js";import{I as ae}from"./IconBuildingBank-D8-DNk_M.js";import{I as Je}from"./IconSearch-BtX1OOjH.js";import{S as pe}from"./Select-DYUJAPNs.js";import{I as Xe}from"./IconFilter-DiM4m2B8.js";import{I}from"./IconCurrencyBitcoin-HSy7QDUh.js";import{I as Qe}from"./IconDots-B5GTRVUW.js";import{I as Ze}from"./IconEye-q7UJ_CdM.js";import{P as _s}from"./Pagination-DRIoAR3s.js";import"./react-number-format.es-hx5beCWS.js";const Rs=[["path",{d:"M5 9l14 0",key:"svg-0"}],["path",{d:"M5 15l14 0",key:"svg-1"}],["path",{d:"M11 4l-4 16",key:"svg-2"}],["path",{d:"M17 4l-4 16",key:"svg-3"}]],se=Is("outline","hash","Hash",Rs),Ys="_statCard_idc1a_1",ie={statCard:Ys},qe=[{id:"pay_001",orderId:"ORD-2024-001",userId:"1",username:"user_john",email:"[email protected]",amount:799,plan:"3 месяца",method:"balance",status:"success",createdAt:"2024-12-04T10:30:00",paidAt:"2024-12-04T10:30:15"},{id:"pay_002",orderId:"ORD-2024-002",userId:"4",username:"user_kate",email:"[email protected]",amount:2499,plan:"12 месяцев",method:"crypto",cryptoCurrency:"USDT",status:"success",createdAt:"2024-12-02T15:45:00",paidAt:"2024-12-02T15:48:30"},{id:"pay_003",orderId:"ORD-2024-003",userId:"2",username:"user_anna",email:"[email protected]",amount:299,plan:"1 месяц",method:"card",cardLast4:"1234",status:"success",createdAt:"2024-12-01T09:20:00",paidAt:"2024-12-01T09:20:22"},{id:"pay_004",orderId:"ORD-2024-004",userId:"3",username:"user_mike",email:"[email protected]",amount:799,plan:"3 месяца",method:"card",cardLast4:"5678",status:"failed",failReason:"Недостаточно средств",createdAt:"2024-11-30T14:10:00",paidAt:null},{id:"pay_005",orderId:"ORD-2024-005",userId:"5",username:"user_alex",email:"[email protected]",amount:299,plan:"1 месяц",method:"crypto",cryptoCurrency:"TON",status:"pending",createdAt:"2024-11-29T18:00:00",paidAt:null}],es=[{id:"tx_001",userId:"1",username:"demo_user",email:"[email protected]",type:"deposit",amount:1e3,method:"card",cardLast4:"4242",status:"success",description:"Пополнение баланса",createdAt:"2024-12-04T15:07:00"},{id:"tx_002",userId:"1",username:"demo_user",email:"[email protected]",type:"purchase",amount:-799,method:"balance",status:"success",description:'Оплата подписки "Оптимальный" на 3 мес.',createdAt:"2024-12-04T13:37:00"},{id:"tx_003",userId:"1",username:"demo_user",email:"[email protected]",type:"referral",amount:150,status:"success",description:"Реферальный бонус от user_kate",createdAt:"2024-12-03T15:37:00"},{id:"tx_004",userId:"1",username:"demo_user",email:"[email protected]",type:"deposit",amount:500,method:"crypto",cryptoCurrency:"USDT",status:"success",description:"Пополнение (USDT TRC20)",createdAt:"2024-12-02T15:37:00"},{id:"tx_005",userId:"1",username:"demo_user",email:"[email protected]",type:"bonus",amount:100,status:"success",description:"Бонус за регистрацию",createdAt:"2024-11-27T15:37:00"},{id:"tx_006",userId:"1",username:"demo_user",email:"[email protected]",type:"deposit",amount:2e3,method:"sbp",status:"pending",description:"Пополнение через СБП",createdAt:"2024-12-04T15:32:00"},{id:"tx_007",userId:"4",username:"user_kate",email:"[email protected]",type:"deposit",amount:5e3,method:"card",cardLast4:"9999",status:"success",description:"Пополнение баланса",createdAt:"2024-12-03T10:00:00"},{id:"tx_008",userId:"4",username:"user_kate",email:"[email protected]",type:"purchase",amount:-2499,method:"balance",status:"success",description:'Оплата подписки "Годовой" на 12 мес.',createdAt:"2024-12-03T10:05:00"},{id:"tx_009",userId:"2",username:"user_anna",email:"[email protected]",type:"deposit",amount:1500,method:"crypto",cryptoCurrency:"TON",status:"success",description:"Пополнение (TON)",createdAt:"2024-12-01T08:00:00"},{id:"tx_010",userId:"3",username:"user_mike",email:"[email protected]",type:"refund",amount:299,status:"success",description:"Возврат за подписку",createdAt:"2024-11-30T12:00:00"}],T={success:{color:"green",icon:h,label:"Успешно"},SUCCESS:{color:"green",icon:h,label:"Успешно"},succeeded:{color:"green",icon:h,label:"Успешно"},SUCCEEDED:{color:"green",icon:h,label:"Успешно"},pending:{color:"yellow",icon:ue,label:"Ожидание"},PENDING:{color:"yellow",icon:ue,label:"Ожидание"},failed:{color:"red",icon:f,label:"Ошибка"},FAILED:{color:"red",icon:f,label:"Ошибка"},error:{color:"red",icon:f,label:"Ошибка"},ERROR:{color:"red",icon:f,label:"Ошибка"},refunded:{color:"gray",icon:v,label:"Возврат"},REFUNDED:{color:"gray",icon:v,label:"Возврат"},cancelled:{color:"gray",icon:f,label:"Отменён"},CANCELLED:{color:"gray",icon:f,label:"Отменён"},unknown:{color:"gray",icon:ue,label:"Неизвестен"}},ss=S=>S&&T[S]||T.unknown,N={income:{color:"green",icon:ge,label:"Пополнение"},outcome:{color:"blue",icon:Ve,label:"Покупка"},deposit:{color:"green",icon:ge,label:"Пополнение"},purchase:{color:"blue",icon:Ve,label:"Покупка"},referral:{color:"pink",icon:re,label:"Реферал"}
1,bonus:{color:"violet",icon:re,label:"Бонус"},refund:{color:"orange",icon:v,label:"Возврат"},withdraw:{color:"red",icon:Ps,label:"Вывод"}},is=({size:S=24})=>e.jsxs("svg",{width:S,height:S,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[e.jsx("rect",{x:"2",y:"2",width:"20",height:"20",rx:"5",fill:"#FFDD2D"}),e.jsx("rect",{x:"6",y:"6.8",width:"12",height:"2.7",rx:"1",fill:"#1A1A1A"}),e.jsx("rect",{x:"10.65",y:"6.8",width:"2.7",height:"10.4",rx:"1",fill:"#1A1A1A"})]}),_={YooKassa:{icon:D,color:"blue",label:"YooKassa"},yookassa:{icon:D,color:"blue",label:"YooKassa"},Cryptomus:{icon:I,color:"violet",label:"Heleket"},cryptomus:{icon:I,color:"violet",label:"Heleket"},Heleket:{icon:I,color:"violet",label:"Heleket"},heleket:{icon:I,color:"violet",label:"Heleket"},Volet:{icon:I,color:"orange",label:"Volet"},volet:{icon:I,color:"orange",label:"Volet"},Payelata:{icon:D,color:"indigo",label:"Payelata"},payelata:{icon:D,color:"indigo",label:"Payelata"},Stripe:{icon:D,color:"violet",label:"Stripe"},stripe:{icon:D,color:"violet",label:"Stripe"},EOF:{icon:g,color:"cyan",label:"EOF"},eof:{icon:g,color:"cyan",label:"EOF"},Balance:{icon:g,color:"teal",label:"Кошелёк"},balance:{icon:g,color:"teal",label:"Кошелёк"},subscription:{icon:g,color:"teal",label:"Кошелёк"},admin:{icon:Bs,color:"cyan",label:"Админ"},card:{icon:g,color:"teal",label:"Кошелёк"},crypto:{icon:I,color:"orange",label:"Крипто"},sbp:{icon:ae,color:"green",label:"СБП"},referral:{icon:re,color:"pink",label:"Реферал"},tbank:{icon:is,color:"yellow",label:"Т-Банк"},TBank:{icon:is,color:"yellow",label:"Т-Банк"},yoomoney:{icon:g,color:"grape",label:"ЮMoney"},YooMoney:{icon:g,color:"grape",label:"ЮMoney"}};function Qs(){const{token:S}=Ds(),[k,as]=c.useState("subscriptions"),[ne,le]=c.useState(""),[L,fe]=c.useState(null),[F,be]=c.useState(null),[O,ye]=c.useState(null),[A,te]=c.useState(1),[ze,we]=c.useState(!1),[ve,Te]=c.useState(""),U=20,[R]=Ms(ne,300),[Se,Ce]=c.useState([]),[Ie,De]=c.useState([]),[ke,rs]=c.useState([]),[Ae,$]=c.useState(!0),[Be,Me]=c.useState(0),[Pe,_e]=c.useState(0),[Re,ns]=c.useState(0),[V,K]=c.useState(null),[Ye,G]=c.useState(null),[W,ls]=c.useState({subscriptionTotal:0,subscriptionCount:0,walletDepositsTotal:0,walletDepositsCount:0,walletPurchasesTotal:0,walletBonusesTotal:0}),[ts,{open:cs,close:Ee}]=me(!1),[os,{open:ds,close:ms}]=me(!1),[hs,{open:xs,close:ce}]=me(!1),[n,He]=c.useState(null),[t,us]=c.useState(null),Ne=c.useCallback(async()=>{try{const s=await M.get("/api/admin/payments/stats");ls(s.data)}catch(s){console.error("Error loading stats:",s)}},[]),Le=c.useCallback(async()=>{$(!0);try{const l=(await M.get("/api/admin/payments",{params:{page:A,limit:U,status:L||void 0,method:F||void 0,search:R||void 0}})).data;Ce(l.payments||[]),Me(l.total||0)}catch(s){console.error("Error loading payments:",s),Ce(qe),Me(qe.length)}finally{$(!1)}},[A,L,F,R]),Fe=c.useCallback(async()=>{$(!0);try{const l=(await M.get("/api/admin/wallet-transactions",{params:{page:A,limit:U,type:O||void 0,search:R||void 0}})).data;De(l.transactions||[]),_e(l.total||0)}catch(s){console.error("Error loading transactions:",s),De(es),_e(es.length)}finally{$(!1)}},[A,O,R]),Y=c.useCallback(async()=>{try{const l=(await M.get("/api/admin/manual-payments",{params:{page:1,limit:50}})).data;rs(l.requests||[]),ns(l.pendingCount||0)}catch(s){console.error("Error loading manual requests:",s)}},[]),js=async(s,l)=>{K(s),G("confirm");try{await M.post(`/api/admin/manual-payments/${s}/confirm`,{comment:l}),P.show({title:"Успешно",message:"Платёж подтверждён",color:"green"}),Y()}catch(x){P.show({title:"Ошибка",message:x.response?.data?.message||"Не удалось подтвердить платёж",color:"red"})}finally{K(null),G(null)}},ps=async(s,l)=>{K(s),G("reject");try{await M.post(`/api/admin/manual-payments/${s}/reject`,{comment:l||void 0}),P.show({title:"Заявка отклонена",message:"Пользователь будет уведомлён",color:"orange"}),Y()}catch(x){P.show({title:"Ошибка",message:x.response?.data?.message||"Не удалось отклонить платёж",color:"red"})}finally{K(null),G(null)}};c.useEffect(()=>{Ne(),Y()},[Ne,Y]),c.useEffect(()=>{(async()=>{k==="subscriptions"?await Le():await Fe()})()},[k,Le,Fe]);const gs=s=>{He(s),cs()},fs=s=>{us(s),ds()},bs=s=>{He(s),Te(""),Ee(),xs()},ys=async()=>
1{if(n){we(!0);try{const s=await fetch(`/api/admin/payments/${n.id}/refund`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${S}`},body:JSON.stringify({reason:ve||void 0})});if(!s.ok){const x=await s.json();throw new Error(x.message||"Ошибка при возврате")}const l=await s.json();P.show({title:"Возврат выполнен",message:l.message||`Возврат ${n.amount} ₽ успешно выполнен`,color:"green",icon:e.jsx(h,{size:16})}),ce()}catch(s){P.show({title:"Ошибка возврата",message:s.message||"Не удалось выполнить возврат",color:"red",icon:e.jsx(f,{size:16})})}finally{we(!1)}}},zs=W.subscriptionTotal,ws=W.walletDepositsTotal,vs=W.walletPurchasesTotal,Ts=W.walletBonusesTotal,J=Math.ceil(k==="subscriptions"?Be/U:Pe/U),oe=k==="subscriptions"?Se:Ie,Ss=k==="subscriptions"?Be:Pe,Cs=s=>{as(s),te(1),le(""),fe(null),be(null),ye(null)};return c.useEffect(()=>{te(1)},[R,L,F,O]),e.jsxs(u,{gap:"lg",children:[e.jsx(Oe.div,{initial:{opacity:0,y:-20},animate:{opacity:1,y:0},children:e.jsxs(a,{justify:"space-between",children:[e.jsxs(o,{children:[e.jsx(ks,{order:2,children:"Финансы"}),e.jsx(i,{c:"dimmed",mt:"xs",children:"Платежи и транзакции кошелька"})]}),e.jsx(C,{variant:"light",leftSection:e.jsx(As,{size:18}),children:"Экспорт CSV"})]})}),e.jsx(Oe.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},transition:{delay:.1},children:e.jsxs(E,{cols:{base:2,md:4},children:[e.jsx(d,{withBorder:!0,p:"md",radius:"md",className:ie.statCard,children:e.jsxs(a,{justify:"space-between",children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",tt:"uppercase",fw:500,children:"Оплачено подписок"}),e.jsx(i,{size:"xl",fw:700,c:"green",children:e.jsx(b,{value:zs,suffix:" ₽",thousandSeparator:" "})})]}),e.jsx(m,{size:40,radius:"md",variant:"light",color:"green",children:e.jsx(ee,{size:20})})]})}),e.jsx(d,{withBorder:!0,p:"md",radius:"md",className:ie.statCard,children:e.jsxs(a,{justify:"space-between",children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",tt:"uppercase",fw:500,children:"Пополнено"}),e.jsx(i,{size:"xl",fw:700,c:"blue",children:e.jsx(b,{value:ws,suffix:" ₽",thousandSeparator:" "})})]}),e.jsx(m,{size:40,radius:"md",variant:"light",color:"blue",children:e.jsx(ge,{size:20})})]})}),e.jsx(d,{withBorder:!0,p:"md",radius:"md",className:ie.statCard,children:e.jsxs(a,{justify:"space-between",children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",tt:"uppercase",fw:500,children:"С баланса"}),e.jsx(i,{size:"xl",fw:700,c:"violet",children:e.jsx(b,{value:vs,suffix:" ₽",thousandSeparator:" "})})]}),e.jsx(m,{size:40,radius:"md",variant:"light",color:"violet",children:e.jsx(g,{size:20})})]})}),e.jsx(d,{withBorder:!0,p:"md",radius:"md",className:ie.statCard,children:e.jsxs(a,{justify:"space-between",children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",tt:"uppercase",fw:500,children:"Бонусы"}),e.jsx(i,{size:"xl",fw:700,c:"pink",children:e.jsx(b,{value:Ts,suffix:" ₽",thousandSeparator:" "})})]}),e.jsx(m,{size:40,radius:"md",variant:"light",color:"pink",children:e.jsx(re,{size:20})})]})})]})}),e.jsxs(y,{value:k,onChange:Cs,children:[e.jsxs(y.List,{children:[e.jsx(y.Tab,{value:"subscriptions",leftSection:e.jsx(ee,{size:16}),children:"Оплаты подписок"}),e.jsx(y.Tab,{value:"wallet",leftSection:e.jsx(g,{size:16}),children:"Транзакции кошелька"}),e.jsx(y.Tab,{value:"manual",leftSection:e.jsx(ae,{size:16}),rightSection:Re>0?e.jsx(j,{size:"xs",color:"red",variant:"filled",children:Re}):null,children:"Ручные пополнения"})]}),e.jsx(y.Panel,{value:"subscriptions",pt:"lg",children:e.jsxs(u,{gap:"md",children:[e.jsx(H,{withBorder:!0,padding:"md",children:e.jsxs(a,{children:[e.jsx(he,{placeholder:"Поиск по имени, email, ID платёжной системы...",leftSection:e.jsx(Je,{size:16}),value:ne,onChange:s=>le(s.target.value),style:{flex:1}}),e.jsx(pe,{placeholder:"Статус",leftSection:e.jsx(Xe,{size:16}),clearable:!0,value:L,onChange:fe,data:[{value:"success",label:"✓ Успешно"},{value:"pending",label:"⏳ Ожидание"},{value:"failed",label:"✗ Ошибка"}],w:150}),e.jsx(pe,{placeholder:"Способ",clearable:!0,value:F,onChange:be,data:[{value:"YooKassa",label:"💳 YooKassa"},{value:"Cryptomus",label:"₿ Heleket"},{value:"Balance",label:"💰 Баланс"},{value:"gift",label:"🎁 Подарки"},{value:"Stripe",label:"💳 Stripe"},{value:"Volet",label:"💳 Volet"},{value:"Payelata",label:"💳 Payelata"}],w:150})]})}),e.jsxs(H,{withBorder:!0,padding:"lg",children:[e.jsx(r.ScrollC
1ontainer,{minWidth:900,children:e.jsxs(r,{verticalSpacing:"md",highlightOnHover:!0,children:[e.jsx(r.Thead,{children:e.jsxs(r.Tr,{children:[e.jsx(r.Th,{children:"ID заказа"}),e.jsx(r.Th,{children:"Пользователь"}),e.jsx(r.Th,{children:"Тариф"}),e.jsx(r.Th,{children:"Сумма"}),e.jsx(r.Th,{children:"Способ"}),e.jsx(r.Th,{children:"Статус"}),e.jsx(r.Th,{children:"Дата"}),e.jsx(r.Th,{w:60})]})}),e.jsx(r.Tbody,{children:oe.map(s=>{const l=ss(s.status),x=l.icon,B=_[s.method||""]||_.card,de=B.icon;return e.jsxs(r.Tr,{children:[e.jsx(r.Td,{children:e.jsx(i,{size:"sm",fw:500,ff:"monospace",children:s.orderId})}),e.jsx(r.Td,{children:e.jsxs(a,{gap:"sm",children:[e.jsx(Q,{size:32,radius:"xl",color:"brand",children:s.username[0].toUpperCase()}),e.jsxs(o,{children:[e.jsx(i,{size:"sm",fw:500,children:s.username}),e.jsx(i,{size:"xs",c:"dimmed",children:s.email})]})]})}),e.jsx(r.Td,{children:e.jsx(j,{variant:"light",color:"blue",children:s.plan})}),e.jsx(r.Td,{children:e.jsx(i,{size:"sm",fw:600,children:e.jsx(b,{value:s.amount,suffix:" ₽",thousandSeparator:" "})})}),e.jsx(r.Td,{children:e.jsxs(a,{gap:"xs",children:[e.jsx(m,{size:"sm",variant:"light",color:B.color,children:e.jsx(de,{size:14})}),e.jsxs(o,{children:[e.jsx(i,{size:"sm",children:B.label}),e.jsx(i,{size:"xs",c:"dimmed",children:s.method==="card"&&s.cardLast4?`•••• ${s.cardLast4}`:s.method==="crypto"&&s.cryptoCurrency?s.cryptoCurrency:""})]})]})}),e.jsx(r.Td,{children:e.jsx(j,{color:l.color,variant:"light",leftSection:e.jsx(x,{size:12}),children:l.label})}),e.jsxs(r.Td,{children:[e.jsx(i,{size:"sm",children:z(s.createdAt).format("DD.MM.YYYY")}),e.jsx(i,{size:"xs",c:"dimmed",children:z(s.createdAt).format("HH:mm")})]}),e.jsx(r.Td,{children:e.jsxs(p,{shadow:"md",width:160,position:"bottom-end",children:[e.jsx(p.Target,{children:e.jsx(w,{variant:"subtle",color:"var(--mantine-color-brand-5)",children:e.jsx(Qe,{size:16})})}),e.jsxs(p.Dropdown,{children:[e.jsx(p.Item,{leftSection:e.jsx(Ze,{size:14}),onClick:()=>gs(s),children:"Подробнее"}),s.status==="success"&&e.jsx(p.Item,{leftSection:e.jsx(v,{size:14}),color:"red",children:"Возврат"})]})]})})]},s.id)})})]})}),Ae?e.jsx(Ue,{py:"xl",children:e.jsx($e,{color:"orange"})}):Se.length===0?e.jsx(o,{ta:"center",py:"xl",children:e.jsx(i,{c:"dimmed",children:"Платежи не найдены"})}):null]})]})}),e.jsx(y.Panel,{value:"wallet",pt:"lg",children:e.jsxs(u,{gap:"md",children:[e.jsx(H,{withBorder:!0,padding:"md",children:e.jsxs(a,{children:[e.jsx(he,{placeholder:"Поиск по имени, email, описанию...",leftSection:e.jsx(Je,{size:16}),value:ne,onChange:s=>le(s.target.value),style:{flex:1}}),e.jsx(pe,{placeholder:"Тип",leftSection:e.jsx(Xe,{size:16}),clearable:!0,value:O,onChange:ye,data:[{value:"income",label:"↓ Пополнение"},{value:"outcome",label:"↑ Списание"}],w:160})]})}),e.jsxs(H,{withBorder:!0,padding:"lg",children:[e.jsx(r.ScrollContainer,{minWidth:900,children:e.jsxs(r,{verticalSpacing:"md",highlightOnHover:!0,children:[e.jsx(r.Thead,{children:e.jsxs(r.Tr,{children:[e.jsx(r.Th,{children:"Пользователь"}),e.jsx(r.Th,{children:"Тип"}),e.jsx(r.Th,{children:"Описание"}),e.jsx(r.Th,{children:"Сумма"}),e.jsx(r.Th,{children:"Метод"}),e.jsx(r.Th,{children:"Статус"}),e.jsx(r.Th,{children:"Дата"}),e.jsx(r.Th,{w:60})]})}),e.jsx(r.Tbody,{children:oe.map(s=>{const l=N[s.type]||N.deposit,x=l.icon,B=ss(s.status),de=B.icon,X=s.method?_[s.method]:null;return e.jsxs(r.Tr,{children:[e.jsx(r.Td,{children:e.jsxs(a,{gap:"sm",children:[e.jsx(Q,{size:32,radius:"xl",color:"brand",children:s.username[0].toUpperCase()}),e.jsxs(o,{children:[e.jsx(i,{size:"sm",fw:500,children:s.username}),e.jsx(i,{size:"xs",c:"dimmed",children:s.email})]})]})}),e.jsx(r.Td,{children:e.jsx(j,{color:l.color,variant:"light",leftSection:e.jsx(x,{size:12}),children:l.label})}),e.jsx(r.Td,{children:e.jsx(i,{size:"sm",lineClamp:1,maw:200,children:s.description})}),e.jsx(r.Td,{children:e.jsxs(i,{size:"sm",fw:600,c:s.amount>0?"green":void 0,children:[s.amount>0?"+":"",e.jsx(b,{value:s.amount,suffix:" ₽",thousandSeparator:" "})]})}),e.jsx(r.Td,{children:X?e.jsxs(a,{gap:"xs",children:[e.jsx(m,{size:"sm",variant:"light",color:X.color,children:e.jsx(X.icon,{size:14})}),e.jsxs(o,{children:[e.jsx(i,{size:"sm",children:s.method==="admin"&&s.adminName?s.adminName:X.label}),e.jsx(i,{size:"xs",c:"dimmed",children:s.method==="admin"&&s.adminName?"Администратор":s.method==="card"&&s.cardLast4?`•••• ${s.cardLast4}`:s.method==="crypto"&&s.cryptoCurrency?s.cryptoCurrency:""})]})]}):e.jsx(i,{size:"sm",c:"dimmed",children:"—"})}),e.jsx(r.Td,{children:e.jsx(j,{color:B.color,variant:"light",leftSection:e.jsx(de,{size:12}),children:s.status==="success"?"Выполнено":s.status==="pending"?"В обработке":"Ошибка"})}),e.jsxs(r.Td,{children:[e.jsx(i,{size:"sm",children:z(s.createdAt).format("DD.MM.YYYY")}),e.jsx(i,{size:"xs",c:"dimmed",children:z(s.createdAt).format("HH:mm")}
1)]}),e.jsx(r.Td,{children:e.jsxs(p,{shadow:"md",width:160,position:"bottom-end",children:[e.jsx(p.Target,{children:e.jsx(w,{variant:"subtle",color:"var(--mantine-color-brand-5)",children:e.jsx(Qe,{size:16})})}),e.jsxs(p.Dropdown,{children:[e.jsx(p.Item,{leftSection:e.jsx(Ze,{size:14}),onClick:()=>fs(s),children:"Подробнее"}),s.type==="deposit"&&s.status==="pending"&&e.jsxs(e.Fragment,{children:[e.jsx(p.Item,{leftSection:e.jsx(h,{size:14}),color:"green",children:"Подтвердить"}),e.jsx(p.Item,{leftSection:e.jsx(f,{size:14}),color:"red",children:"Отклонить"})]})]})]})})]},s.id)})})]})}),Ae?e.jsx(Ue,{py:"xl",children:e.jsx($e,{color:"orange"})}):Ie.length===0?e.jsx(o,{ta:"center",py:"xl",children:e.jsx(i,{c:"dimmed",children:"Транзакции не найдены"})}):null]})]})}),e.jsx(y.Panel,{value:"manual",pt:"lg",children:e.jsx(u,{gap:"md",children:e.jsxs(H,{withBorder:!0,padding:"md",children:[e.jsxs(a,{justify:"space-between",mb:"md",children:[e.jsx(i,{fw:600,children:"Заявки на ручное пополнение"}),e.jsx(C,{size:"xs",variant:"subtle",leftSection:e.jsx(v,{size:14}),onClick:Y,children:"Обновить"})]}),ke.length===0?e.jsxs(o,{ta:"center",py:"xl",children:[e.jsx(m,{size:60,radius:"xl",variant:"light",color:"brand",mx:"auto",mb:"md",children:e.jsx(ae,{size:30})}),e.jsx(i,{c:"dimmed",children:"Нет заявок на ручное пополнение"})]}):e.jsx(u,{gap:"sm",children:ke.map(s=>e.jsx(d,{withBorder:!0,p:"md",radius:"md",children:e.jsxs(a,{justify:"space-between",wrap:"nowrap",children:[e.jsxs(a,{gap:"md",children:[e.jsx(m,{size:"lg",radius:"md",variant:"light",color:s.type==="subscription"?"violet":s.method==="sbp"?"green":"blue",children:s.type==="subscription"?e.jsx(ee,{size:18}):s.method==="sbp"?e.jsx(ae,{size:18}):e.jsx(D,{size:18})}),e.jsxs(o,{children:[e.jsxs(a,{gap:"xs",children:[e.jsx(i,{fw:600,children:s.user.username||s.user.email}),e.jsx(j,{size:"xs",color:s.type==="subscription"?"violet":"gray",variant:"light",children:s.type==="subscription"?"📦 Подписка":"💰 Пополнение"}),e.jsx(j,{size:"xs",color:s.status==="pending"?"yellow":s.status==="confirmed"?"green":"red",children:s.status==="pending"?"Ожидает":s.status==="confirmed"?"Подтверждено":"Отклонено"})]}),s.type==="subscription"&&s.planName&&e.jsxs(i,{size:"sm",fw:500,c:"violet",children:["Тариф: ",s.planName," (",s.planDays," дн., ",s.planTraffic," GB, ",s.planDevices," устр.)"]}),e.jsxs(i,{size:"xs",c:"dimmed",children:[s.method==="sbp"?"СБП":"Карта"," • ",z(s.createdAt).format("DD.MM.YYYY HH:mm")]}),s.senderName&&e.jsxs(i,{size:"xs",c:"dimmed",children:["Отправитель: ",s.senderName]})]})]}),e.jsxs(a,{gap:"md",children:[e.jsxs(i,{size:"xl",fw:700,c:s.type==="subscription"?"violet":"green",children:[s.amount.toLocaleString()," ₽"]}),s.status==="pending"&&e.jsxs(a,{gap:"xs",children:[e.jsx(Ke,{label:"Подтвердить",children:e.jsx(w,{color:"green",variant:"light",size:"lg",onClick:()=>js(s.id),loading:V===s.id&&Ye==="confirm",disabled:V!==null,children:e.jsx(h,{size:18})})}),e.jsx(Ke,{label:"Отклонить",children:e.jsx(w,{color:"red",variant:"light",size:"lg",onClick:()=>ps(s.id),loading:V===s.id&&Ye==="reject",disabled:V!==null,children:e.jsx(f,{size:18})})})]}),s.status!=="pending"&&s.adminComment&&e.jsx(i,{size:"xs",c:"dimmed",maw:200,children:s.adminComment})]})]})},s.id))})]})})})]}),e.jsxs(a,{justify:"space-between",mt:"md",children:[e.jsxs(i,{size:"sm",c:"dimmed",children:["Показано ",oe.length," из ",Ss," записей",J>1&&` (страница ${A} из ${J})`]}),J>1&&e.jsx(_s,{total:J,value:A,onChange:te,color:"orange",size:"sm",withEdges:!0})]}),e.jsx(xe,{opened:ts,onClose:Ee,title:e.jsxs(a,{gap:"sm",children:[e.jsx(m,{size:"lg",radius:"md",variant:"light",color:"blue",children:e.jsx(ee,{size:20})}),e.jsxs(o,{children:[e.jsx(i,{fw:600,children:"Детали платежа"}),e.jsx(i,{size:"xs",c:"dimmed",children:n?.orderId})]})]}),size:"lg",children:n&&e.jsxs(u,{gap:"md",children:[e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{justify:"space-between",children:[e.jsx(i,{size:"sm",c:"dimmed",children:"Статус"}),e.jsx(j,{size:"lg",color:T[n.status]?.color,variant:"light",leftSection:(()=>{const s=T[n.status]?.icon;return s?e.jsx(s,{size:14}):null})(),children:T[n.status]?.label})]}),n.status==="failed"&&n.failReason&&e.jsxs(i,{size:"sm",c:"red",mt:"xs",children:["Причина: ",n.failReason]})]}),e.jsxs(E,{cols:2,children:[e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{gap:"xs",mb:"xs",children:[e.jsx(se,{size:16,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:"ID заказа"})]}),e.jsxs(a,{children:[e.jsx(i,{fw:500,ff:"monospace",children:n.orderId||"—"}),n.orderId&&e.jsx(Z,{value:n.orderId,children:({copied:s,copy:l})=>e.jsx(w,{size:"sm",variant:"subtle",color:s?"green":"gray",onClick:l,children:s?e.jsx(h,{size:14}):e.jsx(q,{size:14})})})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{gap:"xs",mb:"xs",children:[e.jsx(se,{size:16,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:"ID платежа"})]}),e.jsxs(a,{children:[e.jsx(i,{fw:500,ff:"monospace",children:n.id}),e.jsx(Z,{value:n.id,children:({copied:s,copy:l})=>e.jsx(w,{size:"sm",variant:"subtle",color:s?"green":"gray",onClick:l,children:s?e.jsx(h,{size:14}):e.jsx(q,{size:14})})})]})]})]}),n.paymentId&&e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{gap:"xs",mb:"xs",children:[e.jsx(se,{size:16,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:"Идентификатор платёжной системы"})]}),e.jsxs(a,{children:[e.jsx(i,{fw:500,ff:"monospace",size:"sm",children:n.paymentId}),e.jsx(Z,{value:n.paymentId,children:({copied:s,copy:l})=>e.jsx(w,{size:"sm",variant:"subtle",color:s?"green":"gray",onClick:l,children:s?e.jsx(h,{size:14}):e.jsx(q,{size:14})})})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(i,{size:"sm",c:"dimmed",mb:"sm",children:"Пользователь"}),e.jsxs(a,{children:[e.jsx(Q,{size:40,radius:"xl",color:"brand",children:n.username[0].toUpperCase()}),e.jsxs(o,{children:[e.jsx(i,{fw:500,children:n.username}),e.jsxs(a,{gap:"xs",children:[e.jsx(Ge,{size:14,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:n.email})]})]})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(i,{size:"sm",c:"dimmed",mb:"sm",children:"Финансовая информация"}),e.jsxs(E,{cols:2,children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Тариф"}),e.jsx(j,{variant:"light",color:"blue",mt:4,children:n.plan})]}),e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Сумма"}),e.jsx(i,{size:"lg",fw:700,c:"green",children:e.jsx(b,{value:n.amount,suffix:" ₽",thousandSeparator:" "})})]}),e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Способ оплаты"}),e.jsx(a,{gap:"xs",mt:4,children:(()=>{const s=n.method||"card",l=_[s]||_.card,x=l.icon;return e.jsxs(e.Fragment,{children:[e.jsx(m,{size:"sm",variant:"light",color:l.color,children:e.jsx(x,{size:14})}),e.jsx(i,{size:"sm",children:l.label})]})})()}),n.method==="card"&&n.cardLast4&&e.jsxs(i,{size:"xs",c:"dimmed",children:["•••• ",n.cardLast4]}),n.method==="crypto"&&n.cryptoCurrency&&e.jsx(i,{size:"xs",c:"dimmed",children:n.cryptoCurrency})]})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(i,{size:"sm",c:"dimmed",mb:"sm",children:"Временные метки"}),e.jsxs(E,{cols:2,children:[e.jsxs(o,{children:[e.jsxs(a,{gap:"xs",children:[e.jsx(We,{size:14,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"xs",c:"dimmed",children:"Создан"})]}),e.jsx(i,{size:"sm",mt:4,children:z(n.createdAt).format("DD.MM.YYYY HH:mm:ss")})]}),e.jsxs(o,{children:[e.jsxs(a,{gap:"xs",children:[e.jsx(h,{size:14,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"xs",c:"dimmed",children:"Оплачен"})]}),e.jsx(i,{size:"sm",mt:4,children:n.paidAt?z(n.paidAt).format("DD.MM.YYYY HH:mm:ss"):"—"})]})]})]}),n.status==="success"&&e.jsxs(e.Fragment,{children:[e.jsx(je,{}),e.jsx(a,{justify:"flex-end",children:e.jsx(C,{variant:"light",color:"red",leftSection:e.jsx(v,{size:16}),onClick:()=>bs(n),children:"Оформить возврат"})})]})]})}),e.jsx(xe,{opened:os,onClose:ms,title:e.jsxs(a,{gap:"sm",children:[e.jsx(m,{size:"lg",radiu
1s:"md",variant:"light",color:"teal",children:e.jsx(g,{size:20})}),e.jsxs(o,{children:[e.jsx(i,{fw:600,children:"Детали транзакции"}),e.jsx(i,{size:"xs",c:"dimmed",children:t?.id})]})]}),size:"lg",children:t&&e.jsxs(u,{gap:"md",children:[e.jsxs(a,{justify:"space-between",children:[e.jsx(j,{size:"lg",color:N[t.type]?.color||"gray",variant:"light",leftSection:(()=>{const s=N[t.type]?.icon;return s?e.jsx(s,{size:14}):null})(),children:N[t.type]?.label||t.type}),e.jsx(j,{size:"lg",color:T[t.status]?.color||"gray",variant:"light",leftSection:(()=>{const s=T[t.status]?.icon;return s?e.jsx(s,{size:14}):null})(),children:t.status==="success"?"Выполнено":t.status==="pending"?"В обработке":"Ошибка"})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{gap:"xs",mb:"xs",children:[e.jsx(se,{size:16,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:"ID транзакции"})]}),e.jsxs(a,{children:[e.jsx(i,{fw:500,ff:"monospace",children:t.id}),e.jsx(Z,{value:t.id,children:({copied:s,copy:l})=>e.jsx(w,{size:"sm",variant:"subtle",color:s?"green":"gray",onClick:l,children:s?e.jsx(h,{size:14}):e.jsx(q,{size:14})})})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsx(i,{size:"sm",c:"dimmed",mb:"sm",children:"Пользователь"}),e.jsxs(a,{children:[e.jsx(Q,{size:40,radius:"xl",color:"brand",children:t.username[0].toUpperCase()}),e.jsxs(o,{children:[e.jsx(i,{fw:500,children:t.username}),e.jsxs(a,{gap:"xs",children:[e.jsx(Ge,{size:14,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:t.email})]})]})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(E,{cols:2,children:[e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Сумма"}),e.jsxs(i,{size:"xl",fw:700,c:t.amount>0?"green":"red",children:[t.amount>0?"+":"",e.jsx(b,{value:t.amount,suffix:" ₽",thousandSeparator:" "})]})]}),t.method&&e.jsxs(o,{children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Метод"}),e.jsx(a,{gap:"xs",mt:4,children:(()=>{const s=_[t.method];if(!s)return null;const l=s.icon;return e.jsxs(e.Fragment,{children:[e.jsx(m,{size:"sm",variant:"light",color:s.color,children:e.jsx(l,{size:14})}),e.jsx(i,{size:"sm",children:s.label})]})})()}),t.method==="card"&&t.cardLast4&&e.jsxs(i,{size:"xs",c:"dimmed",children:["•••• ",t.cardLast4]}),t.method==="crypto"&&t.cryptoCurrency&&e.jsx(i,{size:"xs",c:"dimmed",children:t.cryptoCurrency})]})]}),e.jsxs(o,{mt:"md",children:[e.jsx(i,{size:"xs",c:"dimmed",children:"Описание"}),e.jsx(i,{size:"sm",mt:4,children:t.description})]})]}),e.jsxs(d,{withBorder:!0,p:"md",radius:"md",children:[e.jsxs(a,{gap:"xs",mb:"xs",children:[e.jsx(We,{size:14,color:"var(--mantine-color-brand-5)"}),e.jsx(i,{size:"sm",c:"dimmed",children:"Дата и время"})]}),e.jsx(i,{size:"sm",children:z(t.createdAt).format("DD.MM.YYYY HH:mm:ss")})]}),t.type==="deposit"&&t.status==="pending"&&e.jsxs(e.Fragment,{children:[e.jsx(je,{}),e.jsxs(a,{justify:"flex-end",children:[e.jsx(C,{variant:"light",color:"red",leftSection:e.jsx(f,{size:16}),children:"Отклонить"}),e.jsx(C,{color:"green",leftSection:e.jsx(h,{size:16}),children:"Подтвердить"})]})]})]})}),e.jsx(xe,{opened:hs,onClose:ce,title:e.jsxs(a,{gap:"sm",children:[e.jsx(m,{size:"lg",radius:"md",variant:"light",color:"red",children:e.jsx(v,{size:20})}),e.jsx(i,{fw:600,children:"Подтверждение возврата"})]}),size:"md",children:n&&e.jsxs(u,{gap:"md",children:[e.jsxs(d,{withBorder:!0,p:"md",radius:"md",bg:"red.9",style:{opacity:.1,position:"relative"},children:[e.jsx(o,{style:{position:"absolute",inset:0,background:"var(--mantine-color-red-light)",borderRadius:"inherit"}}),e.jsxs(u,{gap:"xs",style:{position:"relative"},children:[e.jsx(i,{size:"sm",c:"red",children:"⚠️ Вы собираетесь выполнить возврат платежа"}),e.jsx(i,{size:"lg",fw:700,children:e.jsx(b,{value:n.amount,suffix:" ₽",thousandSeparator:" "})})]})]}),e.jsx(d,{withBorder:!0,p:"md",radius:"md",children:e.jsxs(u,{gap:"xs",children:[e.jsxs(a,{justify:"space-between",children:[e.jsx(i,{size:"sm",c:"dimmed",children:"ID заказа:"}),e.jsx(i,{size:"sm",fw:500,children:n.orderId})]}),e.jsxs(a,{justify:"space-between",children:[e.jsx(i,{size:"sm",c:"dimmed",children:"Пользователь:"}),e.jsx(i,{size:"sm",fw:500,children:n.username})]}),e.jsxs(a,{justify:"space-between",children:[e.jsx(i,{size:"sm",c:"dimmed",children:"Тариф:"}),e.jsx(i,{size:"sm",fw:500,children:n.plan})]})]})}),e.jsx(i,{size:"sm",c:"dimmed",children:"При возврате:"}),e.jsxs(u,{gap:4,ml:"md",children:[e.jsxs(i,{size:"sm",children:["• Сумма ",e.jsxs("b",{children:[n.amount," ₽"]}
1)," вернётся на баланс пользователя"]}),e.jsxs(i,{size:"sm",children:["• Подписка пользователя будет ",e.jsx("b",{children:"деактивирована"})]}),e.jsxs(i,{size:"sm",children:["• Подписка пользователя будет ",e.jsx("b",{children:"деактивирована"})]})]}),e.jsx(he,{label:"Причина возврата (необязательно)",placeholder:"Укажите причину возврата...",value:ve,onChange:s=>Te(s.target.value)}),e.jsx(je,{}),e.jsxs(a,{justify:"flex-end",children:[e.jsx(C,{variant:"light",onClick:ce,disabled:ze,children:"Отмена"}),e.jsx(C,{color:"red",leftSection:e.jsx(v,{size:16}),onClick:ys,loading:ze,children:"Подтвердить возврат"})]})]})})]})}export{Qs as AdminPaymentsPage};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.