diff --git a/package-lock.json b/package-lock.json index 493398b..82432fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 9d832cb..4f3ca0c 100644 --- a/package.json +++ b/package.json @@ -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" } diff --git a/public/index.html b/public/index.html index 81ee695..b514a20 100644 --- a/public/index.html +++ b/public/index.html @@ -10,13 +10,12 @@ - - + - + diff --git a/src/Pages/DepositPage.svelte b/src/Pages/DepositPage.svelte index c860ac7..cc577d2 100644 --- a/src/Pages/DepositPage.svelte +++ b/src/Pages/DepositPage.svelte @@ -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; +
+ + +
+ +{#if !invalidURL && !showAccept && !showComplete && !showReject} +
+
+

{lang === 'kgz' ? "Төлөм номери":"Номер платежа"}

+

{orderID}

+ {#if Number(orderAmount) !== 0 || Number(orderAmount)} +

6 ? "text-4xl" : "text-5xl") + + " font-bold mt-4"} + > + {Number(orderAmount)} + {currency} +

+ {/if} + + + {#if showBankSelection} +

{lang === 'kgz' ? "Төлөм үчүн банкты тандаңыз":"Выберите банк для платежа"}

+
+ {#if paymentMethods.length >= 1} + {#each paymentMethods as pm} +
+ +
+ {/each} + {:else} + + {/if} +
+ {:else if requestingReqs} +

{lang === 'kgz' ? "Реквизиттерди күтүңүз":"Ожидайте реквизитов"}

+ + {:else if showReqs} +

+ {lang === 'kgz' ? "Көрсөтүлгөн сумманы бир төлөм менен төлөңүз! Туура эмес сумма кайтарылбайт!":"Переведите указанную сумму одним платежом! Неверная сумма возврату не подлежит!"} +

+ +

{lang === 'kgz' ? "Карта номери":"Номер карты"}

+
+

{requisites[1]}

+ +
+

{lang === 'kgz' ? "Телефон номери":"Номер телефона"}

+ +
+

{requisites[2]}

+ +
+

{lang === 'kgz' ? "Алуучу":"Получатель"}

+

{requisites[0]}

+

+ {lang === 'kgz' ? "Каражаттын түшүүсүн күтүү":"Ожидание поступления средств"} +

+

{lang === 'kgz' ? "Төлөө убактысы":"Время на оплату"}: {timeLeft}

+ + {/if} +
+
+{/if} + +{#if showHelpSection} +
+
+

{lang === 'kgz' ? "Сиз которгон сумманы көрсөтүңүз":"Укажите сумму, которую Вы перевели"}

+ +

{lang==='kgz' ? "Төлөмдү тастыкташ үчүн, чекти жүктөңүз":"Загрузите чек, чтобы мы могли подтвердить платёж"}

+ + + +
+
+{/if} + {#if invalidURL} +
+
+ +

+ {lang==='kgz' ? "Биз мындай номер менен төлөм таба албадык":"Мы не смогли найти платёж с таким номером"} +

+
+
+{/if} + +{#if showAccept} +
+
+ +

{lang==='kgz' ? "Төлөм аткарылды":"Платёж исполнен"}

+

{lang==='kgz' ? "Төлөм номери":"Номер платежа"}

+

{orderID}

+

E-mail: support@24paymentgateway.ru

+ +
+
+{/if} + +{#if showTimeout} +
+
+ +

{lang==='kgz' ? "Төлөмдүн убактысы бүттү":"Время платежа истекло"}

+

{lang==='kgz' ? "Төлөм номери":"Номер платежа"}

+

{orderID}

+

E-mail: support@24paymentgateway.ru

+ +
+
+{/if} + +{#if showReject} +
+
+ +

{lang==='kgz' ? "Төлөм четке кагылды":"Платёж отклонён"}

+

{lang==='kgz' ? "Төлөм номери":"Номер платежа"}

+

{orderID}

+

E-mail: support@24paymentgateway.ru

+ +
+
+{/if} + + {/if} + +{#if showOpenDisputeForDumbs} +
+
+

Укажите сумму (сумма меньше 350 не рассматривается!):

+ +

+ Загрузите чек, чтобы мы могли подтвердить перевод +

+ +

Загружен файл: {loadedFile}

+ {#if loadedFile !== ""} + + {/if} + { + loadedFile = e.target.files[0].name; + }} + id="loaded-file" + type="file" + hidden + accept=".png, .jpg, .jpeg, .pdf" + /> + +
+
+{/if} --> diff --git a/tailwind.config.js b/tailwind.config.js index a5496d9..417c35a 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -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"], + }, }