PageSourceSearch

https://e0f.cx/assets/AdminPartnerAdsPage-CCC9CWg2.js

js e0f.cx collected 2026-09-24 14:59:36 UTC 22,630 bytes, 1 lines download raw bytes

1import{a as ve,r as d,j as e,C as Y,G as i,aj as Se,e as W,bx as a,P as v,f as r,a2 as S,af as Te,Y as X,s as l,l as k,a9 as j,aa as ze,ac as De,aA as ke,_ as g,S as y,ah as A,ai as C,aY as _,bC as q,bb as Pe,aS as Ie,ab as h}from"./index-DJgzD7sm.js";import{I as Be}from"./IconList-BZHscek3.js";import{S as Q}from"./Select-DYUJAPNs.js";import{I as Ee}from"./IconDotsVertical-C9EwIjIC.js";import{I as Ne}from"./IconEye-q7UJ_CdM.js";import{I as Fe}from"./IconEdit-BBcyIY8S.js";import{I as Ue}from"./IconCurrencyRubel-DPVJcMlG.js";import{I as Ae}from"./IconPlayerPause-DaznaRAl.js";import{I as $e}from"./IconPlayerPlay-C36Bx94L.js";import{I as Me}from"./IconTrash-Dw0tXwO_.js";import{P as Re}from"./Pagination-DRIoAR3s.js";import{S as Le}from"./Switch-K_-dcS_2.js";import{N as u}from"./NumberInput-37uLQK8S.js";import{I as Oe}from"./IconExternalLink-PMgE6Ft5.js";import"./react-number-format.es-hx5beCWS.js";import"./clamp-DTmYCdls.js";const $={pending:{label:"Ожидает оплаты",color:"yellow"},pending_payment:{label:"Ожидает оплаты",color:"yellow"},paid:{label:"Оплачено",color:"blue"},approved:{label:"Одобрено",color:"teal"},pending_moderation:{label:"На модерации",color:"orange"},active:{label:"Активно",color:"green"},completed:{label:"Завершено",color:"gray"},rejected:{label:"Отклонено",color:"red"},cancelled:{label:"Отменено",color:"gray"}},M={banner:{label:"Баннер",color:"blue"},telegram:{label:"Telegram",color:"cyan"},combo:{label:"Комбо",color:"violet"}};function as(){const{token:P}=ve(),[Z,ee]=d.useState("ads"),[se,K]=d.useState(!0),[m,re]=d.useState(null),[ne,ae]=d.useState([]),[T,te]=d.useState(null),[R,le]=d.useState(1),[G,ie]=d.useState(1),[I,ce]=d.useState(null),[B,oe]=d.useState(null),[de,E]=d.useState(!1),[me,N]=d.useState(!1),[he,z]=d.useState(!1),[xe,F]=d.useState(!1),[n,L]=d.useState(null),[U,H]=d.useState(""),[c,p]=d.useState({title:"",text:"",imageUrl:"",linkUrl:"",buttonText:"",startDate:"",endDate:"",impressions:0,clicks:0}),[t,x]=d.useState({}),O=async s=>{const o=await fetch(s,{headers:{Authorization:`Bearer ${P}`}});if(!o.ok)throw new Error(await o.text());return o.json()},D=async(s,o)=>{const w=await fetch(s,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${P}`},body:o?JSON.stringify(o):void 0});if(!w.ok){const Ce=await w.json().catch(()=>({message:"Ошибка"}));throw new Error(Ce.message||"Ошибка")}return w.json()},J=async(s,o)=>{const w=await fetch(s,{method:"PUT",headers:{"Content-Type":"application/json",Authorization:`Bearer ${P}`},body:JSON.stringify(o)});if(!w.ok)throw new Error(await w.text());return w.json()},b=async()=>{K(!0);try{const[s,o]=await Promise.all([O("/api/admin/partner-ads/settings"),O("/api/admin/partner-ads/stats")]);re(s),x(s),te(o)}catch(s){console.error("Error loading settings:",s)}K(!1)},f=async()=>{try{const s=new URLSearchParams;s.append("page",R.toString()),s.append("limit","20"),I&&s.append("status",I),B&&s.append("type",B);const o=await O(`/api/admin/partner-ads?${s}`);ae(o.ads),ie(o.totalPages)}catch(s){console.error("Error loading ads:",s)}};d.useEffect(()=>{b()},[]),d.useEffect(()=>{f()},[R,I,B]);const je=async()=>{try{await J("/api/admin/partner-ads/settings",t),h.show({title:"Успешно",message:"Настройки сохранены",color:"green"}),E(!1),b()}catch{h.show({title:"Ошибка",message:"Не удалось сохранить настройки",color:"red"})}},V=async s=>{try{await D(`/api/admin/partner-ads/${s.id}/approve`),h.show({title:"Успешно",message:"Объявление одобрено",color:"green"}),f(),b()}catch(o){h.show({title:"Ошибка",message:o.response?.data?.message||"Не удалось одобрить",color:"red"})}},ue=async()=>{if(!(!n||!U))try{await D(`/api/admin/partner-ads/${n.id}/reject`,{reason:U}),h.show({title:"Успешно",message:"Объявление отклонено",color:"green"}),z(!1),H(""),f(),b()}catch{h.show({title:"Ошибка",message:"Не удалось отклонить",color:"red"})}},pe=async s=>
1{try{await D(`/api/admin/partner-ads/${s.id}/payment`,{paymentStatus:"paid",paymentMethod:"manual"}),h.show({title:"Успешно",message:"Оплата подтверждена",color:"green"}),f(),b()}catch{h.show({title:"Ошибка",message:"Не удалось обновить статус",color:"red"})}},ge=async s=>{if(confirm(`Вы уверены, что хотите деактивировать объявление "${s.title}"?`))try{await D(`/api/admin/partner-ads/${s.id}/deactivate`),h.show({title:"Успешно",message:"Объявление деактивировано",color:"green"}),f(),b()}catch{h.show({title:"Ошибка",message:"Не удалось деактивировать объявление",color:"red"})}},be=async s=>{try{await D(`/api/admin/partner-ads/${s.id}/status`,{status:"active"}),h.show({title:"Успешно",message:"Объявление активировано",color:"green"}),f(),b()}catch{h.show({title:"Ошибка",message:"Не удалось активировать объявление",color:"red"})}},fe=async s=>{if(confirm(`Вы уверены, что хотите УДАЛИТЬ объявление "${s.title}"? Это действие необратимо!`))try{if(!(await fetch(`/api/admin/partner-ads/${s.id}`,{method:"DELETE",headers:{Authorization:`Bearer ${P}`}})).ok)throw new Error("Failed to delete");h.show({title:"Успешно",message:"Объявление удалено",color:"green"}),f(),b()}catch{h.show({title:"Ошибка",message:"Не удалось удалить объявление",color:"red"})}},we=s=>
1{L(s),p({title:s.title||"",text:s.text||"",imageUrl:s.imageUrl||"",linkUrl:s.linkUrl||"",buttonText:s.buttonText||"",startDate:s.startDate?s.startDate.split("T")[0]:"",endDate:s.endDate?s.endDate.split("T")[0]:"",impressions:s.impressions||0,clicks:s.clicks||0}),F(!0)},ye=async()=>{if(n)try{await J(`/api/admin/partner-ads/${n.id}`,c),h.show({title:"Успешно",message:"Объявление обновлено",color:"green"}),F(!1),f()}catch(s){h.show({title:"Ошибка",message:s.message||"Не удалось сохранить изменения",color:"red"})}};return se?e.jsx(Y,{size:"xl",py:"xl",children:e.jsx(i,{justify:"center",py:"xl",children:e.jsx(Se,{size:"lg"})})}):e.jsxs(Y,{size:"xl",py:"xl",children:[e.jsx(W,{order:2,mb:"xl",children:"Реклама партнёров"}),T&&e.jsxs(a,{mb:"xl",children:[e.jsx(a.Col,{span:{base:6,md:3},children:e.jsxs(v,{p:"md",radius:"md",withBorder:!0,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Всего объявлений"}),e.jsx(r,{size:"xl",fw:700,children:T.total})]})}),e.jsx(a.Col,{span:{base:6,md:3},children:e.jsxs(v,{p:"md",radius:"md",withBorder:!0,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Активных"}),e.jsx(r,{size:"xl",fw:700,c:"green",children:T.active})]})}),e.jsx(a.Col,{span:{base:6,md:3},children:e.jsxs(v,{p:"md",radius:"md",withBorder:!0,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Ожидает модерации"}),e.jsx(r,{size:"xl",fw:700,c:"yellow",children:T.paid})]})}),e.jsx(a.Col,{span:{base:6,md:3},children:e.jsxs(v,{p:"md",radius:"md",withBorder:!0,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Доход"}),e.jsxs(r,{size:"xl",fw:700,c:"blue",children:[Number(T.totalRevenue).toFixed(0)," ₽"]})]})})]}),e.jsxs(S,{value:Z,onChange:ee,children:[e.jsxs(S.List,{mb:"md",children:[e.jsx(S.Tab,{value:"ads",leftSection:e.jsx(Be,{size:16}),children:"Объявления"}),e.jsx(S.Tab,{value:"settings",leftSection:e.jsx(Te,{size:16}),children:"Настройки"})]}),e.jsx(S.Panel,{value:"ads",children:e.jsxs(X,{withBorder:!0,children:[e.jsx(i,{justify:"space-between",mb:"md",children:e.jsxs(i,{children:[e.jsx(Q,{placeholder:"Статус",clearable:!0,value:I,onChange:ce,data:[{value:"pending",label:"Ожидает оплаты"},{value:"pending_payment",label:"Ожидает оплаты"},{value:"pending_moderation",label:"На модерации"},{value:"paid",label:"Оплачено"},{value:"approved",label:"Одобрено"},{value:"active",label:"Активно"},{value:"completed",label:"Завершено"},{value:"rejected",label:"Отклонено"}],w:180}),e.jsx(Q,{placeholder:"Тип",clearable:!0,value:B,onChange:oe,data:[{value:"banner",label:"Баннер"},{value:"telegram",label:"Telegram"},{value:"combo",label:"Комбо"}],w:150})]})}),e.jsx(l.ScrollContainer,{minWidth:800,children:e.jsxs(l,{striped:!0,highlightOnHover:!0,children:[e.jsx(l.Thead,{children:e.jsxs(l.Tr,{children:[e.jsx(l.Th,{children:"ID"}),e.jsx(l.Th,{children:"Пользователь"}),e.jsx(l.Th,{children:"Тип"}),e.jsx(l.Th,{children:"Заголовок"}),e.jsx(l.Th,{children:"Даты"}),e.jsx(l.Th,{children:"Цена"}),e.jsx(l.Th,{children:"Статус"}),e.jsx(l.Th,{children:"Статистика"}),e.jsx(l.Th,{})]})}),e.jsx(l.Tbody,{children:ne.map(s=>e.jsxs(l.Tr,{children:[e.jsx(l.Td,{children:s.id}),e.jsxs(l.Td,{children:[e.jsx(r,{size:"sm",children:s.user.login}),e.jsx(r,{size:"xs",c:"dimmed",children:s.user.email})]}),e.jsx(l.Td,{children:e.jsx(k,{color:M[s.type]?.color||"gray",children:M[s.type]?.label||s.type})}),e.jsx(l.Td,{children:e.jsx(r,{size:"sm",lineClamp:1,maw:200,children:s.title})}),e.jsxs(l.Td,{children:[e.jsxs(r,{size:"sm",children:[new Date(s.startDate).toLocaleDateString("ru"),s.daysCount>1&&` - ${new Date(s.endDate).toLocaleDateString("ru")}`]}),e.jsxs(r,{size:"xs",c:"dimmed",children:[s.daysCount," дн."]})]}),e.jsx(l.Td,{children:e.jsxs(r,{size:"sm",fw:500,children:[Number(s.totalPrice).toFixed(0)," ₽"]})}),e.jsx(l.Td,{children:e.jsx(k,{color:$[s.status]?.color||"gray",children:$[s.status]?.label||s.status})}),e.jsx(l.Td,{children:e.jsxs(r,{size:"xs",children:["👁 ",s.impressions," / 🖱 ",s.clicks]})}),e.jsx(l.Td,{children:e.jsxs(j,{position:"bottom-end",children:[e.jsx(j.Target,{children:e.jsx(ze,{variant:"subtle",children:e.jsx(Ee,{size:16})})}),e.jsxs(j.Dropdown,{children:[e.jsx(j.Item,{leftSection:e.jsx(Ne,{size:14}),onClick:()=>{L(s),N(!0)},children:"Просмотр"}),e.jsx(j.Item,{leftSection:e.jsx(Fe,{size:14}),onClick:()=>we(s),children:"Редактировать"}),(s.status==="pending"||s.status==="pending_payment")&&e.jsx(j.Item,{leftSection:e.jsx(Ue,{size:14}),onClick:()=>pe(s),children:"Отметить оплату"}),(s.status==="paid"||s.status==="pending_moderation")&&e.jsxs(e.Fragment,{children:[e.jsx(j.Item,{leftSection:e.jsx(De,{size:14}),color:"green",onClick:()=>V(s),children:"Одобрить"}),e.jsx(j.Item,{leftSection:e.jsx(ke,{size:14}),color:"red",onClick:()=>{L(s),z(!0)},children:"Отклонить"})]}),s.status==="active"&&e.jsx(j.Item,{leftSection:e.jsx(Ae,{size:14}),color:"orange",onClick:()=>ge(s),children:"Деактивировать"}),(s.status==="cancelled"||s.status==="completed"||s.status==="rejected")&&e.jsx(j.Item,{leftSection:e.jsx($e,{size:14}),color:"green",onClick:()=>be(s),children:"Активировать"}),e.jsx(j.Divider,{}),e.jsx(j.Item,{leftSection:e.jsx(Me,{size:14}),color:"red",onClick:()=>fe(s),children:"Удалить"})]})]})})]},s.id))})]})}),G>1&&e.jsx(i,{justify:"center",mt:"md",children:e.jsx(Re,{total:G,value:R,onChange:le})})]})}),e.jsx(S.Panel,{value:"settings",children:e.jsxs(X,{withBorder:!0,children:[e.jsxs(i,{justify:"space-between",mb:"md",children:[e.jsx(W,{order:4,children:"Настройки рекламы партнёров"}),e.jsx(g,{onClick:()=>E(!0),children:"Редактировать"})]}),m&&e.jsxs(a,{children:[e.jsx(a.Col,{span:{base:12,md:6},children:e.jsxs(y,{gap:"xs",children:[e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Система рекламы:"}),e.jsx(k,{color:m.isEnabled?"green":"red",children:m.isEnabled?"Включена":"Выключена"})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Цена баннера (день):"}),e.jsxs(r,{fw:500,children:[Number(m.bannerPricePerDay).toFixed(0)," ₽"]})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Цена Telegram рассылки:"}),e.jsxs(r,{fw:500,children:[Number(m.telegramPrice).toFixed(0)," ₽"]})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Макс. рассылок в день:"}),e.jsx(r,{fw:500,children:m.maxTelegramPerDay})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Макс. баннеров в день:"}),e.jsx(r,{fw:500,children:m.maxBannersPerDay})]})]})}),e.jsx(a.Col,{span:{base:12,md:6},children:e.jsxs(y,{gap:"xs",children:[e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Мин. дней для баннера:"}),e.jsx(r,{fw:500,children:m.minDaysForBanner})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Макс. дней для баннера:"}),e.jsx(r,{fw:500,children:m.maxDaysForBanner})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Макс. размер картинки:"}),e.jsxs(r,{fw:500,children:[m.maxImageSizeKb," KB"]})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Время рассылки:"}),e.jsx(r,{fw:500,children:m.telegramSendTime})]})]})}),e.jsxs(a.Col,{span:6,children:[e.jsx(r,{fw:600,mb:"sm",children:"Баннеры в приложении:"}),e.jsxs(y,{gap:"xs",children:[e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Интервал показа:"}),e.jsx(r,{fw:500,children:m.bannerShowInterval===0?"Сразу":`${m.bannerShowInterval||60} мин`})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Задержка закрытия:"}),e.jsxs(r,{fw:500,children:[m.bannerCloseDelay||5," сек"]})]}),e.jsxs(i,{justify:"space-between",children:[e.jsx(r,{c:"dimmed",children:"Макс. баннеров за показ:"}),e.jsx(r,{fw:500,children:m.maxBannersPerShow||3})]})]})]}),e.jsxs(a.Col,{span:12,children:[e.jsx(r,{c:"dimmed",size:"sm",mb:"xs",children:"Условия размещения:"}),e.jsx(v,{p:"md",withBorder:!0,children:e.jsx(r,{size:"sm",style:{whiteSpace:"pre-wrap"},children:m.termsText||"Не заданы"})})]})]})]})})]}),e.jsx(A,{opened:de,onClose:()=>E(!1),title:"Редактирование настроек",size:"lg",children:e.jsxs(y,{children:[e.jsx(Le,{label:"Система рекламы включена",checked:t.isEnabled,onChange:s=>x({...t,isEnabled:s.currentTarget.checked})}),e.jsxs(a,{children:[e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Цена баннера (день)",value:Number(t.bannerPricePerDay)||0,onChange:s=>x({...t,bannerPricePerDay:Number(s)}),suffix:" ₽",min:0})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Цена Telegram рассылки",value:Number(t.telegramPrice)||0,onChange:s=>x({...t,telegramPrice:Number(s)}),suffix:" ₽",min:0})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Макс. рассылок в день",value:t.maxTelegramPerDay||0,onChange:s=>x({...t,maxTelegramPerDay:Number(s)}),min:1})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Макс. баннеров в день",value:t.maxBannersPerDay||0,onChange:s=>x({...t,maxBannersPerDay:Number(s)}),min:1})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Мин. дней для баннера",value:t.minDaysForBanner||0,onChange:s=>x({...t,minDaysForBanner:Number(s)}),min:1})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Макс. дней для баннера",value:t.maxDaysForBanner||0,onChange:s=>x({...t,maxDaysForBanner:Number(s)}),min:1})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Макс. размер картинки (KB)",value:t.maxImageSizeKb||0,onChange:s=>x({...t,maxImageSizeKb:Number(s)}),min:100})}),e.jsx(a.Col,{span:6,children:e.jsx(C,{label:"Время рассылки (HH:MM)",value:t.telegramSendTime||"",onChange:s=>x({...t,telegramSendTime:s.target.value}),placeholder:"12:00"})})]}),e.jsx(r,{fw:600,size:"lg",mt:"xl",mb:"md",children:"Настройки баннеров в приложении"}),e.jsxs(a,{children:[e.jsx(a.Col,{span:4,children:e.jsx(u,{label:"Интервал показа (минуты)",description:"0 = сразу при открытии приложения",value:t.bannerShowInterval??60,onChange:s=>x({...t,bannerShowInterval:Number(s)??60}),min:0,max:1440})}),e.jsx(a.Col,{span:4,children:e.jsx(u,{label:"Задержка закрытия (сек)",description:"Через сколько появится кнопка закрыть",value:t.bannerCloseDelay||5,onChange:s=>x({...t,bannerCloseDelay:Number(s)||5}),min:0,max:30})}),e.jsx(a.Col,{span:4,children:e.jsx(u,{label:"Макс. баннеров за показ",description:"Сколько баннеров показывать подряд",value:t.maxBannersPerShow||3,onChange:s=>x({...t,maxBannersPerShow:Number(s)||3}),min:1,max:10})})]}),e.jsx(_,{label:"Условия размещения рекламы",description:"Этот текст будет показан пользователям перед созданием объявления",value:t.termsText||"",onChange:s=>x({...t,termsText:s.target.value}),minRows:6,autosize:!0}),e.jsxs(i,{justify:"flex-end",children:[e.jsx(g,{variant:"default",onClick:()=>E(!1),children:"Отмена"}),e.jsx(g,{onClick:je,children:"Сохранить"})]})]})}),e.jsx(A,{opened:me,onClose:()=>N(!1),title:"Просмотр объявления",size:"lg",children:n&&e.jsxs(y,{children:[e.jsxs(i,{children:[e.jsx(k,{color:M[n.type]?.color,children:M[n.type]?.label}),e.jsx(k,{color:$[n.status]?.color,children:$[n.status]?.label})]}),e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Заголовок"}),e.jsx(r,{fw:500,children:n.title})]}),n.text&&e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Текст"}),e.jsx(r,{style:{whiteSpace:"pre-wrap"},children:n.text})]}),n.imageUrl&&e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",mb:"xs",children:"Изображение"}),e.jsx(q,{src:n.imageUrl,alt:n.title,maw:400,radius:"md"})]}),e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Ссылка"}),Pe(n.linkUrl)?e.jsxs(Ie,{href:n.linkUrl,target:"_blank",rel:"noopener noreferrer",children:[n.linkUrl," ",e.jsx(Oe,{size:14})]}):e.jsxs(r,{style:{wordBreak:"break-all"},children:[n.linkUrl," ",e.jsx(r,{span:!0,c:"red",size:"xs",children:"(недопустимая схема, ссылка не активна)"})]})]}),n.buttonText&&e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Текст кнопки"}),e.jsx(r,{children:n.buttonText})]}),e.jsxs(a,{children:[e.jsxs(a.Col,{span:6,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Период размещения"}),e.jsxs(r,{children:[new Date(n.startDate).toLocaleDateString("ru")," - ",new Date(n.endDate).toLocaleDateString("ru")]}),e.jsxs(r,{size:"sm",c:"dimmed",children:[n.daysCount," дн."]})]}),e.jsxs(a.Col,{span:6,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Стоимость"}),e.jsxs(r,{fw:500,children:[Number(n.totalPrice).toFixed(0)," ₽"]}),n.type==="combo"&&e.jsxs(r,{size:"xs",c:"dimmed",children:["Баннер: ",Number(n.bannerPrice).toFixed(0)," ₽ + Telegram: ",Number(n.telegramPrice).toFixed(0)," ₽"]})]})]}),e.jsxs(a,{children:[e.jsxs(a.Col,{span:6,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Показы"}),e.jsx(r,{fw:500,children:n.impressions})]}),e.jsxs(a.Col,{span:6,children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Клики"}),e.jsx(r,{fw:500,children:n.clicks})]})]}),e.jsxs("div",{children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Рекламодатель"}),e.jsxs(r,{children:[n.user.login," (",n.user.email,")"]})]}),n.rejectReason&&e.jsxs(v,{p:"md",withBorder:!0,bg:"red.1",children:[e.jsx(r,{size:"sm",c:"dimmed",children:"Причина отклонения"}),e.jsx(r,{c:"red",children:n.rejectReason})]}),(n.status==="paid"||n.status==="pending_moderation")&&e.jsxs(i,{justify:"flex-end",children:[e.jsx(g,{color:"red",variant:"outline",onClick:()=>{N(!1),z(!0)},children:"Отклонить"}),e.jsx(g,{color:"green",onClick:()=>{V(n),N(!1)},children:"Одобрить"})]})]})}),e.jsx(A,{opened:he,onClose:()=>z(!1),title:"Отклонение объявления",children:e.jsxs(y,{children:[e.jsxs(r,{children:['Укажите причину отклонения объявления "',n?.title,'"']}),e.jsx(_,{value:U,onChange:s=>H(s.target.value),placeholder:"Причина отклонения...",minRows:3}),e.jsxs(i,{justify:"flex-end",children:[e.jsx(g,{variant:"default",onClick:()=>z(!1),children:"Отмена"}),e.jsx(g,{color:"red",onClick:ue,disabled:!U,children:"Отклонить"})]})]})}),e.jsx(A,{opened:xe,onClose:()=>F(!1),title:"Редактирование объявления",size:"lg",children:n&&e.jsxs(y,{children:[e.jsx(C,{label:"Заголовок",value:c.title,onChange:s=>p({...c,title:s.target.value})}),e.jsx(_,{label:"Текст объявления",value:c.text,onChange:s=>p({...c,text:s.target.value}),minRows:3}),e.jsx(C,{label:"Ссылка",value:c.linkUrl,onChange:s=>p({...c,linkUrl:s.target.value})}),e.jsx(C,{label:"Текст кнопки",value:c.buttonText,onChange:s=>p({...c,buttonText:s.target.value})}),e.jsx(C,{label:"URL изображения",value:c.imageUrl,onChange:s=>p({...c,imageUrl:s.target.value})}),c.imageUrl&&e.jsx(q,{src:c.imageUrl,alt:"Preview",maw:300,radius:"md"}),e.jsxs(a,{children:[e.jsx(a.Col,{span:6,children:e.jsx(C,{label:"Дата начала",type:"date",value:c.startDate,onChange:s=>p({...c,startDate:s.target.value})})}
1),e.jsx(a.Col,{span:6,children:e.jsx(C,{label:"Дата окончания",type:"date",value:c.endDate,onChange:s=>p({...c,endDate:s.target.value})})})]}),(n.type==="banner"||n.type==="combo")&&e.jsxs(e.Fragment,{children:[e.jsx(r,{fw:500,mt:"md",children:"Статистика баннера"}),e.jsxs(a,{children:[e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Просмотры (impressions)",value:c.impressions,onChange:s=>p({...c,impressions:Number(s)||0}),min:0})}),e.jsx(a.Col,{span:6,children:e.jsx(u,{label:"Переходы (clicks)",value:c.clicks,onChange:s=>p({...c,clicks:Number(s)||0}),min:0})})]})]}),e.jsxs(i,{justify:"flex-end",mt:"md",children:[e.jsx(g,{variant:"default",onClick:()=>F(!1),children:"Отмена"}),e.jsx(g,{onClick:ye,children:"Сохранить"})]})]})})]})}export{as as default};

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.