지급대행 요청
This commit is contained in:
@@ -17,7 +17,7 @@ export const extensionPayoutDetailDownloadCertificate = (params: ExtensionPayout
|
||||
);
|
||||
};
|
||||
|
||||
export const useExtensionPayoutDetailMutation = (options?: UseMutationOptions<ExtensionPayoutDetailDownloadCertificateResponse, CBDCAxiosError, ExtensionPayoutDetailDownloadCertificateParams>) => {
|
||||
export const useExtensionPayoutDetailDownloadCertificateMutation = (options?: UseMutationOptions<ExtensionPayoutDetailDownloadCertificateResponse, CBDCAxiosError, ExtensionPayoutDetailDownloadCertificateParams>) => {
|
||||
const mutation = useMutation<ExtensionPayoutDetailDownloadCertificateResponse, CBDCAxiosError, ExtensionPayoutDetailDownloadCertificateParams>({
|
||||
...options,
|
||||
mutationFn: (params: ExtensionPayoutDetailDownloadCertificateParams) => extensionPayoutDetailDownloadCertificate(params),
|
||||
|
||||
@@ -16,7 +16,8 @@ export enum FilterDateOptions {
|
||||
};
|
||||
export enum CalendarType {
|
||||
Start = 'Start',
|
||||
End = 'End'
|
||||
End = 'End',
|
||||
Single = 'Single'
|
||||
};
|
||||
export interface DefaultRequestPagination {
|
||||
cursor: string;
|
||||
|
||||
@@ -7,9 +7,35 @@ import {
|
||||
useSetFooterMode,
|
||||
useSetOnBack
|
||||
} from '@/widgets/sub-layout/use-sub-layout';
|
||||
import { useExtensionPayoutDetailMutation } from '@/entities/additional-service/api/payout/use-extension-payout-detail-mutation';
|
||||
import { useLocation } from 'react-router';
|
||||
import { ExtensionPayoutDetailDownloadCertificateParams, ExtensionPayoutDetailDownloadCertificateResponse, ExtensionPayoutDetailParams, ExtensionPayoutDetailResponse } from '@/entities/additional-service/model/payout/types';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { NumericFormat } from 'react-number-format';
|
||||
import { useExtensionPayoutDetailDownloadCertificateMutation } from '@/entities/additional-service/api/payout/use-extension-payout-detail-download-cetificate-mutation';
|
||||
|
||||
export const PayoutDetailPage = () => {
|
||||
const { navigate } = useNavigate();
|
||||
const location = useLocation();
|
||||
|
||||
const tid = location.state.tid;
|
||||
const mid = location.state.mid;
|
||||
|
||||
const [detail, setDetail] = useState<ExtensionPayoutDetailResponse>();
|
||||
|
||||
const { mutateAsync: extensionPayoutDetail } = useExtensionPayoutDetailMutation();
|
||||
const { mutateAsync: extensionPayoutDetailDownloadCertification } = useExtensionPayoutDetailDownloadCertificateMutation();
|
||||
|
||||
const callSettlementDetail = () => {
|
||||
let params: ExtensionPayoutDetailParams = {
|
||||
tid: tid,
|
||||
mid: mid,
|
||||
};
|
||||
|
||||
extensionPayoutDetail(params).then((rs: ExtensionPayoutDetailResponse) => {
|
||||
setDetail(rs);
|
||||
});
|
||||
};
|
||||
|
||||
useSetHeaderTitle('지급대행 상세');
|
||||
useSetHeaderType(HeaderType.LeftArrow);
|
||||
@@ -18,6 +44,20 @@ export const PayoutDetailPage = () => {
|
||||
navigate(PATHS.additionalService.payout.list);
|
||||
});
|
||||
|
||||
const onClickToDownload = () => {
|
||||
let params: ExtensionPayoutDetailDownloadCertificateParams = {
|
||||
tid: tid,
|
||||
mid: mid,
|
||||
};
|
||||
extensionPayoutDetailDownloadCertification(params).then((rs: ExtensionPayoutDetailDownloadCertificateResponse) => {
|
||||
console.log(rs);
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
callSettlementDetail();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<>
|
||||
<main className="full-height">
|
||||
@@ -25,14 +65,22 @@ export const PayoutDetailPage = () => {
|
||||
<div className="tab-pane sub active">
|
||||
<div className="pay-top">
|
||||
<div className="num-amount">
|
||||
<span className="amount">10,000,000원</span>
|
||||
<span className="amount">
|
||||
<NumericFormat
|
||||
value={ detail?.disbursementAmount }
|
||||
thousandSeparator
|
||||
displayType="text"
|
||||
suffix='원'
|
||||
></NumericFormat>
|
||||
</span>
|
||||
</div>
|
||||
<div className="num-store">나이스테스트가맹점</div>
|
||||
<div className="num-day">2025.08.19</div>
|
||||
<div className="receipt-row">
|
||||
<button
|
||||
className="receipt-btn"
|
||||
type="button"
|
||||
type="button"
|
||||
onClick={ onClickToDownload }
|
||||
>
|
||||
<span className="icon-24 download"></span>
|
||||
<span>입출금 확인증</span>
|
||||
@@ -45,43 +93,43 @@ export const PayoutDetailPage = () => {
|
||||
<ul className="kv-list">
|
||||
<li className="kv-row">
|
||||
<span className="k">지급상태</span>
|
||||
<span className="v">요청</span>
|
||||
<span className="v">{ detail?.disbursementStatus }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">거래유형</span>
|
||||
<span className="v">최초요청</span>
|
||||
<span className="v">{ detail?.transTypeName }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">요청일</span>
|
||||
<span className="v">2025.06.05</span>
|
||||
<span className="v">{ detail?.requestDate }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">지급일시</span>
|
||||
<span className="v">2025.06.08 11:00:00</span>
|
||||
<span className="v">{ detail?.settlementDate }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">사업자번호</span>
|
||||
<span className="v">'123456789'</span>
|
||||
<span className="v">{ detail?.companyNo }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">예금주</span>
|
||||
<span className="v">김테스트</span>
|
||||
<span className="v">{ detail?.accountName }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">은행</span>
|
||||
<span className="v">기업은행</span>
|
||||
<span className="v">{ detail?.bankName }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">계좌번호</span>
|
||||
<span className="v">'1123456789'</span>
|
||||
<span className="v">{ detail?.accountNo }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">입금인자</span>
|
||||
<span className="v">나이스정산금</span>
|
||||
<span className="v">{ detail?.depositName }</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">실패사유</span>
|
||||
<span className="v"> </span>
|
||||
<span className="v">{ detail?.failReason }</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -160,6 +160,7 @@ export const PayoutListPage = () => {
|
||||
rs.push(
|
||||
<ListDateGroup
|
||||
additionalServiceCategory={ AdditionalServiceCategory.Payout }
|
||||
mid={ mid }
|
||||
key={ key }
|
||||
date={ key }
|
||||
items={ value }
|
||||
|
||||
@@ -1,24 +1,55 @@
|
||||
import { IMAGE_ROOT } from "@/shared/constants/common";
|
||||
import { PATHS } from '@/shared/constants/paths';
|
||||
import { useNavigate } from '@/shared/lib/hooks/use-navigate';
|
||||
import { HeaderType } from '@/entities/common/model/types';
|
||||
import { CalendarType, HeaderType } from '@/entities/common/model/types';
|
||||
import {
|
||||
useSetHeaderTitle,
|
||||
useSetHeaderType,
|
||||
useSetFooterMode,
|
||||
useSetOnBack
|
||||
} from '@/widgets/sub-layout/use-sub-layout';
|
||||
import { useState } from "react";
|
||||
import { useExtensionPayoutRequestMutation } from "@/entities/additional-service/api/payout/use-extension-payout-request-mutation";
|
||||
import { ExtensionPayoutRequestParams, ExtensionPayoutRequestResponse } from "@/entities/additional-service/model/payout/types";
|
||||
import NiceCalendar from "@/shared/ui/calendar/nice-calendar";
|
||||
|
||||
export const PayoutRequestPage = () => {
|
||||
const { navigate } = useNavigate();
|
||||
|
||||
const [calendarOpen, setCalendarOpen] = useState<boolean>(false);
|
||||
const [mid, setMid] = useState<string>('nictest001m')
|
||||
const [submallId, setSubmallId] = useState<string>('');
|
||||
const [disbursementAmount, setDisbursementAmount] = useState<number>(0);
|
||||
const [settlementDate, setSettlementDate] = useState<string>('');
|
||||
|
||||
const { mutateAsync: extensionPayoutRequest } = useExtensionPayoutRequestMutation();
|
||||
|
||||
useSetHeaderTitle('지급대행 신청');
|
||||
useSetHeaderType(HeaderType.LeftArrow);
|
||||
useSetHeaderType(HeaderType.RightClose);
|
||||
useSetFooterMode(false);
|
||||
useSetOnBack(() => {
|
||||
navigate(PATHS.additionalService.payout.list);
|
||||
});
|
||||
|
||||
const callExtensionPayoutRequest = () => {
|
||||
let params: ExtensionPayoutRequestParams = {
|
||||
mid: mid,
|
||||
submallId: submallId,
|
||||
disbursementAmount: disbursementAmount,
|
||||
settlementDate: settlementDate,
|
||||
};
|
||||
extensionPayoutRequest(params).then((rs: ExtensionPayoutRequestResponse) => {
|
||||
navigate(PATHS.additionalService.payout.list);
|
||||
});
|
||||
};
|
||||
|
||||
const setNewDate = (date: string) => {
|
||||
setSettlementDate(date);
|
||||
setCalendarOpen(false);
|
||||
};
|
||||
const onClickToOpenCalendar = () => {
|
||||
setCalendarOpen(true);
|
||||
};
|
||||
return (
|
||||
<>
|
||||
<main>
|
||||
@@ -31,8 +62,8 @@ export const PayoutRequestPage = () => {
|
||||
<div className="billing-field">
|
||||
<input
|
||||
type="text"
|
||||
value="BIKYvattest01m"
|
||||
readOnly={ true }
|
||||
value={ submallId }
|
||||
onChange={ (e) => setSubmallId(e.target.value) }
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -41,8 +72,8 @@ export const PayoutRequestPage = () => {
|
||||
<div className="billing-field">
|
||||
<input
|
||||
type="text"
|
||||
value="테스트상품123"
|
||||
readOnly={ true }
|
||||
value={ disbursementAmount }
|
||||
onChange={ (e) => setDisbursementAmount(parseInt(e.target.value)) }
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -54,11 +85,12 @@ export const PayoutRequestPage = () => {
|
||||
className="date-input"
|
||||
type="text"
|
||||
placeholder="날짜 선택"
|
||||
value="2025.06.08"
|
||||
value={ settlementDate }
|
||||
/>
|
||||
<button
|
||||
className="date-btn"
|
||||
type="button"
|
||||
onClick={ () => onClickToOpenCalendar() }
|
||||
>
|
||||
<img
|
||||
src={ IMAGE_ROOT + '/ico_date.svg' }
|
||||
@@ -73,6 +105,18 @@ export const PayoutRequestPage = () => {
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<div className="apply-row">
|
||||
<button
|
||||
className="btn-50 btn-blue flex-1"
|
||||
onClick={ callExtensionPayoutRequest }
|
||||
>신청</button>
|
||||
</div>
|
||||
<NiceCalendar
|
||||
calendarOpen={ calendarOpen }
|
||||
setCalendarOpen={ setCalendarOpen }
|
||||
calendarType={ CalendarType.Single }
|
||||
setNewDate={ setNewDate }
|
||||
></NiceCalendar>
|
||||
</>
|
||||
);
|
||||
};
|
||||
@@ -9,8 +9,9 @@ import { CalendarType } from '@/entities/common/model/types';
|
||||
interface NiceCalendarProps {
|
||||
calendarOpen: boolean;
|
||||
setCalendarOpen: (calendarOpen: boolean) => void;
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
singleDate?: string;
|
||||
calendarType: CalendarType;
|
||||
setNewDate: (date: string) => void;
|
||||
};
|
||||
@@ -20,6 +21,7 @@ const NiceCalendar = ({
|
||||
setCalendarOpen,
|
||||
startDate,
|
||||
endDate,
|
||||
singleDate,
|
||||
calendarType,
|
||||
setNewDate
|
||||
}: NiceCalendarProps) => {
|
||||
@@ -37,14 +39,21 @@ const NiceCalendar = ({
|
||||
const setMinMaxValueDate = () => {
|
||||
if(calendarType === CalendarType.Start){
|
||||
setMinDate(undefined);
|
||||
setMaxDate(new Date(endDate));
|
||||
if(!!endDate){
|
||||
setMaxDate(new Date(endDate));
|
||||
}
|
||||
setValueDate(startDate);
|
||||
}
|
||||
else if(calendarType === CalendarType.End){
|
||||
setMinDate(new Date(startDate));
|
||||
if(!!startDate){
|
||||
setMinDate(new Date(startDate));
|
||||
}
|
||||
setMaxDate(new Date());
|
||||
setValueDate(endDate);
|
||||
}
|
||||
else if(calendarType === CalendarType.Single){
|
||||
setValueDate(singleDate);
|
||||
}
|
||||
};
|
||||
|
||||
const formatMonthYear = (locale: string | undefined, date: Date) => {
|
||||
|
||||
Reference in New Issue
Block a user