Merge branch 'payout'
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>({
|
const mutation = useMutation<ExtensionPayoutDetailDownloadCertificateResponse, CBDCAxiosError, ExtensionPayoutDetailDownloadCertificateParams>({
|
||||||
...options,
|
...options,
|
||||||
mutationFn: (params: ExtensionPayoutDetailDownloadCertificateParams) => extensionPayoutDetailDownloadCertificate(params),
|
mutationFn: (params: ExtensionPayoutDetailDownloadCertificateParams) => extensionPayoutDetailDownloadCertificate(params),
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ export enum FilterDateOptions {
|
|||||||
};
|
};
|
||||||
export enum CalendarType {
|
export enum CalendarType {
|
||||||
Start = 'Start',
|
Start = 'Start',
|
||||||
End = 'End'
|
End = 'End',
|
||||||
|
Single = 'Single'
|
||||||
};
|
};
|
||||||
export interface DefaultRequestPagination {
|
export interface DefaultRequestPagination {
|
||||||
cursor: string;
|
cursor: string;
|
||||||
|
|||||||
@@ -7,9 +7,35 @@ import {
|
|||||||
useSetFooterMode,
|
useSetFooterMode,
|
||||||
useSetOnBack
|
useSetOnBack
|
||||||
} from '@/widgets/sub-layout/use-sub-layout';
|
} 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 = () => {
|
export const PayoutDetailPage = () => {
|
||||||
const { navigate } = useNavigate();
|
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('지급대행 상세');
|
useSetHeaderTitle('지급대행 상세');
|
||||||
useSetHeaderType(HeaderType.LeftArrow);
|
useSetHeaderType(HeaderType.LeftArrow);
|
||||||
@@ -18,6 +44,20 @@ export const PayoutDetailPage = () => {
|
|||||||
navigate(PATHS.additionalService.payout.list);
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
<main className="full-height">
|
<main className="full-height">
|
||||||
@@ -25,7 +65,14 @@ export const PayoutDetailPage = () => {
|
|||||||
<div className="tab-pane sub active">
|
<div className="tab-pane sub active">
|
||||||
<div className="pay-top">
|
<div className="pay-top">
|
||||||
<div className="num-amount">
|
<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>
|
||||||
<div className="num-store">나이스테스트가맹점</div>
|
<div className="num-store">나이스테스트가맹점</div>
|
||||||
<div className="num-day">2025.08.19</div>
|
<div className="num-day">2025.08.19</div>
|
||||||
@@ -33,6 +80,7 @@ export const PayoutDetailPage = () => {
|
|||||||
<button
|
<button
|
||||||
className="receipt-btn"
|
className="receipt-btn"
|
||||||
type="button"
|
type="button"
|
||||||
|
onClick={ onClickToDownload }
|
||||||
>
|
>
|
||||||
<span className="icon-24 download"></span>
|
<span className="icon-24 download"></span>
|
||||||
<span>입출금 확인증</span>
|
<span>입출금 확인증</span>
|
||||||
@@ -45,43 +93,43 @@ export const PayoutDetailPage = () => {
|
|||||||
<ul className="kv-list">
|
<ul className="kv-list">
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">지급상태</span>
|
<span className="k">지급상태</span>
|
||||||
<span className="v">요청</span>
|
<span className="v">{ detail?.disbursementStatus }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">거래유형</span>
|
<span className="k">거래유형</span>
|
||||||
<span className="v">최초요청</span>
|
<span className="v">{ detail?.transTypeName }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">요청일</span>
|
<span className="k">요청일</span>
|
||||||
<span className="v">2025.06.05</span>
|
<span className="v">{ detail?.requestDate }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">지급일시</span>
|
<span className="k">지급일시</span>
|
||||||
<span className="v">2025.06.08 11:00:00</span>
|
<span className="v">{ detail?.settlementDate }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">사업자번호</span>
|
<span className="k">사업자번호</span>
|
||||||
<span className="v">'123456789'</span>
|
<span className="v">{ detail?.companyNo }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">예금주</span>
|
<span className="k">예금주</span>
|
||||||
<span className="v">김테스트</span>
|
<span className="v">{ detail?.accountName }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">은행</span>
|
<span className="k">은행</span>
|
||||||
<span className="v">기업은행</span>
|
<span className="v">{ detail?.bankName }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">계좌번호</span>
|
<span className="k">계좌번호</span>
|
||||||
<span className="v">'1123456789'</span>
|
<span className="v">{ detail?.accountNo }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">입금인자</span>
|
<span className="k">입금인자</span>
|
||||||
<span className="v">나이스정산금</span>
|
<span className="v">{ detail?.depositName }</span>
|
||||||
</li>
|
</li>
|
||||||
<li className="kv-row">
|
<li className="kv-row">
|
||||||
<span className="k">실패사유</span>
|
<span className="k">실패사유</span>
|
||||||
<span className="v"> </span>
|
<span className="v">{ detail?.failReason }</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -160,6 +160,7 @@ export const PayoutListPage = () => {
|
|||||||
rs.push(
|
rs.push(
|
||||||
<ListDateGroup
|
<ListDateGroup
|
||||||
additionalServiceCategory={ AdditionalServiceCategory.Payout }
|
additionalServiceCategory={ AdditionalServiceCategory.Payout }
|
||||||
|
mid={ mid }
|
||||||
key={ key }
|
key={ key }
|
||||||
date={ key }
|
date={ key }
|
||||||
items={ value }
|
items={ value }
|
||||||
|
|||||||
@@ -1,24 +1,55 @@
|
|||||||
import { IMAGE_ROOT } from "@/shared/constants/common";
|
import { IMAGE_ROOT } from "@/shared/constants/common";
|
||||||
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 { HeaderType } from '@/entities/common/model/types';
|
import { CalendarType, HeaderType } from '@/entities/common/model/types';
|
||||||
import {
|
import {
|
||||||
useSetHeaderTitle,
|
useSetHeaderTitle,
|
||||||
useSetHeaderType,
|
useSetHeaderType,
|
||||||
useSetFooterMode,
|
useSetFooterMode,
|
||||||
useSetOnBack
|
useSetOnBack
|
||||||
} from '@/widgets/sub-layout/use-sub-layout';
|
} 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 = () => {
|
export const PayoutRequestPage = () => {
|
||||||
const { navigate } = useNavigate();
|
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('지급대행 신청');
|
useSetHeaderTitle('지급대행 신청');
|
||||||
useSetHeaderType(HeaderType.LeftArrow);
|
useSetHeaderType(HeaderType.RightClose);
|
||||||
useSetFooterMode(false);
|
useSetFooterMode(false);
|
||||||
useSetOnBack(() => {
|
useSetOnBack(() => {
|
||||||
navigate(PATHS.additionalService.payout.list);
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
<main>
|
<main>
|
||||||
@@ -31,8 +62,8 @@ export const PayoutRequestPage = () => {
|
|||||||
<div className="billing-field">
|
<div className="billing-field">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value="BIKYvattest01m"
|
value={ submallId }
|
||||||
readOnly={ true }
|
onChange={ (e) => setSubmallId(e.target.value) }
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -41,8 +72,8 @@ export const PayoutRequestPage = () => {
|
|||||||
<div className="billing-field">
|
<div className="billing-field">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
value="테스트상품123"
|
value={ disbursementAmount }
|
||||||
readOnly={ true }
|
onChange={ (e) => setDisbursementAmount(parseInt(e.target.value)) }
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -54,11 +85,12 @@ export const PayoutRequestPage = () => {
|
|||||||
className="date-input"
|
className="date-input"
|
||||||
type="text"
|
type="text"
|
||||||
placeholder="날짜 선택"
|
placeholder="날짜 선택"
|
||||||
value="2025.06.08"
|
value={ settlementDate }
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
className="date-btn"
|
className="date-btn"
|
||||||
type="button"
|
type="button"
|
||||||
|
onClick={ () => onClickToOpenCalendar() }
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src={ IMAGE_ROOT + '/ico_date.svg' }
|
src={ IMAGE_ROOT + '/ico_date.svg' }
|
||||||
@@ -73,6 +105,18 @@ export const PayoutRequestPage = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</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 {
|
interface NiceCalendarProps {
|
||||||
calendarOpen: boolean;
|
calendarOpen: boolean;
|
||||||
setCalendarOpen: (calendarOpen: boolean) => void;
|
setCalendarOpen: (calendarOpen: boolean) => void;
|
||||||
startDate: string;
|
startDate?: string;
|
||||||
endDate: string;
|
endDate?: string;
|
||||||
|
singleDate?: string;
|
||||||
calendarType: CalendarType;
|
calendarType: CalendarType;
|
||||||
setNewDate: (date: string) => void;
|
setNewDate: (date: string) => void;
|
||||||
};
|
};
|
||||||
@@ -20,6 +21,7 @@ const NiceCalendar = ({
|
|||||||
setCalendarOpen,
|
setCalendarOpen,
|
||||||
startDate,
|
startDate,
|
||||||
endDate,
|
endDate,
|
||||||
|
singleDate,
|
||||||
calendarType,
|
calendarType,
|
||||||
setNewDate
|
setNewDate
|
||||||
}: NiceCalendarProps) => {
|
}: NiceCalendarProps) => {
|
||||||
@@ -37,14 +39,21 @@ const NiceCalendar = ({
|
|||||||
const setMinMaxValueDate = () => {
|
const setMinMaxValueDate = () => {
|
||||||
if(calendarType === CalendarType.Start){
|
if(calendarType === CalendarType.Start){
|
||||||
setMinDate(undefined);
|
setMinDate(undefined);
|
||||||
setMaxDate(new Date(endDate));
|
if(!!endDate){
|
||||||
|
setMaxDate(new Date(endDate));
|
||||||
|
}
|
||||||
setValueDate(startDate);
|
setValueDate(startDate);
|
||||||
}
|
}
|
||||||
else if(calendarType === CalendarType.End){
|
else if(calendarType === CalendarType.End){
|
||||||
setMinDate(new Date(startDate));
|
if(!!startDate){
|
||||||
|
setMinDate(new Date(startDate));
|
||||||
|
}
|
||||||
setMaxDate(new Date());
|
setMaxDate(new Date());
|
||||||
setValueDate(endDate);
|
setValueDate(endDate);
|
||||||
}
|
}
|
||||||
|
else if(calendarType === CalendarType.Single){
|
||||||
|
setValueDate(singleDate);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatMonthYear = (locale: string | undefined, date: Date) => {
|
const formatMonthYear = (locale: string | undefined, date: Date) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user