added new stuff

This commit is contained in:
FIRST_NAME LAST_NAME 2026-02-25 20:39:07 +03:00
parent 7105062073
commit 46005c648b
8 changed files with 2284 additions and 1521 deletions

716
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -22,7 +22,7 @@ function defaultDataResponseProcessor(data) {
export const API_PATH_MAIN = "https://hostapay.trade/api/v1/";
export const API_PATH_TEST = "https://test.0x000f.ru/api/v1/";
export const API_PATH_VALUE = API_PATH_MAIN;
export const API_PATH_VALUE = API_PATH_TEST;
async function makePost(
url,
@ -30,7 +30,7 @@ async function makePost(
options = undefined,
responseProcessor = defaultResponseProcessor,
dataResponseProcessor = defaultDataResponseProcessor,
errorProcessor = defaultErrorProcessor
errorProcessor = defaultErrorProcessor,
) {
try {
const res = await axios.post(API_PATH_VALUE + url, data, options);
@ -45,7 +45,7 @@ async function makeGet(
options = undefined,
responseProcessor = defaultResponseProcessor,
dataResponseProcessor = defaultDataResponseProcessor,
errorProcessor = defaultErrorProcessor
errorProcessor = defaultErrorProcessor,
) {
try {
const res = await axios.get(API_PATH_VALUE + url, options);

View File

@ -1,273 +1,291 @@
<script>
// @ts-nocheck
// @ts-nocheck
import { getAuthInfo, saveAuthInfo } from "$lib/auth/Auth";
import { AuthStorage } from "$lib/tools/storages/auth-storage";
import { redirect } from "$lib/tools/url/URLTools";
import { jwtDecode } from "jwt-decode";
import { ChevronRightIcon, LogOutIcon, XIcon } from "svelte-feather-icons";
import { getAuthInfo, saveAuthInfo } from "$lib/auth/Auth";
import { AuthStorage } from "$lib/tools/storages/auth-storage";
import { redirect } from "$lib/tools/url/URLTools";
import { jwtDecode } from "jwt-decode";
import { ChevronRightIcon, LogOutIcon, XIcon } from "svelte-feather-icons";
let showMenu = false;
let showMenu = false;
</script>
<div class="navbar bg-base-100">
<div class="navbar-start">
<div class="dropdown">
<button
on:click={() => {
showMenu = !showMenu;
}}
tabindex="0"
class="btn btn-ghost w-[54px] max-w-[54px] p-1"
>
{#if !showMenu}
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h8m-8 6h16"
/>
</svg>
{:else}
<XIcon />
{/if}
</button>
<div class="navbar-start">
<div class="dropdown">
<button
on:click={() => {
showMenu = !showMenu;
}}
tabindex="0"
class="btn btn-ghost w-[54px] max-w-[54px] p-1"
>
{#if !showMenu}
<svg
xmlns="http://www.w3.org/2000/svg"
class="h-5 w-5"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h8m-8 6h16"
/>
</svg>
{:else}
<XIcon />
{/if}
</button>
</div>
<a href="/admin/" class="btn btn-ghost text-xl">HostaPay</a>
<p class="text-sm ml-1 mt-2">
{jwtDecode(getAuthInfo()?.a)?.role == "4" ? "Admin" : "Moder"}
</p>
</div>
<div class="navbar-center hidden font-semibold">
<ul class="menu menu-horizontal px-1">
<li>
<a href="/admin/userslist">Пользователи</a>
</li>
<li>
<a href="/admin/newuser">Добавить пользователя</a>
</li>
<li><a href="/admin/disputes">Споры</a></li>
<li><a href="/admin/payouts">Выплаты</a></li>
<li><a href="/admin/orders">Депозиты</a></li>
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
<li><a href="/admin/merchants">Мерчанты</a></li>
<li><a href="/admin/currencies">Валюты</a></li>
<li><a href="/admin/sms">СМС</a></li>
<li><a href="/admin/withdrawals">Вывод средств</a></li>
<li>
<a href="/admin/change-balance/0">Управление балансом</a>
</li>
<li><a href="/admin/refs">Рефералы</a></li>
<li><a href="/admin/finance">Финансовые события</a></li>
{/if}
</ul>
</div>
<div class="navbar-end">
<button
on:click={() => {
saveAuthInfo("");
AuthStorage.update((s) => {
s.logged = false;
});
redirect("/admin/login");
}}
class="btn btn-error btn-outline rounded-[10px]"
>
Выход
<LogOutIcon size={"18"} />
</button>
</div>
<a href="/admin/" class="btn btn-ghost text-xl">HostaPay</a>
<p class="text-sm ml-1 mt-2">
{jwtDecode(getAuthInfo()?.a)?.role == "4" ? "Admin" : "Moder"}
</p>
</div>
<div class="navbar-center hidden font-semibold">
<ul class="menu menu-horizontal px-1">
<li>
<a href="/admin/userslist">Пользователи</a>
</li>
<li>
<a href="/admin/newuser">Добавить пользователя</a>
</li>
<li><a href="/admin/disputes">Споры</a></li>
<li><a href="/admin/payouts">Выплаты</a></li>
<li><a href="/admin/orders">Депозиты</a></li>
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
<li><a href="/admin/merchants">Мерчанты</a></li>
<li><a href="/admin/currencies">Валюты</a></li>
<li><a href="/admin/sms">СМС</a></li>
<li><a href="/admin/withdrawals">Вывод средств</a></li>
<li><a href="/admin/change-balance/0">Управление балансом</a></li>
<li><a href="/admin/refs">Рефералы</a></li>
{/if}
</ul>
</div>
<div class="navbar-end">
<button
on:click={() => {
saveAuthInfo("");
AuthStorage.update((s) => {
s.logged = false;
});
redirect("/admin/login");
}}
class="btn btn-error btn-outline rounded-[10px]"
>
Выход
<LogOutIcon size={"18"} />
</button>
</div>
</div>
<div
class={"fixed inset-0 top-16 z-50 px-5 flex flex-col items-center justify-center bg-base-100 transition-all duration-150 " +
(showMenu ? "" : "-translate-x-full")}
class={"fixed inset-0 top-16 z-50 px-5 flex flex-col items-center justify-center bg-base-100 transition-all duration-150 " +
(showMenu ? "" : "-translate-x-full")}
>
<ul
class="menu menu-sm dropdown-content bg-base-300 rounded-box py-5 p-2 shadow w-full font-semibold"
>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/userslist">Пользователи</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/newuser">Добавить пользователя</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/disputes">Споры</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/payouts">Выплаты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/orders">Депозиты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/merchants">Мерчанты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/currencies">Валюты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/sms">СМС</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/withdrawals">Вывод средств</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/change-balance/0">Управление балансом</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/refs">Рефералы</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/req">Реквизиты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
{/if}
</ul>
<ul
class="menu menu-sm dropdown-content bg-base-300 rounded-box py-5 p-2 shadow w-full font-semibold"
>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/userslist">Пользователи</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/newuser">Добавить пользователя</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/disputes">Споры</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/payouts">Выплаты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/orders">Депозиты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/merchants">Мерчанты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/currencies">Валюты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/sms">СМС</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/withdrawals">Вывод средств</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/change-balance/0">Управление балансом</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/refs">Рефералы</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/req">Реквизиты</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
<div
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
></div>
<li class="relative">
<a
class="text-lg"
on:click={() => {
showMenu = false;
}}
href="/admin/finance">Финансовые события</a
>
<div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon />
</div>
</li>
{/if}
</ul>
</div>

View File

@ -1,29 +1,29 @@
<script>
export let totalPages;
export let pageChangedCallback;
export let disableButtons;
export let css;
export let currentPage = 1;
export let totalPages;
export let pageChangedCallback;
export let disableButtons;
export let css;
export let currentPage = 1;
</script>
<div class="join">
<button
on:click={() => {
if (currentPage === 1) return;
currentPage -= 1;
pageChangedCallback(currentPage);
}}
disabled={disableButtons}
class={"join-item btn " + css}</button
>
<button class={"join-item btn " + css}>Страница {currentPage}</button>
<button
on:click={() => {
if (currentPage === totalPages) return;
currentPage += 1;
pageChangedCallback(currentPage);
}}
disabled={disableButtons}
class={"join-item btn " + css}</button
>
<button
on:click={() => {
if (currentPage <= 1) return;
currentPage -= 1;
pageChangedCallback(currentPage);
}}
disabled={disableButtons}
class={"join-item btn " + css}</button
>
<button class={"join-item btn " + css}>Страница {currentPage}</button>
<button
on:click={() => {
if (currentPage >= totalPages) return;
currentPage += 1;
pageChangedCallback(currentPage);
}}
disabled={disableButtons}
class={"join-item btn " + css}</button
>
</div>

View File

@ -1,4 +1,4 @@
export const prerender = true;
export const ssr = false;
console.log = () => {};
// console.log = () => {};

File diff suppressed because it is too large Load Diff

View File

@ -1,92 +1,307 @@
<script>
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
import { makePost } from "$lib/tools/requests/requests";
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster";
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
import { makePost } from "$lib/tools/requests/requests";
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster";
import Pagination from "$lib/ui-components/pagination.svelte";
import { onMount } from "svelte";
let referrerValue = "";
let referralValue = "";
let bidValue = "";
let bidPlatformValue = "";
let referrerValue = "";
let referralValue = "";
let bidValue = "";
let bidPlatformValue = "";
let inProcess = false;
async function addReferral() {
if (inProcess) return;
if (
referralValue.length < 5 ||
referrerValue.length < 5 ||
bidValue.length < 1 ||
bidPlatformValue.length < 1
)
return;
let inProcess = false;
async function addReferral() {
if (inProcess) return;
if (
referralValue.length < 5 ||
referrerValue.length < 5 ||
bidValue.length < 1 ||
bidPlatformValue.length < 1
)
return;
inProcess = true;
const res = await makePost(
"admin/users/referral/create",
{
referrer: referrerValue,
referral: referralValue,
bid: bidValue,
bid_platform: bidPlatformValue,
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
inProcess = true;
const res = await makePost(
"admin/users/referral/create",
{
referrer: referrerValue,
referral: referralValue,
bid: bidValue,
bid_platform: bidPlatformValue,
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a),
);
if (res.error) {
sayError("Не удалось добавить реферала");
} else {
sayInfo("Реферал успешно добавлен");
if (res.error) {
sayError("Не удалось добавить реферала");
} else {
sayInfo("Реферал успешно добавлен");
}
inProcess = false;
}
inProcess = false;
}
let loadRefReferralValue = "";
let loadRefReferrerValue = "";
let loadReferralInProgress = false;
let foundReferrals = [];
let totalPages = 1;
let currentPage = 1;
async function loadReferral() {
if (loadReferralInProgress) return;
const referrer = loadRefReferrerValue.trim();
const referral = loadRefReferrerValue.trim();
loadReferralInProgress = true;
const res = await makePost(
"admin/users/referral/load",
{
referrer: referrer === "" ? undefined : referrer,
referral: referral === "" ? undefined : referral,
page: currentPage,
},
makeAuthHeaderForAxios(getAuthInfo()?.a),
);
if (res.error) {
sayError("Не удалось получить информацию");
} else {
foundReferrals = res.data.data;
totalPages = res.data.pages;
}
loadReferralInProgress = false;
}
let selectedReferral = {};
let showChangeRef = false;
let newRefBid = "";
let newRefPlatformBid = "";
let updateInProgress = false;
async function updateReferral(referral_code, bid, bid_platform) {
if (updateInProgress) return;
updateInProgress = true;
const res = await makePost(
"admin/users/referral/update",
{
referral_code,
bid: Number(bid),
bid_platform: Number(bid_platform),
},
makeAuthHeaderForAxios(getAuthInfo()?.a),
);
if (res.error) {
sayError("Не удалось обновить информацию");
} else {
loadReferral();
showChangeRef = false;
}
updateInProgress = false;
}
onMount(() => {
loadReferral();
});
</script>
<div class="w-full flex flex-col gap-8">
<div class="flex gap-4">
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
<h1 class="text-2xl font-semibold">Добавление реферала</h1>
</div>
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
<label class={"input input-bordered flex items-center gap-2 "}>
Реферер UUID
<input
bind:value={referrerValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Реферал UUID
<input
bind:value={referralValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Ставка
<input bind:value={bidValue} type="text" class="grow text-lg text-info" />
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Ставка платформы
<input
bind:value={bidPlatformValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<button
on:click={() => {
addReferral();
}}
class="btn btn-outline btn-info mt-4"
>
{#if inProcess}
<span class="loading loading-md"></span>
{:else}
Добавить
{/if}
</button>
</div>
<div class="flex gap-4">
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
<h1 class="text-2xl font-semibold">Добавление реферала</h1>
</div>
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
<label class={"input input-bordered flex items-center gap-2 "}>
Реферер UUID:
<input
bind:value={referrerValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Реферал UUID:
<input
bind:value={referralValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Ставка:
<input
bind:value={bidValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Ставка платформы:
<input
bind:value={bidPlatformValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<button
on:click={() => {
addReferral();
}}
class="btn btn-outline btn-info mt-4"
>
{#if inProcess}
<span class="loading loading-md"></span>
{:else}
Добавить
{/if}
</button>
</div>
<div class="flex gap-4">
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
<h1 class="text-2xl font-semibold">Информация по рефералам</h1>
</div>
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
<label class={"input input-bordered flex items-center gap-2 "}>
Реферер UUID:
<input
bind:value={loadRefReferralValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Реферал UUID:
<input
bind:value={loadRefReferrerValue}
type="text"
class="grow text-lg text-info"
/>
</label>
<button
on:click={() => {
currentPage = 1;
totalPages = 1;
loadReferral();
}}
class="btn btn-outline btn-info mt-4"
>
{#if inProcess}
<span class="loading loading-md"></span>
{:else}
Найти
{/if}
</button>
{#if loadReferralInProgress}
<span class="loading loading-md self-center mt-4"></span>
{:else}
<div class="w-full flex flex-col justify-center items-center mt-4">
<Pagination
{totalPages}
pageChangedCallback={(n) => {
currentPage = n;
loadReferral();
}}
disableButtons={loadReferralInProgress}
css={"btn-neutral"}
/>
<p class="opacity-50 text-xs mt-1">
Всего страниц: {totalPages}
</p>
</div>
<div class="overflow-x-auto mt-4">
<table class="table">
<!-- head -->
<thead>
<tr>
<th>Имя реферала</th>
<th>Имя реферера</th>
<th>Ставка</th>
<th>Ставка платформы</th>
<th>Опции</th>
</tr>
</thead>
<tbody>
{#each foundReferrals as ref}
<tr class="hover:bg-neutral group">
<td class="">{ref["referral_name"]}</td>
<td>{ref["referrer_name"]}</td>
<td>{ref["bid"]}%</td>
<td>{ref["bid_platform"]}%</td>
<td>
<button
class="btn btn-info btn-xs"
on:click={() => {
selectedReferral = ref;
newRefBid = ref["bid"];
newRefPlatformBid =
ref["bid_platform"];
showChangeRef = true;
}}
>
Изменить
</button>
</td>
</tr>
{/each}
</tbody>
</table>
</div>
{/if}
</div>
</div>
{#if showChangeRef}
<div
class="fixed inset-0 z-[1001] bg-black bg-opacity-50 flex justify-center items-center"
>
<div class="flex flex-col p-4 bg-base-100 rounded-md gap-1">
<p class="font-bold text-lg">
Изменение реферала {selectedReferral.referral_name}
</p>
<label class={"input input-bordered flex items-center gap-2 mt-4"}>
Ставка:
<input
bind:value={newRefBid}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
Ставка платформы:
<input
bind:value={newRefPlatformBid}
type="text"
class="grow text-lg text-info"
/>
</label>
<button
class="btn btn-outline btn-success mt-2"
on:click={() => {
updateReferral(
selectedReferral.referral_code,
newRefBid,
newRefPlatformBid,
);
}}
>
Сохранить
</button>
<button
class="btn btn-outline"
on:click={() => {
showChangeRef = false;
selectedReferral = {};
}}
>
Закрыть
</button>
</div>
</div>
{/if}

File diff suppressed because it is too large Load Diff