added balance manipulation
This commit is contained in:
parent
86d9ac8689
commit
5724d30ce0
@ -18,7 +18,7 @@
|
||||
showMenu = !showMenu;
|
||||
}}
|
||||
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}
|
||||
<svg
|
||||
@ -45,7 +45,7 @@
|
||||
{jwtDecode(getAuthInfo()?.a)?.role == "4" ? "Admin" : "Moder"}
|
||||
</p>
|
||||
</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">
|
||||
<li>
|
||||
<a href="/admin/userslist">Пользователи</a>
|
||||
@ -61,6 +61,7 @@
|
||||
<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>
|
||||
{/if}
|
||||
<!-- <li><a>Item 3</a></li> -->
|
||||
</ul>
|
||||
@ -83,7 +84,7 @@
|
||||
</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")}
|
||||
>
|
||||
<ul
|
||||
@ -222,6 +223,21 @@
|
||||
<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>
|
||||
{/if}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
export const prerender = true;
|
||||
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")}
|
||||
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
|
||||
on:click={() => {
|
||||
if (confirm("Вы уверены, что хотите удалить пользователя?"))
|
||||
|
||||
@ -24,6 +24,7 @@ const config = {
|
||||
"/user/edit/req/sampleToken/sampleReqID",
|
||||
"/user/neworder/sampleToken",
|
||||
"/user/profile/sampleToken",
|
||||
"/change-balance/sampleToken",
|
||||
"/",
|
||||
"/login",
|
||||
"/newuser",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user