2024-07-03 15:25:52 +03:00

194 lines
5.3 KiB
Svelte
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<script>
import { isStringEmptyOrSpaces } from "../../lib/tools/strings/Strings";
import { makePost, makeGet } from "$lib/tools/requests/Requests";
import {
checkAuthSync,
getAuthInfo,
makeAuthHeaderForAxios,
} from "$lib/auth/Auth";
import { onMount } from "svelte";
import { sayError } from "$lib/tools/toaster/Toaster";
let value_name = "";
let value_surname = "";
let value_balance = 0;
let value_role = "-1";
let value_bid = 0;
let value_trading = false;
$: checkFields(
value_name,
value_surname,
value_balance,
value_role,
value_bid
);
function checkFields(name, surname, balance, role, bid) {
if (isStringEmptyOrSpaces(name) || name.length < 3) {
canCreateUser = false;
return;
}
if ((bid !== 0 && !bid) || bid < 0) {
canCreateUser = false;
return;
}
if (isStringEmptyOrSpaces(surname) || surname.length < 3) {
canCreateUser = false;
return;
}
if (role === "-1") {
canCreateUser = false;
return;
}
if ((balance !== 0 && !balance) || balance < 0) {
canCreateUser = false;
return;
}
canCreateUser = true;
}
let canCreateUser = false;
let loadingUserToken = false;
let userToken = "";
let temp_userToken = "";
async function createUser() {
loadingUserToken = true;
const result = await makeGet(
"createUser",
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
if (result.status === 401) {
sayError("Данные авторизации устарели");
window.location.href = "/";
return;
}
if (result.error) {
sayError("Не удалось создать пользователя");
return;
}
temp_userToken = result.data.token;
setupNewUser();
}
async function setupNewUser() {
//todo
const result = await makePost(
"admin/changeUser",
{
token: temp_userToken,
name: value_name,
surname: value_surname,
balance: value_balance.toString(),
rate: "0",
can_trade: value_trading ? "true":"false",
can_trade_global: value_trading ? "true":"false",
role: value_role,
bid: value_bid.toString(),
},
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
if(result.status === 401)
{
sayError("Данные авторизации устарели");
window.location.href = "/";
return;
}
if(result.error)
{
sayError("Не удалось настроить пользователя");
return;
}
userToken = temp_userToken;
loadingUserToken = false;
}
</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 gap-4 p-4 rounded-box bg-base-300">
<label class={"input input-bordered flex items-center gap-2 "}>
Имя:
<input
bind:value={value_name}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 "}>
Фамилия:
<input
bind:value={value_surname}
type="text"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 "}>
Баланс (USDT):
<input
bind:value={value_balance}
type="number"
min="0"
class="grow text-lg text-info"
/>
</label>
<label class={"input input-bordered flex items-center gap-2 "}>
Ставка (%):
<input
bind:value={value_bid}
type="number"
min="0"
class="grow text-lg text-info"
/>
</label>
<select
bind:value={value_role}
class="select select-bordered w-full text-base"
>
<option disabled selected value="-1">Права доступа</option>
<option value="1">Пользователь</option>
<option value="2">Модератор</option>
<option value="4">Администратор</option>
</select>
<div class="flex p-4 items-center gap-2">
<p>Торговля:</p>
<input
bind:checked={value_trading}
type="checkbox"
class="toggle toggle-primary"
/>
</div>
<button
on:click={() => {
createUser();
}}
class={"btn text-base " +
(loadingUserToken ? "btn-warning " : "btn-primary ") +
(userToken !== "" ? "disabled:text-info" : "disabled:text-warning") +
(canCreateUser ? "" : "disabled:text-opacity-50")}
disabled={!canCreateUser || loadingUserToken || userToken !== ""}
>
{#if loadingUserToken}
{"Ожидайте токен"}
<span class="loading loading-spinner"></span>
{:else if userToken === ""}
{"Создать пользователя"}
{:else if canCreateUser}
{"Пользователь создан"}
{/if}
</button>
{#if userToken !== ""}
<div class="w-full flex p-4">
<p class="text-xl">
Токен пользователя: <span class="text-info text-xl">{userToken}</span>
</p>
</div>
{/if}
</div>
</div>