added new stuff
This commit is contained in:
parent
7105062073
commit
46005c648b
716
package-lock.json
generated
716
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@ function defaultDataResponseProcessor(data) {
|
|||||||
export const API_PATH_MAIN = "https://hostapay.trade/api/v1/";
|
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_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(
|
async function makePost(
|
||||||
url,
|
url,
|
||||||
@ -30,7 +30,7 @@ async function makePost(
|
|||||||
options = undefined,
|
options = undefined,
|
||||||
responseProcessor = defaultResponseProcessor,
|
responseProcessor = defaultResponseProcessor,
|
||||||
dataResponseProcessor = defaultDataResponseProcessor,
|
dataResponseProcessor = defaultDataResponseProcessor,
|
||||||
errorProcessor = defaultErrorProcessor
|
errorProcessor = defaultErrorProcessor,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const res = await axios.post(API_PATH_VALUE + url, data, options);
|
const res = await axios.post(API_PATH_VALUE + url, data, options);
|
||||||
@ -45,7 +45,7 @@ async function makeGet(
|
|||||||
options = undefined,
|
options = undefined,
|
||||||
responseProcessor = defaultResponseProcessor,
|
responseProcessor = defaultResponseProcessor,
|
||||||
dataResponseProcessor = defaultDataResponseProcessor,
|
dataResponseProcessor = defaultDataResponseProcessor,
|
||||||
errorProcessor = defaultErrorProcessor
|
errorProcessor = defaultErrorProcessor,
|
||||||
) {
|
) {
|
||||||
try {
|
try {
|
||||||
const res = await axios.get(API_PATH_VALUE + url, options);
|
const res = await axios.get(API_PATH_VALUE + url, options);
|
||||||
|
|||||||
@ -1,273 +1,291 @@
|
|||||||
<script>
|
<script>
|
||||||
// @ts-nocheck
|
// @ts-nocheck
|
||||||
|
|
||||||
import { getAuthInfo, saveAuthInfo } from "$lib/auth/Auth";
|
import { getAuthInfo, saveAuthInfo } from "$lib/auth/Auth";
|
||||||
import { AuthStorage } from "$lib/tools/storages/auth-storage";
|
import { AuthStorage } from "$lib/tools/storages/auth-storage";
|
||||||
import { redirect } from "$lib/tools/url/URLTools";
|
import { redirect } from "$lib/tools/url/URLTools";
|
||||||
import { jwtDecode } from "jwt-decode";
|
import { jwtDecode } from "jwt-decode";
|
||||||
import { ChevronRightIcon, LogOutIcon, XIcon } from "svelte-feather-icons";
|
import { ChevronRightIcon, LogOutIcon, XIcon } from "svelte-feather-icons";
|
||||||
|
|
||||||
let showMenu = false;
|
let showMenu = false;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="navbar bg-base-100">
|
<div class="navbar bg-base-100">
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = !showMenu;
|
showMenu = !showMenu;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="btn btn-ghost w-[54px] max-w-[54px] p-1"
|
class="btn btn-ghost w-[54px] max-w-[54px] p-1"
|
||||||
>
|
>
|
||||||
{#if !showMenu}
|
{#if !showMenu}
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
class="h-5 w-5"
|
class="h-5 w-5"
|
||||||
fill="none"
|
fill="none"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
>
|
>
|
||||||
<path
|
<path
|
||||||
stroke-linecap="round"
|
stroke-linecap="round"
|
||||||
stroke-linejoin="round"
|
stroke-linejoin="round"
|
||||||
stroke-width="2"
|
stroke-width="2"
|
||||||
d="M4 6h16M4 12h8m-8 6h16"
|
d="M4 6h16M4 12h8m-8 6h16"
|
||||||
/>
|
/>
|
||||||
</svg>
|
</svg>
|
||||||
{:else}
|
{:else}
|
||||||
<XIcon />
|
<XIcon />
|
||||||
{/if}
|
{/if}
|
||||||
</button>
|
</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>
|
</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>
|
||||||
|
|
||||||
<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 " +
|
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")}
|
(showMenu ? "" : "-translate-x-full")}
|
||||||
>
|
>
|
||||||
<ul
|
<ul
|
||||||
class="menu menu-sm dropdown-content bg-base-300 rounded-box py-5 p-2 shadow w-full font-semibold"
|
class="menu menu-sm dropdown-content bg-base-300 rounded-box py-5 p-2 shadow w-full font-semibold"
|
||||||
>
|
>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/userslist">Пользователи</a
|
href="/admin/userslist">Пользователи</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/newuser">Добавить пользователя</a
|
href="/admin/newuser">Добавить пользователя</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/disputes">Споры</a
|
href="/admin/disputes">Споры</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/payouts">Выплаты</a
|
href="/admin/payouts">Выплаты</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/orders">Депозиты</a
|
href="/admin/orders">Депозиты</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
|
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/merchants">Мерчанты</a
|
href="/admin/merchants">Мерчанты</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/currencies">Валюты</a
|
href="/admin/currencies">Валюты</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/sms">СМС</a
|
href="/admin/sms">СМС</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/withdrawals">Вывод средств</a
|
href="/admin/withdrawals">Вывод средств</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/change-balance/0">Управление балансом</a
|
href="/admin/change-balance/0">Управление балансом</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/refs">Рефералы</a
|
href="/admin/refs">Рефералы</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<div
|
<div
|
||||||
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
class="h-[1px] w-full bg-neutral flex-shrink-0 opacity-50 my-[5px]"
|
||||||
></div>
|
></div>
|
||||||
<li class="relative">
|
<li class="relative">
|
||||||
<a
|
<a
|
||||||
class="text-lg"
|
class="text-lg"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showMenu = false;
|
showMenu = false;
|
||||||
}}
|
}}
|
||||||
href="/admin/req">Реквизиты</a
|
href="/admin/req">Реквизиты</a
|
||||||
>
|
>
|
||||||
<div class="absolute right-0 top-[2px] pointer-events-none">
|
<div class="absolute right-0 top-[2px] pointer-events-none">
|
||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
{/if}
|
<div
|
||||||
</ul>
|
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>
|
</div>
|
||||||
|
|||||||
@ -1,29 +1,29 @@
|
|||||||
<script>
|
<script>
|
||||||
export let totalPages;
|
export let totalPages;
|
||||||
export let pageChangedCallback;
|
export let pageChangedCallback;
|
||||||
export let disableButtons;
|
export let disableButtons;
|
||||||
export let css;
|
export let css;
|
||||||
export let currentPage = 1;
|
export let currentPage = 1;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="join">
|
<div class="join">
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
if (currentPage === 1) return;
|
if (currentPage <= 1) return;
|
||||||
currentPage -= 1;
|
currentPage -= 1;
|
||||||
pageChangedCallback(currentPage);
|
pageChangedCallback(currentPage);
|
||||||
}}
|
}}
|
||||||
disabled={disableButtons}
|
disabled={disableButtons}
|
||||||
class={"join-item btn " + css}>«</button
|
class={"join-item btn " + css}>«</button
|
||||||
>
|
>
|
||||||
<button class={"join-item btn " + css}>Страница №{currentPage}</button>
|
<button class={"join-item btn " + css}>Страница №{currentPage}</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
if (currentPage === totalPages) return;
|
if (currentPage >= totalPages) return;
|
||||||
currentPage += 1;
|
currentPage += 1;
|
||||||
pageChangedCallback(currentPage);
|
pageChangedCallback(currentPage);
|
||||||
}}
|
}}
|
||||||
disabled={disableButtons}
|
disabled={disableButtons}
|
||||||
class={"join-item btn " + css}>»</button
|
class={"join-item btn " + css}>»</button
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
export const prerender = true;
|
export const prerender = true;
|
||||||
export const ssr = false;
|
export const ssr = false;
|
||||||
|
|
||||||
console.log = () => {};
|
// console.log = () => {};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,92 +1,307 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
|
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
|
||||||
import { makePost } from "$lib/tools/requests/requests";
|
import { makePost } from "$lib/tools/requests/requests";
|
||||||
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster";
|
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster";
|
||||||
|
import Pagination from "$lib/ui-components/pagination.svelte";
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
|
||||||
let referrerValue = "";
|
let referrerValue = "";
|
||||||
let referralValue = "";
|
let referralValue = "";
|
||||||
let bidValue = "";
|
let bidValue = "";
|
||||||
let bidPlatformValue = "";
|
let bidPlatformValue = "";
|
||||||
|
|
||||||
let inProcess = false;
|
let inProcess = false;
|
||||||
async function addReferral() {
|
async function addReferral() {
|
||||||
if (inProcess) return;
|
if (inProcess) return;
|
||||||
if (
|
if (
|
||||||
referralValue.length < 5 ||
|
referralValue.length < 5 ||
|
||||||
referrerValue.length < 5 ||
|
referrerValue.length < 5 ||
|
||||||
bidValue.length < 1 ||
|
bidValue.length < 1 ||
|
||||||
bidPlatformValue.length < 1
|
bidPlatformValue.length < 1
|
||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
inProcess = true;
|
inProcess = true;
|
||||||
const res = await makePost(
|
const res = await makePost(
|
||||||
"admin/users/referral/create",
|
"admin/users/referral/create",
|
||||||
{
|
{
|
||||||
referrer: referrerValue,
|
referrer: referrerValue,
|
||||||
referral: referralValue,
|
referral: referralValue,
|
||||||
bid: bidValue,
|
bid: bidValue,
|
||||||
bid_platform: bidPlatformValue,
|
bid_platform: bidPlatformValue,
|
||||||
},
|
},
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
makeAuthHeaderForAxios(getAuthInfo()?.a),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (res.error) {
|
if (res.error) {
|
||||||
sayError("Не удалось добавить реферала");
|
sayError("Не удалось добавить реферала");
|
||||||
} else {
|
} else {
|
||||||
sayInfo("Реферал успешно добавлен");
|
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>
|
</script>
|
||||||
|
|
||||||
<div class="w-full flex flex-col gap-8">
|
<div class="w-full flex flex-col gap-8">
|
||||||
<div class="flex gap-4">
|
<div class="flex gap-4">
|
||||||
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
|
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
|
||||||
<h1 class="text-2xl font-semibold">Добавление реферала</h1>
|
<h1 class="text-2xl font-semibold">Добавление реферала</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
|
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
|
||||||
<label class={"input input-bordered flex items-center gap-2 "}>
|
<label class={"input input-bordered flex items-center gap-2 "}>
|
||||||
Реферер UUID
|
Реферер UUID:
|
||||||
<input
|
<input
|
||||||
bind:value={referrerValue}
|
bind:value={referrerValue}
|
||||||
type="text"
|
type="text"
|
||||||
class="grow text-lg text-info"
|
class="grow text-lg text-info"
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
||||||
Реферал UUID
|
Реферал UUID:
|
||||||
<input
|
<input
|
||||||
bind:value={referralValue}
|
bind:value={referralValue}
|
||||||
type="text"
|
type="text"
|
||||||
class="grow text-lg text-info"
|
class="grow text-lg text-info"
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
||||||
Ставка
|
Ставка:
|
||||||
<input bind:value={bidValue} type="text" class="grow text-lg text-info" />
|
<input
|
||||||
</label>
|
bind:value={bidValue}
|
||||||
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
type="text"
|
||||||
Ставка платформы
|
class="grow text-lg text-info"
|
||||||
<input
|
/>
|
||||||
bind:value={bidPlatformValue}
|
</label>
|
||||||
type="text"
|
<label class={"input input-bordered flex items-center gap-2 mt-2"}>
|
||||||
class="grow text-lg text-info"
|
Ставка платформы:
|
||||||
/>
|
<input
|
||||||
</label>
|
bind:value={bidPlatformValue}
|
||||||
<button
|
type="text"
|
||||||
on:click={() => {
|
class="grow text-lg text-info"
|
||||||
addReferral();
|
/>
|
||||||
}}
|
</label>
|
||||||
class="btn btn-outline btn-info mt-4"
|
<button
|
||||||
>
|
on:click={() => {
|
||||||
{#if inProcess}
|
addReferral();
|
||||||
<span class="loading loading-md"></span>
|
}}
|
||||||
{:else}
|
class="btn btn-outline btn-info mt-4"
|
||||||
Добавить
|
>
|
||||||
{/if}
|
{#if inProcess}
|
||||||
</button>
|
<span class="loading loading-md"></span>
|
||||||
</div>
|
{: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>
|
</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
Loading…
x
Reference in New Issue
Block a user