Add comprehensive i18n localization to settlement entity

- Convert settlement constants to i18n-compatible getter functions
- Add 28+ translation keys to settlement namespace
- Localize 11 settlement UI components

Constant conversions:
- getSettlementPeriodTypeBtnGroup(t)
- getSettlementPaymentMethodOptionsGroup(t)

Translation keys added:
- settlement.periodType.* (settlementDate, transactionDate)
- settlement.searchCriteria, searchPeriod
- settlement.settlementCompleted, depositScheduled
- settlement.settlementInfo, transferStatus, transferId, transferTime
- settlement.bankName, accountNumber, depositorName
- settlement.settlementDepositAmount, errorReason
- settlement.transactionDetailInfo
- settlement.cardBankTelecom, approvalAccountPhone
- common.weekdays.* (sun-sat)
- common.currencyUnit

Localized components:
- filter/list-filter.tsx
- calandar-wrap.tsx, calendar-grid.tsx
- calendar-settlement-item.tsx, calandar-amount-row.tsx
- info-wrap/settlement-info-wrap.tsx
- info-wrap/transaction-info-wrap.tsx
- list-summary-extend-settlement.tsx
- list-summary-extend-transaction.tsx

All settlement components now support Korean/English language switching.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jay Sheen
2025-10-30 17:36:42 +09:00
parent 868f6754ed
commit 0d43510307
12 changed files with 233 additions and 137 deletions

View File

@@ -1,18 +1,20 @@
import { TFunction } from 'i18next';
import { SettlementPaymentMethod, SettlementPeriodType } from './types'; import { SettlementPaymentMethod, SettlementPeriodType } from './types';
export const SettlementPeriodTypeBtnGroup = [ export const getSettlementPeriodTypeBtnGroup = (t: TFunction) => [
{name: '정산일자', value: SettlementPeriodType.SETTLEMENT_DATE }, {name: t('settlement.periodType.settlementDate'), value: SettlementPeriodType.SETTLEMENT_DATE },
{name: '거래일자', value: SettlementPeriodType.TRANSACTION_DATE } {name: t('settlement.periodType.transactionDate'), value: SettlementPeriodType.TRANSACTION_DATE }
]; ];
export const SettlementPaymentMethodOptionsGroup = [
{name: '전체', value: SettlementPaymentMethod.ALL}, export const getSettlementPaymentMethodOptionsGroup = (t: TFunction) => [
{name: '신용카드', value: SettlementPaymentMethod.CREDIT_CARD}, {name: t('transaction.constants.all'), value: SettlementPaymentMethod.ALL},
{name: '가상계좌', value: SettlementPaymentMethod.VIRTUAL_ACCOUNT}, {name: t('transaction.constants.creditCard'), value: SettlementPaymentMethod.CREDIT_CARD},
{name: '계좌이체', value: SettlementPaymentMethod.ACCOUNT_TRANSFER}, {name: t('transaction.constants.virtualAccount'), value: SettlementPaymentMethod.VIRTUAL_ACCOUNT},
{name: '계좌간편결제', value: SettlementPaymentMethod.ACCOUNT_EASY_PAY}, {name: t('transaction.constants.accountTransfer'), value: SettlementPaymentMethod.ACCOUNT_TRANSFER},
{name: '휴대폰', value: SettlementPaymentMethod.MOBILE_PAYMENT}, {name: t('transaction.constants.accountSimpleTransfer'), value: SettlementPaymentMethod.ACCOUNT_EASY_PAY},
{name: 'SSG 머니', value: SettlementPaymentMethod.SSG_MONEY}, {name: t('transaction.constants.mobilePayment'), value: SettlementPaymentMethod.MOBILE_PAYMENT},
{name: 'SSG 은행계좌', value: SettlementPaymentMethod.SSG_BANK_ACCOUNT}, {name: t('transaction.constants.ssgMoney'), value: SettlementPaymentMethod.SSG_MONEY},
{name: '문화상품권', value: SettlementPaymentMethod.CULTURE_VOUCHER}, {name: t('transaction.constants.ssgBank'), value: SettlementPaymentMethod.SSG_BANK_ACCOUNT},
{name: '티머니페이', value: SettlementPaymentMethod.TMONEY_PAY}, {name: t('transaction.constants.cultureLand'), value: SettlementPaymentMethod.CULTURE_VOUCHER},
{name: t('transaction.constants.tmoneyPay'), value: SettlementPaymentMethod.TMONEY_PAY},
]; ];

