added balance manipulation
This commit is contained in:
parent
86d9ac8689
commit
5724d30ce0
@ -18,7 +18,7 @@
|
|||||||
showMenu = !showMenu;
|
showMenu = !showMenu;
|
||||||
}}
|
}}
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
class="btn btn-ghost lg:hidden w-[54px] max-w-[54px] p-1"
|
class="btn btn-ghost 2xl:hidden w-[54px] max-w-[54px] p-1"
|
||||||
>
|
>
|
||||||
{#if !showMenu}
|
{#if !showMenu}
|
||||||
<svg
|
<svg
|
||||||
@ -45,7 +45,7 @@
|
|||||||
{jwtDecode(getAuthInfo()?.a)?.role == "4" ? "Admin" : "Moder"}
|
{jwtDecode(getAuthInfo()?.a)?.role == "4" ? "Admin" : "Moder"}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-center hidden lg:flex font-semibold">
|
<div class="navbar-center hidden 2xl:flex font-semibold">
|
||||||
<ul class="menu menu-horizontal px-1">
|
<ul class="menu menu-horizontal px-1">
|
||||||
<li>
|
<li>
|
||||||
<a href="/admin/userslist">Пользователи</a>
|
<a href="/admin/userslist">Пользователи</a>
|
||||||
@ -61,6 +61,7 @@
|
|||||||
<li><a href="/admin/currencies">Валюты</a></li>
|
<li><a href="/admin/currencies">Валюты</a></li>
|
||||||
<li><a href="/admin/sms">СМС</a></li>
|
<li><a href="/admin/sms">СМС</a></li>
|
||||||
<li><a href="/admin/withdrawals">Вывод средств</a></li>
|
<li><a href="/admin/withdrawals">Вывод средств</a></li>
|
||||||
|
<li><a href="/admin/change-balance/0">Управление балансом</a></li>
|
||||||
{/if}
|
{/if}
|
||||||
<!-- <li><a>Item 3</a></li> -->
|
<!-- <li><a>Item 3</a></li> -->
|
||||||
</ul>
|
</ul>
|
||||||
@ -83,7 +84,7 @@
|
|||||||
</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 lg:hidden " +
|
class={"fixed inset-0 top-16 z-50 px-5 flex flex-col items-center justify-center bg-base-100 transition-all duration-150 2xl:hidden " +
|
||||||
(showMenu ? "" : "-translate-x-full")}
|
(showMenu ? "" : "-translate-x-full")}
|
||||||
>
|
>
|
||||||
<ul
|
<ul
|
||||||
@ -222,6 +223,21 @@
|
|||||||
<ChevronRightIcon />
|
<ChevronRightIcon />
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</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>
|
||||||
{/if}
|
{/if}
|
||||||
</ul>
|
</ul>
|
||||||
</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 = () => {};
|
||||||
|
|||||||
9
src/routes/change-balance/[token]/+page.js
Normal file
9
src/routes/change-balance/[token]/+page.js
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { browser } from "$app/environment";
|
||||||
|
|
||||||
|
export async function load({ params }) {
|
||||||
|
if (!browser) return;
|
||||||
|
let { token } = params;
|
||||||
|
return {
|
||||||
|
token: token,
|
||||||
|
};
|
||||||
|
}
|
||||||
191
src/routes/change-balance/[token]/+page.svelte
Normal file
191
src/routes/change-balance/[token]/+page.svelte
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
<script>
|
||||||
|
import { makeAuthHeaderForAxios, getAuthInfo } from "$lib/auth/Auth.js";
|
||||||
|
import { makePost } from "$lib/tools/requests/requests.js";
|
||||||
|
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster.js";
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
|
||||||
|
let { token } = data;
|
||||||
|
let tokenValue = "";
|
||||||
|
|
||||||
|
let disableContinueButton = false;
|
||||||
|
|
||||||
|
let syncUserBalance = false;
|
||||||
|
let syncUserBalanceSuccess = false;
|
||||||
|
|
||||||
|
let syncedBalance = "";
|
||||||
|
let syncedCode = "";
|
||||||
|
let changeAmount = 0;
|
||||||
|
let balanceChanged = false;
|
||||||
|
|
||||||
|
async function getUserInfo() {
|
||||||
|
if (syncUserBalance) return;
|
||||||
|
balanceChanged = false;
|
||||||
|
syncUserBalance = true;
|
||||||
|
syncUserBalanceSuccess = false;
|
||||||
|
const res = await makePost(
|
||||||
|
"getUser",
|
||||||
|
{
|
||||||
|
token: tokenValue.trim(),
|
||||||
|
},
|
||||||
|
// @ts-ignore
|
||||||
|
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||||||
|
);
|
||||||
|
if (res.error) {
|
||||||
|
syncUserBalanceSuccess = false;
|
||||||
|
syncUserBalance = false;
|
||||||
|
sayError("Не удалось получить баланс пользователя");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// syncedBalance = Number(res.data.balance);
|
||||||
|
syncedCode = res.data.code;
|
||||||
|
disableContinueButton = true;
|
||||||
|
syncUserBalance = false;
|
||||||
|
syncUserBalanceSuccess = true;
|
||||||
|
console.log(res.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
let inProcess = false;
|
||||||
|
async function increaseBalance() {
|
||||||
|
inProcess = true;
|
||||||
|
balanceChanged = false;
|
||||||
|
const res = await makePost(
|
||||||
|
"admin/user/debit",
|
||||||
|
{
|
||||||
|
token: tokenValue,
|
||||||
|
amount: changeAmount.toString(),
|
||||||
|
},
|
||||||
|
// @ts-ignore
|
||||||
|
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||||||
|
);
|
||||||
|
if (res.error) {
|
||||||
|
inProcess = false;
|
||||||
|
balanceChanged = false;
|
||||||
|
sayError("Не удалось пополнить баланс");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
inProcess = false;
|
||||||
|
syncedBalance = Number(res.data.balance)
|
||||||
|
.toLocaleString("en-US", {
|
||||||
|
maximumFractionDigits: 10,
|
||||||
|
})
|
||||||
|
.replace(/,/g, " ");
|
||||||
|
balanceChanged = true;
|
||||||
|
sayInfo("Успешное пополнение");
|
||||||
|
}
|
||||||
|
|
||||||
|
async function decreaseBalance() {
|
||||||
|
inProcess = true;
|
||||||
|
balanceChanged = false;
|
||||||
|
const res = await makePost(
|
||||||
|
"admin/user/credit",
|
||||||
|
{
|
||||||
|
token: tokenValue,
|
||||||
|
amount: changeAmount.toString(),
|
||||||
|
},
|
||||||
|
// @ts-ignore
|
||||||
|
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||||||
|
);
|
||||||
|
if (res.error) {
|
||||||
|
inProcess = false;
|
||||||
|
balanceChanged = false;
|
||||||
|
sayError("Не удалось списать баланс");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
inProcess = false;
|
||||||
|
syncedBalance = Number(res.data.balance)
|
||||||
|
.toLocaleString("en-US", {
|
||||||
|
maximumFractionDigits: 10,
|
||||||
|
})
|
||||||
|
.replace(/,/g, " ");
|
||||||
|
balanceChanged = true;
|
||||||
|
sayInfo("Успешное списание");
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
if (token && typeof token === "string" && token.length >= 12) {
|
||||||
|
tokenValue = token;
|
||||||
|
// console.log(tokenValue);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</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 grid grid-cols-1 gap-4 p-4 rounded-box bg-base-300">
|
||||||
|
<label class={"input input-bordered flex items-center gap-2 "}>
|
||||||
|
Токен:
|
||||||
|
<input
|
||||||
|
bind:value={tokenValue}
|
||||||
|
type="text"
|
||||||
|
class="grow text-lg text-info"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
getUserInfo();
|
||||||
|
}}
|
||||||
|
class="btn btn-info"
|
||||||
|
>
|
||||||
|
{#if syncUserBalance}
|
||||||
|
<span class="loading loading-md"></span>
|
||||||
|
{:else if !disableContinueButton}
|
||||||
|
Продолжить
|
||||||
|
{:else}
|
||||||
|
Обновить токен
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
{#if syncUserBalanceSuccess}
|
||||||
|
{#if balanceChanged}
|
||||||
|
<p class="text-xl">
|
||||||
|
Новый баланс: <span class="font-bold"
|
||||||
|
>{syncedBalance} {syncedCode}</span
|
||||||
|
>
|
||||||
|
</p>
|
||||||
|
{/if}
|
||||||
|
<p class="text-xl">
|
||||||
|
Валюта токена: <span class="font-bold">{syncedCode}</span>
|
||||||
|
</p>
|
||||||
|
Укажите сумму списания/пополнения:
|
||||||
|
<label class={"input input-bordered flex items-center gap-2 "}>
|
||||||
|
<input
|
||||||
|
bind:value={changeAmount}
|
||||||
|
type="text"
|
||||||
|
class="grow text-lg text-info"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<div class="w-full grid grid-cols-2 gap-4">
|
||||||
|
<button
|
||||||
|
class="btn btn-success"
|
||||||
|
on:click={() => {
|
||||||
|
if (inProcess) return;
|
||||||
|
increaseBalance();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{#if inProcess}
|
||||||
|
<span class="loading loading-md"></span>
|
||||||
|
{:else}
|
||||||
|
Пополнить
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="btn btn-warning"
|
||||||
|
on:click={() => {
|
||||||
|
if (inProcess) return;
|
||||||
|
decreaseBalance();
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{#if inProcess}
|
||||||
|
<span class="loading loading-md"></span>
|
||||||
|
{:else}
|
||||||
|
Списать
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -314,6 +314,10 @@
|
|||||||
href={window.location.pathname.replace("profile", "change")}
|
href={window.location.pathname.replace("profile", "change")}
|
||||||
class="btn btn-info btn-outline rounded-lg btn-sm">Изменить</a
|
class="btn btn-info btn-outline rounded-lg btn-sm">Изменить</a
|
||||||
>
|
>
|
||||||
|
<a
|
||||||
|
href={`/admin/change-balance/${token}`}
|
||||||
|
class="btn btn-neutral btn-outline rounded-lg btn-sm">Изменить баланс</a
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
if (confirm("Вы уверены, что хотите удалить пользователя?"))
|
if (confirm("Вы уверены, что хотите удалить пользователя?"))
|
||||||
|
|||||||
@ -24,6 +24,7 @@ const config = {
|
|||||||
"/user/edit/req/sampleToken/sampleReqID",
|
"/user/edit/req/sampleToken/sampleReqID",
|
||||||
"/user/neworder/sampleToken",
|
"/user/neworder/sampleToken",
|
||||||
"/user/profile/sampleToken",
|
"/user/profile/sampleToken",
|
||||||
|
"/change-balance/sampleToken",
|
||||||
"/",
|
"/",
|
||||||
"/login",
|
"/login",
|
||||||
"/newuser",
|
"/newuser",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user