This commit is contained in:
you 2024-09-10 11:42:43 +03:00
parent 9258c40f25
commit 989d0032cd
5 changed files with 516 additions and 117 deletions

59
package-lock.json generated
View File

@ -14,6 +14,7 @@
"qrcode": "^1.5.3",
"serialize-error": "^11.0.3",
"sirv-cli": "^2.0.0",
"svelte-feather-icons": "^4.1.0",
"svelte-preprocess": "^5.1.3",
"svelte-turnstile": "^0.5.0"
},
@ -23,6 +24,7 @@
"@rollup/plugin-terser": "^0.4.0",
"@zerodevx/svelte-toast": "^0.9.5",
"autoprefixer": "^10.4.19",
"daisyui": "^4.12.10",
"postcss": "^8.4.38",
"rollup": "^3.15.0",
"rollup-plugin-css-only": "^4.3.0",
@ -699,6 +701,17 @@
"node": ">= 8"
}
},
"node_modules/css-selector-tokenizer": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
"integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"fastparse": "^1.1.2"
}
},
"node_modules/cssesc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@ -711,6 +724,36 @@
"node": ">=4"
}
},
"node_modules/culori": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz",
"integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/daisyui": {
"version": "4.12.10",
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.10.tgz",
"integrity": "sha512-jp1RAuzbHhGdXmn957Z2XsTZStXGHzFfF0FgIOZj3Wv9sH7OZgLfXTRZNfKVYxltGUOBsG1kbWAdF5SrqjebvA==",
"dev": true,
"license": "MIT",
"dependencies": {
"css-selector-tokenizer": "^0.8",
"culori": "^3",
"picocolors": "^1",
"postcss-js": "^4"
},
"engines": {
"node": ">=16.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/daisyui"
}
},
"node_modules/date-fns": {
"version": "3.0.2-rc.1",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.0.2-rc.1.tgz",
@ -830,6 +873,13 @@
"node": ">=8.6.0"
}
},
"node_modules/fastparse": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
"dev": true,
"license": "MIT"
},
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@ -2368,6 +2418,15 @@
"node": ">= 8"
}
},
"node_modules/svelte-feather-icons": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/svelte-feather-icons/-/svelte-feather-icons-4.1.0.tgz",
"integrity": "sha512-fcTL4VzEN4BoccQJjKiui0b9DWEsmO6zGpI0tQTJbthRtNrYheoU487zyA1BD8rj9kj6jbKGmGVo7zbSdRvMvA==",
"license": "MIT",
"dependencies": {
"svelte": "^3.38.2"
}
},
"node_modules/svelte-preprocess": {
"version": "5.1.3",
"resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz",

View File

@ -14,6 +14,7 @@
"@rollup/plugin-terser": "^0.4.0",
"@zerodevx/svelte-toast": "^0.9.5",
"autoprefixer": "^10.4.19",
"daisyui": "^4.12.10",
"postcss": "^8.4.38",
"rollup": "^3.15.0",
"rollup-plugin-css-only": "^4.3.0",
@ -29,6 +30,7 @@
"qrcode": "^1.5.3",
"serialize-error": "^11.0.3",
"sirv-cli": "^2.0.0",
"svelte-feather-icons": "^4.1.0",
"svelte-preprocess": "^5.1.3",
"svelte-turnstile": "^0.5.0"
}

View File

@ -10,13 +10,12 @@
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Onest:wght@100..900&display=swap" rel="stylesheet">
<link rel='stylesheet' href='/hpp-platform-build/bundle.css'>
<!-- <link rel="stylesheet" href="/build/dark.css"> -->
<script defer src='/hpp-platform-build/bundle.js'></script>
</head>
<body>
<body class="font-onest">
</body>
</html>

View File

