From e07e5c5629dd930970857c0c8b6a49b7aa4dfdbf Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Fri, 21 Nov 2025 11:46:49 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B1=B0=EB=9E=98=EB=82=B4=EC=97=AD=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EA=B1=B0=EB=9E=98=ED=99=95=EC=9D=B8=EC=84=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 - package.json | 2 +- .../support/ui/detail/notice-detail.tsx | 3 + ...use-all-transaction-issue-send-mutation.ts | 39 +++++++ src/entities/transaction/model/types.ts | 34 ++++++ .../ui/detail/all-transaction-detail.tsx | 3 + .../ui/filter/all-transaction-filter.tsx | 2 +- .../ui/section/amount-info-section.tsx | 100 +++++++++++++----- src/shared/api/api-url-transaction.ts | 4 + src/shared/model/store.ts | 12 +++ .../ui/masked-input/masked-name-input.tsx | 4 +- src/widgets/sub-layout/index.tsx | 4 +- 12 files changed, 175 insertions(+), 34 deletions(-) create mode 100644 src/entities/transaction/api/use-all-transaction-issue-send-mutation.ts diff --git a/.env.development b/.env.development index 299350a..8fe3793 100644 --- a/.env.development +++ b/.env.development @@ -1,6 +1,4 @@ VITE_APP_ENV=development -# VITE_APP_AUTH_PROXY_HOST='http://3.35.79.250:8090' -# VITE_APP_API_PROXY_HOST='http://3.35.79.250:8080' VITE_APP_AUTH_PROXY_HOST='https://auth.nicepay.co.kr' VITE_APP_API_PROXY_HOST='https://rest.nicepay.co.kr' GENERATE_SOURCEMAP=false diff --git a/package.json b/package.json index c9dbcae..7d5038d 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "1.0.3", "type": "module", "scripts": { - "dev": "env-cmd -f .env.local vite --host --open", + "dev": "env-cmd -f .env.development vite --host --open", "build:development": "env-cmd -f .env.development vite build", "build": "env-cmd -f .env.production vite build", "lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0", diff --git a/src/entities/support/ui/detail/notice-detail.tsx b/src/entities/support/ui/detail/notice-detail.tsx index b50c5d5..4c88a3a 100644 --- a/src/entities/support/ui/detail/notice-detail.tsx +++ b/src/entities/support/ui/detail/notice-detail.tsx @@ -84,6 +84,9 @@ export const NoticeDetail = ({ className="notice-detail__body" dangerouslySetInnerHTML={{ __html: result.contents || '' }} > + {/* +
{ result.contents }
+ */} diff --git a/src/entities/transaction/api/use-all-transaction-issue-send-mutation.ts b/src/entities/transaction/api/use-all-transaction-issue-send-mutation.ts new file mode 100644 index 0000000..18e8b79 --- /dev/null +++ b/src/entities/transaction/api/use-all-transaction-issue-send-mutation.ts @@ -0,0 +1,39 @@ +import axios from 'axios'; +import { API_URL_TRANSACTION } from '@/shared/api/api-url-transaction'; +import { resultify } from '@/shared/lib/resultify'; +import { NiceAxiosError } from '@/shared/@types/error'; +import { + AllTransactionIssueSendParams, + AllTransactionIssueSendResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; +import { getHeaderUserAgent } from '@/shared/constants/url'; + +export const allTransactionIssueSend = (params: AllTransactionIssueSendParams) => { + let headerOptions = { + menuId: 31, + apiType: 'SEND' + }; + let options = { + headers: { + 'X-User-Agent': getHeaderUserAgent(headerOptions) + } + }; + return resultify( + axios.post(API_URL_TRANSACTION.transactionIssueSend(), params, options), + ); +}; + +export const useAllTransactionIssueSendMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: AllTransactionIssueSendParams) => allTransactionIssueSend(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/transaction/model/types.ts b/src/entities/transaction/model/types.ts index d3249e7..323432c 100644 --- a/src/entities/transaction/model/types.ts +++ b/src/entities/transaction/model/types.ts @@ -454,8 +454,10 @@ export interface ImportantInfo { approvalDate?: string; approvalTime?: string; transactionDate?: string; + transactionTime?: string; requestDate?: string; cancelDate?: string; + cancelTime?: string; goodsName?: string; orderNumber?: string; @@ -483,6 +485,7 @@ export interface PaymentInfo { depositorName?: string; depositDeadline?: string; depositDate?: string; + depositTime?: string; refundScheduleDate?: string; refundBankName?: string; refundAccountNumber?: string; @@ -906,4 +909,35 @@ export interface EscrowMailResendParams { }; export interface EscrowMailResendResponse { +}; + +export interface AllTransactionIssueSendParams { + sendEmail: string; + mid?: string; + tid: string; + buyerName?: string; + approvalDate?: string; + depositDate?: string; + transactionDate?: string; + approvalTime?: string; + depositTime?: string; + transactionTime?: string; + transactionAmount?: number; + goodsName?: string; + buyerTel?: string; + approvalNo?: string; + installmentMonth?: string; + moid?: string; + bankName?: string; + accountNo?: string; + purchaseCompany?: string; + cancelDate?: string; + cancelTime?: string; + serviceCode?: string; + transactionStatus?: string; +}; +export interface AllTransactionIssueSendResponse { + code: string; + message: string; + ordNm: string; }; \ No newline at end of file diff --git a/src/entities/transaction/ui/detail/all-transaction-detail.tsx b/src/entities/transaction/ui/detail/all-transaction-detail.tsx index 6f71696..7fe8094 100644 --- a/src/entities/transaction/ui/detail/all-transaction-detail.tsx +++ b/src/entities/transaction/ui/detail/all-transaction-detail.tsx @@ -191,6 +191,9 @@ export const AllTransactionDetail = ({ { const { t } = useTranslation(); + const { mutateAsync: allTransactionIssueSend } = useAllTransactionIssueSendMutation(); const { mutateAsync: cashReceiptReceiptDownload } = useCashReceiptReceiptDownloadMutation(); const { mutateAsync: cashReceiptReceiptSendEamil } = useCashReceiptReceiptSendEmailMutation(); - const { downloadBottomSheetOn, setDownloadBottomSheetOn } = useDownloadBottomSheetOnStore(); + const { downloadBottomSheetOn2, setDownloadBottomSheetOn2 } = useDownloadBottomSheetOn2Store(); const [cashReceiptSampleOn, setCashReceiptSampleOn] = useState(false); const [receiptIssueInfo, setReceiptIssueInfo] = useState({}); @@ -35,7 +40,7 @@ export const AmountInfoSection = ({ const [receiptAmountInfo, setReceiptAmountInfo] = useState({}); const [receiptCustomerInfo, setReceiptCustomerInfo] = useState(); const [receiptProductInfo, setReceiptProductInfo] = useState(); - + let newAmountInfo: Record | undefined = amountInfo; const subItems: Record> = { transactionRequestAmount: {name: t('transaction.fields.transactionRequestAmount'), type: 'number'}, @@ -199,7 +204,7 @@ export const AmountInfoSection = ({ }; const onClickToOpenDownloadBottomSheet = () => { - setDownloadBottomSheetOn(true); + setDownloadBottomSheetOn2(true); }; const onRequestDownload = ( @@ -210,21 +215,63 @@ export const AmountInfoSection = ({ if(selectedMode === DownloadSelectedMode.EMAIL && !!userEmail ){ - let params: CashReceiptReceiptSendEmailParams = { - tid: tid, - email: userEmail - }; - cashReceiptReceiptSendEamil(params).then((rs: CashReceiptReceiptSendEmailResponse) => { - console.log(rs); - if(rs.message){ - snackBar(rs.message); - } - }).catch((e: any) => { - if(e.response?.data?.error?.message){ - snackBar(e.response?.data?.error?.message); - return; - } - }); + if(transactionCategory === TransactionCategory.AllTransaction){ + let params: AllTransactionIssueSendParams = { + sendEmail: userEmail, + mid: amountInfo?.mid, + tid: tid, + buyerName: transactionInfo?.buyerName, + approvalDate: importantInfo?.approvalDate, + depositDate: paymentInfo?.depositDate, + transactionDate: importantInfo?.transactionDate, + approvalTime: importantInfo?.approvalTime, + depositTime: paymentInfo?.depositTime, + transactionTime: importantInfo?.transactionTime, + transactionAmount: amountInfo?.transactionAmount, + goodsName: importantInfo?.goodsName, + buyerTel: transactionInfo?.buyerTel, + approvalNo: paymentInfo?.approvalNo, + installmentMonth: paymentInfo?.approvalNo, + moid: importantInfo?.moid, + bankName: paymentInfo?.bankName || paymentInfo?.refundBankName, + accountNo: paymentInfo?.accountNo || paymentInfo?.refundAccountNo, + purchaseCompany: paymentInfo?.purchaseCompany, + cancelDate: importantInfo?.cancelDate, + cancelTime: importantInfo?.cancelTime, + serviceCode: serviceCode, + transactionStatus: importantInfo?.transactionStatus + }; + allTransactionIssueSend(params).then((rs: AllTransactionIssueSendResponse) => { + if(rs.message){ + snackBar(rs.message); + } + else{ + snackBar('메일이 전송 되었습니다.'); + } + }).catch((e: any) => { + if(e.response?.data?.error?.message){ + snackBar(e.response?.data?.error?.message); + return; + } + }); + } + else if(transactionCategory === TransactionCategory.CashReceipt){ + let params: CashReceiptReceiptSendEmailParams = { + tid: tid, + email: userEmail + }; + cashReceiptReceiptSendEamil(params).then((rs: CashReceiptReceiptSendEmailResponse) => { + console.log(rs); + if(rs.message){ + snackBar(rs.message); + } + }).catch((e: any) => { + if(e.response?.data?.error?.message){ + snackBar(e.response?.data?.error?.message); + return; + } + }); + } } else if(selectedMode === DownloadSelectedMode.IMAGE){ let params: CashReceiptReceiptDownloadParams = { @@ -460,8 +507,9 @@ export const AmountInfoSection = ({ }
- { (transactionCategory === TransactionCategory.CashReceipt) && - !!canDownloadReceipt && + { ((transactionCategory === TransactionCategory.AllTransaction) || + ((transactionCategory === TransactionCategory.CashReceipt) && + !!canDownloadReceipt)) &&
- { !!downloadBottomSheetOn && + { !!downloadBottomSheetOn2 && diff --git a/src/shared/api/api-url-transaction.ts b/src/shared/api/api-url-transaction.ts index cde9273..f9a8f8c 100644 --- a/src/shared/api/api-url-transaction.ts +++ b/src/shared/api/api-url-transaction.ts @@ -31,6 +31,10 @@ export const API_URL_TRANSACTION = { // POST: 거래취소 정보 조회 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/transaction/cancel-info`; }, + transactionIssueSend: () => { + // POST: 거래확인서 메일 발송 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/transaction/issue/send`; + }, /* Cash Receipt Management - 현금영수증 API */ cashReceiptList: () => { diff --git a/src/shared/model/store.ts b/src/shared/model/store.ts index 96d6182..7134056 100644 --- a/src/shared/model/store.ts +++ b/src/shared/model/store.ts @@ -10,6 +10,10 @@ export interface DownloadBottomSheetOnStore { downloadBottomSheetOn: boolean; setDownloadBottomSheetOn: (downloadBottomSheetOn: boolean) => void; }; +export interface DownloadBottomSheetOn2Store { + downloadBottomSheetOn2: boolean; + setDownloadBottomSheetOn2: (downloadBottomSheetOn2: boolean) => void; +}; export interface FilterOnStore { filterOn: boolean; setFilterOn: (filterOn: boolean) => void; @@ -50,6 +54,14 @@ export const useDownloadBottomSheetOnStore = create( })); } })); +export const useDownloadBottomSheetOn2Store = create((set) => ({ + downloadBottomSheetOn2: false, + setDownloadBottomSheetOn2: (downloadBottomSheetOn2: boolean) => { + set((state: {downloadBottomSheetOn2: boolean}) => ({ + downloadBottomSheetOn2: (state.downloadBottomSheetOn2 = downloadBottomSheetOn2) + })); + } +})); export const useFilterlOnStore = create((set) => ({ filterOn: false, diff --git a/src/shared/ui/masked-input/masked-name-input.tsx b/src/shared/ui/masked-input/masked-name-input.tsx index 622d8b8..2a49ea1 100644 --- a/src/shared/ui/masked-input/masked-name-input.tsx +++ b/src/shared/ui/masked-input/masked-name-input.tsx @@ -54,11 +54,11 @@ export const MaskedNameInput = ({ onChange(valueWithoutSpace); }} onChange={(e: ChangeEvent) => { - + if(isComposing){ // composition 중에는 스페이스 제거 const valueWithoutSpace = e.target.value.replace(/\s/g, ''); onChange(valueWithoutSpace); - + } }} onFocus={onFocus} /> diff --git a/src/widgets/sub-layout/index.tsx b/src/widgets/sub-layout/index.tsx index cd5dc8e..ef97c1f 100644 --- a/src/widgets/sub-layout/index.tsx +++ b/src/widgets/sub-layout/index.tsx @@ -260,8 +260,8 @@ export const SubLayout = () => { let userParmas; if(!isNativeEnvironment){ userParmas = { - //id: 'nictest00', - id: 'reptest22m', + id: 'nictest00', + //id: 'reptest22m', password: 'nictest00' }; // userParmas = {