194 lines
5.3 KiB
Svelte
194 lines
5.3 KiB
Svelte
<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>
|