View File

@@ -1,4 +1,5 @@
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { useTranslation } from 'react-i18next';
import { SettlementStatus } from '../model/types'; import { SettlementStatus } from '../model/types';
export interface CalendarAmountRowProps { export interface CalendarAmountRowProps {
@@ -10,23 +11,24 @@ export const CalendarAmountRow = ({
amount, amount,
settlementStatus settlementStatus
}: CalendarAmountRowProps) => { }: CalendarAmountRowProps) => {
const { t } = useTranslation();
const makeTitle = () => { const makeTitle = () => {
let rs = []; let rs = [];
if(settlementStatus === SettlementStatus.SCHEDULED){ if(settlementStatus === SettlementStatus.SCHEDULED){
rs.push( rs.push(
<span <span
key='amount-label-scheduled' key='amount-label-scheduled'
className="scheduled" className="scheduled"
></span> >{t('settlement.scheduled')}</span>
); );
} }
else if(settlementStatus === SettlementStatus.COMPLETED){ else if(settlementStatus === SettlementStatus.COMPLETED){
rs.push( rs.push(
<span <span
key='amount-label-complete' key='amount-label-complete'
className="complete" className="complete"
></span> >{t('settlement.completed')}</span>
); );
} }
return rs; return rs;
@@ -35,13 +37,13 @@ export const CalendarAmountRow = ({
return ( return (
<> <>
<div className="amount-row"> <div className="amount-row">
<div className="amount-label"> { makeTitle() } </div> <div className="amount-label">{t('settlement.settlementShort')} { makeTitle() } {t('filter.amount')}</div>
<div className="amount-value"> <div className="amount-value">
<NumericFormat <NumericFormat
value={ amount } value={ amount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
suffix='원' suffix={t('common.currencyUnit')}
></NumericFormat> ></NumericFormat>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,12 @@
import moment from 'moment'; import moment from 'moment';
import { ChangeEvent, useEffect, useState } from 'react'; import { ChangeEvent, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { useSettlementsCalendarMutation } from '../api/use-settlements-calendar-mutation'; import { useSettlementsCalendarMutation } from '../api/use-settlements-calendar-mutation';
import { CalendarAmountRow } from './calandar-amount-row'; import { CalendarAmountRow } from './calandar-amount-row';
import { CalendarSettlementItem } from './calendar-settlement-item'; import { CalendarSettlementItem } from './calendar-settlement-item';
import { CalendarGrid } from './calendar-grid'; import { CalendarGrid } from './calendar-grid';
import { import {
SettlementDays, SettlementDays,
SettlementsCalendarParams, SettlementsCalendarParams,
SettlementsCalendarResponse, SettlementsCalendarResponse,
@@ -14,7 +15,8 @@ import {
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
export const CalendarWrap = () => { export const CalendarWrap = () => {
moment.locale('ko'); const { t, i18n } = useTranslation();
moment.locale(i18n.language);
const midOptions = useStore.getState().UserStore.selectOptionsMids; const midOptions = useStore.getState().UserStore.selectOptionsMids;
const userMid = useStore.getState().UserStore.mid; const userMid = useStore.getState().UserStore.mid;
@@ -135,25 +137,25 @@ export const CalendarWrap = () => {
</div> </div>
<div className="month-group"> <div className="month-group">
<button <button
className={ `month-btn ${(!onActionCalendar)? 'disabled': ''}` } className={ `month-btn ${(!onActionCalendar)? 'disabled': ''}` }
aria-label="이전 달" aria-label={t('settlement.previousMonth')}
onClick={ onClickToMoveMonthPrev } onClick={ onClickToMoveMonthPrev }
> >
<img <img
src={ IMAGE_ROOT + '/ico_date_prev.svg' } src={ IMAGE_ROOT + '/ico_date_prev.svg' }
alt="이전" alt={t('settlement.previous')}
/> />
</button> </button>
<div className="month-title">{ moment(yearMonth).format('YYYY년 MM월') }</div> <div className="month-title">{ moment(yearMonth).format('YYYY년 MM월') }</div>
<button <button
className={ `month-btn ${(lastMonth || !onActionCalendar)? 'disabled': ''}` } className={ `month-btn ${(lastMonth || !onActionCalendar)? 'disabled': ''}` }
aria-label="다음 달" aria-label={t('settlement.nextMonth')}
onClick={ onClickToMoveMonthNext } onClick={ onClickToMoveMonthNext }
> >
<img <img
src={ IMAGE_ROOT + '/ico_date_next.svg' } src={ IMAGE_ROOT + '/ico_date_next.svg' }
alt="다음" alt={t('settlement.next')}
/> />
</button> </button>
</div> </div>
@@ -172,11 +174,11 @@ export const CalendarWrap = () => {
<div className="legend-group"> <div className="legend-group">
<div className="legend-item"> <div className="legend-item">
<div className="legend-dot complete"></div> <div className="legend-dot complete"></div>
<div className="legend-text"> </div> <div className="legend-text">{t('settlement.settlementCompleted')}</div>
</div> </div>
<div className="legend-item"> <div className="legend-item">
<div className="legend-dot scheduled"></div> <div className="legend-dot scheduled"></div>
<div className="legend-text"> </div> <div className="legend-text">{t('settlement.depositScheduled')}</div>
</div> </div>
</div> </div>

View File

@@ -1,4 +1,5 @@
import moment from 'moment'; import moment from 'moment';
import { useTranslation } from 'react-i18next';
import { SettlementDays, SettlementStatus } from '../model/types'; import { SettlementDays, SettlementStatus } from '../model/types';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@@ -13,7 +14,8 @@ export const CalendarGrid = ({
scheduledDateList, scheduledDateList,
completedDateList completedDateList
}: CalendarGridProps) => { }: CalendarGridProps) => {
const { t } = useTranslation();
const makeCalendarDate = () => { const makeCalendarDate = () => {
let startDay = moment(yearMonth).startOf('month').day(); let startDay = moment(yearMonth).startOf('month').day();
let lastDate = moment(yearMonth).endOf('month').date(); let lastDate = moment(yearMonth).endOf('month').date();
@@ -73,13 +75,13 @@ export const CalendarGrid = ({
<> <>
<div className="calendar-grid"> <div className="calendar-grid">
<div className="weekdays"> <div className="weekdays">
<div className="weekday sun"></div> <div className="weekday sun">{t('common.weekdays.sun')}</div>
<div className="weekday"></div> <div className="weekday">{t('common.weekdays.mon')}</div>
<div className="weekday"></div> <div className="weekday">{t('common.weekdays.tue')}</div>
<div className="weekday"></div> <div className="weekday">{t('common.weekdays.wed')}</div>
<div className="weekday"></div> <div className="weekday">{t('common.weekdays.thu')}</div>
<div className="weekday"></div> <div className="weekday">{t('common.weekdays.fri')}</div>
<div className="weekday sat"></div> <div className="weekday sat">{t('common.weekdays.sat')}</div>
</div> </div>
<div className="days"> <div className="days">
{ makeCalendarDate() } { makeCalendarDate() }

View File

@@ -1,5 +1,6 @@
import moment from 'moment'; import moment from 'moment';
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { useTranslation } from 'react-i18next';
import { PATHS } from '@/shared/constants/paths'; import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { SettlementDays, SettlementStatus } from '../model/types'; import { SettlementDays, SettlementStatus } from '../model/types';
@@ -14,6 +15,7 @@ export const CalendarSettlementItem = ({
settlementStatus settlementStatus
}: CalendarSettlementItemProps) => { }: CalendarSettlementItemProps) => {
const { navigate } = useNavigate(); const { navigate } = useNavigate();
const { t } = useTranslation();
const getAmount = ( const getAmount = (
scheduledAmount: number | undefined, scheduledAmount: number | undefined,
@@ -65,10 +67,10 @@ export const CalendarSettlementItem = ({
</div> </div>
<div className="settlement-amount"> <div className="settlement-amount">
<NumericFormat <NumericFormat
value={ getAmount(value?.scheduledAmount, value?.completedAmount) } value={ getAmount(value?.scheduledAmount, value?.completedAmount) }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
suffix='원' suffix={t('common.currencyUnit')}
></NumericFormat> ></NumericFormat>
</div> </div>
</div> </div>

View File

@@ -1,19 +1,20 @@
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { useTranslation } from 'react-i18next';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { useStore } from '@/shared/model/store'; import { useStore } from '@/shared/model/store';
import { import {
SettlementPaymentMethod, SettlementPaymentMethod,
SettlementPeriodType SettlementPeriodType
} from '../../model/types'; } from '../../model/types';
import { import {
FilterMotionDuration, FilterMotionDuration,
FilterMotionStyle, FilterMotionStyle,
FilterMotionVariants FilterMotionVariants
} from '@/entities/common/model/constant'; } from '@/entities/common/model/constant';
import { FilterSelect } from '@/shared/ui/filter/select'; import { FilterSelect } from '@/shared/ui/filter/select';
import { FilterCalendar } from '@/shared/ui/filter/calendar'; import { FilterCalendar } from '@/shared/ui/filter/calendar';
import { SettlementPaymentMethodOptionsGroup, SettlementPeriodTypeBtnGroup } from '../../model/constant'; import { getSettlementPaymentMethodOptionsGroup, getSettlementPeriodTypeBtnGroup } from '../../model/constant';
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups'; import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
import { FilterSelectMid } from '@/shared/ui/filter/select-mid'; import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
@@ -46,13 +47,14 @@ export const ListFilter = ({
setEndDate, setEndDate,
setPaymentMethod setPaymentMethod
}: ListFilterProps) => { }: ListFilterProps) => {
const { t } = useTranslation();
const [filterMid, setFilterMid] = useState<string>(mid); const [filterMid, setFilterMid] = useState<string>(mid);
const [filterPeriodType, setFilterPeriodType] = useState<SettlementPeriodType>(periodType); const [filterPeriodType, setFilterPeriodType] = useState<SettlementPeriodType>(periodType);
const [filterStartDate, setFilterStartDate] = useState<string>(startDate); const [filterStartDate, setFilterStartDate] = useState<string>(startDate);
const [filterEndDate, setFilterEndDate] = useState<string>(endDate); const [filterEndDate, setFilterEndDate] = useState<string>(endDate);
const [filterPaymentMethod, setFilterPaymentMethod] = useState<SettlementPaymentMethod>(paymentMethod); const [filterPaymentMethod, setFilterPaymentMethod] = useState<SettlementPaymentMethod>(paymentMethod);
const midOptions = useStore.getState().UserStore.selectOptionsMids; const midOptions = useStore.getState().UserStore.selectOptionsMids;
const onClickToClose = () => { const onClickToClose = () => {
@@ -84,15 +86,15 @@ export const ListFilter = ({
> >
<div className="full-menu-container"> <div className="full-menu-container">
<div className="full-menu-header"> <div className="full-menu-header">
<div className="full-menu-title center"></div> <div className="full-menu-title center">{t('filter.filter')}</div>
<div className="full-menu-actions"> <div className="full-menu-actions">
<button <button
id="closeFullMenu" id="closeFullMenu"
className="full-menu-close" className="full-menu-close"
> >
<img <img
src={ IMAGE_ROOT + '/ico_close.svg' } src={ IMAGE_ROOT + '/ico_close.svg' }
alt="닫기" alt={t('common.close')}
onClick={ () => onClickToClose() } onClick={ () => onClickToClose() }
/> />
</button> </button>
@@ -100,35 +102,35 @@ export const ListFilter = ({
</div> </div>
<div className="option-list pt-16"> <div className="option-list pt-16">
<FilterSelectMid <FilterSelectMid
title='가맹점' title={t('filter.merchant')}
selectSetter={ setMid } selectSetter={ setMid }
showType={ 'GID' } showType={ 'GID' }
></FilterSelectMid> ></FilterSelectMid>
<FilterButtonGroups <FilterButtonGroups
title='조회기준' title={t('settlement.searchCriteria')}
activeValue={ filterPeriodType } activeValue={ filterPeriodType }
btnGroups={ SettlementPeriodTypeBtnGroup } btnGroups={ getSettlementPeriodTypeBtnGroup(t) }
setter={ setFilterPeriodType } setter={ setFilterPeriodType }
></FilterButtonGroups> ></FilterButtonGroups>
<FilterCalendar <FilterCalendar
title='조회기간' title={t('settlement.searchPeriod')}
startDate={ filterStartDate } startDate={ filterStartDate }
endDate={ filterEndDate } endDate={ filterEndDate }
setStartDate={ setFilterStartDate } setStartDate={ setFilterStartDate }
setEndDate={ setFilterEndDate } setEndDate={ setFilterEndDate }
></FilterCalendar> ></FilterCalendar>
<FilterSelect <FilterSelect
title='결제수단' title={t('filter.paymentMethod')}
selectValue={ filterPaymentMethod } selectValue={ filterPaymentMethod }
selectSetter={ setFilterPaymentMethod } selectSetter={ setFilterPaymentMethod }
selectOptions={ SettlementPaymentMethodOptionsGroup } selectOptions={ getSettlementPaymentMethodOptionsGroup(t) }
></FilterSelect> ></FilterSelect>
</div> </div>
<div className="apply-row"> <div className="apply-row">
<button <button
className="btn-50 btn-blue flex-1" className="btn-50 btn-blue flex-1"
onClick={ () => onClickToSetFilter() } onClick={ () => onClickToSetFilter() }
></button> >{t('filter.apply')}</button>
</div> </div>
</div> </div>
</motion.div> </motion.div>

View File

@@ -1,11 +1,12 @@
import moment from 'moment'; import moment from 'moment';
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow'; import { useTranslation } from 'react-i18next';
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow';
import SlideDown from 'react-slidedown'; import SlideDown from 'react-slidedown';
import 'react-slidedown/lib/slidedown.css'; import 'react-slidedown/lib/slidedown.css';
import { import {
InfoWrapKeys, InfoWrapKeys,
SettlementInfoWrapProps, SettlementInfoWrapProps,
SettlementPeriodType SettlementPeriodType
} from '../../model/types'; } from '../../model/types';
@@ -14,6 +15,7 @@ export const SettlementInfoWrap = ({
isOpen, isOpen,
onClickToShowInfo onClickToShowInfo
}: SettlementInfoWrapProps) => { }: SettlementInfoWrapProps) => {
const { t } = useTranslation();
const onClickToSetShowInfo = () => { const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){ if(!!onClickToShowInfo){
@@ -24,59 +26,59 @@ export const SettlementInfoWrap = ({
return ( return (
<> <>
<div className="txn-section"> <div className="txn-section">
<div <div
className="section-title" className="section-title"
onClick={ () => onClickToSetShowInfo() } onClick={ () => onClickToSetShowInfo() }
> >
<SectionTitleArrow isOpen={ isOpen }></SectionTitleArrow> {t('settlement.settlementInfo')} <SectionTitleArrow isOpen={ isOpen }></SectionTitleArrow>
</div> </div>
<SlideDown className={'my-dropdown-slidedown'}> <SlideDown className={'my-dropdown-slidedown'}>
{ isOpen && { isOpen &&
<ul className="kv-list"> <ul className="kv-list">
<li className="kv-row"> <li className="kv-row">
<span className="k">MID</span> <span className="k">{t('transaction.fields.mid')}</span>
<span className="v">{ settlementInfo?.mid }</span> <span className="v">{ settlementInfo?.mid }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('settlement.transferStatus')}</span>
<span className="v">{ settlementInfo?.transferStatus }</span> <span className="v">{ settlementInfo?.transferStatus }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k">ID</span> <span className="k">{t('settlement.transferId')}</span>
<span className="v">{ settlementInfo?.transferId }</span> <span className="v">{ settlementInfo?.transferId }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.transferTime')}</span>
<span className="v"> <span className="v">
{ settlementInfo?.transferTime && { settlementInfo?.transferTime &&
moment(settlementInfo?.transferTime).format('YYYY.MM.DD HH:mm:ss') moment(settlementInfo?.transferTime).format('YYYY.MM.DD HH:mm:ss')
} }
</span> </span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.bankName')}</span>
<span className="v">{ settlementInfo?.bankName }</span> <span className="v">{ settlementInfo?.bankName }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.accountNumber')}</span>
<span className="v">{ settlementInfo?.accountNumber }</span> <span className="v">{ settlementInfo?.accountNumber }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.depositorName')}</span>
<span className="v">{ settlementInfo?.depositorName }</span> <span className="v">{ settlementInfo?.depositorName }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.settlementDepositAmount')}</span>
<span className="v"> <span className="v">
<NumericFormat <NumericFormat
value={ settlementInfo?.settlementDepositAmount } value={ settlementInfo?.settlementDepositAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> ></NumericFormat>
</span> </span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('settlement.errorReason')}</span>
<span className="v">{ settlementInfo?.errorReason }</span> <span className="v">{ settlementInfo?.errorReason }</span>
</li> </li>
</ul> </ul>

View File

@@ -1,10 +1,11 @@
import moment from 'moment'; import moment from 'moment';
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow'; import { useTranslation } from 'react-i18next';
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow';
import SlideDown from 'react-slidedown'; import SlideDown from 'react-slidedown';
import 'react-slidedown/lib/slidedown.css'; import 'react-slidedown/lib/slidedown.css';
import { import {
InfoWrapKeys, InfoWrapKeys,
TransactionInfoWrapProps, TransactionInfoWrapProps,
} from '@/entities/settlement/model/types'; } from '@/entities/settlement/model/types';
export const TransactionInfoWrap = ({ export const TransactionInfoWrap = ({
@@ -12,6 +13,7 @@ export const TransactionInfoWrap = ({
isOpen, isOpen,
onClickToShowInfo onClickToShowInfo
}: TransactionInfoWrapProps) => { }: TransactionInfoWrapProps) => {
const { t } = useTranslation();
const onClickToSetShowInfo = () => { const onClickToSetShowInfo = () => {
if(!!onClickToShowInfo){ if(!!onClickToShowInfo){
@@ -22,61 +24,61 @@ export const TransactionInfoWrap = ({
return ( return (
<> <>
<div className="txn-section"> <div className="txn-section">
<div <div
className="section-title" className="section-title"
onClick={ () => onClickToSetShowInfo() } onClick={ () => onClickToSetShowInfo() }
> >
<SectionTitleArrow isOpen={ isOpen }></SectionTitleArrow> {t('settlement.transactionDetailInfo')} <SectionTitleArrow isOpen={ isOpen }></SectionTitleArrow>
</div> </div>
<SlideDown className={'my-dropdown-slidedown'}> <SlideDown className={'my-dropdown-slidedown'}>
{ isOpen && { isOpen &&
<ul className="kv-list"> <ul className="kv-list">
<li className="kv-row"> <li className="kv-row">
<span className="k"></span> <span className="k">{t('transaction.fields.orderNumber')}</span>
<span className="v">{ transactionInfo?.orderNumber }</span> <span className="v">{ transactionInfo?.orderNumber }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k">TID</span> <span className="k">{t('transaction.fields.tid')}</span>
<span className="v">{ transactionInfo?.tid }</span> <span className="v">{ transactionInfo?.tid }</span>
</li> </li>
<li className="kv-row"> <li className="kv-row">
<span className="k"> TID</span> <span className="k">{t('transaction.fields.originalTid')}</span>
<span className="v">{ transactionInfo?.originalTid }</span> <span className="v">{ transactionInfo?.originalTid }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.transactionStatus')}</span>
<span className="v">{ transactionInfo?.transactionStatus }</span> <span className="v">{ transactionInfo?.transactionStatus }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.paymentMethod')}</span>
<span className="v">{ transactionInfo?.paymentMethod }</span> <span className="v">{ transactionInfo?.paymentMethod }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('additionalService.settlementAgency.settlementDate')}</span>
<span className="v">{ moment(transactionInfo?.settlementDate).format('YYYY.MM.DD') }</span> <span className="v">{ moment(transactionInfo?.settlementDate).format('YYYY.MM.DD') }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.approvalDay')}</span>
<span className="v">{ moment(transactionInfo?.approvalDate).format('YYYY.MM.DD') }</span> <span className="v">{ moment(transactionInfo?.approvalDate).format('YYYY.MM.DD') }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.cancelDate')}</span>
<span className="v">{ moment(transactionInfo?.cancelDate).format('YYYY.MM.DD') }</span> <span className="v">{ moment(transactionInfo?.cancelDate).format('YYYY.MM.DD') }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k">//</span> <span className="k">{t('settlement.cardBankTelecom')}</span>
<span className="v">{ transactionInfo?.cardCompany }</span> <span className="v">{ transactionInfo?.cardCompany }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k">//</span> <span className="k">{t('settlement.approvalAccountPhone')}</span>
<span className="v">{ transactionInfo?.approvalNumber }</span> <span className="v">{ transactionInfo?.approvalNumber }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.productName')}</span>
<span className="v">{ transactionInfo?.productName }</span> <span className="v">{ transactionInfo?.productName }</span>
</li> </li>
<li className="kv-row bolder"> <li className="kv-row bolder">
<span className="k"></span> <span className="k">{t('transaction.fields.buyer')}</span>
<span className="v">{ transactionInfo?.buyerName }</span> <span className="v">{ transactionInfo?.buyerName }</span>
</li> </li>
</ul> </ul>

View File

@@ -1,4 +1,5 @@
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { useTranslation } from 'react-i18next';
import { SettlementsHistorySummaryResponse } from '../model/types'; import { SettlementsHistorySummaryResponse } from '../model/types';
export interface ListSummaryExtendSettlementProps extends SettlementsHistorySummaryResponse {}; export interface ListSummaryExtendSettlementProps extends SettlementsHistorySummaryResponse {};
@@ -11,59 +12,60 @@ export const ListSummaryExtendSettlement = ({
releaseAmount, releaseAmount,
offsetAmount offsetAmount
}: ListSummaryExtendSettlementProps) => { }: ListSummaryExtendSettlementProps) => {
const { t } = useTranslation();
return ( return (
<> <>
<div className="summary-extend"> <div className="summary-extend">
<ul className="summary-amount-list"> <ul className="summary-amount-list">
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"></span> <span className="label">{t('settlement.transactionAmount')}</span>
<span className="value"> <span className="value">
<NumericFormat <NumericFormat
value={ transactionAmount } value={ transactionAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label">PG </span> <span className="label">{t('settlement.totalPgFee')}</span>
<span className="value minus"> <span className="value minus">
<NumericFormat <NumericFormat
value={ pgFeeAmount } value={ pgFeeAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"></span> <span className="label">{t('settlement.hold')}</span>
<span className="value"> <span className="value">
<NumericFormat <NumericFormat
value={ holdAmount } value={ holdAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"></span> <span className="label">{t('settlement.release')}</span>
<span className="value link"> <span className="value link">
<NumericFormat <NumericFormat
value={ releaseAmount } value={ releaseAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"></span> <span className="label">{t('settlement.offset')}</span>
<span className="value minus"> <span className="value minus">
<NumericFormat <NumericFormat
value={ offsetAmount } value={ offsetAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
</ul> </ul>

View File

@@ -1,4 +1,5 @@
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { useTranslation } from 'react-i18next';
import { SettlementsTransactionSummaryResponse } from '../model/types'; import { SettlementsTransactionSummaryResponse } from '../model/types';
export interface ListSummaryExtendTransactionProps extends SettlementsTransactionSummaryResponse {}; export interface ListSummaryExtendTransactionProps extends SettlementsTransactionSummaryResponse {};
@@ -12,69 +13,70 @@ export const ListSummaryExtendTransaction = ({
vatAmount, vatAmount,
preSettlementCancelOffset preSettlementCancelOffset
}: ListSummaryExtendTransactionProps) => { }: ListSummaryExtendTransactionProps) => {
const { t } = useTranslation();
return ( return (
<> <>
<div className="summary-extend"> <div className="summary-extend">
<ul className="summary-amount-list"> <ul className="summary-amount-list">
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"></span> <span className="label">{t('settlement.transactionAmount')}</span>
<span className="value"> <span className="value">
<NumericFormat <NumericFormat
value={ transactionAmount } value={ transactionAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"> </span> <span className="label">{t('settlement.paymentFee')}</span>
<span className="value minus"> <span className="value minus">
<NumericFormat <NumericFormat
value={ paymentFeeAmount } value={ paymentFeeAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"> </span> <span className="label">{t('settlement.escrowFee')}</span>
<span className="value"> <span className="value">
<NumericFormat <NumericFormat
value={ escrowFeeAmount } value={ escrowFeeAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"> </span> <span className="label">{t('settlement.authFee')}</span>
<span className="value link"> <span className="value link">
<NumericFormat <NumericFormat
value={ authFeeAmount } value={ authFeeAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label">VAT</span> <span className="label">VAT</span>
<span className="value minus"> <span className="value minus">
<NumericFormat <NumericFormat
value={ vatAmount } value={ vatAmount }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
<li className="summary-amount-item"> <li className="summary-amount-item">
<span className="label"> </span> <span className="label">{t('settlement.preSettlementCancelOffset')}</span>
<span className="value minus"> <span className="value minus">
<NumericFormat <NumericFormat
value={ preSettlementCancelOffset } value={ preSettlementCancelOffset }
thousandSeparator thousandSeparator
displayType="text" displayType="text"
></NumericFormat> <span className="unit"></span> ></NumericFormat> <span className="unit">{t('common.currencyUnit')}</span>
</span> </span>
</li> </li>
</ul> </ul>

View File

@@ -17,7 +17,17 @@
"noData": "No data available", "noData": "No data available",
"next": "Next", "next": "Next",
"latest": "Latest", "latest": "Latest",
"oldest": "Oldest" "oldest": "Oldest",
"weekdays": {
"sun": "Sun",
"mon": "Mon",
"tue": "Tue",
"wed": "Wed",
"thu": "Thu",
"fri": "Fri",
"sat": "Sat"
},
"currencyUnit": ""
}, },
"menu": { "menu": {
"home": "Home", "home": "Home",
@@ -343,7 +353,35 @@
"offset": "Offset", "offset": "Offset",
"transactionAmount": "Transaction Amount", "transactionAmount": "Transaction Amount",
"expectedSettlementAmount": "Expected Settlement Amount", "expectedSettlementAmount": "Expected Settlement Amount",
"preSettlementCancelOffset": "Pre-Settlement Cancel Offset" "preSettlementCancelOffset": "Pre-Settlement Cancel Offset",
"periodType": {
"settlementDate": "Settlement Date",
"transactionDate": "Transaction Date"
},
"searchCriteria": "Search Criteria",
"searchPeriod": "Search Period",
"settlementCompleted": "Settlement Completed",
"depositScheduled": "Deposit Scheduled",
"previousMonth": "Previous Month",
"nextMonth": "Next Month",
"previous": "Previous",
"next": "Next",
"scheduled": "Scheduled",
"completed": "Completed",
"settlementScheduledAmount": "Settlement Scheduled Amount",
"settlementCompletedAmount": "Settlement Completed Amount",
"settlementInfo": "Settlement Information",
"transferStatus": "Transfer Status",
"transferId": "Transfer ID",
"transferTime": "Transfer Time",
"bankName": "Bank Name",
"accountNumber": "Account Number",
"depositorName": "Depositor Name",
"settlementDepositAmount": "Settlement Deposit Amount",
"errorReason": "Error Reason",
"transactionDetailInfo": "Transaction Detail Information",
"cardBankTelecom": "Card/Bank/Telecom",
"approvalAccountPhone": "Approval No./Account No./Phone No."
}, },
"transaction": { "transaction": {
"listTitle": "Transactions", "listTitle": "Transactions",

View File

@@ -17,7 +17,17 @@
"noData": "데이터가 없습니다", "noData": "데이터가 없습니다",
"next": "다음", "next": "다음",
"latest": "최신순", "latest": "최신순",
"oldest": "오래된순" "oldest": "오래된순",
"weekdays": {
"sun": "일",
"mon": "월",
"tue": "화",
"wed": "수",
"thu": "목",
"fri": "금",
"sat": "토"
},
"currencyUnit": "원"
}, },
"menu": { "menu": {
"home": "홈", "home": "홈",
@@ -347,7 +357,35 @@
"offset": "상계", "offset": "상계",
"transactionAmount": "거래금액", "transactionAmount": "거래금액",
"expectedSettlementAmount": "정산예정금액", "expectedSettlementAmount": "정산예정금액",
"preSettlementCancelOffset": "정산전 취소상계" "preSettlementCancelOffset": "정산전 취소상계",
"periodType": {
"settlementDate": "정산일자",
"transactionDate": "거래일자"
},
"searchCriteria": "조회기준",
"searchPeriod": "조회기간",
"settlementCompleted": "정산 완료",
"depositScheduled": "입금 예정",
"previousMonth": "이전 달",
"nextMonth": "다음 달",
"previous": "이전",
"next": "다음",
"scheduled": "예정",
"completed": "완료",
"settlementScheduledAmount": "정산 예정 금액",
"settlementCompletedAmount": "정산 완료 금액",
"settlementInfo": "정산 정보",
"transferStatus": "이체상태",
"transferId": "이체ID",
"transferTime": "이체시간",
"bankName": "은행명",
"accountNumber": "계좌번호",
"depositorName": "입금인자",
"settlementDepositAmount": "정상입금액",
"errorReason": "오류사유",
"transactionDetailInfo": "거래 상세 정보",
"cardBankTelecom": "카드/은행/이통사",
"approvalAccountPhone": "승인번호/계좌번호/휴대번호"
}, },
"transaction": { "transaction": {
"listTitle": "거래내역 조회", "listTitle": "거래내역 조회",