From 61c7e6c8f74c4ec3b22b30838d5433f02eaefb66 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Mon, 20 Oct 2025 17:54:41 +0900 Subject: [PATCH] =?UTF-8?q?=ED=99=88=20=ED=99=94=EB=A9=B4=20month=20api=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/ui/day-status-box-container2.tsx | 4 +- ...se-all-transaction-cancel-info-mutation.ts | 2 +- src/entities/transaction/model/types.ts | 46 +++++++- .../ui/all-transaction-all-cancel.tsx | 76 ++++--------- .../all-transaction-cancel-prevent-bond.tsx | 100 ++++++++++++++++ .../ui/all-transaction-part-cancel.tsx | 106 ++++++++--------- ...-transaction-cancel-section-bank-group.tsx | 43 +++++++ ...nsaction-cancel-section-password-group.tsx | 18 +++ .../all-transaction/cancel-page.tsx | 107 ++++++++++++++++-- .../all-transaction/detail-page.tsx | 2 + 10 files changed, 385 insertions(+), 119 deletions(-) create mode 100644 src/entities/transaction/ui/all-transaction-cancel-prevent-bond.tsx create mode 100644 src/entities/transaction/ui/section/all-transaction-cancel-section-bank-group.tsx create mode 100644 src/entities/transaction/ui/section/all-transaction-cancel-section-password-group.tsx diff --git a/src/entities/home/ui/day-status-box-container2.tsx b/src/entities/home/ui/day-status-box-container2.tsx index 59b9ecb..72ff288 100644 --- a/src/entities/home/ui/day-status-box-container2.tsx +++ b/src/entities/home/ui/day-status-box-container2.tsx @@ -44,6 +44,7 @@ export const BoxContainer2 = () => { let previousMonthAmount = rs.sales.previousMonthAmount; if(currentMonthAmount && previousMonthAmount){ let increase = (currentMonthAmount - previousMonthAmount) / previousMonthAmount * 100; + increase = Math.round(increase * 100) / 100; setSalesIncrease(increase); } @@ -51,6 +52,7 @@ export const BoxContainer2 = () => { let previousMonthSettlementAmount = rs.settlement.previousMonthSettlementAmount; if(currentMonthSettlementAmount && previousMonthSettlementAmount){ let increase = (currentMonthSettlementAmount - previousMonthSettlementAmount) / previousMonthSettlementAmount * 100; + increase = Math.round(increase * 100) / 100; setSettlementIncrease(increase); } }); @@ -72,7 +74,7 @@ export const BoxContainer2 = () => { }; useEffect(() => { - // callMonth(); + callMonth(); callOverview(); }, []); diff --git a/src/entities/transaction/api/use-all-transaction-cancel-info-mutation.ts b/src/entities/transaction/api/use-all-transaction-cancel-info-mutation.ts index 91b62fe..c61a72c 100644 --- a/src/entities/transaction/api/use-all-transaction-cancel-info-mutation.ts +++ b/src/entities/transaction/api/use-all-transaction-cancel-info-mutation.ts @@ -18,7 +18,7 @@ export const allTransactionCancelInfo = (params: AllTransactionCancelInfoParams) ); }; -export const useTransactioCancleInfonMutation = (options?: UseMutationOptions) => { +export const useAllTransactioCancleInfoMutation = (options?: UseMutationOptions) => { const mutation = useMutation({ ...options, mutationFn: (params: AllTransactionCancelInfoParams) => allTransactionCancelInfo(params), diff --git a/src/entities/transaction/model/types.ts b/src/entities/transaction/model/types.ts index f7eca79..44db90c 100644 --- a/src/entities/transaction/model/types.ts +++ b/src/entities/transaction/model/types.ts @@ -488,16 +488,54 @@ export interface AllTransactionCancelResponse { }; export interface AllTransactionCancelInfoParams { + serviceCode: string; tid: string; }; export interface AllTransactionCancelInfoResponse { remainAmount: number; partCancelCl: boolean; isCompoundTax: boolean; - supplyAmount: number; - goodsVatAmount: number; - taxFreeAmount: number; - serviceAmount: number; + supplyAmount: number | null; + goodsVat: number | null; + taxFreeAmount: number | null; + serviceAmount: number | null; + debtPreventionCancelDisplayInfo: DebtPreventionCancelDisplayInfo | null; + debtPreventionCancelRequestInfo: DebtPreventionCancelRequestInfo | null; +}; +export interface DebtPreventionCancelDisplayInfo { + isCancel: boolean; + serviceCode: string; + approvalDate: string; + approvalNo: string; + amount: number; + totalCancelAmount: number; + depositRequestAmount: number; + bankName: string; + accountNo: string; + accountName: string; +}; + +export interface DebtPreventionCancelRequestInfo { + tid: string; + mid: string; + gid: string; + aid: string; + corpNo: string; + corpName: string; + serviceCode: string; + serviceProductCode: string; + approvalDate: string; + approvalNo: string; + goodsAmount: number; + cancelRequestAmount: number; + depositRequestAmount: number; + bankName: string; + accountNo: string; + depositName: string; + hourCount: 0, + totalCancelCount: number; + autoTaxCalcCl: string; + approvalVatMark: string; }; export interface FilterProps { filterOn: boolean; diff --git a/src/entities/transaction/ui/all-transaction-all-cancel.tsx b/src/entities/transaction/ui/all-transaction-all-cancel.tsx index 1372f37..b5989e5 100644 --- a/src/entities/transaction/ui/all-transaction-all-cancel.tsx +++ b/src/entities/transaction/ui/all-transaction-all-cancel.tsx @@ -1,59 +1,33 @@ import { IMAGE_ROOT } from '@/shared/constants/common'; +import { AllTransactionCancelInfoResponse } from '../model/types'; +import { AllTransactionCancelSectionPasswordGroup } from './section/all-transaction-cancel-section-password-group'; +import { AllTransactionCancelSectionBankGroup } from './section/all-transaction-cancel-section-bank-group'; -export const AllTransactionAllCancel = () => { - +export interface AllTransactionAllCancelProps extends AllTransactionCancelInfoResponse { + serviceCode: string; +}; + +export const AllTransactionAllCancel = ({ + serviceCode, + remainAmount, + partCancelCl, + isCompoundTax, + supplyAmount, + goodsVat, + taxFreeAmount, + serviceAmount, + debtPreventionCancelDisplayInfo, + debtPreventionCancelRequestInfo +}: AllTransactionAllCancelProps) => { + console.log(serviceCode) return ( <>
-
- -
- -
-
-
비밀번호 불일치
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
-

환불은 입력한 계좌정보로 별도 확인 절차없이 지급됩니다.
입력 정보를 한번 더 확인해 주세요.

-
-
+ + { serviceCode === '03' && + + } + ); }; diff --git a/src/entities/transaction/ui/all-transaction-cancel-prevent-bond.tsx b/src/entities/transaction/ui/all-transaction-cancel-prevent-bond.tsx new file mode 100644 index 0000000..4f63a67 --- /dev/null +++ b/src/entities/transaction/ui/all-transaction-cancel-prevent-bond.tsx @@ -0,0 +1,100 @@ +import { IMAGE_ROOT } from '@/shared/constants/common'; +import { motion } from 'framer-motion'; +export interface AllTransactionCancelPreventBondProps { + preventBondOn: boolean; + setCancelPreventBondOn: (preventBondOn: boolean) => void; +}; + +export const AllTransactionCancelPreventBond = ({ + preventBondOn, + setCancelPreventBondOn +}: AllTransactionCancelPreventBondProps) => { + const onClickToClose = () => { + setCancelPreventBondOn(false); + }; + return ( + <> + +
+
+
거래취소(입금 후 취소)
+
+ +
+
+
+ +
+
+
+
취소 거래내역
+
    +
  • + 승인일 + +
  • +
  • + 승인번호 + +
  • +
  • + 승인금액 + +
  • +
  • + 총 취소금액 + +
  • +
  • + 입금요청금액 + +
  • +
+
+
+
입금 정보
+
    +
  • + 은행 + +
  • +
  • + 계좌번호 + +
  • +
  • + 예금주 + +
  • +
  • + 총 취소금액 + +
  • +
+
+
+
[취소요청] 버튼을 통해 취소 요청을 진행해야 접수됩니다.
+
입금자명은 가맹점 상호로 입력해 주세요.
+
입금요청금액과 동일한 금액을 입금해야 취소가 진행됩니다.
+
취소내역은 최대 3일 이후 확인 가능합니다.
+
입금 후 취소 프로세스
+
가맹점이 취소요청 - 가맹점이 입금 - 입금확인 - 취소 처리
+
정산받지 않은 겨래인 경우
+
service@nicepay.co.kr 로 거래내역을 방송바랍니다.(단 정산예정일이 2일 이상 남은 거래에 한함)
+
+
+
+
+
+ + ); +}; \ No newline at end of file diff --git a/src/entities/transaction/ui/all-transaction-part-cancel.tsx b/src/entities/transaction/ui/all-transaction-part-cancel.tsx index cf54050..b71b29c 100644 --- a/src/entities/transaction/ui/all-transaction-part-cancel.tsx +++ b/src/entities/transaction/ui/all-transaction-part-cancel.tsx @@ -1,11 +1,30 @@ import { IMAGE_ROOT } from '@/shared/constants/common'; +import { AllTransactionCancelInfoResponse } from '../model/types'; +import { NumericFormat } from 'react-number-format'; +import { AllTransactionCancelSectionPasswordGroup } from './section/all-transaction-cancel-section-password-group'; +import { AllTransactionCancelSectionBankGroup } from './section/all-transaction-cancel-section-bank-group'; +export interface AllTransactionPartCancelProps extends AllTransactionCancelInfoResponse { + serviceCode: string; +}; -export const AllTransactionPartCancel = () => { +export const AllTransactionPartCancel = ({ + serviceCode, + remainAmount, + partCancelCl, + isCompoundTax, + supplyAmount, + goodsVat, + taxFreeAmount, + serviceAmount, + debtPreventionCancelDisplayInfo, + debtPreventionCancelRequestInfo +}: AllTransactionPartCancelProps) => { return ( <> + { !!isCompoundTax &&
@@ -23,7 +42,13 @@ export const AllTransactionPartCancel = () => { - + - + - + - +
과세액555,550,000 + + {
부가세50,000 + + {
면세50,000 + + {
봉사료50,000 + + {
+ }
-
- -
- -
-
-
비밀번호 불일치
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
-

환불은 입력한 계좌정보로 별도 확인 절차없이 지급됩니다.
입력 정보를 한번 더 확인해 주세요.

-
+ + { serviceCode === '03' && + + }
); diff --git a/src/entities/transaction/ui/section/all-transaction-cancel-section-bank-group.tsx b/src/entities/transaction/ui/section/all-transaction-cancel-section-bank-group.tsx new file mode 100644 index 0000000..f0a6b10 --- /dev/null +++ b/src/entities/transaction/ui/section/all-transaction-cancel-section-bank-group.tsx @@ -0,0 +1,43 @@ +export const AllTransactionCancelSectionBankGroup = () => { + + return ( + <> +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+

환불은 입력한 계좌정보로 별도 확인 절차없이 지급됩니다.
입력 정보를 한번 더 확인해 주세요.

+
+ + ); +} \ No newline at end of file diff --git a/src/entities/transaction/ui/section/all-transaction-cancel-section-password-group.tsx b/src/entities/transaction/ui/section/all-transaction-cancel-section-password-group.tsx new file mode 100644 index 0000000..dfadefa --- /dev/null +++ b/src/entities/transaction/ui/section/all-transaction-cancel-section-password-group.tsx @@ -0,0 +1,18 @@ +export const AllTransactionCancelSectionPasswordGroup = () => { + + return ( + <> +
+ +
+ +
+
+
비밀번호 불일치
+ + ); +} \ No newline at end of file diff --git a/src/pages/transaction/all-transaction/cancel-page.tsx b/src/pages/transaction/all-transaction/cancel-page.tsx index 940545e..161268d 100644 --- a/src/pages/transaction/all-transaction/cancel-page.tsx +++ b/src/pages/transaction/all-transaction/cancel-page.tsx @@ -5,18 +5,26 @@ import { AllTransactionPartCancel } from '@/entities/transaction/ui/all-transact import { useAllTransactioCancleMutation } from '@/entities/transaction/api/use-all-transaction-cancel-mutation'; import { HeaderType } from '@/entities/common/model/types'; import { + AllTransactionCancelInfoParams, + AllTransactionCancelInfoResponse, AllTransactionCancelParams, AllTransactionCancelResponse, - CancelTabKeys + CancelTabKeys, + DebtPreventionCancelDisplayInfo, + DebtPreventionCancelRequestInfo } from '@/entities/transaction/model/types'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode } from '@/widgets/sub-layout/use-sub-layout'; +import { useAllTransactioCancleInfoMutation } from '@/entities/transaction/api/use-all-transaction-cancel-info-mutation'; +import { NumericFormat } from 'react-number-format'; export const AllTransactionCancelPage = () => { const location = useLocation(); + const tid = location.state.tid; + const serviceCode = location.state.serviceCode; useSetHeaderTitle('거래 취소'); useSetHeaderType(HeaderType.RightClose); @@ -24,8 +32,53 @@ export const AllTransactionCancelPage = () => { // all or part const [tabAction, setTabAction] = useState(CancelTabKeys.All); + const [remainAmount, setRemainAmount] = useState(0); + const [totalCancelAmount, setTotalCancelAmount] = useState(0); + const [partCancelCl, setPartCancelCl] = useState(false); + const [isCompoundTax, setIsCompoundTax] = useState(false); + const [supplyAmount, setSupplyAmount] = useState(null); + const [goodsVat, setGoodsVat] = useState(null); + const [taxFreeAmount, setTaxFreeAmount] = useState(null); + const [serviceAmount, setServiceAmount] = useState(null); + const [debtPreventionCancelDisplayInfo, setDebtPreventionCancelDisplayInfo] = useState(null); + const [debtPreventionCancelRequestInfo, setDebtPreventionCancelRequestInfo] = useState(null); const { mutateAsync: transactionCancel } = useAllTransactioCancleMutation(); + const { mutateAsync: allTransactionCancelInfo } = useAllTransactioCancleInfoMutation(); + + const callCancelInfo = () => { + let params: AllTransactionCancelInfoParams = { + serviceCode: serviceCode, + tid: tid + }; + allTransactionCancelInfo(params).then((rs: AllTransactionCancelInfoResponse) => { + setRemainAmount(rs.remainAmount); + setPartCancelCl(rs.partCancelCl); + setIsCompoundTax(rs.isCompoundTax); + setSupplyAmount(rs.supplyAmount); + setGoodsVat(rs.goodsVat); + setTaxFreeAmount(rs.taxFreeAmount); + setServiceAmount(rs.serviceAmount); + setDebtPreventionCancelDisplayInfo(rs.debtPreventionCancelDisplayInfo); + setDebtPreventionCancelRequestInfo(rs.debtPreventionCancelRequestInfo); + + if(!partCancelCl){ + setTotalCancelAmount(rs.remainAmount); + } + else{ + setTotalCancelAmount(0); + } + // partCancelCl == true ==> 부분취소 버튼 활성화 + // isCompoundTax == true ==> 부분취소의 복합과세 노출 + // debtPreventionCancelDisplayInfo != null => 입금 후 취소 페이지 노출 + // [취소신청]버튼 클릭시 + // debtPreventionCancelDisplayInfo.isCancel == true => 취소api호출 + // debtPreventionCancelRequestInfo 이 값 통쨰로 변조없이 그대로 api에 전달 + // debtPreventionCancelDisplayInfo.isCancel == false => 얼럿만 띄우고 취소요청하면안됨 + + + }); + }; const callTransactionCancel = () => { let transactionCancelParams: AllTransactionCancelParams = { @@ -45,7 +98,7 @@ export const AllTransactionCancelPage = () => { }); }; useEffect(() => { - + callCancelInfo(); }, []); const onClickToChangeTab = (tab: CancelTabKeys) => { @@ -55,36 +108,72 @@ export const AllTransactionCancelPage = () => { <>
-
+
+ { !!partCancelCl && + }
-
+
  • ·  총 잔액 - 500,000,000 + + +
  • ·  총 취소금액 - 500,000,000 + + +
{ (tabAction === CancelTabKeys.All) && - + } - { (tabAction === CancelTabKeys.Part) && - + { partCancelCl && (tabAction === CancelTabKeys.Part) && + }
diff --git a/src/pages/transaction/all-transaction/detail-page.tsx b/src/pages/transaction/all-transaction/detail-page.tsx index 95c0ec1..3f31aad 100644 --- a/src/pages/transaction/all-transaction/detail-page.tsx +++ b/src/pages/transaction/all-transaction/detail-page.tsx @@ -81,6 +81,7 @@ export const AllTransactionDetailPage = () => { clearTimeout(timeout); navigate(PATHS.transaction.allTransaction.cancel, { state: { + serviceCode: serviceCode, tid: tid } }); @@ -101,6 +102,7 @@ export const AllTransactionDetailPage = () => { open={ isOpen } onClose={ close } onConfirmClick={ () => onClickToNavigate(PATHS.transaction.allTransaction.cancel) } + // onConfirmClick={ () => callCancelInfo() } message={ msg } buttonLabel={['취소', '확인']} />