From 13a23c0b2787a0de26cc7b6b642a669653d3f92e Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 13:44:59 +0900 Subject: [PATCH 1/7] update --- package.json | 1 + pnpm-lock.yaml | 14 ++++++++ .../common/ui/cash-receipt-sample.tsx | 34 +++++++++++++++++-- 3 files changed, 47 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0b18402..9fbffb8 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "react-router": "^7.8.2", "react-router-dom": "^7.8.2", "react-slidedown": "^2.4.7", + "react-spinners": "^0.17.0", "react-tabs": "^6.1.0", "react-toastify": "^11.0.5", "react-tooltip": "^5.29.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a09a5ce..a64cabc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -209,6 +209,9 @@ importers: react-slidedown: specifier: ^2.4.7 version: 2.4.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react-spinners: + specifier: ^0.17.0 + version: 0.17.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react-tabs: specifier: ^6.1.0 version: 6.1.0(react@19.1.1) @@ -4829,6 +4832,12 @@ packages: react: ^16.3.0 || 17 react-dom: ^16.3.0 || 17 + react-spinners@0.17.0: + resolution: {integrity: sha512-L/8HTylaBmIWwQzIjMq+0vyaRXuoAevzWoD35wKpNTxxtYXWZp+xtgkfD7Y4WItuX0YvdxMPU79+7VhhmbmuTQ==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-tabs@6.1.0: resolution: {integrity: sha512-6QtbTRDKM+jA/MZTTefvigNxo0zz+gnBTVFw2CFVvq+f2BuH0nF0vDLNClL045nuTAdOoK/IL1vTP0ZLX0DAyQ==} peerDependencies: @@ -11218,6 +11227,11 @@ snapshots: react-dom: 19.1.1(react@19.1.1) tslib: 2.8.1 + react-spinners@0.17.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1): + dependencies: + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + react-tabs@6.1.0(react@19.1.1): dependencies: clsx: 2.1.1 diff --git a/src/entities/common/ui/cash-receipt-sample.tsx b/src/entities/common/ui/cash-receipt-sample.tsx index 71f0917..51107ef 100644 --- a/src/entities/common/ui/cash-receipt-sample.tsx +++ b/src/entities/common/ui/cash-receipt-sample.tsx @@ -3,11 +3,20 @@ import { snackBar } from '@/shared/lib'; import { toPng } from 'html-to-image'; import { useTranslation } from 'react-i18next'; import '@/shared/ui/assets/css/style-tax-invoice.css'; -import { useEffect } from 'react'; +import { useEffect, useState, CSSProperties } from 'react'; +import { ClipLoader, FadeLoader } from 'react-spinners'; import { NumericFormat } from 'react-number-format'; import { AmountInfo, CustomerInfo, IssueInfo, MerchantInfo, ProductInfo, TransactionInfo } from '@/entities/transaction/model/types'; import moment from 'moment'; +const override: CSSProperties = { + position: 'fixed', + display: 'block', + margin: '0 auto', + top: '50%', + left: '50%', +}; + export interface CashReceiptSampleProps { cashReceiptSampleOn: boolean; setCashReceiptSampleOn: (cashReceiptSampleOn: boolean) => void; @@ -29,6 +38,9 @@ export const CashReceiptSample = ({ customerInfo, productInfo }: CashReceiptSampleProps) => { + let [loading, setLoading] = useState(true); + let [color, setColor] = useState('#0b0606'); + const { t } = useTranslation(); const downloadImage = () => { @@ -39,8 +51,10 @@ export const CashReceiptSample = ({ link.href = image; link.click(); snackBar(t('common.imageRequested'), function(){ - //onClickToClose(); + onClickToClose(); }); + }).finally(() => { + setLoading(false); }); }; const onClickToClose = () => { @@ -66,6 +80,7 @@ export const CashReceiptSample = ({ useEffect(() => { if(!!cashReceiptSampleOn){ + setLoading(true); setTimeout(() => { downloadImage(); }, 300); @@ -241,6 +256,21 @@ export const CashReceiptSample = ({ + { !!loading && + <> +
+ + + } ); }; \ No newline at end of file From 9603c769a6a582b2c24ad1f1766a21d7744bab71 Mon Sep 17 00:00:00 2001 From: HyeonJongKim Date: Wed, 12 Nov 2025 14:08:09 +0900 Subject: [PATCH 2/7] =?UTF-8?q?-=20=EC=9E=85=EA=B8=88=ED=99=95=EC=9D=B8?= =?UTF-8?q?=EC=84=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/ui/deposit-receipt-sample.tsx | 240 ++++++++++-------- 1 file changed, 135 insertions(+), 105 deletions(-) diff --git a/src/entities/common/ui/deposit-receipt-sample.tsx b/src/entities/common/ui/deposit-receipt-sample.tsx index b1d6c9b..7d2a37d 100644 --- a/src/entities/common/ui/deposit-receipt-sample.tsx +++ b/src/entities/common/ui/deposit-receipt-sample.tsx @@ -3,119 +3,149 @@ import { snackBar } from '@/shared/lib'; import { toPng } from 'html-to-image'; import { useTranslation } from 'react-i18next'; import '@/shared/ui/assets/css/style-tax-invoice.css'; -import { useEffect } from 'react'; +import { ClipLoader, FadeLoader } from 'react-spinners'; +import { CSSProperties, useEffect, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { DepositInfo } from '@/entities/transaction/model/types'; export interface DepositReceiptSampleProps { - depositReceiptSampleOn: boolean; - setDepositReceiptSampleOn: (DepositReceiptSampleOn: boolean) => void; - depositInfo?: DepositInfo + depositReceiptSampleOn: boolean; + setDepositReceiptSampleOn: (DepositReceiptSampleOn: boolean) => void; + depositInfo?: DepositInfo }; +const override: CSSProperties = { + position: 'fixed', + display: 'block', + margin: '0 auto', + top: '50%', + left: '50%', +}; + + export const DepositReceiptSample = ({ - depositReceiptSampleOn, - setDepositReceiptSampleOn, - depositInfo + depositReceiptSampleOn, + setDepositReceiptSampleOn, + depositInfo }: DepositReceiptSampleProps) => { - const { t } = useTranslation(); + const { t } = useTranslation(); + let [loading, setLoading] = useState(false); + let [color, setColor] = useState('#0b0606'); - const downloadImage = () => { - const section = document.getElementById('image-section') as HTMLElement - toPng(section).then((image) => { - const link = document.createElement('a'); - link.download = 'downloadImage.png'; - link.href = image; - link.click(); - snackBar(t('common.imageRequested'), () => { - onClickToClose(); - }); - }); - } - const onClickToClose = () => { - setDepositReceiptSampleOn(false); - }; + const downloadImage = () => { + const section = document.getElementById('image-section') as HTMLElement + toPng(section).then((image) => { + const link = document.createElement('a'); + link.download = 'downloadImage.png'; + link.href = image; + link.click(); + snackBar(t('common.imageRequested'), () => { + onClickToClose(); + }); + }).finally(() => { + setLoading(false); + }); + } + const onClickToClose = () => { + setDepositReceiptSampleOn(false); + }; - useEffect(() => { - if(!!depositReceiptSampleOn){ - setTimeout(() => { - downloadImage(); - }, 300); - } - }, [depositReceiptSampleOn]); - - return ( - <> -
-
-
-
-
- NICEPAY -
-
-
-
입금확인증
-
-
-
-
-
- - - - - - - -
-
입금정보
-
-
-
입금일시
-
{ depositInfo?.depositDate}
-
-
-
입금은행
-
{ depositInfo?.depositBank }
-
-
-
입금계좌
-
{ depositInfo?.depositAccount }
-
-
-
금액
-
- -
-
-
-
입금적요
-
{ depositInfo?.depositReason }
-
-
-
입금ID
-
{ depositInfo?.depositId }
-
-
-
-
-
- - ); + useEffect(() => { + if (!!depositReceiptSampleOn) { + setLoading(true); + setTimeout(() => { + downloadImage(); + }, 300); + } + }, [depositReceiptSampleOn, depositInfo]); + + return ( + <> +
+
+
+
+
+ NICEPAY +
+
+
+
입금확인증
+
+
+
+
+
+ + + + + + + +
+
입금정보
+
+
+
입금일시
+
{depositInfo?.depositDate}
+
+
+
입금은행
+
{depositInfo?.depositBank}
+
+
+
입금계좌
+
{depositInfo?.depositAccount}
+
+
+
금액
+
+ +
+
+
+
입금적요
+
{depositInfo?.depositReason}
+
+
+
입금ID
+
{depositInfo?.depositId}
+
+
+
+
+
+ {!!loading && + <> +
+ + + } + + ); }; From ba116aeaf469e6768cd8be896045710722ed57de Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 14:12:18 +0900 Subject: [PATCH 3/7] rr --- src/entities/common/ui/cash-receipt-sample.tsx | 2 +- src/entities/common/ui/deposit-receipt-sample.tsx | 3 ++- src/entities/transaction/ui/section/amount-info-section.tsx | 4 +++- src/entities/vat-return/ui/section/amount-section.tsx | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/entities/common/ui/cash-receipt-sample.tsx b/src/entities/common/ui/cash-receipt-sample.tsx index 51107ef..881db4a 100644 --- a/src/entities/common/ui/cash-receipt-sample.tsx +++ b/src/entities/common/ui/cash-receipt-sample.tsx @@ -38,7 +38,7 @@ export const CashReceiptSample = ({ customerInfo, productInfo }: CashReceiptSampleProps) => { - let [loading, setLoading] = useState(true); + let [loading, setLoading] = useState(false); let [color, setColor] = useState('#0b0606'); const { t } = useTranslation(); diff --git a/src/entities/common/ui/deposit-receipt-sample.tsx b/src/entities/common/ui/deposit-receipt-sample.tsx index 7d2a37d..3470399 100644 --- a/src/entities/common/ui/deposit-receipt-sample.tsx +++ b/src/entities/common/ui/deposit-receipt-sample.tsx @@ -20,6 +20,7 @@ const override: CSSProperties = { margin: '0 auto', top: '50%', left: '50%', + zIndex: 2000 }; @@ -135,7 +136,7 @@ export const DepositReceiptSample = ({ <>
{ console.log(rs); - snackBar('이메일로 현금영수증 요청이 완료되었습니다.'); + if(rs.message){ + snackBar(rs.message); + } }).catch((e: any) => { if(e.response?.data?.error?.message){ snackBar(e.response?.data?.error?.message); diff --git a/src/entities/vat-return/ui/section/amount-section.tsx b/src/entities/vat-return/ui/section/amount-section.tsx index 657ecd1..34f88c8 100644 --- a/src/entities/vat-return/ui/section/amount-section.tsx +++ b/src/entities/vat-return/ui/section/amount-section.tsx @@ -55,7 +55,9 @@ export const AmountSection = ({ }; vatReturnTaxInvoiceSendEmail(params).then((rs: VatReturnTaxInvoiceSendEmailResponse) => { console.log(rs); - snackBar('이메일로 세금계산서 요청이 완료되었습니다.'); + if(rs.message){ + snackBar(rs.message); + } }).catch((e: any) => { if(e.response?.data?.error?.message){ snackBar(e.response?.data?.error?.message); From 21bc8840a1f8fd20528748b3c4465a3d3b96bc69 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 14:16:50 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=ED=8C=8C=EC=9D=BC=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=9E=AC=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/common/ui/cash-receipt-sample.tsx | 3 ++- src/entities/common/ui/deposit-receipt-sample.tsx | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/entities/common/ui/cash-receipt-sample.tsx b/src/entities/common/ui/cash-receipt-sample.tsx index 881db4a..5a3ce4d 100644 --- a/src/entities/common/ui/cash-receipt-sample.tsx +++ b/src/entities/common/ui/cash-receipt-sample.tsx @@ -47,7 +47,8 @@ export const CashReceiptSample = ({ const section = document.getElementById('image-section') as HTMLElement; toPng(section).then((image) => { const link = document.createElement('a'); - link.download = 'downloadImage.png'; + let fileName = 'cash-receipt-' + moment().format('YYMMDDHHmmss'); + link.download = fileName + '.png'; link.href = image; link.click(); snackBar(t('common.imageRequested'), function(){ diff --git a/src/entities/common/ui/deposit-receipt-sample.tsx b/src/entities/common/ui/deposit-receipt-sample.tsx index 3470399..28b3161 100644 --- a/src/entities/common/ui/deposit-receipt-sample.tsx +++ b/src/entities/common/ui/deposit-receipt-sample.tsx @@ -7,6 +7,7 @@ import { ClipLoader, FadeLoader } from 'react-spinners'; import { CSSProperties, useEffect, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { DepositInfo } from '@/entities/transaction/model/types'; +import moment from 'moment'; export interface DepositReceiptSampleProps { depositReceiptSampleOn: boolean; @@ -37,7 +38,8 @@ export const DepositReceiptSample = ({ const section = document.getElementById('image-section') as HTMLElement toPng(section).then((image) => { const link = document.createElement('a'); - link.download = 'downloadImage.png'; + let fileName = 'receipt-confirmation-' + moment().format('YYMMDDHHmmss'); + link.download = fileName + '.png'; link.href = image; link.click(); snackBar(t('common.imageRequested'), () => { From 51eec728540582c2b57e69178ee1b595c05bf155 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 14:28:43 +0900 Subject: [PATCH 5/7] =?UTF-8?q?warning=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/transaction/ui/list-item.tsx | 17 +++++++++++++---- src/pages/home/home-page.tsx | 3 +-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/entities/transaction/ui/list-item.tsx b/src/entities/transaction/ui/list-item.tsx index dd925a7..dff0803 100644 --- a/src/entities/transaction/ui/list-item.tsx +++ b/src/entities/transaction/ui/list-item.tsx @@ -194,7 +194,7 @@ export const ListItem = ({ rs.push(
{ getTime() } | @@ -213,7 +213,10 @@ export const ListItem = ({ } else if(transactionCategory === TransactionCategory.CashReceipt){ rs.push( -
+
{ getTime() } | { transactionType } @@ -226,7 +229,10 @@ export const ListItem = ({ } else if(transactionCategory === TransactionCategory.Escrow){ rs.push( -
+
{ getTime() } | { deliveryStatus } @@ -246,7 +252,10 @@ export const ListItem = ({ } else if(transactionCategory === TransactionCategory.Billing){ rs.push( -
+
{ getTime() } | { processResult } diff --git a/src/pages/home/home-page.tsx b/src/pages/home/home-page.tsx index 22024d0..be3d6e2 100644 --- a/src/pages/home/home-page.tsx +++ b/src/pages/home/home-page.tsx @@ -117,11 +117,10 @@ export const HomePage = () => { else{ useStore.getState().UserStore.setFirstAccess(false); } - + let userFavorite = useStore.getState().UserStore.userFavorite; setFavoriteItems(userFavorite); callHomeBannerList(); - // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const setBottomBannerEffect = (mode: boolean) => { From 0c7d171a4f702250fec378357c731d1f46959349 Mon Sep 17 00:00:00 2001 From: HyeonJongKim Date: Wed, 12 Nov 2025 14:35:00 +0900 Subject: [PATCH 6/7] =?UTF-8?q?-=20=EC=84=B8=EA=B8=88=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EC=84=9C,=20=EC=9E=85=EA=B8=88=ED=99=95=EC=9D=B8=EC=84=9C=20hr?= =?UTF-8?q?ef=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entities/common/ui/cash-receipt-sample.tsx | 2 +- src/entities/common/ui/deposit-receipt-sample.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/entities/common/ui/cash-receipt-sample.tsx b/src/entities/common/ui/cash-receipt-sample.tsx index 5a3ce4d..3846304 100644 --- a/src/entities/common/ui/cash-receipt-sample.tsx +++ b/src/entities/common/ui/cash-receipt-sample.tsx @@ -49,7 +49,7 @@ export const CashReceiptSample = ({ const link = document.createElement('a'); let fileName = 'cash-receipt-' + moment().format('YYMMDDHHmmss'); link.download = fileName + '.png'; - link.href = image; + link.href = image + '#' + fileName + '.png'; link.click(); snackBar(t('common.imageRequested'), function(){ onClickToClose(); diff --git a/src/entities/common/ui/deposit-receipt-sample.tsx b/src/entities/common/ui/deposit-receipt-sample.tsx index 28b3161..d9d1ef6 100644 --- a/src/entities/common/ui/deposit-receipt-sample.tsx +++ b/src/entities/common/ui/deposit-receipt-sample.tsx @@ -39,8 +39,8 @@ export const DepositReceiptSample = ({ toPng(section).then((image) => { const link = document.createElement('a'); let fileName = 'receipt-confirmation-' + moment().format('YYMMDDHHmmss'); - link.download = fileName + '.png'; - link.href = image; + link.download = fileName + '.png'; + link.href = image + '#' + fileName + '.png'; link.click(); snackBar(t('common.imageRequested'), () => { onClickToClose(); From 1efeecbec2d4d61962af224f5b7d05863a4923c4 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 12 Nov 2025 14:39:51 +0900 Subject: [PATCH 7/7] . --- .../api/use-vat-return-tax-invoice-send-email-mutation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts b/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts index 08dc2d6..3fc3d93 100644 --- a/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts +++ b/src/entities/vat-return/api/use-vat-return-tax-invoice-send-email-mutation.ts @@ -3,8 +3,8 @@ import { API_URL_VAT_RETURN } from '@/shared/api/api-url-vat-return'; import { resultify } from '@/shared/lib/resultify'; import { NiceAxiosError } from '@/shared/@types/error'; import { - VatReturnTaxInvoiceSendEmailResponse, VatReturnTaxInvoiceSendEmailParams, + VatReturnTaxInvoiceSendEmailResponse } from '../model/types'; import { useMutation,