diff --git a/hosta-admin-10.zip b/hosta-admin-10.zip new file mode 100644 index 0000000..e9a8864 Binary files /dev/null and b/hosta-admin-10.zip differ diff --git a/src/routes/admin/+layout.js b/src/routes/admin/+layout.js new file mode 100644 index 0000000..d2c0be2 --- /dev/null +++ b/src/routes/admin/+layout.js @@ -0,0 +1,2 @@ +export const prerender = true; +export const ssr = false; \ No newline at end of file diff --git a/src/routes/admin/+layout.svelte b/src/routes/admin/+layout.svelte new file mode 100644 index 0000000..928c894 --- /dev/null +++ b/src/routes/admin/+layout.svelte @@ -0,0 +1,67 @@ + + +{#if loggedIn} +
+ +
+{/if} + +
+
+ +
+
+ + + diff --git a/src/routes/admin/+page.svelte b/src/routes/admin/+page.svelte new file mode 100644 index 0000000..ced3ef6 --- /dev/null +++ b/src/routes/admin/+page.svelte @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/src/routes/admin/disputes/+page.svelte b/src/routes/admin/disputes/+page.svelte new file mode 100644 index 0000000..36e0909 --- /dev/null +++ b/src/routes/admin/disputes/+page.svelte @@ -0,0 +1,342 @@ + + +
+
+
+

Споры

+
+
+
+ +
+
+ { + currentPageDisputes = n; + getDisputes(); + }} + disableButtons={disablePagesDisputes} + css={"btn-neutral"} + /> +

+ Всего страниц: {numOfPagesDisputes} +

