testing new payouts

This commit is contained in:
torgaw 2024-11-06 15:27:33 +03:00
parent 2b6a9f7c5a
commit 03f8f1b2e1
23 changed files with 122 additions and 83 deletions

View File

@ -16,7 +16,7 @@ function defaultDataResponseProcessor(data) {
export const API_PATH_MAIN = "https://hostapay.trade/api/v1/";
export const API_PATH_TEST = "https://test.0x000f.ru/api/v1/";
let BasicURLValue = API_PATH_MAIN;
let BasicURLValue = API_PATH_TEST;
async function makePost(url, data, options = undefined,
responseProcessor = defaultResponseProcessor,

View File

@ -1,7 +1,7 @@
<script>
import { SvelteToast } from "@zerodevx/svelte-toast";
import { onMount } from "svelte";
import "../app.css";
import "../../app.css";
import Navbar from "$lib/ui-components/navbar.svelte";
import { checkAuth, checkAuthSync } from "$lib/auth/Auth";
import { redirect } from "$lib/tools/url/URLTools";

View File

@ -1,6 +1,10 @@
<script>
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
import { API_PATH_TEST, API_PATH_MAIN, makePost } from "$lib/tools/requests/requests";
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";
@ -11,7 +15,7 @@
"5": "На проверке у трейдера",
"6": "Принят",
"7": "Отклонён",
"8": "Чек на проверке"
"8": "Чек на проверке",
};
const disputesStatusMapColors = {
@ -35,7 +39,7 @@
"admin/getDisputes",
{
page: currentPageDisputes,
filter: currentDisputesFilter
filter: currentDisputesFilter,
},
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
@ -76,7 +80,7 @@
new_amount: "",
creation_time: "",
out_code: "",
in_code: ""
in_code: "",
};
let showFullInfo = false;
@ -85,9 +89,9 @@
const result = await makePost(
"admin/changeDispute",
{
action: selectedDispute.order_status === "8" ? 3:1,
action: selectedDispute.order_status === "8" ? 3 : 1,
order_id: selectedDispute.order_id,
dispute_uuid: selectedDispute.dispute_uuid
dispute_uuid: selectedDispute.dispute_uuid,
},
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
@ -112,9 +116,9 @@
const result = await makePost(
"admin/changeDispute",
{
action: selectedDispute.order_status === "8" ? 4:2,
action: selectedDispute.order_status === "8" ? 4 : 2,
order_id: selectedDispute.order_id,
dispute_uuid: selectedDispute.dispute_uuid
dispute_uuid: selectedDispute.dispute_uuid,
},
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
@ -159,11 +163,9 @@
showDisputeReceiptImage = false;
showLoadingReceiptShowing = true;
try {
const response = await axios.get(
API_PATH_MAIN + "loadFile?dispute=" +
selectedDispute["order_id"],
// "17731",
API_PATH_TEST + "loadFile?dispute=" + selectedDispute["order_id"],
// "17731",
{
responseType: "blob",
headers: makeAuthHeaderForAxios(getAuthInfo()?.a).headers,
@ -192,7 +194,6 @@
//console.log(error);
}
}
</script>
<div class="w-full flex flex-col gap-8">
@ -203,10 +204,10 @@
<div class="w-full flex flex-col bg-base-300 p-4 rounded-box">
<div class="flex p-4">
<select
on:change={(e)=>{
currentDisputesFilter = Number(e.target.value);
getDisputes();
}}
on:change={(e) => {
currentDisputesFilter = Number(e.target.value);
getDisputes();
}}
class="select select-bordered w-full text-base"
>
<option selected value="-1">Показать все споры</option>
@ -286,7 +287,7 @@
class="fixed inset-0 flex justify-center 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: {selectedDispute['order_id']}</p>
<p class="self-center opacity-60">ID: {selectedDispute["order_id"]}</p>
<p
class={"self-center text-3xl " +
disputesStatusMapColors[selectedDispute["order_status"]]}
@ -306,13 +307,20 @@
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
<p class="text-lg font-bold">Сумма в споре</p>
<p>
{Number(selectedDispute.new_amount)} {selectedDispute.out_code} ({(Number(selectedDispute.new_amount) / Number(selectedDispute.order_rate)).toFixed(2)} USDT)
{Number(selectedDispute.new_amount)}
{selectedDispute.out_code} ({(
Number(selectedDispute.new_amount) /
Number(selectedDispute.order_rate)
).toFixed(2)} USDT)
</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>
{Number(selectedDispute.amount)} {selectedDispute.out_code} ({(Number(selectedDispute.amount) / Number(selectedDispute.order_rate)).toFixed(2)} USDT)
{Number(selectedDispute.amount)}
{selectedDispute.out_code} ({(
Number(selectedDispute.amount) / Number(selectedDispute.order_rate)
).toFixed(2)} USDT)
</p>
</div>
{#if selectedDispute["order_status"] === "4" || selectedDispute["order_status"] === "8"}
@ -338,7 +346,8 @@
on:click={() => {
axios
.get(
API_PATH_MAIN + "loadFile?dispute=" +
API_PATH_TEST +
"loadFile?dispute=" +
selectedDispute["order_id"],
{
responseType: "blob",
@ -397,10 +406,21 @@
{/if}
{#if showDisputeReceiptImage}
<div class="fixed inset-0 p-4 md:p-8 flex flex-col items-center bg-base-300 z-[100]">
<div
class="fixed inset-0 p-4 md:p-8 flex flex-col items-center bg-base-300 z-[100]"
>
<div class="w-[90%] h-[90%] flex">
<img src={receiptImage} alt="receipt" class="w-full h-full object-scale-down">
<img
src={receiptImage}
alt="receipt"
class="w-full h-full object-scale-down"
/>
</div>
<button on:click={()=>{showDisputeReceiptImage = false;}} class="btn btn-info w-full mt-auto">Закрыть</button>
<button
on:click={() => {
showDisputeReceiptImage = false;
}}
class="btn btn-info w-full mt-auto">Закрыть</button
>
</div>
{/if}

View File

@ -2,18 +2,23 @@
// @ts-nocheck
import { getAuthInfo, makeAuthHeaderForAxios } from "$lib/auth/Auth";
import { API_PATH_TEST, API_PATH_MAIN, makePost } from "$lib/tools/requests/requests";
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";
import { isStringEmptyOrSpaces } from "$lib/tools/strings/Strings";
const payoutsStatusMap = {
"0": "Открыта",
"1": "Ожидает оплаты",
"2": "Оплачена",
"3": "Отказано",
"4": "Требует проверки",
};
const payoutsStatusMapColors = {
@ -21,6 +26,7 @@
"1": "text-warning",
"2": "text-success",
"3": "text-error",
"4": "text-warning",
};
//admin/getDisputes
@ -29,7 +35,7 @@
let numOfPagesPayouts = 1;
let currentPagePayouts = 1;
let disablePagesPayouts = false;
let currentPayoutsFilter = 0;
let currentPayoutsFilter = -1;
async function getPayouts() {
disablePagesPayouts = true;
@ -41,7 +47,7 @@
filter: currentPayoutsFilter,
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a),
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
console.log(result);
if (result.status === 401) {
@ -59,7 +65,7 @@
}
payouts = result.data.payouts;
console.log(payouts);
numOfPagesPayouts = result.data.pages === 0 ? 1:result.data?.pages;
numOfPagesPayouts = result.data.pages === 0 ? 1 : result.data?.pages;
disablePagesPayouts = false;
}
getPayouts();
@ -154,20 +160,21 @@
}
function checkFields() {
if(!isStringEmptyOrSpaces(newPayoutTraderUUID) && newPayoutTraderUUID.length > 10)
{
if (
!isStringEmptyOrSpaces(newPayoutTraderUUID) &&
newPayoutTraderUUID.length > 10
) {
allowToSave = true;
return;
}
if(newPayoutStatus !== selectedPayout.status)
{
if (newPayoutStatus !== selectedPayout.status) {
allowToSave = true;
return;
}
allowToSave = false;
}
let newPayoutTraderUUID= "";
let newPayoutTraderUUID = "";
let newPayoutStatus = selectedPayout.status;
let allowToSave = false;
// $: selectedPayout, newPayoutStatus = selectedPayout.status;
@ -181,11 +188,15 @@
{
type: 1,
uuid: selectedPayout.uuid,
trader_uuid: (isStringEmptyOrSpaces(newPayoutTraderUUID) || newPayoutTraderUUID.length < 10) ? selectedPayout.trader_uuid:newPayoutTraderUUID,
status: Number(newPayoutStatus)
trader_uuid:
isStringEmptyOrSpaces(newPayoutTraderUUID) ||
newPayoutTraderUUID.length < 10
? selectedPayout.trader_uuid
: newPayoutTraderUUID,
status: Number(newPayoutStatus),
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a),
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
console.log(result);
if (result.status === 401) {
@ -215,10 +226,10 @@
const result = await makePost(
"admin/payouts",
{
type: 3
type: 3,
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a),
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
console.log(result);
if (result.status === 401) {
@ -245,7 +256,6 @@
}
getStats();
let awaitChangingNull = false;
async function nullificatePayout() {
awaitChangingNull = true;
@ -258,7 +268,7 @@
// status: Number(newPayoutStatus)
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a),
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
console.log(result);
if (result.status === 401) {
@ -325,7 +335,7 @@
}}
class="select select-bordered w-full text-base"
>
<option selected value="0">Показать все выплаты</option>
<option selected value="-1">Показать все выплаты</option>
<option value="2">Оплаченные</option>
<option value="3">Отклонённые</option>
<option value="1">Принятые</option>
@ -356,7 +366,7 @@
<th>Статус</th>
<th>Сумма</th>
<th>Карта</th>
<th>Курс</th>
<!-- <th>Курс</th> -->
<th>Время создания</th>
<th>Опции</th>
<!-- <th></th> -->
@ -372,7 +382,7 @@
<!-- <td>{payout["is_sbp"] === "t" ? "да" : "нет"}</td> -->
<td>{payout["amount"]} {payout["code"]}</td>
<td>{payout["pan"]}</td>
<td>{payout["rate"]} {payout["code"]}</td>
<!-- <td>{payout["rate"]} {payout["code"]}</td> -->
<!-- <td>{payout["amount"]}</td> -->
<td>{payout["creation_time"]}</td>
<td
@ -413,55 +423,64 @@
<!-- <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>
<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} ({(
Number(selectedPayout.amount) /
Number(selectedPayout.rate)
).toFixed(2)} USDT)
{selectedPayout.code}
</p>
</div>
<div class="rounded-box flex flex-col bg-base-100 p-4 gap-1 mt-4">
<!-- <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>
</div> -->
<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" />
<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>
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 selectedPayout["status"] === "2"}
<button
on:click={() => {
axios
.get(
API_PATH_MAIN + "loadFile?dispute=" +
API_PATH_TEST +
"loadFile?dispute=" +
selectedPayout["order_id"],
{
responseType: "blob",
headers: makeAuthHeaderForAxios(getAuthInfo()?.a).headers,
},
}
)
.then(function (response) {
// Создаем ссылку для скачивания
const url = window.URL.createObjectURL(
new Blob([response.data]),
new Blob([response.data])
);
const contentType = response?.data?.type; // Извлекаем MIME-тип из Blob
let extension = mimeToExtension(contentType); // Получаем расширение из функции
@ -495,7 +514,7 @@
>
Сорханить
{#if awaitChanging}
<span class="loading loading-spinner loading-md"></span>
<span class="loading loading-spinner loading-md"></span>
{/if}
</button>
<button
@ -506,7 +525,7 @@
>
Обнулить выплату
{#if awaitChangingNull}
<span class="loading loading-spinner loading-md"></span>
<span class="loading loading-spinner loading-md"></span>
{/if}
</button>
<button

View File

@ -20,21 +20,21 @@ const config = {
prerender: {
// default: true,
entries: [
"/user/change/sampleToken",
"/user/edit/req/sampleToken/sampleReqID",
"/user/neworder/sampleToken",
"/user/profile/sampleToken",
"/",
"/login",
"/newuser",
"/userslist",
"/disputes",
"/payouts",
"/merchants",
"/orders",
"/currencies",
"/sms",
"/withdrawals"
"/admin/user/change/sampleToken",
"/admin/user/edit/req/sampleToken/sampleReqID",
"/admin/user/neworder/sampleToken",
"/admin/user/profile/sampleToken",
"/admin/",
"/admin/login",
"/admin/newuser",
"/admin/userslist",
"/admin/disputes",
"/admin/payouts",
"/admin/merchants",
"/admin/orders",
"/admin/currencies",
"/admin/sms",
"/admin/withdrawals"
],
},
},