Merge branch 'main' of https://gitea.bpsoft.co.kr/nicepayments/nice-app-web
This commit is contained in:
@@ -1,6 +1,4 @@
|
|||||||
VITE_APP_ENV=development
|
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_AUTH_PROXY_HOST='https://auth.nicepay.co.kr'
|
||||||
VITE_APP_API_PROXY_HOST='https://rest.nicepay.co.kr'
|
VITE_APP_API_PROXY_HOST='https://rest.nicepay.co.kr'
|
||||||
GENERATE_SOURCEMAP=false
|
GENERATE_SOURCEMAP=false
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"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:development": "env-cmd -f .env.development vite build",
|
||||||
"build": "env-cmd -f .env.production vite build",
|
"build": "env-cmd -f .env.production vite build",
|
||||||
"lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0",
|
"lint": "eslint . --ext js,jsx,ts,tsx --report-unused-disable-directives --max-warnings 0",
|
||||||
|
|||||||
@@ -1,8 +1,40 @@
|
|||||||
import { TFunction } from 'i18next';
|
import { TFunction } from 'i18next';
|
||||||
import { LinkPaymentProcessStatus } from "./types";
|
import { LinkPaymentPaymentMethod, LinkPaymentProcessStatus } from "./types";
|
||||||
|
|
||||||
export const getProcessStatusBtnGroup = (t: TFunction) => [
|
export const getProcessStatusBtnGroup = (t: TFunction) => [
|
||||||
{ name: t('transaction.constants.all'), value: LinkPaymentProcessStatus.ALL },
|
{ name: t('transaction.constants.all'), value: LinkPaymentProcessStatus.ALL },
|
||||||
{ name: t('additionalService.linkPay.sendRequest'), value: LinkPaymentProcessStatus.SEND_REQUEST },
|
{ name: t('additionalService.linkPay.sendRequest'), value: LinkPaymentProcessStatus.SEND_REQUEST },
|
||||||
{ name: t('additionalService.linkPay.sendCancel'), value: LinkPaymentProcessStatus.SEND_CANCEL }
|
{ name: t('additionalService.linkPay.sendCancel'), value: LinkPaymentProcessStatus.SEND_CANCEL }
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export const getPaymentMethodOptionGroup = (t: TFunction) => [
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.all'), value: '' },
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.card'), value: LinkPaymentPaymentMethod.CARD},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.bank'), value: LinkPaymentPaymentMethod.BANK},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.virtualAccount'), value: LinkPaymentPaymentMethod.VIRTURE_BANK},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.phone'), value: LinkPaymentPaymentMethod.PHONE},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.cultureland'), value: LinkPaymentPaymentMethod.CULTURELAND},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.ssgMoney'), value: LinkPaymentPaymentMethod.SSG_MONEY},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.ssgBank'), value: LinkPaymentPaymentMethod.SSG_BANK},
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.cmsBank'), value: LinkPaymentPaymentMethod.CMS_BANK}, //계좌간편결제
|
||||||
|
{ name: t('additionalService.linkPayment.paymentMethod.tmoneyPay'), value: LinkPaymentPaymentMethod.TMONEY_PAY},
|
||||||
|
]
|
||||||
|
|
||||||
|
export const getPaymentMethodText = (t: TFunction) => (status?: string): string => {
|
||||||
|
if (!status) return '';
|
||||||
|
|
||||||
|
const paymentMethodMap: Record<LinkPaymentPaymentMethod, string> = {
|
||||||
|
[LinkPaymentPaymentMethod.ALL]: t('additionalService.linkPayment.paymentMethod.all'),
|
||||||
|
[LinkPaymentPaymentMethod.CARD]: t('additionalService.linkPayment.paymentMethod.card'),
|
||||||
|
[LinkPaymentPaymentMethod.BANK]: t('additionalService.linkPayment.paymentMethod.bank'),
|
||||||
|
[LinkPaymentPaymentMethod.VIRTURE_BANK]: t('additionalService.linkPayment.paymentMethod.virtualAccount'),
|
||||||
|
[LinkPaymentPaymentMethod.PHONE]: t('additionalService.linkPayment.paymentMethod.phone'),
|
||||||
|
[LinkPaymentPaymentMethod.CULTURELAND]: t('additionalService.linkPayment.paymentMethod.cultureland'),
|
||||||
|
[LinkPaymentPaymentMethod.SSG_MONEY]: t('additionalService.linkPayment.paymentMethod.ssgMoney'),
|
||||||
|
[LinkPaymentPaymentMethod.SSG_BANK]: t('additionalService.linkPayment.paymentMethod.ssgBank'),
|
||||||
|
[LinkPaymentPaymentMethod.CMS_BANK]: t('additionalService.linkPayment.paymentMethod.cmsBank'),
|
||||||
|
[LinkPaymentPaymentMethod.TMONEY_PAY]: t('additionalService.linkPayment.paymentMethod.tmoneyPay')
|
||||||
|
}
|
||||||
|
|
||||||
|
return paymentMethodMap[status as LinkPaymentPaymentMethod] || status;
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ export enum LinkPaymentSearchCl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export enum LinkPaymentPaymentMethod {
|
export enum LinkPaymentPaymentMethod {
|
||||||
|
ALL = "",
|
||||||
CARD = "CARD",
|
CARD = "CARD",
|
||||||
BANK = "BANK",
|
BANK = "BANK",
|
||||||
VIRTURE_BANK = "VIRTURE_BANK",
|
VIRTURE_BANK = "VIRTURE_BANK",
|
||||||
@@ -124,6 +125,7 @@ export interface LinkPaymentHistoryFilterProps extends FilterProps {
|
|||||||
mid: string;
|
mid: string;
|
||||||
searchCl: LinkPaymentSearchCl;
|
searchCl: LinkPaymentSearchCl;
|
||||||
searchValue: string;
|
searchValue: string;
|
||||||
|
paymentMethod: LinkPaymentPaymentMethod;
|
||||||
fromDate: string;
|
fromDate: string;
|
||||||
toDate: string;
|
toDate: string;
|
||||||
paymentStatus: LinkPaymentPaymentStatus;
|
paymentStatus: LinkPaymentPaymentStatus;
|
||||||
@@ -132,6 +134,7 @@ export interface LinkPaymentHistoryFilterProps extends FilterProps {
|
|||||||
setMid: (mid: string) => void;
|
setMid: (mid: string) => void;
|
||||||
setSearchType: (searchType: LinkPaymentSearchCl) => void;
|
setSearchType: (searchType: LinkPaymentSearchCl) => void;
|
||||||
setSearchKeyword: (searchKeyWorld: string) => void;
|
setSearchKeyword: (searchKeyWorld: string) => void;
|
||||||
|
setPaymentMethod: (paymentMethod: LinkPaymentPaymentMethod) => void;
|
||||||
setStartDate: (startDate: string) => void;
|
setStartDate: (startDate: string) => void;
|
||||||
setEndDate: (endDate: string) => void;
|
setEndDate: (endDate: string) => void;
|
||||||
setPaymentStatus: (transactionStatus: LinkPaymentPaymentStatus) => void;
|
setPaymentStatus: (transactionStatus: LinkPaymentPaymentStatus) => void;
|
||||||
@@ -161,6 +164,7 @@ export interface LinkPaymentWaitFilterProps extends FilterProps {
|
|||||||
export interface ExtensionLinkPayHistoryListParams extends ExtensionRequestParams {
|
export interface ExtensionLinkPayHistoryListParams extends ExtensionRequestParams {
|
||||||
searchCl: string;
|
searchCl: string;
|
||||||
searchValue: string;
|
searchValue: string;
|
||||||
|
paymentMethod: LinkPaymentPaymentMethod;
|
||||||
fromDate: string;
|
fromDate: string;
|
||||||
toDate: string;
|
toDate: string;
|
||||||
paymentStatus: LinkPaymentPaymentStatus;
|
paymentStatus: LinkPaymentPaymentStatus;
|
||||||
|
|||||||
@@ -131,9 +131,14 @@ export const LinkPaymentStep1 = ({ formData, setFormData }: LinkPaymentStep1Prop
|
|||||||
<div className="issue-field">
|
<div className="issue-field">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
|
inputMode="text"
|
||||||
placeholder=""
|
placeholder=""
|
||||||
value={formData.moid}
|
value={formData.moid}
|
||||||
onChange={(e) => handleInputChange('moid', e.target.value)}
|
onChange={(e) => {
|
||||||
|
// 영문자와 숫자만 허용 (한글, 특수문자 제거)
|
||||||
|
const cleanedValue = e.target.value.replace(/[^a-zA-Z0-9]/g, '');
|
||||||
|
handleInputChange('moid', cleanedValue);
|
||||||
|
}}
|
||||||
onFocus={handleInputFocus}
|
onFocus={handleInputFocus}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,11 +13,12 @@ import { FilterCalendar } from '@/shared/ui/filter/calendar';
|
|||||||
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
||||||
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useStore } from '@/shared/model/store';
|
||||||
import { LinkPaymentHistoryFilterProps, LinkPaymentPaymentStatus, LinkPaymentSearchCl, LinkPaymentSendMethod, LinkPaymentSendStatus } from '@/entities/additional-service/model/link-pay/types';
|
import { LinkPaymentHistoryFilterProps, LinkPaymentPaymentMethod, LinkPaymentPaymentStatus, LinkPaymentSearchCl, LinkPaymentSendMethod, LinkPaymentSendStatus } from '@/entities/additional-service/model/link-pay/types';
|
||||||
import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
|
import { FilterSelectMid } from '@/shared/ui/filter/select-mid';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { FullMenuClose } from '@/entities/common/ui/full-menu-close';
|
import { FullMenuClose } from '@/entities/common/ui/full-menu-close';
|
||||||
import { useKeyboardAware } from '@/shared/lib/hooks';
|
import { useKeyboardAware } from '@/shared/lib/hooks';
|
||||||
|
import { getPaymentMethodOptionGroup } from '@/entities/additional-service/model/link-pay/constant';
|
||||||
|
|
||||||
export const LinkPaymentHistoryFilter = ({
|
export const LinkPaymentHistoryFilter = ({
|
||||||
filterOn,
|
filterOn,
|
||||||
@@ -25,6 +26,7 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
mid,
|
mid,
|
||||||
searchCl,
|
searchCl,
|
||||||
searchValue,
|
searchValue,
|
||||||
|
paymentMethod,
|
||||||
fromDate,
|
fromDate,
|
||||||
toDate,
|
toDate,
|
||||||
paymentStatus,
|
paymentStatus,
|
||||||
@@ -33,6 +35,7 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
setMid,
|
setMid,
|
||||||
setSearchType,
|
setSearchType,
|
||||||
setSearchKeyword,
|
setSearchKeyword,
|
||||||
|
setPaymentMethod,
|
||||||
setStartDate,
|
setStartDate,
|
||||||
setEndDate,
|
setEndDate,
|
||||||
setPaymentStatus,
|
setPaymentStatus,
|
||||||
@@ -44,6 +47,7 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
const [filterMid, setFilterMid] = useState<string>(mid);
|
const [filterMid, setFilterMid] = useState<string>(mid);
|
||||||
const [filterSearchCl, setFilterSearchCl] = useState<LinkPaymentSearchCl>(searchCl);
|
const [filterSearchCl, setFilterSearchCl] = useState<LinkPaymentSearchCl>(searchCl);
|
||||||
const [filterSearchValue, setFilterSearchValue] = useState<string>(searchValue);
|
const [filterSearchValue, setFilterSearchValue] = useState<string>(searchValue);
|
||||||
|
const [filterPaymentMethod, setFilterPaymentMethod] = useState<LinkPaymentPaymentMethod>(paymentMethod);
|
||||||
const [filterStartDate, setFilterStartDate] = useState<string>(fromDate);
|
const [filterStartDate, setFilterStartDate] = useState<string>(fromDate);
|
||||||
const [filterEndDate, setFilterEndDate] = useState<string>(toDate);
|
const [filterEndDate, setFilterEndDate] = useState<string>(toDate);
|
||||||
const [filterTransactionStatus, setFilterTransactionStatus] = useState<LinkPaymentPaymentStatus>(paymentStatus)
|
const [filterTransactionStatus, setFilterTransactionStatus] = useState<LinkPaymentPaymentStatus>(paymentStatus)
|
||||||
@@ -85,6 +89,7 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
setMid(filterMid);
|
setMid(filterMid);
|
||||||
setSearchType(filterSearchCl);
|
setSearchType(filterSearchCl);
|
||||||
setSearchKeyword(filterSearchValue);
|
setSearchKeyword(filterSearchValue);
|
||||||
|
setPaymentMethod(filterPaymentMethod);
|
||||||
setStartDate(filterStartDate);
|
setStartDate(filterStartDate);
|
||||||
setEndDate(filterEndDate);
|
setEndDate(filterEndDate);
|
||||||
setPaymentStatus(filterTransactionStatus);
|
setPaymentStatus(filterTransactionStatus);
|
||||||
@@ -112,7 +117,7 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
<div className="full-menu-actions">
|
<div className="full-menu-actions">
|
||||||
<FullMenuClose
|
<FullMenuClose
|
||||||
addClass='full-menu-close'
|
addClass='full-menu-close'
|
||||||
onClickToCallback={ onClickToClose }
|
onClickToCallback={onClickToClose}
|
||||||
></FullMenuClose>
|
></FullMenuClose>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -131,8 +136,14 @@ export const LinkPaymentHistoryFilter = ({
|
|||||||
selectOptions={searchTypeOption}
|
selectOptions={searchTypeOption}
|
||||||
inputValue={filterSearchValue}
|
inputValue={filterSearchValue}
|
||||||
inputSetter={setFilterSearchValue}
|
inputSetter={setFilterSearchValue}
|
||||||
handleInputFocus={ handleInputFocus }
|
handleInputFocus={handleInputFocus}
|
||||||
></FilterSelectInput>
|
></FilterSelectInput>
|
||||||
|
<FilterSelect
|
||||||
|
title={t('filter.paymentMethod')}
|
||||||
|
selectValue={filterPaymentMethod}
|
||||||
|
selectSetter={setFilterPaymentMethod}
|
||||||
|
selectOptions={getPaymentMethodOptionGroup(t)}
|
||||||
|
></FilterSelect>
|
||||||
<FilterCalendar
|
<FilterCalendar
|
||||||
startDate={filterStartDate}
|
startDate={filterStartDate}
|
||||||
endDate={filterEndDate}
|
endDate={filterEndDate}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ const defaultParams = {
|
|||||||
toDate: moment().format('YYYYMMDD'),
|
toDate: moment().format('YYYYMMDD'),
|
||||||
searchCl: LinkPaymentSearchCl.PHONE,
|
searchCl: LinkPaymentSearchCl.PHONE,
|
||||||
searchValue: '',
|
searchValue: '',
|
||||||
paymentMethod: LinkPaymentPaymentMethod.CARD,
|
paymentMethod: LinkPaymentPaymentMethod.ALL,
|
||||||
paymentStatus: LinkPaymentPaymentStatus.ALL,
|
paymentStatus: LinkPaymentPaymentStatus.ALL,
|
||||||
sendStatus: LinkPaymentSendStatus.ALL,
|
sendStatus: LinkPaymentSendStatus.ALL,
|
||||||
sendMethod: LinkPaymentSendMethod.ALL
|
sendMethod: LinkPaymentSendMethod.ALL
|
||||||
@@ -109,6 +109,7 @@ export const LinkPaymentHistoryWrap = () => {
|
|||||||
mid: mid,
|
mid: mid,
|
||||||
searchCl: searchCl,
|
searchCl: searchCl,
|
||||||
searchValue: searchValue,
|
searchValue: searchValue,
|
||||||
|
paymentMethod: paymentMethod,
|
||||||
fromDate: fromDate,
|
fromDate: fromDate,
|
||||||
toDate: toDate,
|
toDate: toDate,
|
||||||
paymentStatus: paymentStatus,
|
paymentStatus: paymentStatus,
|
||||||
@@ -333,6 +334,7 @@ export const LinkPaymentHistoryWrap = () => {
|
|||||||
mid={mid}
|
mid={mid}
|
||||||
searchCl={searchCl}
|
searchCl={searchCl}
|
||||||
searchValue={searchValue}
|
searchValue={searchValue}
|
||||||
|
paymentMethod={paymentMethod}
|
||||||
fromDate={fromDate}
|
fromDate={fromDate}
|
||||||
toDate={toDate}
|
toDate={toDate}
|
||||||
paymentStatus={paymentStatus}
|
paymentStatus={paymentStatus}
|
||||||
@@ -341,6 +343,7 @@ export const LinkPaymentHistoryWrap = () => {
|
|||||||
setMid={setMid}
|
setMid={setMid}
|
||||||
setSearchType={setSearchCl}
|
setSearchType={setSearchCl}
|
||||||
setSearchKeyword={setSearchValue}
|
setSearchKeyword={setSearchValue}
|
||||||
|
setPaymentMethod={setPaymentMethod}
|
||||||
setStartDate={setFromDate}
|
setStartDate={setFromDate}
|
||||||
setEndDate={setToDate}
|
setEndDate={setToDate}
|
||||||
setPaymentStatus={setPaymentStatus}
|
setPaymentStatus={setPaymentStatus}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { ServiceCode } from '../model/alimtalk/types';
|
|||||||
import { getAlimtalkAlimClText, getAlimtalkSendClTypeText, getAlimtalkSendTypeText, getAlimtalkServiceCodeText } from '../model/alimtalk/constant';
|
import { getAlimtalkAlimClText, getAlimtalkSendClTypeText, getAlimtalkSendTypeText, getAlimtalkServiceCodeText } from '../model/alimtalk/constant';
|
||||||
import { getAuthResultStatusText, getTransTypeText } from '../model/face-auth/constant';
|
import { getAuthResultStatusText, getTransTypeText } from '../model/face-auth/constant';
|
||||||
import { getPayoutStatusText } from '../model/payout/constant';
|
import { getPayoutStatusText } from '../model/payout/constant';
|
||||||
|
import { getPaymentMethodText } from '../model/link-pay/constant';
|
||||||
|
|
||||||
export const ListItem = ({
|
export const ListItem = ({
|
||||||
additionalServiceCategory,
|
additionalServiceCategory,
|
||||||
@@ -376,9 +377,9 @@ export const ListItem = ({
|
|||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory
|
else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory
|
||||||
) {
|
) {
|
||||||
str = `${getMaskedName(buyerName)}`;
|
str = receiverInfo ? `${getMaskedName(buyerName)}(${receiverInfo})` : `${getMaskedName(buyerName)}`;
|
||||||
} else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentWait) {
|
} else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentWait) {
|
||||||
str = `${getMaskedName(buyerName)}(${receiverInfo})`;
|
str = receiverInfo ? `${getMaskedName(buyerName)}(${receiverInfo})` : `${getMaskedName(buyerName)}`;
|
||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.Payout) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.Payout) {
|
||||||
str = companyName;
|
str = companyName;
|
||||||
@@ -452,7 +453,7 @@ export const ListItem = ({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory) {
|
||||||
if (paymentStatus === "0" || paymentStatus === "3" || paymentStatus === "4") {
|
if (paymentStatus === "2" || paymentStatus === "4") {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div key="link-payment-history" className="transaction-details">
|
<div key="link-payment-history" className="transaction-details">
|
||||||
<span>{getPaymentStatusText(t)(paymentStatus)}</span>
|
<span>{getPaymentStatusText(t)(paymentStatus)}</span>
|
||||||
@@ -466,8 +467,12 @@ export const ListItem = ({
|
|||||||
<span>{getPaymentStatusText(t)(paymentStatus)}</span>
|
<span>{getPaymentStatusText(t)(paymentStatus)}</span>
|
||||||
<span className="separator">|</span>
|
<span className="separator">|</span>
|
||||||
<span>{getSendMethodText(t)(sendMethod)}</span>
|
<span>{getSendMethodText(t)(sendMethod)}</span>
|
||||||
<span className="separator">|</span>
|
{paymentMethod && (
|
||||||
<span>{paymentMethod}</span>
|
<>
|
||||||
|
<span className="separator">|</span>
|
||||||
|
<span>{getPaymentMethodText(t)(paymentMethod)}</span>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -483,7 +488,7 @@ export const ListItem = ({
|
|||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.Payout) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.Payout) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className="transaction-details">
|
<div key="payout" className="transaction-details">
|
||||||
<span>{getPayoutStatusText(t)(status)}</span>
|
<span>{getPayoutStatusText(t)(status)}</span>
|
||||||
<span className="separator">|</span>
|
<span className="separator">|</span>
|
||||||
<span>{submallId}</span>
|
<span>{submallId}</span>
|
||||||
@@ -519,7 +524,7 @@ export const ListItem = ({
|
|||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.Ars) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.Ars) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className="transaction-details">
|
<div key="ars" className="transaction-details">
|
||||||
<span>{getTime()}</span>
|
<span>{getTime()}</span>
|
||||||
<span className="separator">|</span>
|
<span className="separator">|</span>
|
||||||
<span>{getStatus()}</span>
|
<span>{getStatus()}</span>
|
||||||
@@ -532,7 +537,7 @@ export const ListItem = ({
|
|||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className="transaction-details">
|
<div key="alimtalk" className="transaction-details">
|
||||||
<span>{getTime()}</span>
|
<span>{getTime()}</span>
|
||||||
<span className="separator">|</span>
|
<span className="separator">|</span>
|
||||||
<span>{getAlimtalkServiceCodeText(t)(serviceCode)}</span>
|
<span>{getAlimtalkServiceCodeText(t)(serviceCode)}</span>
|
||||||
@@ -557,14 +562,14 @@ export const ListItem = ({
|
|||||||
let rs: any[] = [];
|
let rs: any[] = [];
|
||||||
if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderSearch) {
|
if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderSearch) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className={`status-label ${resultStatus === 'SUCCESS' ? 'success' : 'fail'}`}>
|
<div key="account-holder-search-amount" className={`status-label ${resultStatus === 'SUCCESS' ? 'success' : 'fail'}`}>
|
||||||
{resultStatus === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail')}
|
{resultStatus === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail')}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className={`status-label ${authResult === 'SUCCESS' ? 'success' : 'fail'}`}>
|
<div key="face-auth-amount" className={`status-label ${authResult === 'SUCCESS' ? 'success' : 'fail'}`}>
|
||||||
{authResult === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail')}
|
{authResult === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail')}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -573,14 +578,14 @@ export const ListItem = ({
|
|||||||
const statusText = authStatus === 'REQUEST' ? t('additionalService.common.request') : authStatus === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail');
|
const statusText = authStatus === 'REQUEST' ? t('additionalService.common.request') : authStatus === 'SUCCESS' ? t('additionalService.common.success') : t('additionalService.common.fail');
|
||||||
const statusClass = authStatus === 'SUCCESS' || 'REQUEST' ? 'success' : 'fail';
|
const statusClass = authStatus === 'SUCCESS' || 'REQUEST' ? 'success' : 'fail';
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className={`status-label ${statusClass}`}>
|
<div key="account-holder-auth-amount" className={`status-label ${statusClass}`}>
|
||||||
{statusText}
|
{statusText}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) {
|
else if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className="transaction-amount">
|
<div key="key-in-payment-amount" className="transaction-amount">
|
||||||
{t('home.money', { value: new Intl.NumberFormat('en-US').format(amount || 0) })}
|
{t('home.money', { value: new Intl.NumberFormat('en-US').format(amount || 0) })}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
@@ -589,7 +594,7 @@ export const ListItem = ({
|
|||||||
additionalServiceCategory === AdditionalServiceCategory.LinkPaymentWait
|
additionalServiceCategory === AdditionalServiceCategory.LinkPaymentWait
|
||||||
) {
|
) {
|
||||||
rs.push(
|
rs.push(
|
||||||
<div className="transaction-amount">
|
<div key="link-payment-amount" className="transaction-amount">
|
||||||
{t('home.money', { value: new Intl.NumberFormat('en-US').format(amount || 0) })}
|
{t('home.money', { value: new Intl.NumberFormat('en-US').format(amount || 0) })}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ export const ListFilter = ({
|
|||||||
<div className="option-list pt-16 pb-86">
|
<div className="option-list pt-16 pb-86">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title={t('filter.merchant')}
|
title={t('filter.merchant')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setFilterMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterButtonGroups
|
<FilterButtonGroups
|
||||||
|
|||||||
@@ -84,6 +84,9 @@ export const NoticeDetail = ({
|
|||||||
className="notice-detail__body"
|
className="notice-detail__body"
|
||||||
dangerouslySetInnerHTML={{ __html: result.contents || '' }}
|
dangerouslySetInnerHTML={{ __html: result.contents || '' }}
|
||||||
></div>
|
></div>
|
||||||
|
{/*
|
||||||
|
<div className="notice-detail__body">{ result.contents }</div>
|
||||||
|
*/}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -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<AllTransactionIssueSendResponse>(API_URL_TRANSACTION.transactionIssueSend(), params, options),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useAllTransactionIssueSendMutation = (options?: UseMutationOptions<AllTransactionIssueSendResponse, NiceAxiosError, AllTransactionIssueSendParams>) => {
|
||||||
|
const mutation = useMutation<AllTransactionIssueSendResponse, NiceAxiosError, AllTransactionIssueSendParams>({
|
||||||
|
...options,
|
||||||
|
mutationFn: (params: AllTransactionIssueSendParams) => allTransactionIssueSend(params),
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
...mutation,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -454,8 +454,10 @@ export interface ImportantInfo {
|
|||||||
approvalDate?: string;
|
approvalDate?: string;
|
||||||
approvalTime?: string;
|
approvalTime?: string;
|
||||||
transactionDate?: string;
|
transactionDate?: string;
|
||||||
|
transactionTime?: string;
|
||||||
requestDate?: string;
|
requestDate?: string;
|
||||||
cancelDate?: string;
|
cancelDate?: string;
|
||||||
|
cancelTime?: string;
|
||||||
goodsName?: string;
|
goodsName?: string;
|
||||||
|
|
||||||
orderNumber?: string;
|
orderNumber?: string;
|
||||||
@@ -483,6 +485,7 @@ export interface PaymentInfo {
|
|||||||
depositorName?: string;
|
depositorName?: string;
|
||||||
depositDeadline?: string;
|
depositDeadline?: string;
|
||||||
depositDate?: string;
|
depositDate?: string;
|
||||||
|
depositTime?: string;
|
||||||
refundScheduleDate?: string;
|
refundScheduleDate?: string;
|
||||||
refundBankName?: string;
|
refundBankName?: string;
|
||||||
refundAccountNumber?: string;
|
refundAccountNumber?: string;
|
||||||
@@ -907,3 +910,34 @@ export interface EscrowMailResendParams {
|
|||||||
export interface EscrowMailResendResponse {
|
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;
|
||||||
|
};
|
||||||
@@ -191,6 +191,9 @@ export const AllTransactionDetail = ({
|
|||||||
<AmountInfoSection
|
<AmountInfoSection
|
||||||
transactionCategory={ TransactionCategory.AllTransaction }
|
transactionCategory={ TransactionCategory.AllTransaction }
|
||||||
amountInfo={ amountInfo }
|
amountInfo={ amountInfo }
|
||||||
|
importantInfo={ importantInfo }
|
||||||
|
paymentInfo={ paymentInfo }
|
||||||
|
transactionInfo={ transactionInfo }
|
||||||
isOpen={ showAmountInfo }
|
isOpen={ showAmountInfo }
|
||||||
tid={ tid }
|
tid={ tid }
|
||||||
serviceCode={ serviceCode }
|
serviceCode={ serviceCode }
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ export const AllTransactionFilter = ({
|
|||||||
<div className="option-list pt-16 pb-86">
|
<div className="option-list pt-16 pb-86">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title={t('filter.merchant')}
|
title={t('filter.merchant')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setFilterMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterSelectInput
|
<FilterSelectInput
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export const CashReceiptFilter = ({
|
|||||||
<div className="option-list pt-16 pb-86">
|
<div className="option-list pt-16 pb-86">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title={t('filter.merchant')}
|
title={t('filter.merchant')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setFilterMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterCalendar
|
<FilterCalendar
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export const EscrowFilter = ({
|
|||||||
<div className="option-list pt-16 pb-86">
|
<div className="option-list pt-16 pb-86">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title={t('filter.merchant')}
|
title={t('filter.merchant')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setFilterMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterSelectInput
|
<FilterSelectInput
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow';
|
import { SectionTitleArrow } from '@/entities/common/ui/section-title-arrow';
|
||||||
import { AmountInfo, CashReceiptReceiptDownloadParams, CashReceiptReceiptDownloadResponse, CashReceiptReceiptSendEmailParams, CashReceiptReceiptSendEmailResponse, CustomerInfo, InfoSectionKeys, InfoSectionProps, IssueInfo, MerchantInfo, ProductInfo, TransactionCategory, TransactionInfo } from '../../model/types';
|
import { AllTransactionIssueSendParams, AllTransactionIssueSendResponse, AmountInfo, CashReceiptReceiptDownloadParams, CashReceiptReceiptDownloadResponse, CashReceiptReceiptSendEmailParams, CashReceiptReceiptSendEmailResponse, CustomerInfo, InfoSectionKeys, InfoSectionProps, IssueInfo, MerchantInfo, ProductInfo, TransactionCategory, TransactionInfo } from '../../model/types';
|
||||||
import { SlideDown } from 'react-slidedown';
|
import { SlideDown } from 'react-slidedown';
|
||||||
import 'react-slidedown/lib/slidedown.css';
|
import 'react-slidedown/lib/slidedown.css';
|
||||||
import { snackBar } from '@/shared/lib';
|
import { snackBar } from '@/shared/lib';
|
||||||
@@ -10,11 +10,15 @@ import { useState } from 'react';
|
|||||||
import { DownloadBottomSheet, DownloadSelectedMode } from '@/entities/common/ui/download-bottom-sheet';
|
import { DownloadBottomSheet, DownloadSelectedMode } from '@/entities/common/ui/download-bottom-sheet';
|
||||||
import { CashReceiptSample } from '@/entities/common/ui/cash-receipt-sample';
|
import { CashReceiptSample } from '@/entities/common/ui/cash-receipt-sample';
|
||||||
import { useCashReceiptReceiptSendEmailMutation } from '../../api/use-cash-receipt-receipt-send-email-mutation';
|
import { useCashReceiptReceiptSendEmailMutation } from '../../api/use-cash-receipt-receipt-send-email-mutation';
|
||||||
import { useDownloadBottomSheetOnStore } from '@/shared/model/store';
|
import { useDownloadBottomSheetOn2Store } from '@/shared/model/store';
|
||||||
|
import { useAllTransactionIssueSendMutation } from '../../api/use-all-transaction-issue-send-mutation';
|
||||||
|
|
||||||
export const AmountInfoSection = ({
|
export const AmountInfoSection = ({
|
||||||
transactionCategory,
|
transactionCategory,
|
||||||
amountInfo,
|
amountInfo,
|
||||||
|
importantInfo,
|
||||||
|
paymentInfo,
|
||||||
|
transactionInfo,
|
||||||
isOpen,
|
isOpen,
|
||||||
tid,
|
tid,
|
||||||
serviceCode,
|
serviceCode,
|
||||||
@@ -23,10 +27,11 @@ export const AmountInfoSection = ({
|
|||||||
}: InfoSectionProps) => {
|
}: InfoSectionProps) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const { mutateAsync: allTransactionIssueSend } = useAllTransactionIssueSendMutation();
|
||||||
const { mutateAsync: cashReceiptReceiptDownload } = useCashReceiptReceiptDownloadMutation();
|
const { mutateAsync: cashReceiptReceiptDownload } = useCashReceiptReceiptDownloadMutation();
|
||||||
const { mutateAsync: cashReceiptReceiptSendEamil } = useCashReceiptReceiptSendEmailMutation();
|
const { mutateAsync: cashReceiptReceiptSendEamil } = useCashReceiptReceiptSendEmailMutation();
|
||||||
|
|
||||||
const { downloadBottomSheetOn, setDownloadBottomSheetOn } = useDownloadBottomSheetOnStore();
|
const { downloadBottomSheetOn2, setDownloadBottomSheetOn2 } = useDownloadBottomSheetOn2Store();
|
||||||
const [cashReceiptSampleOn, setCashReceiptSampleOn] = useState<boolean>(false);
|
const [cashReceiptSampleOn, setCashReceiptSampleOn] = useState<boolean>(false);
|
||||||
|
|
||||||
const [receiptIssueInfo, setReceiptIssueInfo] = useState<IssueInfo>({});
|
const [receiptIssueInfo, setReceiptIssueInfo] = useState<IssueInfo>({});
|
||||||
@@ -199,7 +204,7 @@ export const AmountInfoSection = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onClickToOpenDownloadBottomSheet = () => {
|
const onClickToOpenDownloadBottomSheet = () => {
|
||||||
setDownloadBottomSheetOn(true);
|
setDownloadBottomSheetOn2(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onRequestDownload = (
|
const onRequestDownload = (
|
||||||
@@ -210,21 +215,63 @@ export const AmountInfoSection = ({
|
|||||||
if(selectedMode === DownloadSelectedMode.EMAIL
|
if(selectedMode === DownloadSelectedMode.EMAIL
|
||||||
&& !!userEmail
|
&& !!userEmail
|
||||||
){
|
){
|
||||||
let params: CashReceiptReceiptSendEmailParams = {
|
if(transactionCategory === TransactionCategory.AllTransaction){
|
||||||
tid: tid,
|
let params: AllTransactionIssueSendParams = {
|
||||||
email: userEmail
|
sendEmail: userEmail,
|
||||||
};
|
mid: amountInfo?.mid,
|
||||||
cashReceiptReceiptSendEamil(params).then((rs: CashReceiptReceiptSendEmailResponse) => {
|
tid: tid,
|
||||||
console.log(rs);
|
buyerName: transactionInfo?.buyerName,
|
||||||
if(rs.message){
|
approvalDate: importantInfo?.approvalDate,
|
||||||
snackBar(rs.message);
|
depositDate: paymentInfo?.depositDate,
|
||||||
}
|
transactionDate: importantInfo?.transactionDate,
|
||||||
}).catch((e: any) => {
|
approvalTime: importantInfo?.approvalTime,
|
||||||
if(e.response?.data?.error?.message){
|
depositTime: paymentInfo?.depositTime,
|
||||||
snackBar(e.response?.data?.error?.message);
|
transactionTime: importantInfo?.transactionTime,
|
||||||
return;
|
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){
|
else if(selectedMode === DownloadSelectedMode.IMAGE){
|
||||||
let params: CashReceiptReceiptDownloadParams = {
|
let params: CashReceiptReceiptDownloadParams = {
|
||||||
@@ -460,8 +507,9 @@ export const AmountInfoSection = ({
|
|||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
<div className="txn-doc">
|
<div className="txn-doc">
|
||||||
{ (transactionCategory === TransactionCategory.CashReceipt) &&
|
{ ((transactionCategory === TransactionCategory.AllTransaction) ||
|
||||||
!!canDownloadReceipt &&
|
((transactionCategory === TransactionCategory.CashReceipt) &&
|
||||||
|
!!canDownloadReceipt)) &&
|
||||||
<button
|
<button
|
||||||
className="doc-btn"
|
className="doc-btn"
|
||||||
type="button"
|
type="button"
|
||||||
@@ -470,11 +518,11 @@ export const AmountInfoSection = ({
|
|||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{ !!downloadBottomSheetOn &&
|
{ !!downloadBottomSheetOn2 &&
|
||||||
<DownloadBottomSheet
|
<DownloadBottomSheet
|
||||||
bottomSheetOn={ downloadBottomSheetOn }
|
bottomSheetOn={ downloadBottomSheetOn2 }
|
||||||
setBottomSheetOn={ setDownloadBottomSheetOn }
|
setBottomSheetOn={ setDownloadBottomSheetOn2 }
|
||||||
imageMode={ true }
|
imageMode={ (transactionCategory === TransactionCategory.CashReceipt) }
|
||||||
emailMode={ true }
|
emailMode={ true }
|
||||||
sendRequest={ onRequestDownload }
|
sendRequest={ onRequestDownload }
|
||||||
></DownloadBottomSheet>
|
></DownloadBottomSheet>
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export const ListFilter = ({
|
|||||||
<div className="option-list pt-16 pb-86">
|
<div className="option-list pt-16 pb-86">
|
||||||
<FilterSelectMid
|
<FilterSelectMid
|
||||||
title={t('merchant.title')}
|
title={t('merchant.title')}
|
||||||
selectSetter={ setMid }
|
selectSetter={ setFilterMid }
|
||||||
showType={ 'GID' }
|
showType={ 'GID' }
|
||||||
></FilterSelectMid>
|
></FilterSelectMid>
|
||||||
<FilterCalendarMonth
|
<FilterCalendarMonth
|
||||||
|
|||||||
@@ -1295,7 +1295,18 @@
|
|||||||
"apply": "Apply",
|
"apply": "Apply",
|
||||||
"sendRequest": "Send Request",
|
"sendRequest": "Send Request",
|
||||||
"sendCancel": "Send Cancel",
|
"sendCancel": "Send Cancel",
|
||||||
"progressStatus": "Progress Status"
|
"progressStatus": "Progress Status",
|
||||||
|
"paymentMethod": {
|
||||||
|
"card": "Credit Card",
|
||||||
|
"bank": "Bank Transfer",
|
||||||
|
"virtualAccount": "Virtual Account",
|
||||||
|
"phone": "Mobile Phone",
|
||||||
|
"cultureland": "Cultureland",
|
||||||
|
"ssgMoney": "SSG Money",
|
||||||
|
"ssgBank": "SSG Bank",
|
||||||
|
"cmsBank": "Easy Account Payment",
|
||||||
|
"tmoneyPay": "T-money Pay"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"infoWrap": {
|
"infoWrap": {
|
||||||
"paymentInfo": "Payment Information",
|
"paymentInfo": "Payment Information",
|
||||||
|
|||||||
@@ -897,27 +897,27 @@
|
|||||||
},
|
},
|
||||||
"services": {
|
"services": {
|
||||||
"sms": "SMS 결제 통보",
|
"sms": "SMS 결제 통보",
|
||||||
"smsDesc": "입금 요청부터 완료까지 SMS 자동 전송",
|
"smsDesc": "입금 요청부터 완료까지 \n SMS 자동 전송",
|
||||||
"ars": "신용카드 ARS 결제",
|
"ars": "신용카드 ARS 결제",
|
||||||
"arsDesc": "전화 한 통으로 결제 성공 편리하고 안전한 서비스",
|
"arsDesc": "전화 한 통으로 결제 성공 \n 편리하고 안전한 서비스",
|
||||||
"keyIn": "KEY-IN 결제",
|
"keyIn": "KEY-IN 결제",
|
||||||
"keyInDesc": "카드정보 입력만으로 \n 간편하게 결제 가능",
|
"keyInDesc": "카드정보 입력만으로 \n 간편하게 결제 가능",
|
||||||
"accountHolderSearch": "계좌성명조회",
|
"accountHolderSearch": "계좌성명조회",
|
||||||
"accountHolderSearchDesc": "예금주 정보 입력으로 즉시 예금주 확인",
|
"accountHolderSearchDesc": "예금주 정보 입력으로 \n 즉시 예금주 확인",
|
||||||
"payout": "지급대행",
|
"payout": "지급대행",
|
||||||
"payoutDesc": "하위 가맹점에 빠른 정산금 지급 지급대행 서비스",
|
"payoutDesc": "하위 가맹점에 빠른 정산금 지급 지급대행 서비스",
|
||||||
"settlementAgency": "정산대행",
|
"settlementAgency": "정산대행",
|
||||||
"settlementAgencyDesc": "하위 가맹점 정산금 계산부터 지급까지 자동 해결 서비스",
|
"settlementAgencyDesc": "하위 가맹점 정산금 계산부터 지급까지 자동 해결 서비스",
|
||||||
"linkPayment": "링크 결제",
|
"linkPayment": "링크 결제",
|
||||||
"linkPaymentDesc": "결제 링크 전송만으로 어디서든 결제 가능 서비스",
|
"linkPaymentDesc": "결제 링크 전송만으로 \n 어디서든 결제 가능 서비스",
|
||||||
"fundAccount": "자금이체",
|
"fundAccount": "자금이체",
|
||||||
"fundAccountDesc": "예치금으로 즉시 송금, 파일 등록만으로 다중 송금 가능",
|
"fundAccountDesc": "예치금으로 즉시 송금, 파일 등록만으로 다중 송금 가능",
|
||||||
"accountHolderAuth": "계좌점유인증",
|
"accountHolderAuth": "계좌점유인증",
|
||||||
"accountHolderAuthDesc": "1원 송금으로 \n 계좌 점유 인증 가능",
|
"accountHolderAuthDesc": "1원 송금으로 \n 계좌 점유 인증 가능",
|
||||||
"alimtalk": "알림톡 결제통보",
|
"alimtalk": "알림톡 결제통보",
|
||||||
"alimtalkDesc": "결제 상태를 알림톡으로 쉽고 빠른 안내",
|
"alimtalkDesc": "결제 상태를 알림톡으로 \n 쉽고 빠른 안내",
|
||||||
"faceAuth": "안면인증",
|
"faceAuth": "안면인증",
|
||||||
"faceAuthDesc": "얼굴 인식만으로 본인확인과 \n 결제 가능한 안전 결제 서비스"
|
"faceAuthDesc": "얼굴 인식만으로 본인확인과 결제 가능한 안전 결제 서비스"
|
||||||
},
|
},
|
||||||
"settlementAgency": {
|
"settlementAgency": {
|
||||||
"title": "정산대행",
|
"title": "정산대행",
|
||||||
@@ -1290,13 +1290,25 @@
|
|||||||
"kakao": "카카오",
|
"kakao": "카카오",
|
||||||
"merchant": "가맹점",
|
"merchant": "가맹점",
|
||||||
"phoneNumberEmail": "휴대폰번호/이메일",
|
"phoneNumberEmail": "휴대폰번호/이메일",
|
||||||
"transactionStatus": "거래 상태",
|
"transactionStatus": "결제 상태",
|
||||||
"sendResult": "발송 결과",
|
"sendResult": "전송결과",
|
||||||
"sendMethod": "발송수단",
|
"sendMethod": "발송수단",
|
||||||
"apply": "적용",
|
"apply": "적용",
|
||||||
"sendRequest": "발송요청",
|
"sendRequest": "발송요청",
|
||||||
"sendCancel": "발송취소",
|
"sendCancel": "발송취소",
|
||||||
"progressStatus": "진행상태"
|
"progressStatus": "진행상태",
|
||||||
|
"paymentMethod": {
|
||||||
|
"all": "전체",
|
||||||
|
"card": "신용카드",
|
||||||
|
"bank": "계좌이체",
|
||||||
|
"virtualAccount": "가상계좌",
|
||||||
|
"phone": "휴대폰",
|
||||||
|
"cultureland": "문화상품권",
|
||||||
|
"ssgMoney": "SSG머니",
|
||||||
|
"ssgBank": "SSG뱅크",
|
||||||
|
"cmsBank": "계좌간편결제",
|
||||||
|
"tmoneyPay": "티머니페이"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"infoWrap": {
|
"infoWrap": {
|
||||||
"paymentInfo": "결제 정보",
|
"paymentInfo": "결제 정보",
|
||||||
|
|||||||
@@ -91,7 +91,9 @@ export const LinkPaymentApplyConfirmPage = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const onClickToBack = () => {
|
const onClickToBack = () => {
|
||||||
navigate(-1);
|
navigate(PATHS.additionalService.linkPayment.request, {
|
||||||
|
state: { formData, returnToStep: 2 }
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -11,12 +11,14 @@ import { IdentityType, Language } from '@/entities/additional-service/model/type
|
|||||||
import { LinkContentType, LinkPaymentFormData, LinkPaymentSendMethod } from '@/entities/additional-service/model/link-pay/types';
|
import { LinkContentType, LinkPaymentFormData, LinkPaymentSendMethod } from '@/entities/additional-service/model/link-pay/types';
|
||||||
import { useStore } from '@/shared/model/store';
|
import { useStore } from '@/shared/model/store';
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
import { useLocation } from 'react-router';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const LinkPaymentApplyPage = () => {
|
export const LinkPaymentApplyPage = () => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { navigate } = useNavigate();
|
const { navigate } = useNavigate();
|
||||||
|
const location = useLocation();
|
||||||
|
|
||||||
const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids;
|
const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids;
|
||||||
const userMid = useStore.getState().UserStore.mid;
|
const userMid = useStore.getState().UserStore.mid;
|
||||||
@@ -27,23 +29,31 @@ export const LinkPaymentApplyPage = () => {
|
|||||||
});
|
});
|
||||||
const initialMid = (midItem.length > 0) ? userMid : (midOptionsWithoutGids.length > 0 ? midOptionsWithoutGids[0]?.value || '' : '');
|
const initialMid = (midItem.length > 0) ? userMid : (midOptionsWithoutGids.length > 0 ? midOptionsWithoutGids[0]?.value || '' : '');
|
||||||
|
|
||||||
const [processStep, setProcessStep] = useState<ProcessStep>(ProcessStep.One);
|
// location.state에서 formData와 returnToStep 받기
|
||||||
const [formData, setFormData] = useState<LinkPaymentFormData>({
|
const savedFormData = location.state?.formData;
|
||||||
mid: initialMid,
|
const returnToStep = location.state?.returnToStep;
|
||||||
sendMethod: LinkPaymentSendMethod.SMS,
|
|
||||||
goodsName: '',
|
const [processStep, setProcessStep] = useState<ProcessStep>(
|
||||||
amount: 0,
|
returnToStep === 2 ? ProcessStep.Two : ProcessStep.One
|
||||||
moid: '',
|
);
|
||||||
paymentLimitDate: moment().format('YYYY.MM.DD'),
|
const [formData, setFormData] = useState<LinkPaymentFormData>(
|
||||||
buyerName: '',
|
savedFormData || {
|
||||||
email: '',
|
mid: initialMid,
|
||||||
phoneNumber: '',
|
sendMethod: LinkPaymentSendMethod.SMS,
|
||||||
isIdentity: false,
|
goodsName: '',
|
||||||
identityType: IdentityType.INDIVIDUAL,
|
amount: 0,
|
||||||
identityValue: '',
|
moid: '',
|
||||||
language: Language.KR,
|
paymentLimitDate: moment().format('YYYY.MM.DD'),
|
||||||
linkContentType: LinkContentType.BASIC
|
buyerName: '',
|
||||||
});
|
email: '',
|
||||||
|
phoneNumber: '',
|
||||||
|
isIdentity: false,
|
||||||
|
identityType: IdentityType.INDIVIDUAL,
|
||||||
|
identityValue: '',
|
||||||
|
language: Language.KR,
|
||||||
|
linkContentType: LinkContentType.BASIC
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
useSetHeaderTitle(t('additionalService.linkPayment.applyTitle'));
|
useSetHeaderTitle(t('additionalService.linkPayment.applyTitle'));
|
||||||
useSetHeaderType(HeaderType.LeftArrow);
|
useSetHeaderType(HeaderType.LeftArrow);
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ export const API_URL_TRANSACTION = {
|
|||||||
// POST: 거래취소 정보 조회
|
// POST: 거래취소 정보 조회
|
||||||
return `${API_BASE_URL}/api/v1/${API_URL_KEY}/transaction/cancel-info`;
|
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 */
|
/* Cash Receipt Management - 현금영수증 API */
|
||||||
cashReceiptList: () => {
|
cashReceiptList: () => {
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ export interface DownloadBottomSheetOnStore {
|
|||||||
downloadBottomSheetOn: boolean;
|
downloadBottomSheetOn: boolean;
|
||||||
setDownloadBottomSheetOn: (downloadBottomSheetOn: boolean) => void;
|
setDownloadBottomSheetOn: (downloadBottomSheetOn: boolean) => void;
|
||||||
};
|
};
|
||||||
|
export interface DownloadBottomSheetOn2Store {
|
||||||
|
downloadBottomSheetOn2: boolean;
|
||||||
|
setDownloadBottomSheetOn2: (downloadBottomSheetOn2: boolean) => void;
|
||||||
|
};
|
||||||
export interface FilterOnStore {
|
export interface FilterOnStore {
|
||||||
filterOn: boolean;
|
filterOn: boolean;
|
||||||
setFilterOn: (filterOn: boolean) => void;
|
setFilterOn: (filterOn: boolean) => void;
|
||||||
@@ -50,6 +54,14 @@ export const useDownloadBottomSheetOnStore = create<DownloadBottomSheetOnStore>(
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
export const useDownloadBottomSheetOn2Store = create<DownloadBottomSheetOn2Store>((set) => ({
|
||||||
|
downloadBottomSheetOn2: false,
|
||||||
|
setDownloadBottomSheetOn2: (downloadBottomSheetOn2: boolean) => {
|
||||||
|
set((state: {downloadBottomSheetOn2: boolean}) => ({
|
||||||
|
downloadBottomSheetOn2: (state.downloadBottomSheetOn2 = downloadBottomSheetOn2)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
export const useFilterlOnStore = create<FilterOnStore>((set) => ({
|
export const useFilterlOnStore = create<FilterOnStore>((set) => ({
|
||||||
filterOn: false,
|
filterOn: false,
|
||||||
|
|||||||
@@ -567,6 +567,46 @@ main.pop{
|
|||||||
padding-bottom: 100px;
|
padding-bottom: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 부가서비스 리스트 스타일 조정 */
|
||||||
|
.ing-list .list-wrap02 {
|
||||||
|
gap: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ing-list .list-wrap01 img,
|
||||||
|
.ing-list .list-wrap02 img {
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 링크결제 확인 페이지 */
|
||||||
|
main.pop {
|
||||||
|
height: 100vh;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
main.pop .sub-wrap {
|
||||||
|
flex: 1;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden;
|
||||||
|
padding-bottom: 120px;
|
||||||
|
-webkit-overflow-scrolling: touch;
|
||||||
|
}
|
||||||
|
|
||||||
|
main.pop .preview-body {
|
||||||
|
max-width: 338px;
|
||||||
|
width: 100%;
|
||||||
|
min-height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
main.pop .apply-row {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.resend-text {
|
.resend-text {
|
||||||
word-break: break-all !important;
|
word-break: break-all !important;
|
||||||
}
|
}
|
||||||
@@ -591,3 +631,20 @@ main.pop{
|
|||||||
.tab36 {
|
.tab36 {
|
||||||
font-size: var(--fs-15);
|
font-size: var(--fs-15);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 로그인 인증 정보 input-row 레이아웃 수정 */
|
||||||
|
.settings-login-auth .input-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 16px;
|
||||||
|
padding-bottom: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-login-auth .input-row input {
|
||||||
|
flex: 1;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settings-login-auth .icon-btn.minus {
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
@@ -54,11 +54,11 @@ export const MaskedNameInput = ({
|
|||||||
onChange(valueWithoutSpace);
|
onChange(valueWithoutSpace);
|
||||||
}}
|
}}
|
||||||
onChange={(e: ChangeEvent<HTMLInputElement>) => {
|
onChange={(e: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
if(isComposing){
|
||||||
// composition 중에는 스페이스 제거
|
// composition 중에는 스페이스 제거
|
||||||
const valueWithoutSpace = e.target.value.replace(/\s/g, '');
|
const valueWithoutSpace = e.target.value.replace(/\s/g, '');
|
||||||
onChange(valueWithoutSpace);
|
onChange(valueWithoutSpace);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
onFocus={onFocus}
|
onFocus={onFocus}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -260,8 +260,8 @@ export const SubLayout = () => {
|
|||||||
let userParmas;
|
let userParmas;
|
||||||
if(!isNativeEnvironment){
|
if(!isNativeEnvironment){
|
||||||
userParmas = {
|
userParmas = {
|
||||||
//id: 'nictest00',
|
id: 'nictest00',
|
||||||
id: 'reptest22m',
|
//id: 'reptest22m',
|
||||||
password: 'nictest00'
|
password: 'nictest00'
|
||||||
};
|
};
|
||||||
// userParmas = {
|
// userParmas = {
|
||||||
|
|||||||
Reference in New Issue
Block a user