+
+
+ {#if !disablePagesDisputes} + + + + + + + + + + + + + + + + + + {#each disputes as dispute} + + + + + + + + + + + + {/each} + +
IDСтатусСБПКартаТелефонКурсСуммаВремя созданияОпции
{dispute["order_id"]}{disputesStatusMap[dispute["order_status"]]}{dispute["is_sbp"] === "t" ? "да" : "нет"}{dispute["requisite_cardnumber"]}{dispute["requisite_phone"]}{dispute["order_rate"]}{dispute["amount"]}{dispute["order_creationtime"]} { + selectedDispute = dispute; + showFullInfo = true; + }} + class="flex gap-2" + > + +
+ {:else} + + {/if} +
+
+
+ +{#if showFullInfo} +
+
+

ID: {selectedDispute.dispute_uuid}

+

+ {disputesStatusMap[selectedDispute["order_status"]]} +

+

{selectedDispute.order_creationtime}

+
+

{selectedDispute.name}

+

Карта: {selectedDispute.requisite_cardnumber}

+

Телефон: {selectedDispute.requisite_phone}

+
+
+

Курс

+

{selectedDispute.order_rate} {selectedDispute.out_code}

+
+
+

Сумма в споре

+

+ {(Number(selectedDispute.new_amount) / Number(selectedDispute.order_rate)).toFixed(2)} {selectedDispute.out_code} ({Number(selectedDispute.new_amount)} USDT) +

+
+
+

Сумма в заявке

+

+ {Number(selectedDispute.order_rate) * Number(selectedDispute.amount)} {selectedDispute.out_code} ({Number(selectedDispute.amount)} USDT) +

+
+ {#if selectedDispute["order_status"] === "4" || selectedDispute["order_status"] === "8"} + + + {/if} + {#if selectedDispute["order_status"] !== "4"} + + {/if} + +
+
+{/if} diff --git a/src/routes/admin/login/+page.svelte b/src/routes/admin/login/+page.svelte new file mode 100644 index 0000000..4a48bd8 --- /dev/null +++ b/src/routes/admin/login/+page.svelte @@ -0,0 +1,118 @@ + + +
+
+

Вход

+ + + + +
+
diff --git a/src/routes/admin/newuser/+page.svelte b/src/routes/admin/newuser/+page.svelte new file mode 100644 index 0000000..d4408a5 --- /dev/null +++ b/src/routes/admin/newuser/+page.svelte @@ -0,0 +1,214 @@ + + +
+
+
+

Создание нового пользователя

+
+
+ + + + + + +
+

Торговля:

+ +
+ + {#if userToken !== ""} +
+

+ Токен пользователя: {userToken} +

+
+ {/if} +
+
diff --git a/src/routes/admin/user/change/[userToken]/+page.js b/src/routes/admin/user/change/[userToken]/+page.js new file mode 100644 index 0000000..361dcdc --- /dev/null +++ b/src/routes/admin/user/change/[userToken]/+page.js @@ -0,0 +1,35 @@ +import { browser } from "$app/environment"; +import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth"; +import { makePost } from "$lib/tools/requests/requests"; +import { sayError } from "$lib/tools/toaster/Toaster"; +import { redirect } from "$lib/tools/url/URLTools"; + +export async function load({ params }) { + if(!browser) return; + const { userToken } = params; + let userResult = await makePost( + "getUser", + { + token: userToken, + }, + makeAuthHeaderForAxios(getAuthInfo()?.a) + ); + if (userResult.status === 401) { + sayError("Данные авторизации устарели"); + // window.location.href = "/"; + redirect("/admin/"); + return {}; + } + if (userResult.error) { + sayError("Не удалось настроить пользователя"); + return {}; + } + userResult["can_trade"] = userResult["can_trade"] === "t" ? true:false; + userResult["can_trade_global"] = userResult["can_trade_global"] === "t" ? true:false; + userResult["balance"] = Number(userResult["balance"]); + userResult["bid"] = Number(userResult["bid"]); + return { + token: userToken, + userData: userResult.data + }; +} \ No newline at end of file diff --git a/src/routes/admin/user/change/[userToken]/+page.svelte b/src/routes/admin/user/change/[userToken]/+page.svelte new file mode 100644 index 0000000..fde8283 --- /dev/null +++ b/src/routes/admin/user/change/[userToken]/+page.svelte @@ -0,0 +1,153 @@ + + +
+
+
+

Изменение информации о пользователе

+
+
+
+ + + + + +
+

Торговля:

+ +
+ + +
+
+
diff --git a/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.js b/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.js new file mode 100644 index 0000000..6b70881 --- /dev/null +++ b/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.js @@ -0,0 +1,14 @@ +import { browser } from "$app/environment"; +import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth"; +import { makePost } from "$lib/tools/requests/requests"; +import { sayError } from "$lib/tools/toaster/Toaster"; + +export async function load({ params }) { + if(!browser) return; + const { userToken } = params; + const { reqID } = params; + return { + token: userToken, + reqID: reqID + }; +} \ No newline at end of file diff --git a/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.svelte b/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.svelte new file mode 100644 index 0000000..58b02cf --- /dev/null +++ b/src/routes/admin/user/edit/req/[userToken]/[reqID]/+page.svelte @@ -0,0 +1,146 @@ + + +
+
+
+

Изменение реквизита (ID: {reqID})

+
+
+ {#each reqInfo as req} + + + +
+

Активный:

+ +
+ + + {/each} +
+
diff --git a/src/routes/admin/user/neworder/[userToken]/+page.js b/src/routes/admin/user/neworder/[userToken]/+page.js new file mode 100644 index 0000000..2b81760 --- /dev/null +++ b/src/routes/admin/user/neworder/[userToken]/+page.js @@ -0,0 +1,12 @@ +import { browser } from "$app/environment"; +import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth"; +import { makePost } from "$lib/tools/requests/requests"; +import { sayError } from "$lib/tools/toaster/Toaster"; + +export async function load({ params }) { + if(!browser) return; + const { userToken } = params; + return { + token: userToken, + }; +} \ No newline at end of file diff --git a/src/routes/admin/user/neworder/[userToken]/+page.svelte b/src/routes/admin/user/neworder/[userToken]/+page.svelte new file mode 100644 index 0000000..8d57ed0 --- /dev/null +++ b/src/routes/admin/user/neworder/[userToken]/+page.svelte @@ -0,0 +1,49 @@ + + +
+
+
+

Создание заявок

+
+
+ + {#each { length: numOfOrders } as _, index} +
+

Заявка #{index+1}

+ + +
+ {/each} +
+
diff --git a/src/routes/admin/user/profile/[userToken]/+page.js b/src/routes/admin/user/profile/[userToken]/+page.js new file mode 100644 index 0000000..b5f86c8 --- /dev/null +++ b/src/routes/admin/user/profile/[userToken]/+page.js @@ -0,0 +1,31 @@ +import { browser } from "$app/environment"; +import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth"; +import { makePost } from "$lib/tools/requests/requests"; +import { sayError } from "$lib/tools/toaster/Toaster"; +import { redirect } from "$lib/tools/url/URLTools"; + +export async function load({ params }) { + if(!browser) return; + const { userToken } = params; + const userResult = await makePost( + "getUser", + { + token: userToken, + }, + makeAuthHeaderForAxios(getAuthInfo()?.a) + ); + if (userResult.status === 401) { + sayError("Данные авторизации устарели"); + // window.location.href = "/"; + redirect("/admin/"); + return {}; + } + if (userResult.error) { + sayError("Не удалось настроить пользователя"); + return {}; + } + return { + token: userToken, + userData: userResult.data + }; +} diff --git a/src/routes/admin/user/profile/[userToken]/+page.svelte b/src/routes/admin/user/profile/[userToken]/+page.svelte new file mode 100644 index 0000000..c87f2cb --- /dev/null +++ b/src/routes/admin/user/profile/[userToken]/+page.svelte @@ -0,0 +1,387 @@ + + +
+
+
+

Информация о пользователе

+
+
+
+

Токен:

+

{token}

+
+
+

Имя и фамилия:

+

{userData.name} {userData.surname}

+
+
+

Валюта:

+

{userData?.code}

+
+
+

Баланс:

+

{userData.balance} USDT

+
+
+

Заморожено:

+

{userData?.insurance}

+
+
+

Ставка:

+

{userData.bid} %

+
+
+

Торговля:

+

+ {userData["can_trade"] === "t" ? "Активна" : "Отключена"} +

+
+
+ + Изменить + +
+
+ +
+
+

Реквизиты пользователя

+ +
+
+
+ + + + + + + + + + + + + + + + + + {#each userRequisites as requisite} + + + + + + + + + + + + {/each} + +
IDСтатусБанкСБПКартаТелефонИмяДевайсОпции
{requisite["id"]}{requisite["status"] === "t" ? "активен" : "отключен"}{requisite["bankname"]}{requisite["is_sbp"] === "t" ? "да" : "нет"}{requisite["cardnumber"]}{requisite["phone"]}{requisite["name"]}{requisite["device_id"]} + Изменить + +
+
+
+ + + +
+
+

Текущие заявки

+ +
+
+
+ { + currentPageUserOrders = n; + getUserOrders(); + }} + disableButtons={disablePagesUserOrders} + css={"btn-neutral"} + /> +

Всего страниц: {numPagesUserOrders}

+
+
+ + + + + + + + + + + + + + + + + + {#each userOrders as order} + + + + + + + + + + + + {/each} + +
IDСтатусСуммаКурсСБПМерчантВремя созданияВремя закрытия
{order["id"]}{order["status"]}{order["summa"]} USDT{order["rate"]} RUB{order["is_sbp"] === "t" ? "да" : "нет"}{order["merchant_id"]}{order["creationtime"]}{order["closetime"]}
+
+
+ +
+
+

Заявки на пополнение

+
+
+
+ { + currentPageUserDeposits = n; + getUserDeposits(); + }} + disableButtons={disablePagesUserDeposits} + css={"btn-neutral"} + /> +

+ Всего страниц: {numOfPagesUserDeposits} +

+
+
+ + + + + + + + + + + + + {#each userDeposits as depo} + + + + + + + {/each} + +
СтатусСуммаВремя создания
{depoStatusMap[depo["pending"]]}{depo["amount"]} USDT{depo["creationtime"]}
+
+
+
diff --git a/src/routes/admin/userslist/+page.svelte b/src/routes/admin/userslist/+page.svelte new file mode 100644 index 0000000..d3d6372 --- /dev/null +++ b/src/routes/admin/userslist/+page.svelte @@ -0,0 +1,73 @@ + + +
+
+
+

Все пользователи

+
+
+
+ {#if usersReady} + + + + + + + + + + + + + {#each users as user} + + + + + + + {/each} + +
ТокенИмяБаланс
{user["token"]}{user["name"]} {user["surname"]}{user["balance"]} USDT + Профиль +
+ {:else} +
+ +
+ {/if} +
+
+