rc1-changed deposit search

This commit is contained in:
FIRST_NAME LAST_NAME 2025-10-15 17:48:36 +03:00
parent 5724d30ce0
commit 930f51ee69
3 changed files with 141 additions and 101 deletions

View File

@ -55,7 +55,7 @@
</li> </li>
<li><a href="/admin/disputes">Споры</a></li> <li><a href="/admin/disputes">Споры</a></li>
<li><a href="/admin/payouts">Выплаты</a></li> <li><a href="/admin/payouts">Выплаты</a></li>
<li><a href="/admin/orders">Заявки</a></li> <li><a href="/admin/orders">Депозиты</a></li>
{#if jwtDecode(getAuthInfo()?.a)?.role == "4"} {#if jwtDecode(getAuthInfo()?.a)?.role == "4"}
<li><a href="/admin/merchants">Мерчанты</a></li> <li><a href="/admin/merchants">Мерчанты</a></li>
<li><a href="/admin/currencies">Валюты</a></li> <li><a href="/admin/currencies">Валюты</a></li>
@ -156,7 +156,7 @@
on:click={() => { on:click={() => {
showMenu = false; showMenu = false;
}} }}
href="/admin/orders">Заявки</a href="/admin/orders">Депозиты</a
> >
<div class="absolute right-0 top-[2px] pointer-events-none"> <div class="absolute right-0 top-[2px] pointer-events-none">
<ChevronRightIcon /> <ChevronRightIcon />

View File

@ -26,28 +26,28 @@
let showFoundedOrderWindow = false; let showFoundedOrderWindow = false;
let showLoadingFind = false; let showLoadingFind = false;
let foundedDispute; let foundedDisputes = [];
let selectedDispute;
let currentDepositSearchPage = 1;
let maxDepositSearchPages = 1;
let external_uuidValue = ""; let external_uuidValue = "";
let uuidValue = ""; let uuidValue = "";
let external_user_idValue = ""; let external_user_idValue = "";
let searchValue = "";
async function findDispute() { async function findDispute() {
if (searchValue.length < 5 || showLoadingFind) return;
showLoadingFind = true; showLoadingFind = true;
let sData = {}; let sData = {
if (external_uuidValue !== "") { searchData: searchValue.trim(),
sData["external_uuid"] = external_uuidValue; page: currentDepositSearchPage,
} else if (uuidValue !== "") { };
sData["uuid"] = uuidValue;
} else if (external_user_idValue !== "") {
sData["external_user_id"] = external_user_idValue;
} else {
showLoadingFind = false;
return;
}
const res = await makePost( const res = await makePost(
"admin/findOrder", "admin/deposit/search",
sData, sData,
makeAuthHeaderForAxios(getAuthInfo()?.a) makeAuthHeaderForAxios(getAuthInfo()?.a)
); );
@ -57,9 +57,12 @@
showLoadingFind = false; showLoadingFind = false;
return; return;
} }
foundedDispute = res.data; console.log(res.data);
console.log(foundedDispute);
showFoundedOrderWindow = true; foundedDisputes = res.data.data;
maxDepositSearchPages = Number(res.data.pages);
console.log(foundedDisputes);
// showFoundedOrderWindow = true;
showLoadingFind = false; showLoadingFind = false;
} }
@ -70,7 +73,7 @@
"admin/rollbackOrder", "admin/rollbackOrder",
{ {
id: uuid, id: uuid,
summa: foundedDispute["summa"], summa: selectedDispute["summa"],
}, },
makeAuthHeaderForAxios(getAuthInfo()?.a) makeAuthHeaderForAxios(getAuthInfo()?.a)
); );
@ -192,13 +195,13 @@
let img64 = ""; let img64 = "";
let qrCode = false; let qrCode = false;
$: if (foundedDispute && foundedDispute["cardnumber"].length > 16) { $: if (selectedDispute && selectedDispute["cardnumber"].length > 16) {
qrCode = true; qrCode = true;
QRCode.toDataURL(foundedDispute["cardnumber"], { type: "image/jpeg" }).then( QRCode.toDataURL(selectedDispute["cardnumber"], {
(url) => { type: "image/jpeg",
img64 = url; }).then((url) => {
} img64 = url;
); });
} else { } else {
qrCode = false; qrCode = false;
} }
@ -207,28 +210,20 @@
<div class="w-full flex flex-col gap-8"> <div class="w-full flex flex-col gap-8">
<div class="flex gap-4"> <div class="flex gap-4">
<div class="bg-accent rounded-[4px] w-[10px] h-full"></div> <div class="bg-accent rounded-[4px] w-[10px] h-full"></div>
<h1 class="text-2xl font-semibold">Поиск по заявкам</h1> <h1 class="text-2xl font-semibold">Поиск по депозитам</h1>
</div> </div>
<div class="w-full flex flex-col p-4 rounded-box bg-base-300"> <div class="w-full flex flex-col p-4 rounded-box bg-base-300">
<p class="text-sm mt-2">external_uuid</p>
<input <input
bind:value={external_uuidValue} bind:value={searchValue}
type="text" placeholder="UUID, External UUID или External User ID"
class="input input-bordered"
/>
<p class="text-sm mt-2">uuid</p>
<input bind:value={uuidValue} type="text" class="input input-bordered" />
<p class="text-sm mt-2">external_user_id</p>
<input
bind:value={external_user_idValue}
type="text" type="text"
class="input input-bordered" class="input input-bordered"
/> />
<button <button
on:click={() => { on:click={() => {
maxDepositSearchPages = 1;
currentDepositSearchPage = 1;
findDispute(); findDispute();
}} }}
class="btn btn-outline mt-2" class="btn btn-outline mt-2"
@ -236,10 +231,85 @@
{#if showLoadingFind} {#if showLoadingFind}
<span class="loading loading-dots loading-xs"></span> <span class="loading loading-dots loading-xs"></span>
{:else} {:else}
{"Найти заявку"} {"Найти депозиты"}
{/if} {/if}
</button> </button>
</div> </div>
<div class="w-full flex flex-col p-4 rounded-box bg-base-300">
<div class="flex w-full justify-center items-center">
<button
class="btn"
on:click={() => {
if (currentDepositSearchPage <= 1) return;
currentDepositSearchPage -= 1;
findDispute();
}}
>
&lt;
</button>
<div class="btn cursor-default hover:cursor-default">
{"Страница"}
{currentDepositSearchPage}
</div>
<button
class="btn"
on:click={() => {
if (currentDepositSearchPage >= maxDepositSearchPages) return;
currentDepositSearchPage += 1;
findDispute();
}}
>
&gt;
</button>
</div>
<p class="opacity-50 text-sm self-center mt-1">
{"Всего страниц:"}
{maxDepositSearchPages}
</p>
{#if showLoadingFind}
<span class="loading loading-lg self-center mt-4"></span>
{:else}
<table class="w-full mt-4">
<thead>
<th></th>
<th class="text-left px-2">{"Статус"}</th>
<th class="text-left px-2">{"Сумма"}</th>
<th class="text-left px-2">{"Банк"}</th>
<th class="text-left px-2">{"Время создания"}</th>
<th class="text-left px-2">{"Трейдер"}</th>
</thead>
<tbody>
{#each foundedDisputes as dep}
<tr class="border-b-2 border-b-base-200">
<td
><button
class="btn btn-info"
on:click={() => {
selectedDispute = dep;
console.log(selectedDispute, "11231");
showFoundedOrderWindow = true;
}}
>
<div
class="bg-info border-2 outline-white rounded-full w-5 h-5 flex-shrink-0 flex justify-center items-center text-white"
>
i
</div>
</button></td
>
<td class="px-2 py-2">{orderStatusMap[dep["status"]]}</td>
<td class="px-2">{Number(dep["summa"])} {dep["currency_code"]}</td
>
<td class="px-2">{dep["bank_name"]}</td>
<td class="px-2">{dep["creationtime"]}</td>
<td class="px-2">{dep["trader_name"]} {dep["surname"]}</td>
</tr>
{/each}
</tbody>
</table>
{/if}
</div>
</div> </div>
{#if showFoundedOrderWindow} {#if showFoundedOrderWindow}
@ -250,49 +320,49 @@
class="flex flex-col p-4 bg-base-100 rounded-md overflow-y-auto max-h-[90%]" class="flex flex-col p-4 bg-base-100 rounded-md overflow-y-auto max-h-[90%]"
> >
<p class="text-sm">UUID</p> <p class="text-sm">UUID</p>
<p class="font-semibold">{foundedDispute["uuid"]}</p> <p class="font-semibold">{selectedDispute["uuid"]}</p>
<!-- <p class="text-sm mt-3">ID заявки</p> <!-- <p class="text-sm mt-3">ID заявки</p>
<p class="font-semibold">{foundedDispute["id"]}</p> --> <p class="font-semibold">{foundedDispute["id"]}</p> -->
<p class="text-sm mt-3">ID клиента</p> <p class="text-sm mt-3">ID клиента</p>
<p class="font-semibold">{foundedDispute["external_user_id"]}</p> <p class="font-semibold">{selectedDispute["external_user_id"]}</p>
<p class="text-sm mt-3">External ID</p> <p class="text-sm mt-3">External ID</p>
<p class="font-semibold">{foundedDispute["external_uuid"]}</p> <p class="font-semibold">{selectedDispute["external_uuid"]}</p>
<p class="text-sm mt-3">Статус</p> <p class="text-sm mt-3">Статус</p>
<p class="">{orderStatusMap[foundedDispute["status"]]}</p> <p class="">{orderStatusMap[selectedDispute["status"]]}</p>
{#if foundedDispute["token"] !== ""} {#if selectedDispute["token"] !== ""}
<p class="text-sm mt-3">Токен трейдера</p> <p class="text-sm mt-3">Токен трейдера</p>
<p>{foundedDispute["token"]}</p> <p>{selectedDispute["token"]}</p>
{/if} {/if}
{#if foundedDispute["trader_name"] !== ""} {#if selectedDispute["trader_name"] !== ""}
<p class="text-sm mt-3">Трейдер</p> <p class="text-sm mt-3">Трейдер</p>
<p>{foundedDispute["trader_name"]} {foundedDispute["surname"]}</p> <p>{selectedDispute["trader_name"]} {selectedDispute["surname"]}</p>
{/if} {/if}
{#if foundedDispute["close_reason"] !== ""} {#if selectedDispute["close_reason"] !== ""}
<p class="text-sm mt-3">Причина отклонения</p> <p class="text-sm mt-3">Причина отклонения</p>
<p>{foundedDispute["close_reason"]}</p> <p>{selectedDispute["close_reason"]}</p>
{/if} {/if}
<p class="text-sm mt-3">Сумма</p> <p class="text-sm mt-3">Сумма</p>
<p> <p>
{toValidNumberFormat(foundedDispute["summa"])} {toValidNumberFormat(selectedDispute["summa"])}
{foundedDispute["currency_code"]} {selectedDispute["currency_code"]}
<!-- ({( <!-- ({(
Number(foundedDispute["summa"]) / Number(foundedDispute["rate"]) Number(foundedDispute["summa"]) / Number(foundedDispute["rate"])
).toFixed(2)} USDT) --> ).toFixed(2)} USDT) -->
</p> </p>
<!-- <p class="text-sm mt-3">Курс</p> <!-- <p class="text-sm mt-3">Курс</p>
<p>{foundedDispute["rate"]} {foundedDispute["currency_code"]}</p> --> <p>{foundedDispute["rate"]} {foundedDispute["currency_code"]}</p> -->
{#if foundedDispute["bank_name"] !== ""} {#if selectedDispute["bank_name"] !== ""}
<p class="text-sm mt-3">Банк</p> <p class="text-sm mt-3">Банк</p>
<p>{foundedDispute["bank_name"]}</p> <p>{selectedDispute["bank_name"]}</p>
{/if} {/if}
{#if foundedDispute["name"] !== ""} {#if selectedDispute["name"] !== ""}
<p class="text-sm mt-3">Владелец</p> <p class="text-sm mt-3">Владелец</p>
<p>{foundedDispute["name"]}</p> <p>{selectedDispute["name"]}</p>
{/if} {/if}
{#if foundedDispute["cardnumber"] !== ""} {#if selectedDispute["cardnumber"] !== ""}
{#if foundedDispute["cardnumber"].length <= 16} {#if selectedDispute["cardnumber"].length <= 16}
<p class="text-sm mt-3">Карта</p> <p class="text-sm mt-3">Карта</p>
<p>{foundedDispute["cardnumber"]}</p> <p>{selectedDispute["cardnumber"]}</p>
{:else} {:else}
<p class="text-sm mt-3">QR</p> <p class="text-sm mt-3">QR</p>
<img <img
@ -303,20 +373,20 @@
/> />
{/if} {/if}
{/if} {/if}
{#if foundedDispute["phone"] !== ""} {#if selectedDispute["phone"] !== ""}
<p class="text-sm mt-3">Телефон</p> <p class="text-sm mt-3">Телефон</p>
<p>{foundedDispute["phone"]}</p> <p>{selectedDispute["phone"]}</p>
{/if} {/if}
<p class="text-sm mt-3">Время создания</p> <p class="text-sm mt-3">Время создания</p>
<p>{foundedDispute["creationtime"]}</p> <p>{selectedDispute["creationtime"]}</p>
{#if foundedDispute["closetime"] && foundedDispute["closetime"] !== ""} {#if selectedDispute["closetime"] && selectedDispute["closetime"] !== ""}
<p class="text-sm mt-3">Время закрытия</p> <p class="text-sm mt-3">Время закрытия</p>
<p>{foundedDispute["closetime"]}</p> <p>{selectedDispute["closetime"]}</p>
{/if} {/if}
<!-- <p>{foundedDispute["closetime"]}</p> --> <!-- <p>{foundedDispute["closetime"]}</p> -->
<button <button
on:click={() => { on:click={() => {
rollbackOrder(foundedDispute["uuid"]); rollbackOrder(selectedDispute["uuid"]);
}} }}
class="btn btn-outline btn-info mt-4" class="btn btn-outline btn-info mt-4"
> >
@ -334,7 +404,7 @@
> >
<button <button
on:click={() => { on:click={() => {
sendCallbackToServer(foundedDispute["uuid"]); sendCallbackToServer(selectedDispute["uuid"]);
}} }}
class="btn btn-warning btn-outline mt-1" class="btn btn-warning btn-outline mt-1"
> >
@ -377,7 +447,7 @@
class="fixed inset-0 z-[1001] bg-black bg-opacity-50 flex justify-center items-center" class="fixed inset-0 z-[1001] bg-black bg-opacity-50 flex justify-center items-center"
> >
<div class="flex flex-col p-4 bg-base-100 rounded-md gap-1"> <div class="flex flex-col p-4 bg-base-100 rounded-md gap-1">
<p>Укажите новую сумму ({foundedDispute["currency_code"]})</p> <p>Укажите новую сумму ({selectedDispute["currency_code"]})</p>
<input <input
bind:value={newSum} bind:value={newSum}
type="number" type="number"
@ -385,7 +455,7 @@
/> />
<button <button
on:click={() => { on:click={() => {
changeSum(foundedDispute["uuid"]); changeSum(selectedDispute["uuid"]);
}} }}
class="btn btn-outline btn-info" class="btn btn-outline btn-info"
> >
@ -397,7 +467,7 @@
</button> </button>
<button <button
on:click={() => { on:click={() => {
changeSumWithoutBalance(foundedDispute["uuid"]); changeSumWithoutBalance(selectedDispute["uuid"]);
}} }}
class="btn btn-outline btn-info" class="btn btn-outline btn-info"
> >
@ -430,7 +500,7 @@
/> />
<button <button
on:click={() => { on:click={() => {
changeToken(foundedDispute["uuid"], newTokenValue); changeToken(selectedDispute["uuid"], newTokenValue);
}} }}
class="btn btn-outline btn-info" class="btn btn-outline btn-info"
> >

View File

@ -78,7 +78,7 @@
disablePagesPayouts = false; disablePagesPayouts = false;
} else { } else {
let s = searchFilter.trim(); let s = searchFilter.trim();
let useUUID = s.includes("-") && s.length === 36; let useUUID = true;
if (useUUID) { if (useUUID) {
const result = await makePost( const result = await makePost(
"admin/payout/search", "admin/payout/search",
@ -106,36 +106,6 @@
numOfPagesPayouts = 1; numOfPagesPayouts = 1;
disablePagesPayouts = false; disablePagesPayouts = false;
} }
} else if ((s.length === 16 || s.length === 22) && /^\d+$/.test(s)) {
const result = await makePost(
"admin/payout/search",
{
page: currentPagePayouts,
requisite: s,
},
// @ts-ignore
makeAuthHeaderForAxios(getAuthInfo()?.a)
);
console.log(result);
if (result.error) {
payouts = [];
numOfPagesPayouts = 1;
disablePagesPayouts = false;
sayError("Ошибка поиска");
return;
}
if (typeof result.data !== "string") {
payouts = result.data.data;
numOfPagesPayouts = result.data.pages === 0 ? 1 : result.data?.pages;
disablePagesPayouts = false;
} else {
payouts = [];
numOfPagesPayouts = 1;
disablePagesPayouts = false;
}
} else {
sayError("Проверьте данные для поиска");
disablePagesPayouts = false;
} }
} }
} }
@ -526,7 +496,7 @@
bind:value={searchFilter} bind:value={searchFilter}
type="text" type="text"
class="input input-bordered max-w-full w-full rounded-[10px]" class="input input-bordered max-w-full w-full rounded-[10px]"
placeholder="UUID или Реквизит" placeholder="UUID, External ID или Реквизит"
/> />
<div class="flex gap-[5px]"> <div class="flex gap-[5px]">
<button <button