673 lines
21 KiB
Svelte
673 lines
21 KiB
Svelte
<script>
|
||
// @ts-nocheck
|
||
|
||
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
|
||
import {
|
||
API_PATH_TEST,
|
||
API_PATH_MAIN,
|
||
makePost,
|
||
} from "$lib/tools/requests/requests";
|
||
import { sayError, sayInfo } from "$lib/tools/toaster/Toaster";
|
||
import Pagination from "$lib/ui-components/pagination.svelte";
|
||
import { redirect } from "$lib/tools/url/URLTools";
|
||
import axios from "axios";
|
||
import { isStringEmptyOrSpaces } from "$lib/tools/strings/Strings";
|
||
|
||
const payoutsStatusMap = {
|
||
"0": "Открыта",
|
||
"1": "Ожидает оплаты",
|
||
"2": "Оплачена",
|
||
"3": "Отказано",
|
||
"4": "Требует проверки",
|
||
};
|
||
|
||
const payoutsStatusMapColors = {
|
||
"0": "text-white",
|
||
"1": "text-warning",
|
||
"2": "text-success",
|
||
"3": "text-error",
|
||
"4": "text-warning",
|
||
};
|
||
|
||
//admin/getDisputes
|
||
// @ts-ignore
|
||
let payouts = [];
|
||
let numOfPagesPayouts = 1;
|
||
let currentPagePayouts = 1;
|
||
let disablePagesPayouts = false;
|
||
let currentPayoutsFilter = -1;
|
||
|
||
async function getPayouts() {
|
||
disablePagesPayouts = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 0,
|
||
page: currentPagePayouts - 1,
|
||
filter: currentPayoutsFilter,
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
console.log(result);
|
||
if (result.status === 401) {
|
||
sayError("Данные авторизации устарели");
|
||
redirect("/admin/");
|
||
disablePagesPayouts = false;
|
||
// disablePagesUserDeposits = false;
|
||
return;
|
||
}
|
||
if (result.error) {
|
||
sayError("Не удалось получить выплаты");
|
||
disablePagesPayouts = false;
|
||
// disablePagesUserDeposits = false;
|
||
return;
|
||
}
|
||
payouts = result.data.payouts;
|
||
console.log(payouts);
|
||
numOfPagesPayouts = result.data.pages === 0 ? 1 : result.data?.pages;
|
||
disablePagesPayouts = false;
|
||
}
|
||
getPayouts();
|
||
|
||
let selectedPayout = {
|
||
amount: "",
|
||
code: "",
|
||
creation_time: "",
|
||
currency_id: "",
|
||
customer_ip: "",
|
||
pan: "",
|
||
rate: "",
|
||
receipt: "",
|
||
status: "0",
|
||
uuid: "",
|
||
};
|
||
let showFullInfo = false;
|
||
|
||
// async function acceptPayout() {
|
||
// //admin/changeDispute
|
||
// const result = await makePost(
|
||
// "admin/changeDispute",
|
||
// {
|
||
// action: selectedPayout.order_status === "8" ? 3 : 1,
|
||
// order_id: selectedPayout.order_id,
|
||
// dispute_uuid: selectedPayout.dispute_uuid,
|
||
// },
|
||
// // @ts-ignore
|
||
// makeAuthHeaderForAxios(getAuthInfo()?.a),
|
||
// );
|
||
// console.log(result);
|
||
// if (result.status === 401) {
|
||
// sayError("Данные авторизации устарели");
|
||
// redirect("/admin/");
|
||
// // disablePagesUserDeposits = false;
|
||
// return;
|
||
// }
|
||
// if (result.error) {
|
||
// sayError("Не удалось принять выплату");
|
||
// // disablePagesUserDeposits = false;
|
||
// return;
|
||
// }
|
||
// sayInfo("Выплата одобрена!");
|
||
// showFullInfo = false;
|
||
// getPayouts();
|
||
// }
|
||
|
||
// async function rejectPayout() {
|
||
// const result = await makePost(
|
||
// "admin/changeDispute",
|
||
// {
|
||
// action: selectedPayout.order_status === "8" ? 4 : 2,
|
||
// order_id: selectedPayout.order_id,
|
||
// dispute_uuid: selectedPayout.dispute_uuid,
|
||
// },
|
||
// // @ts-ignore
|
||
// makeAuthHeaderForAxios(getAuthInfo()?.a),
|
||
// );
|
||
// console.log(result);
|
||
// if (result.status === 401) {
|
||
// sayError("Данные авторизации устарели");
|
||
// redirect("/admin/");
|
||
// // disablePagesUserDeposits = false;
|
||
// return;
|
||
// }
|
||
// if (result.error) {
|
||
// sayError("Не удалось отклонить выплату");
|
||
// // disablePagesUserDeposits = false;
|
||
// return;
|
||
// }
|
||
// sayInfo("Выплата отклонена!");
|
||
// showFullInfo = false;
|
||
// getPayouts();
|
||
// }
|
||
|
||
// @ts-ignore
|
||
function mimeToExtension(mimeType) {
|
||
const mimeTypes = {
|
||
"application/pdf": "pdf",
|
||
"application/zip": "zip",
|
||
"image/jpeg": "jpg",
|
||
"image/jpg": "jpg",
|
||
"image/png": "png",
|
||
"text/plain": "txt",
|
||
"application/msword": "doc",
|
||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document":
|
||
"docx",
|
||
// Добавьте дополнительные MIME-типы по необходимости
|
||
};
|
||
// @ts-ignore
|
||
return mimeTypes[mimeType] || "bin"; // Если тип неизвестен, возвращаем .bin
|
||
}
|
||
|
||
function checkFields() {
|
||
if (
|
||
!isStringEmptyOrSpaces(newPayoutTraderUUID) &&
|
||
newPayoutTraderUUID.length > 10
|
||
) {
|
||
allowToSave = true;
|
||
return;
|
||
}
|
||
if (newPayoutStatus !== selectedPayout.status) {
|
||
allowToSave = true;
|
||
return;
|
||
}
|
||
allowToSave = false;
|
||
}
|
||
|
||
let newPayoutTraderUUID = "";
|
||
let newPayoutStatus = selectedPayout.status;
|
||
let allowToSave = false;
|
||
// $: selectedPayout, newPayoutStatus = selectedPayout.status;
|
||
$: newPayoutTraderUUID, newPayoutStatus, checkFields();
|
||
|
||
let awaitChanging = false;
|
||
async function changePayout() {
|
||
awaitChanging = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 1,
|
||
uuid: selectedPayout.uuid,
|
||
trader_uuid:
|
||
isStringEmptyOrSpaces(newPayoutTraderUUID) ||
|
||
newPayoutTraderUUID.length < 10
|
||
? selectedPayout.trader_uuid
|
||
: newPayoutTraderUUID,
|
||
status: Number(newPayoutStatus),
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
console.log(result);
|
||
if (result.status === 401) {
|
||
sayError("Данные авторизации устарели");
|
||
redirect("/admin/");
|
||
// disablePagesUserDeposits = false;
|
||
awaitChanging = false;
|
||
return;
|
||
}
|
||
if (result.error) {
|
||
sayError("Не удалось изменить выплату");
|
||
// disablePagesUserDeposits = false;
|
||
awaitChanging = false;
|
||
return;
|
||
}
|
||
sayInfo("Выплата успешно изменена!");
|
||
showFullInfo = false;
|
||
getPayouts();
|
||
awaitChanging = false;
|
||
}
|
||
|
||
let numOfOpened = 0;
|
||
let numOfAccepted = 0;
|
||
let numOfCanceled = 0;
|
||
let numOfPayed = 0;
|
||
async function getStats() {
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 3,
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
console.log(result);
|
||
if (result.status === 401) {
|
||
sayError("Данные авторизации устарели");
|
||
redirect("/admin/");
|
||
// disablePagesUserDeposits = false;
|
||
awaitChanging = false;
|
||
return;
|
||
}
|
||
if (result.error) {
|
||
sayError("Не удалось получить статистику выплат");
|
||
// disablePagesUserDeposits = false;
|
||
// awaitChanging = false;
|
||
return;
|
||
}
|
||
numOfOpened = result.data?.opened;
|
||
numOfAccepted = result.data?.accepted;
|
||
numOfCanceled = result.data?.canceled;
|
||
numOfPayed = result.data?.payed;
|
||
// sayInfo("Выплата успешно изменена!");
|
||
// showFullInfo = false;
|
||
// getPayouts();
|
||
// awaitChanging = false;
|
||
}
|
||
getStats();
|
||
|
||
let awaitChangingNull = false;
|
||
async function nullificatePayout() {
|
||
if (awaitChangingNull) return;
|
||
awaitChangingNull = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 2,
|
||
uuid: selectedPayout.uuid,
|
||
// trader_uuid: (isStringEmptyOrSpaces(newPayoutTraderUUID) || newPayoutTraderUUID.length < 10) ? selectedPayout.trader_uuid:newPayoutTraderUUID,
|
||
// status: Number(newPayoutStatus)
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
console.log(result);
|
||
if (result.status === 401) {
|
||
sayError("Данные авторизации устарели");
|
||
redirect("/admin/");
|
||
// disablePagesUserDeposits = false;
|
||
awaitChangingNull = false;
|
||
return;
|
||
}
|
||
if (result.error) {
|
||
sayError("Не удалось изменить выплату");
|
||
// disablePagesUserDeposits = false;
|
||
awaitChangingNull = false;
|
||
return;
|
||
}
|
||
sayInfo("Выплата успешно обнулена!");
|
||
showFullInfo = false;
|
||
getPayouts();
|
||
awaitChangingNull = false;
|
||
}
|
||
|
||
let awaitAccepting = false;
|
||
async function acceptPayout() {
|
||
if (awaitAccepting) return;
|
||
awaitAccepting = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 4,
|
||
uuid: selectedPayout.uuid,
|
||
status: 2,
|
||
// trader_uuid: (isStringEmptyOrSpaces(newPayoutTraderUUID) || newPayoutTraderUUID.length < 10) ? selectedPayout.trader_uuid:newPayoutTraderUUID,
|
||
// status: Number(newPayoutStatus)
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
if (result.error) {
|
||
sayError("Не удалось принять выплату");
|
||
// disablePagesUserDeposits = false;
|
||
awaitAccepting = false;
|
||
return;
|
||
}
|
||
sayInfo("Выплата успешно принята!");
|
||
showFullInfo = false;
|
||
getPayouts();
|
||
awaitAccepting = false;
|
||
}
|
||
|
||
let awaitDecline = false;
|
||
async function declinePayout() {
|
||
if (awaitDecline) return;
|
||
awaitDecline = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 4,
|
||
uuid: selectedPayout.uuid,
|
||
status: 0,
|
||
// trader_uuid: (isStringEmptyOrSpaces(newPayoutTraderUUID) || newPayoutTraderUUID.length < 10) ? selectedPayout.trader_uuid:newPayoutTraderUUID,
|
||
// status: Number(newPayoutStatus)
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
if (result.error) {
|
||
sayError("Не удалось отклонить выплату");
|
||
// disablePagesUserDeposits = false;
|
||
awaitDecline = false;
|
||
return;
|
||
}
|
||
sayInfo("Выплата успешно отклонена!");
|
||
showFullInfo = false;
|
||
getPayouts();
|
||
awaitDecline = false;
|
||
}
|
||
|
||
let awaitCancel = false;
|
||
async function cancelPayout() {
|
||
if (awaitCancel) return;
|
||
awaitCancel = true;
|
||
const result = await makePost(
|
||
"admin/payouts",
|
||
{
|
||
type: 5,
|
||
uuid: selectedPayout.uuid,
|
||
// trader_uuid: (isStringEmptyOrSpaces(newPayoutTraderUUID) || newPayoutTraderUUID.length < 10) ? selectedPayout.trader_uuid:newPayoutTraderUUID,
|
||
// status: Number(newPayoutStatus)
|
||
},
|
||
// @ts-ignore
|
||
makeAuthHeaderForAxios(getAuthInfo()?.a)
|
||
);
|
||
if (result.error) {
|
||
sayError("Не удалось отменить выплату");
|
||
// disablePagesUserDeposits = false;
|
||
awaitCancel = false;
|
||
return;
|
||
}
|
||
sayInfo("Выплата успешно отменена!");
|
||
showFullInfo = false;
|
||
getPayouts();
|
||
awaitCancel = false;
|
||
}
|
||
</script>
|
||
|
||
<div class="w-full flex flex-col gap-8">
|
||
<div class="w-full flex justify-center flex-wrap">
|
||
<div class="stats shadow">
|
||
<div class="stat">
|
||
<div class="stat-title text-warning">Открыто выплат</div>
|
||
<div class="stat-value text-warning text-6xl">{numOfOpened}</div>
|
||
<!-- <div class="stat-desc">21% more than last month</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="stats shadow">
|
||
<div class="stat">
|
||
<div class="stat-title text-info">Принято выплат</div>
|
||
<div class="stat-value text-info text-6xl">{numOfAccepted}</div>
|
||
<!-- <div class="stat-desc">21% more than last month</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="stats shadow">
|
||
<div class="stat">
|
||
<div class="stat-title text-success">Оплачено сегодня</div>
|
||
<div class="stat-value text-success text-6xl">{numOfPayed}</div>
|
||
<!-- <div class="stat-desc">21% more than last month</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="stats shadow">
|
||
<div class="stat">
|
||
<div class="stat-title text-error">Отказов сегодня</div>
|
||
<div class="stat-value text-error text-6xl">{numOfCanceled}</div>
|
||
<!-- <div class="stat-desc">21% more than last month</div> -->
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<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 bg-base-300 p-4 rounded-box">
|
||
<div class="flex p-4">
|
||
<select
|
||
on:change={(e) => {
|
||
currentPayoutsFilter = Number(e.target.value);
|
||
getPayouts();
|
||
}}
|
||
class="select select-bordered w-full text-base"
|
||
>
|
||
<option selected value="-1">Показать все выплаты</option>
|
||
<option value="2">Оплаченные</option>
|
||
<option value="3">Отклонённые</option>
|
||
<option value="1">Принятые</option>
|
||
<!-- <option value="4">Требует проверки</option> -->
|
||
</select>
|
||
</div>
|
||
<div class="w-full flex flex-col justify-center items-center">
|
||
<Pagination
|
||
totalPages={numOfPagesPayouts}
|
||
pageChangedCallback={(n) => {
|
||
currentPagePayouts = n;
|
||
getPayouts();
|
||
}}
|
||
disableButtons={disablePagesPayouts}
|
||
css={"btn-neutral"}
|
||
/>
|
||
<p class="opacity-50 text-xs mt-1">
|
||
Всего страниц: {numOfPagesPayouts}
|
||
</p>
|
||
</div>
|
||
<div class="overflow-x-auto mt-4 flex flex-col">
|
||
{#if !disablePagesPayouts}
|
||
<table class="table">
|
||
<!-- head -->
|
||
<thead>
|
||
<tr>
|
||
<th>ID</th>
|
||
<th>Статус</th>
|
||
<th>Сумма</th>
|
||
<th>Карта</th>
|
||
<!-- <th>Курс</th> -->
|
||
<th>Время создания</th>
|
||
<th>Опции</th>
|
||
<!-- <th></th> -->
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{#each payouts as payout}
|
||
<tr class="hover:bg-neutral group">
|
||
<td class="font-semibold">{payout["uuid"]}</td>
|
||
<td class={payoutsStatusMapColors[payout["status"]]}
|
||
>{payoutsStatusMap[payout["status"]]}</td
|
||
>
|
||
<!-- <td>{payout["is_sbp"] === "t" ? "да" : "нет"}</td> -->
|
||
<td>{payout["amount"]} {payout["code"]}</td>
|
||
<td>{payout["pan"]}</td>
|
||
<!-- <td>{payout["rate"]} {payout["code"]}</td> -->
|
||
<!-- <td>{payout["amount"]}</td> -->
|
||
<td>{payout["creation_time"]}</td>
|
||
<td
|
||
on:click={() => {
|
||
selectedPayout = payout;
|
||
newPayoutStatus = payout.status;
|
||
showFullInfo = true;
|
||
}}
|
||
class="flex gap-2"
|
||
>
|
||
<button class="btn btn-info">Подробнее</button>
|
||
</td>
|
||
</tr>
|
||
{/each}
|
||
</tbody>
|
||
</table>
|
||
{:else}
|
||
<span class="loading loading-spinner self-center"></span>
|
||
{/if}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
{#if showFullInfo}
|
||
<div
|
||
class="fixed inset-0 overflow-auto flex flex-col items-center md:p-32 p-8 pt-[68px] bg-black bg-opacity-50"
|
||
>
|
||
<div class="flex flex-col w-full max-w-[600px] p-4 rounded-box bg-base-300">
|
||
<p class="self-center opacity-60">ID: {selectedPayout.uuid}</p>
|
||
<p
|
||
class={"self-center text-3xl " +
|
||
payoutsStatusMapColors[selectedPayout["status"]]}
|
||
>
|
||
Выплата {payoutsStatusMap[selectedPayout["status"]]}
|
||
</p>
|
||
<p class="self-center opacity-60">{selectedPayout.creation_time}</p>
|
||
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
|
||
<!-- <p class="text-lg font-bold">{selectedPayout.name}</p> -->
|
||
<p class="">IP заказчика: {selectedPayout.customer_ip}</p>
|
||
<p class="">Карта: {selectedPayout.pan}</p>
|
||
<!-- <p class="">
|
||
ID трейдера: {selectedPayout.trader_uuid === ""
|
||
? "---"
|
||
: selectedPayout.trader_uuid}
|
||
</p> -->
|
||
</div>
|
||
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
|
||
<p class="text-lg font-bold">Сумма</p>
|
||
<p>
|
||
{selectedPayout.amount}
|
||
{selectedPayout.code}
|
||
</p>
|
||
</div>
|
||
<!-- <div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
|
||
<p class="text-lg font-bold">Курс</p>
|
||
<p>{selectedPayout.rate} {selectedPayout.code}</p>
|
||
</div> -->
|
||
{#if selectedPayout["status"] !== "4"}
|
||
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
|
||
<p class="text-lg font-bold">ID нового трейдера:</p>
|
||
<p class="text-sm opacity-50">
|
||
Оставьте пустым, чтобы оставить прежнего трейдера
|
||
</p>
|
||
<input
|
||
bind:value={newPayoutTraderUUID}
|
||
type="text"
|
||
placeholder="ID"
|
||
class="input input-bordered w-full max-w-xs"
|
||
/>
|
||
</div>
|
||
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
|
||
<p class="text-lg font-bold">Изменить статус:</p>
|
||
<select
|
||
bind:value={newPayoutStatus}
|
||
class="select select-bordered w-full text-base"
|
||
>
|
||
<option value="0">Открыта</option>
|
||
<option value="2">Оплачена</option>
|
||
<option value="3">Отклонена</option>
|
||
<option value="1">Принята</option>
|
||
</select>
|
||
</div>
|
||
{/if}
|
||
{#if selectedPayout["status"] === "2" || selectedPayout["status"] === "4"}
|
||
<button
|
||
on:click={() => {
|
||
axios
|
||
.get(
|
||
API_PATH_MAIN +
|
||
"admin/loadFile?payout=" +
|
||
selectedPayout["uuid"],
|
||
{
|
||
responseType: "blob",
|
||
headers: makeAuthHeaderForAxios(getAuthInfo()?.a).headers,
|
||
}
|
||
)
|
||
.then(function (response) {
|
||
// Создаем ссылку для скачивания
|
||
const url = window.URL.createObjectURL(
|
||
new Blob([response.data])
|
||
);
|
||
const contentType = response?.data?.type; // Извлекаем MIME-тип из Blob
|
||
let extension = mimeToExtension(contentType); // Получаем расширение из функции
|
||
const a = document.createElement("a");
|
||
a.style.display = "none";
|
||
a.href = url;
|
||
a.download = `Чек_${Date.now()}.${extension}`;
|
||
document.body.appendChild(a);
|
||
a.click();
|
||
|
||
// Очищаем
|
||
window.URL.revokeObjectURL(url);
|
||
document.body.removeChild(a);
|
||
})
|
||
.catch(function (error) {
|
||
console.error("Error:", error);
|
||
});
|
||
}}
|
||
class="btn btn-outline btn-info mt-4"
|
||
>
|
||
Скачать чек
|
||
</button>
|
||
{/if}
|
||
{#if selectedPayout["status"] !== "4"}
|
||
<button
|
||
on:click={() => {
|
||
changePayout();
|
||
// showFullInfo = false;
|
||
}}
|
||
class="btn btn-outline btn-ghost mt-4 btn-success disabled:bg-transparent"
|
||
disabled={!allowToSave}
|
||
>
|
||
Сорханить
|
||
{#if awaitChanging}
|
||
<span class="loading loading-spinner loading-md"></span>
|
||
{/if}
|
||
</button>
|
||
{/if}
|
||
{#if selectedPayout["status"] === "4"}
|
||
<button
|
||
on:click={() => {
|
||
acceptPayout();
|
||
// changePayout();
|
||
// showFullInfo = false;
|
||
}}
|
||
class="btn btn-outline btn-ghost mt-4 btn-success disabled:bg-transparent"
|
||
>
|
||
Принять
|
||
{#if awaitAccepting}
|
||
<span class="loading loading-spinner loading-md"></span>
|
||
{/if}
|
||
</button>
|
||
<button
|
||
on:click={() => {
|
||
declinePayout();
|
||
// changePayout();
|
||
// showFullInfo = false;
|
||
}}
|
||
class="btn btn-outline btn-ghost mt-4 btn-error disabled:bg-transparent"
|
||
>
|
||
Отклонить
|
||
{#if awaitDecline}
|
||
<span class="loading loading-spinner loading-md"></span>
|
||
{/if}
|
||
</button>
|
||
{/if}
|
||
<button
|
||
on:click={() => {
|
||
cancelPayout();
|
||
// changePayout();
|
||
// showFullInfo = false;
|
||
}}
|
||
class="btn btn-outline btn-ghost mt-4 btn-error disabled:bg-transparent"
|
||
>
|
||
Отменить выплату
|
||
{#if awaitCancel}
|
||
<span class="loading loading-spinner loading-md"></span>
|
||
{/if}
|
||
</button>
|
||
{#if selectedPayout["status"] !== "4"}
|
||
<button
|
||
on:click={() => {
|
||
nullificatePayout();
|
||
}}
|
||
class="btn btn-outline btn-error mt-4"
|
||
>
|
||
Обнулить выплату
|
||
{#if awaitChangingNull}
|
||
<span class="loading loading-spinner loading-md"></span>
|
||
{/if}
|
||
</button>
|
||
{/if}
|
||
<button
|
||
on:click={() => {
|
||
showFullInfo = false;
|
||
}}
|
||
class="btn btn-outline btn-ghost mt-4"
|
||
>
|
||
Закрыть
|
||
</button>
|
||
</div>
|
||
</div>
|
||
{/if}
|