@ -15,6 +15,18 @@
} from "date-fns";
import { ca, el, ru } from "date-fns/locale";
import { sleep } from "../lib/packSmall";
import {
CheckCircleIcon,
CheckIcon,
CopyIcon,
XCircleIcon,
ClockIcon,
XOctagonIcon,
} from "svelte-feather-icons";
import Kgzsvg from "../lib/kgzsvg.svelte";
import Russvg from "../lib/russvg.svelte";
const apiBase = "https://24paymentgateway.ru/api/v1/";
let showAccept = false;
@ -35,9 +47,17 @@
6) POST: /api/v1/cancelOrder
*/
// let tries = 0;
// indexes in reqs: [0] - Имя; [1] - cardnumber; [2] - phone
let orderAmount = "";
let currency = "";
let orderCreationTime = "0";
let tokenURL = "";
let orderID = "";
let invalidURL = true;
let invalidURL = false;
let validJWT = false;
async function getTokenFromURL() {
const queryString = window.location.search;
@ -49,14 +69,17 @@
validateJWT(tokenURL);
// //console.log();
if (validJWT !== true) {
sayError("Неверный ID заявки");
// sayError("Неверный ID заявки");
console.error("ID error");
invalidURL = true;
} else {
await getOrderStatus();
//console.log(orderStatus);
// getPaymentMethods(); //delete it
switch (orderStatus) {
case 1:
getPaymentMethods();
showBankSelection = true;
break;
case 2:
showReject = true;
@ -69,15 +92,16 @@
break;
case 5:
getPaymentMethods();
startPingingStatus();
break;
case 6:
showTimeout = true;
showTimeout = true; //uncomment
break;
default:
break;
}
invalidURL = false;
// showBankSelection = true; //delete it
// getPaymentMethods();
}
// //console.log(urlParams.get("token"));
@ -88,7 +112,8 @@
try {
let t = jwtDecode(token);
orderID = t["order_id"];
// //console.log(t);
currency = t["out_currency_code"];
console.log(t);
validJWT = true;
} catch (error) {
validJWT = false;
@ -102,7 +127,7 @@
const originalDate = parseISO(src);
//console.log(originalDate);
const newDate = addMinutes(originalDate, 10);
const newDate = addMinutes(originalDate, 3);
timeLeftInterval = setInterval(() => {
const now = new Date();
const minutes = differenceInMinutes(newDate, now);
@ -113,8 +138,7 @@
const formattedSeconds = String(seconds).padStart(2, "0");
timeLeft = `${formattedMinutes}:${formattedSeconds}`;
if(timeLeft === "00:00" || timeLeft.includes("-"))
{
if (timeLeft === "00:00" || timeLeft.includes("-")) {
orderStatus = 6;
showTimeout = true;
clearInterval(timeLeftInterval);
@ -132,6 +156,7 @@
}
let selectedBank = "";
let selectedBankName = "";
let depositTimeLeft = 60; //seconds
let totalDepositTimeLeft = 600; //seconds
let requestingReqs = false;
@ -207,7 +232,7 @@
let checkCaptchaInterval = setInterval(() => {
const form = document.getElementById(
"8d895e75b7a0def7699e6c4d7cd54c51d9844775bd5fd5e8e3d34748",
"8d895e75b7a0def7699e6c4d7cd54c51d9844775bd5fd5e8e3d34748"
);
const captchaInput = form.querySelector("input");
try {
@ -242,19 +267,22 @@
"Content-Type": "application/json",
},
});
paymentMethods = result.data.data;
showBankSelection = true;
paymentMethods = result.data.data ?? [];
// showBankSelection = true;
} catch (error) {
sayError("Не удалось получить доступные банки. Ошибка #8787");
// sayError("");
invalidURL = true;
// sayError("Не удалось получить доступные банки");
}
}
// getPaymentMethods();
let requisites = [];
async function getRequisites() {
showBankSelection = false;
requestingReqs = true;
disableGetReqBtn = true;
await delay(2000);
await delay(1500);
try {
let result = await axios.post(
apiBase + "getRequisites",
@ -266,18 +294,23 @@
Authorization: "Bearer " + tokenURL,
"Content-Type": "application/json",
},
},
}
);
requestingReqs = false;
requisites = result.data["requisite"];
requisites = result.data["requisite"] ?? [];
orderAmount = result.data["amount"];
// console.log(result);
showReqs = true;
startPingingStatus();
calculateDate(result.data["requisite_creation_time"]);
} catch (error) {
sayError("Срок заявки истёк");
// sayError("Срок платежа истёк");
showTimeout = true;
orderStatus = 6;
}
// requestingReqs = false; // delete it
// showReqs = true; //delete it
// requisites = ["Бектур Г.", "2342234223422342", "897653453434"]; //delete it
}
// getRequisites();
@ -311,6 +344,7 @@
selectedBank = result.data["bank_id"] + "";
requisites = result.data["requisite"];
orderAmount = result.data["amount"];
calculateDate(result.data["requisite_creation_time"]);
disableGetReqBtn = true;
@ -328,9 +362,20 @@
// getOrderStatus();
// }
}
// orderAmount = "777777"; //delete it
}
let value_disputeSum = 0;
async function loadReceipt() {
console.log(";");
if (Number(value_disputeSum) < 350) {
sayError((lang === 'kgz' ? "Чыныгы сумманы киргизиңиз!":"Укажите верную сумму!"));
return;
}
if (document.getElementById("loaded-file").files.length < 1) {
sayError((lang === 'kgz' ? "Файлды тиркөө!":"Загрузите файл!"));
return;
}
const formData = new FormData();
let file = document.getElementById("loaded-file").files[0];
// formData.append("uuid", orderID);
@ -344,64 +389,68 @@
});
// //console.log(result);
if (result.status > 300) {
sayError("Что-то пошло не так");
sayError((lang === 'kgz' ? "Талаш ачык эмес":"Не удалось открыть спор"));
return;
}
sayInfo("Успешно!");
sayInfo((lang === 'kgz' ? "Ийгиликтүү!":"Успешно!"));
}
async function createDispute() {
let result = await axios.post(
apiBase + "createDispute",
{
//data
},
{
headers: {
Authorization: "Bearer " + "jwt",
"Content-Type": "application/json",
},
},
);
// //console.log(result);
}
// async function createDispute() {
// let result = await axios.post(
// apiBase + "createDispute",
// {
// //data
// },
// {
// headers: {
// Authorization: "Bearer " + "jwt",
// "Content-Type": "application/json",
// },
// }
// );
// // //console.log(result);
// }
async function choosePaymentMethod() {
let result = await axios.post(
apiBase + "choosePaymentMethod",
{
//data
},
{
headers: {
Authorization: "Bearer " + "jwt",
"Content-Type": "application/json",
},
},
);
//console.log(result);
}
// async function choosePaymentMethod() {
// let result = await axios.post(
// apiBase + "choosePaymentMethod",
// {
// //data
// },
// {
// headers: {
// Authorization: "Bearer " + "jwt",
// "Content-Type": "application/json",
// },
// }
// );
// //console.log(result);
// }
async function cancelOrder() {
let result = await axios.post(
apiBase + "cancelOrder",
{
//data
},
{
headers: {
Authorization: "Bearer " + tokenURL,
"Content-Type": "application/json",
try {
let result = await axios.post(
apiBase + "cancelOrder",
{
},
},
);
//console.log(result);
{
headers: {
Authorization: "Bearer " + tokenURL,
"Content-Type": "application/json",
},
}
);
window.location.reload();
} catch (error) {
sayError((lang === 'kgz' ? "Төлөмдү жокко чыгаруу мүмкүн болгон жок":"Не удалось отменить платёж!"));
}
}
async function copyToClipboard(val) {
try {
await navigator.clipboard.writeText(val);
sayInfo("Скопировано!");
sayInfo((lang === 'kgz' ? "Көчүрүлдү":"Скопировано!"));
} catch (err) {
//console.error("Failed to copy: ", err);
}
@ -446,9 +495,258 @@
await delay(1500);
ping();
}
let showOpenDisputeForDumbs = false;
let copiedCard = false;
let copiedPhone = false;
const langMap = {
"kgz": "Кыргызский",
"rus": "Русский"
};
let lang = "kgz";
// showReject = true;
</script>
<div class="fixed z-[5] top-0 left-0 right-0 pointer-events-none flex justify-center gap-2">
<button class="btn btn-outline btn-sm mt-1 justify-center items-center pointer-events-auto"
on:click={()=>{
lang = 'kgz';
}}>
<Kgzsvg />
{langMap['kgz']}</button>
<button class="btn btn-outline btn-sm mt-1 justify-center items-center pointer-events-auto"
on:click={()=>{
lang = 'rus';
}}>
<Russvg />
{langMap['rus']}</button>
</div>
{#if !invalidURL && !showAccept && !showComplete && !showReject}
<div
class="fixed inset-0 flex flex-col items-center font-onest overflow-y-auto"
>
<div class="p-8 rounded-md flex flex-col items-center min-h-[80%]">
<p class="text-sm mt-4">{lang === 'kgz' ? "Төлөм номери":"Номер платежа"}</p>
<p class="text-sm">{orderID}</p>
{#if Number(orderAmount) !== 0 || Number(orderAmount)}
<p
class={(orderAmount.length > 6 ? "text-4xl" : "text-5xl") +
" font-bold mt-4"}
>
{Number(orderAmount)}
{currency}
</p>
{/if}
<button
on:click={() => {
if (window.confirm((lang === 'kgz' ? "Төлөмдү жокко чыгаргыңыз келгенине ишенимдүүсүзбү?":"Вы уверены, что хотите отменить платёж?"))) {
cancelOrder();
}
}}
class="btn btn-outline btn-error btn-sm mt-4">{lang === 'kgz' ? "Төлөмдү жокко чыгаруу":"Отменить платёж"}</button
>
<!-- {#if showBankSelection} -->
{#if showBankSelection}
<p class="mt-4">{lang === 'kgz' ? "Төлөм үчүн банкты тандаңыз":"Выберите банк для платежа"}</p>
<div class="flex flex-col p-4 w-full gap-1">
{#if paymentMethods.length >= 1}
{#each paymentMethods as pm}
<div class="flex max-h-[60px] w-full">
<button
on:click={async () => {
selectedBank = pm["bank_id"];
selectedBankName = pm["bank_name"];
await sleep(300);
getRequisites();
}}
class={"btn btn-outline h-auto p-2 flex items-center justify-center w-full border-2 " +
(selectedBank === pm["bank_id"] ? "btn-success" : "")}
>
<div
class="flex justify-center items-center max-w-[150px] max-h-[100%] overflow-hidden pointer-events-none"
>
{@html pm["icon"]}
</div>
</button>
</div>
{/each}
{:else}
<span class="loading loading-lg self-center"></span>
{/if}
</div>
{:else if requestingReqs}
<p class="mt-4">{lang === 'kgz' ? "Реквизиттерди күтүңүз":"Ожидайте реквизитов"}</p>
<span class="loading loading-lg self-center"></span>
{:else if showReqs}
<p class="mt-4 text-error font-semibold text-center">
{lang === 'kgz' ? "Көрсөтүлгөн сумманы бир төлөм менен төлөңүз! Туура эмес сумма кайтарылбайт!":"Переведите указанную сумму одним платежом! Неверная сумма возврату не подлежит!"}
</p>
<!-- <p class="mt-4 text-sm opacity-50 self-start">Банк</p>
<p class="self-start text-xl font-bold">{selectedBankName}</p> -->
<p class="mt-4 text-sm opacity-50 self-start">{lang === 'kgz' ? "Карта номери":"Номер карты"}</p>
<div class="flex self-start gap-2 items-center">
<p class="self-start text-xl font-bold">{requisites[1]}</p>
<button
on:click={() => {
copiedCard = true;
copyToClipboard(requisites[1]);
}}
class={"btn btn-outline btn-xs " + (copiedCard ? "btn-success" : "")}
>{#if !copiedCard}
<CopyIcon size={"12"} />
{:else}
<CheckIcon size={"12"} />
{/if}</button
>
</div>
<p class="mt-4 text-sm opacity-50 self-start">{lang === 'kgz' ? "Телефон номери":"Номер телефона"}</p>
<!-- indexes in reqs: [0] - Имя; [1] - cardnumber; [2] - phone -->
<div class="flex self-start gap-2 items-center">
<p class="self-start text-xl font-bold">{requisites[2]}</p>
<button
on:click={() => {
copiedPhone = true;
copyToClipboard(requisites[2]);
}}
class={"btn btn-outline btn-xs " + (copiedPhone ? "btn-success" : "")}
>
{#if !copiedPhone}
<CopyIcon size={"12"} />
{:else}
<CheckIcon size={"12"} />
{/if}
</button>
</div>
<p class="mt-4 text-sm opacity-50 self-start">{lang === 'kgz' ? "Алуучу":"Получатель"}</p>
<p class="self-start text-xl font-bold">{requisites[0]}</p>
<p class="flex items-center gap-2 mt-4">
{lang === 'kgz' ? "Каражаттын түшүүсүн күтүү":"Ожидание поступления средств"} <span class="loading loading-sm"></span>
</p>
<p class="flex items-center gap-2 mt-4">{lang === 'kgz' ? "Төлөө убактысы":"Время на оплату"}: {timeLeft}</p>
<button
on:click={() => {
showHelpSection = true;
}}
class="btn btn-outline mt-4">{lang === 'kgz' ? "Диспут ачуу (каражаттын түшүүсүндө көйгөйлөр)":"Открыть спор"}</button
>
{/if}
</div>
</div>
{/if}
{#if showHelpSection}
<div
class="fixed inset-0 z-[100] flex flex-col items-center justify-center font-onest overflow-y-auto bg-base-300"
>
<div class="p-8 rounded-md flex flex-col">
<p>{lang === 'kgz' ? "Сиз которгон сумманы көрсөтүңүз":"Укажите сумму, которую Вы перевели"}</p>
<input
type="number"
bind:value={value_disputeSum}
class="input input-bordered"
/>
<p class="mt-4">{lang==='kgz' ? "Төлөмдү тастыкташ үчүн, чекти жүктөңүз":"Загрузите чек, чтобы мы могли подтвердить платёж"}</p>
<input
type="file"
id="loaded-file"
class="file-input w-full max-w-xs"
accept=".png, .jpg, .jpeg, .pdf"
/>
<button
on:click={() => {
loadReceipt();
}}
class="btn btn-success mt-4">{lang==='kgz' ? "Жөнөтүү":"Отправить"}</button
>
<button
on:click={() => {
showHelpSection = false;
}}
class="btn mt-1">{lang==='kgz' ? "Артка":"Назад"}</button
>
</div>
</div>
{/if}
{#if invalidURL}
<div
class="fixed inset-0 overflow-auto flex flex-col justify-center items-center gap-4 p-8 bg-base-100"
>
<div class="flex flex-col justify-center items-center gap-4">
<XCircleIcon size={"48"} class={"text-error"} />
<p class="text-center font-semibold">
{lang==='kgz' ? "Биз мындай номер менен төлөм таба албадык":"Мы не смогли найти платёж с таким номером"}
</p>
</div>
</div>
{/if}
{#if showAccept}
<div
class="fixed inset-0 overflow-auto flex flex-col justify-center items-center gap-4 p-8 bg-base-100"
>
<div class="flex flex-col gap-1 justify-center items-center">
<CheckCircleIcon size={"48"} class="text-success" />
<p class="text-xl font-bold">{lang==='kgz' ? "Төлөм аткарылды":"Платёж исполнен"}</p>
<p class="text-sm mt-2">{lang==='kgz' ? "Төлөм номери":"Номер платежа"}</p>
<p class="text-sm">{orderID}</p>
<p class="text-sm mt-2">E-mail: support@24paymentgateway.ru</p>
<button
on:click={() => {
showHelpSection = true;
}}
class="btn btn-outline mt-4">{lang === 'kgz' ? "Диспут ачуу (каражаттын түшүүсүндө көйгөйлөр)":"Открыть спор"}</button
>
</div>
</div>
{/if}
{#if showTimeout}
<div
class="fixed inset-0 overflow-auto flex flex-col justify-center items-center gap-4 p-8 bg-base-100"
>
<div class="flex flex-col justify-center items-center">
<ClockIcon size={"48"} class="text-error" />
<p class="text-xl font-bold">{lang==='kgz' ? "Төлөмдүн убактысы бүттү":"Время платежа истекло"}</p>
<p class="text-sm mt-4">{lang==='kgz' ? "Төлөм номери":"Номер платежа"}</p>
<p class="text-sm">{orderID}</p>
<p class="text-sm mt-4">E-mail: support@24paymentgateway.ru</p>
<button
on:click={() => {
showHelpSection = true;
}}
class="btn btn-outline mt-4">{lang === 'kgz' ? "Диспут ачуу (каражаттын түшүүсүндө көйгөйлөр)":"Открыть спор"}</button
>
</div>
</div>
{/if}
{#if showReject}
<div
class="fixed inset-0 overflow-auto flex flex-col justify-center items-center gap-4 p-8 bg-base-100"
>
<div class="flex flex-col justify-center items-center">
<XOctagonIcon size={"48"} class="text-error" />
<p class="text-xl font-bold">{lang==='kgz' ? "Төлөм четке кагылды":"Платёж отклонён"}</p>
<p class="text-sm mt-4">{lang==='kgz' ? "Төлөм номери":"Номер платежа"}</p>
<p class="text-sm">{orderID}</p>
<p class="text-sm mt-4">E-mail: support@24paymentgateway.ru</p>
<button
on:click={() => {
showHelpSection = true;
}}
class="btn btn-outline mt-4">{lang === 'kgz' ? "Диспут ачуу (каражаттын түшүүсүндө көйгөйлөр)":"Открыть спор"}</button
>
</div>
</div>
{/if}
<!-- {#if invalidURL}
<div
class="fixed inset-0 bg-slate-950 w-full min-h-screen overflow-auto flex flex-col justify-center items-center gap-4 p-8 text-white"
>
@ -544,6 +842,16 @@
{#if !showHelpSection}
<div class="w-full flex p-8 rounded-3xl bg-indigo-950">
<div class="flex flex-col gap-2 w-full">
<p
class="font-bold text-green-500 text-2xl p-2 bg-black rounded-md"
>
Переведите точную сумму одним платежом: {orderAmount}{currency}
</p>
<p
class="font-bold text-red-500 text-2xl p-2 bg-black rounded-md"
>
Неверная сумма перевода возврату не подлежит!
</p>
<p class="text-lg">Реквизиты</p>
<div
class="flex mt-2 w-full gap-4 items-center justify-center p-2 bg-indigo-900 rounded-xl"
@ -634,8 +942,6 @@
<p class="text-xl font-semibold">Загружен файл: {loadedFile}</p>
<button
on:click={() => {
// window.open("https://www.google.com", "__blank");
showLoadingScreen = true;
loadReceipt();
}}
@ -693,10 +999,6 @@
class="flex flex-col items-center w-full flex-grow-0 bg-slate-900 p-8 gap-2 rounded-3xl"
>
<div class="flex items-center justify-start gap-2 text-lg">
<p class="text-white text-lg">
<a class="underline" href="https://t.me/hosta_pay">@hosta_pay</a
>
</p>
</div>
<div class="flex items-center justify-start gap-2 text-lg">
<p>support@24paymentgateway.ru</p>
@ -725,12 +1027,6 @@
<div class="flex justify-end gap-8">
<button
on:click={() => {
// requestingReqs = false;
// showReqs = false;
// stopTimer();
// stopTotalTimer();
// showAlertQuit = false;
// window.open("https://www.google.com", "__blank");
cancelOrder();
window.location.reload();
}}
@ -764,14 +1060,15 @@
Это не займет много времени
</p>
<p class="text-white opacity-50 text-sm mt-1">Номер платежа: {orderID}</p>
<p class="text-white opacity-50 text-sm mt-1">
Телеграм: <a class="underline" href="https://t.me/hosta_pay"
>@hosta_pay</a
>
</p>
<p class="text-white opacity-50 text-sm">
Почта: support@24paymentgateway.ru
</p>
<button
on:click={() => {
showOpenDisputeForDumbs = true;
}}
class="btn btn-outline mt-4">Чтобы открыть спор, нажмите сюда</button
>
</div>
{/if}
{/if}
@ -798,14 +1095,15 @@
</svg>
<p class="text-xl font-bold">Заявка исполнена</p>
<p class="text-white opacity-50 text-sm">Номер платежа: {orderID}</p>
<p class="text-white opacity-50 text-sm">
Телеграм: <a class="underline" href="https://t.me/hosta_pay"
>@hosta_pay</a
>
</p>
<p class="text-white opacity-50 text-sm">
Почта: support@24paymentgateway.ru
</p>
<button
on:click={() => {
showOpenDisputeForDumbs = true;
}}
class="btn btn-outline mt-4">Чтобы открыть спор, нажмите сюда</button
>
</div>
</div>
{:else if showTimeout}
@ -830,14 +1128,15 @@
</svg>
<p class="text-xl font-bold">Время заявки истекло</p>
<p class="text-white opacity-50 text-sm">Номер платежа: {orderID}</p>
<p class="text-white opacity-50 text-sm">
Телеграм: <a class="underline" href="https://t.me/hosta_pay"
>@hosta_pay</a
>
</p>
<p class="text-white opacity-50 text-sm">
Почта: support@24paymentgateway.ru
</p>
<button
on:click={() => {
showOpenDisputeForDumbs = true;
}}
class="btn btn-outline mt-4">Чтобы открыть спор, нажмите сюда</button
>
</div>
</div>
{:else if showReject}
@ -861,29 +1160,66 @@
</svg>
<p class="text-xl font-bold">Заявка отклонена</p>
<p class="text-white opacity-50 text-sm">Номер платежа: {orderID}</p>
<p class="text-white opacity-50 text-sm">
Телеграм: <a class="underline" href="https://t.me/hosta_pay"
>@hosta_pay</a
>
</p>
<p class="text-white opacity-50 text-sm">
Почта: support@24paymentgateway.ru
</p>
</div>
</div>
<!-- <svg width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">
<title>cross-circle</title>
<desc>Created with Sketch Beta.</desc>
<defs>
</defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">
<g id="Icon-Set" sketch:type="MSLayerGroup" transform="translate(-568.000000, -1087.000000)" fill="#000000">
<path d="M584,1117 C576.268,1117 570,1110.73 570,1103 C570,1095.27 576.268,1089 584,1089 C591.732,1089 598,1095.27 598,1103 C598,1110.73 591.732,1117 584,1117 L584,1117 Z M584,1087 C575.163,1087 568,1094.16 568,1103 C568,1111.84 575.163,1119 584,1119 C592.837,1119 600,1111.84 600,1103 C600,1094.16 592.837,1087 584,1087 L584,1087 Z M589.717,1097.28 C589.323,1096.89 588.686,1096.89 588.292,1097.28 L583.994,1101.58 L579.758,1097.34 C579.367,1096.95 578.733,1096.95 578.344,1097.34 C577.953,1097.73 577.953,1098.37 578.344,1098.76 L582.58,1102.99 L578.314,1107.26 C577.921,1107.65 577.921,1108.29 578.314,1108.69 C578.708,1109.08 579.346,1109.08 579.74,1108.69 L584.006,1104.42 L588.242,1108.66 C588.633,1109.05 589.267,1109.05 589.657,1108.66 C590.048,1108.27 590.048,1107.63 589.657,1107.24 L585.42,1103.01 L589.717,1098.71 C590.11,1098.31 590.11,1097.68 589.717,1097.28 L589.717,1097.28 Z" id="cross-circle" sketch:type="MSShapeGroup">
</path>
</g>
</g>
</svg> -->
{/if}
{#if showOpenDisputeForDumbs}
<div
class="fixed z-50 inset-0 bg-slate-950 flex justify-center items-center text-white"
>
<div class="flex flex-col gap-1 justify-center p-2">
<p class="text-xl">Укажите сумму (<span class="text-red-500">сумма меньше 350 не рассматривается!</span>):</p>
<input
bind:value={value_disputeSum}
type="number"
class="input input-bordered"
/>
<p class="text-xl mt-2">
Загрузите чек, чтобы мы могли подтвердить перевод
</p>
<button
on:click={() => {
document.getElementById("loaded-file").click();
}}
class={"btn btn-info btn-outline min-w-[340px]"}>Загрузить чек</button
>
<p class="">Загружен файл: {loadedFile}</p>
{#if loadedFile !== ""}
<button
on:click={() => {
// window.open("https://www.google.com", "__blank");
showLoadingScreen = true;
loadReceipt();
}}
disabled={loadedFile === ""}
class={"btn btn-success btn-outline btn-lg min-w-[340px]"}
>Открыть спор</button
>
{/if}
<input
on:change={(e) => {
loadedFile = e.target.files[0].name;
}}
id="loaded-file"
type="file"
hidden
accept=".png, .jpg, .jpeg, .pdf"
/>
<button
on:click={() => {
value_disputeSum = 0;
try {
document.getElementById("loaded-file").value = "";
loadedFile = "";
} catch (error) {}
showOpenDisputeForDumbs = false;
}}
class={"btn btn-outline min-w-[340px] mt-2"}>Назад</button
>
</div>
</div>
{/if} -->

View File

@ -6,12 +6,15 @@ export default {
theme: {
extend: {
fontFamily: {
ibm: ['"IBM Plex Sans"', ...defaultTheme.fontFamily.sans],
// raleway: ['"Raleway"', ...defaultTheme.fontFamily.sans],
// robotoSlab: ['"Roboto Slab"', ...defaultTheme.fontFamily.sans],
}
onest: ['Onest', 'sans-serif'],
},
},
},
plugins: [
require('daisyui'),
],
daisyui: {
themes: ["light"],
},
}