onClickToNavigate() }
>
-
{ `${serviceName}(${serviceDetailName})` }
-
-
{ stateName }
-
|
-
{ getTime() }
-
|
-
{ mid }
- { (!!installmentMonth && parseInt(installmentMonth) > 1) &&
- <>
+ { (periodType === SettlementPeriodType.SETTLEMENT_DATE) &&
+
{ `${merchantName}(${mid})` }
+ }
+ { (periodType === SettlementPeriodType.TRANSACTION_DATE) &&
+ <>
+
{ `${approvalNumber}(${mid})` }
+
+ { (!!settlementDate)? '정산': (!!approvalDate)? '승인' : '' }
|
- { installmentMonth }개월 할부
- >
- }
-
+
정산 { moment(settlementDate).format('MM.DD') }
+
|
+
승인 { moment(approvalDate).format('MM.DD') }
+
+ >
+ }
{
{
+
+ return (
+ <>
+
+
+ -
+ 거래금액
+
+ 원
+
+
+ -
+ PG 수수료
+
+ 원
+
+
+ -
+ 보류
+
+ 원
+
+
+ -
+ 해제
+
+ 원
+
+
+ -
+ 상계
+
+ 원
+
+
+
+
+ >
+ );
+};
\ No newline at end of file
diff --git a/src/entities/settlement/ui/list-summary-extend-transaction.tsx b/src/entities/settlement/ui/list-summary-extend-transaction.tsx
new file mode 100644
index 0000000..7bdfd0d
--- /dev/null
+++ b/src/entities/settlement/ui/list-summary-extend-transaction.tsx
@@ -0,0 +1,84 @@
+import { NumericFormat } from 'react-number-format';
+import { SettlementsTransactionSummaryResponse } from '../model/types';
+
+export interface ListSummaryExtendTransactionProps extends SettlementsTransactionSummaryResponse {};
+
+export const ListSummaryExtendTransaction = ({
+ settlementAmount,
+ transactionAmount,
+ paymentFeeAmount,
+ escrowFeeAmount,
+ authFeeAmount,
+ vatAmount,
+ preSettlementCancelOffset
+}: ListSummaryExtendTransactionProps) => {
+
+ return (
+ <>
+
+
+ -
+ 거래금액
+
+ 원
+
+
+ -
+ 결제 수수료
+
+ 원
+
+
+ -
+ 에스크로 수수료
+
+ 원
+
+
+ -
+ 인증 수수료
+
+ 원
+
+
+ -
+ VAT
+
+ 원
+
+
+ -
+ 정산전 취소상계
+
+ 원
+
+
+
+
+ >
+ );
+};
\ No newline at end of file
diff --git a/src/entities/settlement/ui/list-wrap.tsx b/src/entities/settlement/ui/list-wrap.tsx
index db45445..92c59c3 100644
--- a/src/entities/settlement/ui/list-wrap.tsx
+++ b/src/entities/settlement/ui/list-wrap.tsx
@@ -3,59 +3,141 @@ import { useEffect, useState } from 'react';
import { NumericFormat } from 'react-number-format';
import { IMAGE_ROOT } from '@/shared/constants/common';
import { ListDateGroup } from './list-date-group';
-import { ListItem, ListDateGroupProps, SortByKeys } from '@/entities/settlement/model/types';
-import { useSettlementListMutation } from '@/entities/settlement/api/use-settlement-list-mutation';
+import { PATHS } from '@/shared/constants/paths';
+import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constants';
-import { SortOptionsBox } from '@/entities/transaction/ui/sort-options-box';
+import { SortOptionsBox } from '@/entities/settlement/ui/sort-options-box';
+import { useSettlementsHistoryMutation } from '../api/use-settlements-history-mutation';
+import { useSettlementsHistorySummaryMutation } from '../api/use-settlements-history-summary-mutation';
+import {
+ SortByKeys,
+ SettlementPeriodType,
+ SettlementPaymentMethod,
+ SettlementsHistoryContent,
+ ListDateGroupProps,
+ SettlementsTransactionListContent
+} from '@/entities/settlement/model/types';
+import { useSettlementsTransactionSummaryMutation } from '../api/use-settlements-transaction-summary-mutation';
+import { useSettlementsTransactionListMutation } from '../api/use-settlements-transaction-list-mutation';
+import { ListSummaryExtendSettlement } from './list-summary-extend-settlement';
+import { ListSummaryExtendTransaction } from './list-summary-extend-transaction';
+import SlideDown from 'react-slidedown';
+import 'react-slidedown/lib/slidedown.css';
export const ListWrap = () => {
- const [selectedServiceCode, setSelectedServiceCode] = useState('st');
+ const { navigate } = useNavigate();
+
const [sortBy, setSortBy] = useState(SortByKeys.New);
- const [listItems, setListItems] = useState({});
+ const [settlementDateListItems, setSettlementDateListItems] = useState>>({});
+ const [transactionDatelistItems, setTransactionDateListItems] = useState>>({});
+ const [filterOn, setFilterOn] = useState(false);
const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM);
- const [fromDate, setFromDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD'));
- const [toDate, setToDate] = useState(moment().format('YYYYMMDD'));
-
- const { mutateAsync: settlementList } = useSettlementListMutation();
+ const [mid, setMid] = useState('nictest001m');
+ const [periodType, setPeriodType] = useState(SettlementPeriodType.SETTLEMENT_DATE);
+ const [startDate, setStartDate] = useState(moment().format('YYYY-MM-DD'));
+ const [endDate, setEndDate] = useState(moment().format('YYYY-MM-DD'));
+ const [paymentMethod, setPaymentMethod] = useState(SettlementPaymentMethod.ALL);
- const callList = (option?: {
+ const [settlementAmount, setSettlementAmount] = useState();
+ const [transactionAmount, setTransactionAmount] = useState();
+ const [pgFeeAmount, setPgFeeAmount] = useState();
+ const [holdAmount, setHoldAmount] = useState();
+ const [releaseAmount, setReleaseAmount] = useState();
+ const [offsetAmount, setOffsetAmount] = useState();
+ const [paymentFeeAmount, setPaymentFeeAmount] = useState();
+ const [escrowFeeAmount, setEscrowFeeAmount] = useState();
+ const [authFeeAmount, setAuthFeeAmount] = useState();
+ const [vatAmount, setVatAmount] = useState();
+ const [preSettlementCancelOffset, setPreSettlementCancelOffset] = useState();
+
+ const [isOpenSummary, setIsOpenSummary] = useState(false);
+
+ const { mutateAsync: settlementsHistory } = useSettlementsHistoryMutation();
+ const { mutateAsync: settlementsHistorySummary} = useSettlementsHistorySummaryMutation();
+ const { mutateAsync: settlementsTransactionList } = useSettlementsTransactionListMutation();
+ const { mutateAsync: settlementsTransactionSummary } = useSettlementsTransactionSummaryMutation();
+
+ const callList = () => {
+ if(periodType === SettlementPeriodType.SETTLEMENT_DATE){
+ callSettlementList();
+ }
+ else if(periodType === SettlementPeriodType.TRANSACTION_DATE){
+ callTransactionList();
+ }
+ };
+
+ const callSettlementList = (option?: {
sortBy?: string,
val?: string
}) => {
let listSummaryParams = {
- moid: 'string',
- tid: 'string',
- fromDate: fromDate,
- toDate: toDate,
- stateCode: '0',
- serviceCode: (option?.val)? option.val: selectedServiceCode,
- minAmount: 0,
- maxAmount: 0,
- dateCl: 'TRANS',
- goodsName: 'string',
- cardCode: 'st',
- bankCode: 'str',
- searchCl: 'CARD_NO',
- searchValue: 'string',
+ mid: mid,
+ periodType: periodType,
+ startDate: startDate,
+ endDate: endDate,
+ paymentMethod: paymentMethod,
};
pageParam.sortBy = (option?.sortBy)? option.sortBy: sortBy;
setPageParam(pageParam);
let listParams = {
...listSummaryParams,
- ...{page: pageParam}
+ ...{pagination: pageParam}
};
- settlementList(listParams).then((rs) => {
- setListItems(assembleData(rs.content));
+ settlementsHistory(listParams).then((rs) => {
+ setSettlementDateListItems(assembleData(rs.content));
+ });
+ settlementsHistorySummary(listSummaryParams).then((rs) => {
+ setSettlementAmount(rs.settlementAmount);
+ setTransactionAmount(rs.transactionAmount);
+ setPgFeeAmount(rs.pgFeeAmount);
+ setHoldAmount(rs.holdAmount);
+ setReleaseAmount(rs.releaseAmount);
+ setOffsetAmount(rs.offsetAmount);
+ });
+ };
+ const callTransactionList = (option?: {
+ sortBy?: string,
+ val?: string
+ }) => {
+ pageParam.sortBy = (option?.sortBy)? option.sortBy: sortBy;
+ setPageParam(pageParam);
+ let params = {
+ mid: mid,
+ periodType: periodType,
+ startDate: startDate,
+ endDate: endDate,
+ paymentMethod: paymentMethod,
+ pagination: pageParam
+ };
+
+ let summaryParams = {
+ ...params,
+ transactionIds: [
+ "TXN_20250608_001",
+ "TXN_20250608_002"
+ ]
+ };
+
+ settlementsTransactionList(params).then((rs) => {
+ setTransactionDateListItems(assembleData(rs.content));
+ });
+ settlementsTransactionSummary(summaryParams).then((rs) => {
+ setSettlementAmount(rs.settlementAmount);
+ setTransactionAmount(rs.transactionAmount);
+ setPaymentFeeAmount(rs.paymentFeeAmount);
+ setEscrowFeeAmount(rs.escrowFeeAmount);
+ setAuthFeeAmount(rs.authFeeAmount);
+ setVatAmount(rs.vatAmount);
+ setPreSettlementCancelOffset(rs.preSettlementCancelOffset);
});
};
- const assembleData = (content: Array) => {
+ const assembleData = (content: Array) => {
let data: any = {};
if(content && content.length > 0){
for(let i=0;i {
};
const onCliCkToSort = (sort: SortByKeys) => {
setSortBy(sort);
- callList({sortBy: sort});
+ if(periodType === SettlementPeriodType.SETTLEMENT_DATE){
+ callSettlementList({sortBy: sort});
+ }
+ else if(periodType === SettlementPeriodType.TRANSACTION_DATE){
+ callTransactionList({sortBy: sort});
+ }
+ };
+ const changePeriodType = (val: SettlementPeriodType) => {
+ if(val !== periodType){
+ setPeriodType(val);
+ if(val === SettlementPeriodType.SETTLEMENT_DATE){
+ callSettlementList();
+ }
+ else if(val === SettlementPeriodType.TRANSACTION_DATE){
+ callTransactionList();
+ }
+ }
};
useEffect(() => {
callList();
}, []);
- const getListDateGroup = () => {
+ const getSettlementDateListDateGroup = () => {
let rs = [];
- if(Object.keys(listItems).length > 0){
- for (const [key, value] of Object.entries(listItems)) {
+ if(Object.keys(settlementDateListItems).length > 0){
+ for (const [key, value] of Object.entries(settlementDateListItems)) {
rs.push(
+ );
+ }
+ }
+ return rs;
+ };
+ const getTransactionDateListDateGroup = () => {
+ let rs = [];
+ if(Object.keys(transactionDatelistItems).length > 0){
+ for (const [key, value] of Object.entries(transactionDatelistItems)) {
+ rs.push(
+
@@ -98,7 +213,7 @@ export const ListWrap = () => {
- 거래건별 보기
- 정산내역
+ changePeriodType(SettlementPeriodType.SETTLEMENT_DATE) }
+ >가맹점 기준
+ changePeriodType(SettlementPeriodType.TRANSACTION_DATE) }
+ >거래 기준
- {
- (!!listItems && Object.keys(listItems).length > 0) &&
- getListDateGroup()
- }
+ { (periodType === SettlementPeriodType.SETTLEMENT_DATE) &&
+ getSettlementDateListDateGroup()
+ }
+
+ { (periodType === SettlementPeriodType.TRANSACTION_DATE) &&
+ getTransactionDateListDateGroup()
+ }
>
);
diff --git a/src/entities/settlement/ui/sort-options-box.tsx b/src/entities/settlement/ui/sort-options-box.tsx
index 19e20a2..bd41e47 100644
--- a/src/entities/settlement/ui/sort-options-box.tsx
+++ b/src/entities/settlement/ui/sort-options-box.tsx
@@ -1,7 +1,7 @@
import { SortByKeys, SortOptionsBoxProps } from '../model/types';
export const SortOptionsBox = ({
sortBy,
- onCliCkToSort
+ onClickToSort
}: SortOptionsBoxProps) => {
return (
@@ -9,12 +9,12 @@ export const SortOptionsBox = ({
onCliCkToSort(SortByKeys.New) }
+ onClick={ () => onClickToSort(SortByKeys.New) }
>최신순
|
onCliCkToSort(SortByKeys.Amount) }
+ onClick={ () => onClickToSort(SortByKeys.Amount) }
>고액순
>
diff --git a/src/entities/tax/model/types.ts b/src/entities/tax/model/types.ts
index b710e20..d3270c2 100644
--- a/src/entities/tax/model/types.ts
+++ b/src/entities/tax/model/types.ts
@@ -17,10 +17,6 @@ export interface SortOptionsBoxProps {
sortBy: SortByKeys;
onCliCkToSort: (sortBy: SortByKeys) => void;
};
-export enum AltMsgKeys {
- Fold = '접기',
- UnFold = '펼치기',
-};
export enum DetailInfoSectionKeys {
Amount = 'Amount',
Publish = 'Publish',
diff --git a/src/entities/tax/ui/invoice-arrow.tsx b/src/entities/tax/ui/invoice-arrow.tsx
index fe95571..bb93730 100644
--- a/src/entities/tax/ui/invoice-arrow.tsx
+++ b/src/entities/tax/ui/invoice-arrow.tsx
@@ -1,6 +1,7 @@
import { useEffect, useState } from 'react';
import { IMAGE_ROOT } from '@/shared/constants/common';
-import { AltMsgKeys, InvoiceArrowProps } from '../model/types';
+import { AltMsgKeys } from '@/entities/common/model/types';
+import { InvoiceArrowProps } from '../model/types';
export const InvoiceArrow = ({ show }: InvoiceArrowProps) => {
const [altMsg, setAltMsg] = useState
(AltMsgKeys.Fold);
diff --git a/src/entities/transaction/model/types.ts b/src/entities/transaction/model/types.ts
index 4eabb06..5896ad6 100644
--- a/src/entities/transaction/model/types.ts
+++ b/src/entities/transaction/model/types.ts
@@ -4,10 +4,6 @@ export enum CancelTabKeys {
All = 'All',
Part = 'Part'
};
-export enum AltMsgKeys {
- Fold = '접기',
- UnFold = '펼치기',
-};
export enum SortByKeys {
New = 'New',
Amount = 'Amount',
@@ -471,9 +467,6 @@ export interface DetailInfoProps extends DetailResponse {
purposeType?: CashReceiptPurposeType;
onClickToShowInfo?: (info: InfoWrapKeys) => void;
}
-export interface DetailArrowProps {
- show?: boolean;
-};
export interface DownloadConfirmationParams {
tid?: string;
diff --git a/src/entities/transaction/ui/detail-arrow.tsx b/src/entities/transaction/ui/detail-arrow.tsx
index e4ecc12..a86146d 100644
--- a/src/entities/transaction/ui/detail-arrow.tsx
+++ b/src/entities/transaction/ui/detail-arrow.tsx
@@ -1,6 +1,9 @@
import { useEffect, useState } from 'react';
import { IMAGE_ROOT } from '@/shared/constants/common';
-import { AltMsgKeys, DetailArrowProps } from '../model/types';
+import {
+ AltMsgKeys,
+ DetailArrowProps
+} from '@/entities/common/model/types';
export const DetailArrow = ({ show }: DetailArrowProps) => {
const [altMsg, setAltMsg] = useState(AltMsgKeys.Fold);
diff --git a/src/entities/transaction/ui/info-wrap/amount-info-wrap.tsx b/src/entities/transaction/ui/info-wrap/amount-info-wrap.tsx
index a2acfd6..6b3f558 100644
--- a/src/entities/transaction/ui/info-wrap/amount-info-wrap.tsx
+++ b/src/entities/transaction/ui/info-wrap/amount-info-wrap.tsx
@@ -1,9 +1,10 @@
import moment from 'moment';
-import { motion } from 'framer-motion';
import { NumericFormat } from 'react-number-format';
import { DetailArrow } from '../detail-arrow';
import { useDownloadConfirmationMutation } from '../../api/use-download-confirmation-mutation';
import { InfoWrapKeys, DetailInfoProps } from '../../model/types';
+import { SlideDown } from 'react-slidedown';
+import 'react-slidedown/lib/slidedown.css';
export const AmountInfoWrap = ({
transactionCategory,
@@ -96,12 +97,7 @@ export const AmountInfoWrap = ({
}
return rs;
}
-
- const variants = {
- hidden: { height: 0, padding: 0, margin: 0, display: 'none' },
- visible: { height: 'auto', padding: '16px', margin: '10px 0', display: 'block' },
- };
-
+
const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){
onClickToShowInfo(InfoWrapKeys.Amount);
@@ -138,19 +134,16 @@ export const AmountInfoWrap = ({
금액상세
-
-