- 계좌성명조회 페이지 수정
This commit is contained in:
@@ -13,39 +13,19 @@ import {
|
||||
} from '@tanstack/react-query';
|
||||
import { ExtensionAccountHolderSearchDetailParams, ExtensionAccountHolderSearchDetailResponse } from '../../model/account-holder-search/types';
|
||||
|
||||
export const extensionAccountHolderSearchDetail = async (params: ExtensionAccountHolderSearchDetailParams): Promise<DetailResponse> => {
|
||||
const response = await resultify(
|
||||
axios.post<ExtensionAccountHolderSearchDetailResponse>(API_URL_ADDITIONAL_SERVICE.extensionAccountHolderSearchDetail(), params),
|
||||
export const extensionAccountHolderSearchDetail = (params: ExtensionAccountHolderSearchDetailParams) => {
|
||||
return resultify(
|
||||
axios.post<ExtensionAccountHolderSearchDetailResponse>(API_URL_ADDITIONAL_SERVICE.extensionAccountHolderSearchList(), params),
|
||||
);
|
||||
|
||||
// ExtensionAccountHolderSearchDetailResponse를 DetailResponse로 변환
|
||||
const detailResponse: DetailResponse = {
|
||||
titleInfo: {
|
||||
accountNo: response.accountNo,
|
||||
bankName: response.bankName,
|
||||
requestDate: response.requestDate
|
||||
} as TitleInfo,
|
||||
detailInfo: {
|
||||
accountName: response.accountName,
|
||||
requestDate: response.requestDate,
|
||||
resultStatus: response.resultStatus,
|
||||
failureReason: response.failReason,
|
||||
bankName: response.bankName,
|
||||
accountNo: response.accountNo,
|
||||
requestWay: response.requestWay
|
||||
} as DetailInfo
|
||||
|
||||
};
|
||||
|
||||
return detailResponse;
|
||||
};
|
||||
|
||||
export const useExtensionAccountHolderSearchDetailMutation = (options?: UseMutationOptions<DetailResponse, CBDCAxiosError, ExtensionAccountHolderSearchDetailParams>) => {
|
||||
const mutation = useMutation<DetailResponse, CBDCAxiosError, ExtensionAccountHolderSearchDetailParams>({
|
||||
export const useExtensionAccountHolderSearchDetailtMutation = (options?: UseMutationOptions<ExtensionAccountHolderSearchDetailResponse, CBDCAxiosError, ExtensionAccountHolderSearchDetailParams>) => {
|
||||
const mutation = useMutation<ExtensionAccountHolderSearchDetailResponse, CBDCAxiosError, ExtensionAccountHolderSearchDetailParams>({
|
||||
...options,
|
||||
mutationFn: (params: ExtensionAccountHolderSearchDetailParams) => extensionAccountHolderSearchDetail(params),
|
||||
});
|
||||
|
||||
return {
|
||||
...mutation,
|
||||
};
|
||||
}
|
||||
};
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ProcessResult } from "../types";
|
||||
import { AccountHolderResultStatus } from "./types";
|
||||
import { AccountHolderResultStatus, AccountHolderSearchCl } from "./types";
|
||||
|
||||
|
||||
export const resultStatusBtnGroup = [
|
||||
@@ -7,3 +7,19 @@ export const resultStatusBtnGroup = [
|
||||
{ name: '성공', value: AccountHolderResultStatus.SUCCESS },
|
||||
{ name: '실패', value: AccountHolderResultStatus.FAIL },
|
||||
]
|
||||
|
||||
export const SearchTypeOption = [
|
||||
{ name: '예금주', value: AccountHolderSearchCl.ACCOUNT_NAME },
|
||||
{ name: '계좌번호', value: AccountHolderSearchCl.ACCOUNT_NO },
|
||||
];
|
||||
|
||||
|
||||
export const getAccountHolderStatusText = (status?: string): string => {
|
||||
if (!status) return '';
|
||||
|
||||
const resultStatusMap: Record<string, string> = {
|
||||
'SUCCESS': '성공',
|
||||
'FAIL': '실패'
|
||||
};
|
||||
return resultStatusMap[status] || status;
|
||||
}
|
||||
@@ -23,7 +23,7 @@ export const AccountHolderAuthList = ({
|
||||
date = requestDate;
|
||||
}
|
||||
if (date !== requestDate) {
|
||||
date = requestDate;
|
||||
|
||||
if (list.length > 0) {
|
||||
rs.push(
|
||||
<ListDateGroup
|
||||
@@ -34,6 +34,7 @@ export const AccountHolderAuthList = ({
|
||||
></ListDateGroup>
|
||||
);
|
||||
}
|
||||
date = requestDate;
|
||||
list = [];
|
||||
}
|
||||
list.push(items);
|
||||
|
||||
@@ -12,33 +12,35 @@ export const AccountHolderSearchList = ({
|
||||
const { navigate } = useNavigate();
|
||||
|
||||
const getListDateGroup = () => {
|
||||
let rs: JSX.Element[] = [];
|
||||
let rs = [];
|
||||
let date = '';
|
||||
let list: AccountHolderSearchListItem[] = [];
|
||||
let list = [];
|
||||
for (let i = 0; i < listItems.length; i++) {
|
||||
// requestDate format: "20211018140420" (YYYYMMDDHHmmss)
|
||||
let requestDate = listItems[i]?.requestDate || '';
|
||||
let itemDate = requestDate.substring(0, 8);
|
||||
let items = listItems[i];
|
||||
if (!!items) {
|
||||
let requestDate = items?.requestDate;
|
||||
requestDate = requestDate?.substring(0, 8);
|
||||
if (!!requestDate) {
|
||||
if (i === 0) {
|
||||
date = itemDate;
|
||||
date = requestDate;
|
||||
}
|
||||
if (date !== itemDate) {
|
||||
// 날짜가 바뀌면 이전 리스트를 푸시 (날짜 업데이트 전에!)
|
||||
if (date !== requestDate) {
|
||||
if (list.length > 0) {
|
||||
rs.push(
|
||||
<ListDateGroup
|
||||
additionalServiceCategory={AdditionalServiceCategory.AccountHolderSearch}
|
||||
mid={mid}
|
||||
key={date + '-' + i}
|
||||
date={date}
|
||||
items={list as any}
|
||||
items={list}
|
||||
></ListDateGroup>
|
||||
);
|
||||
}
|
||||
date = itemDate; // 그 다음에 날짜 업데이트
|
||||
date = requestDate;
|
||||
list = [];
|
||||
}
|
||||
list.push(listItems[i] as any);
|
||||
list.push(items);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (list.length > 0) {
|
||||
rs.push(
|
||||
@@ -47,13 +49,14 @@ export const AccountHolderSearchList = ({
|
||||
mid={mid}
|
||||
key={date + '-last'}
|
||||
date={date}
|
||||
items={list as any}
|
||||
items={list}
|
||||
></ListDateGroup>
|
||||
);
|
||||
}
|
||||
return rs;
|
||||
};
|
||||
|
||||
|
||||
const onClickToNavigate = () => {
|
||||
navigate(PATHS.additionalService.accountHolderSearch.request)
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@ import { FilterButtonGroups } from '@/shared/ui/filter/button-groups';
|
||||
import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant';
|
||||
import { useStore } from '@/shared/model/store';
|
||||
import { AccountHolderSearchFilterProps, AccountHolderSearchCl, AccountHolderResultStatus } from '@/entities/additional-service/model/account-holder-search/types';
|
||||
import { resultStatusBtnGroup, SearchTypeOption } from '@/entities/additional-service/model/account-holder-search/constant';
|
||||
|
||||
export const AccountHolderSearchFilter = ({
|
||||
filterOn,
|
||||
@@ -42,6 +43,10 @@ export const AccountHolderSearchFilter = ({
|
||||
const [filterResultStatus, setFilterResultStatus] = useState<AccountHolderResultStatus>(resultStatus);
|
||||
|
||||
const midOptions = useStore.getState().UserStore.selectOptionsMids;
|
||||
const bankList = useStore.getState().CommonStore.bankList;
|
||||
const bankOptions = bankList
|
||||
.filter((bank) => bank.code1 !== '****')
|
||||
.map((bank) => ({ name: bank.desc1, value: bank.code1 }));
|
||||
|
||||
const onClickToClose = () => {
|
||||
setFilterOn(false);
|
||||
@@ -62,21 +67,7 @@ export const AccountHolderSearchFilter = ({
|
||||
onClickToClose();
|
||||
};
|
||||
|
||||
let bankOptions = [
|
||||
{ name: '우리은행', value: '우리은행' },
|
||||
{ name: '토스뱅킹', value: '토스뱅킹' }
|
||||
];
|
||||
|
||||
let searchTypeOption = [
|
||||
{ name: '예금주', value: AccountHolderSearchCl.ACCOUNT_NAME },
|
||||
{ name: '계좌번호', value: AccountHolderSearchCl.ACCOUNT_NO },
|
||||
];
|
||||
|
||||
let processResultBtnGroup = [
|
||||
{ name: '전체', value: ProcessResult.ALL },
|
||||
{ name: '성공', value: ProcessResult.SUCCESS },
|
||||
{ name: '실패', value: ProcessResult.FAIL },
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
@@ -84,9 +75,9 @@ export const AccountHolderSearchFilter = ({
|
||||
className="full-menu-modal"
|
||||
initial="hidden"
|
||||
animate={(filterOn) ? 'visible' : 'hidden'}
|
||||
variants={ FilterMotionVariants }
|
||||
transition={ FilterMotionDuration }
|
||||
style={ FilterMotionStyle }
|
||||
variants={FilterMotionVariants}
|
||||
transition={FilterMotionDuration}
|
||||
style={FilterMotionStyle}
|
||||
>
|
||||
<div className="full-menu-container">
|
||||
<div className="full-menu-header">
|
||||
@@ -108,18 +99,18 @@ export const AccountHolderSearchFilter = ({
|
||||
<div className="option-list pt-16">
|
||||
<FilterSelect
|
||||
title='가맹점'
|
||||
selectValue={mid}
|
||||
selectSetter={setMid}
|
||||
selectValue={filterMid}
|
||||
selectSetter={setFilterMid}
|
||||
selectOptions={midOptions}
|
||||
></FilterSelect>
|
||||
|
||||
<FilterSelectInput
|
||||
title='예금주/계좌번호'
|
||||
selectValue={searchType}
|
||||
selectSetter={setSearchType}
|
||||
selectOptions={searchTypeOption}
|
||||
inputValue={searchKeyword}
|
||||
inputSetter={setSearchKeyword}
|
||||
selectValue={filterSearchType}
|
||||
selectSetter={setFilterSearchType}
|
||||
selectOptions={SearchTypeOption}
|
||||
inputValue={filterSearchKeyword}
|
||||
inputSetter={setFilterSearchKeyword}
|
||||
></FilterSelectInput>
|
||||
<FilterCalendar
|
||||
startDate={filterStartDate}
|
||||
@@ -130,15 +121,15 @@ export const AccountHolderSearchFilter = ({
|
||||
|
||||
<FilterSelect
|
||||
title='은행'
|
||||
selectValue={bank}
|
||||
selectSetter={setBank}
|
||||
selectValue={filterBank}
|
||||
selectSetter={setFilterBank}
|
||||
selectOptions={bankOptions}
|
||||
></FilterSelect>
|
||||
|
||||
<FilterButtonGroups
|
||||
title='조회결과'
|
||||
activeValue={filterResultStatus}
|
||||
btnGroups={processResultBtnGroup}
|
||||
btnGroups={resultStatusBtnGroup}
|
||||
setter={setFilterResultStatus}
|
||||
></FilterButtonGroups>
|
||||
</div>
|
||||
|
||||
@@ -9,12 +9,13 @@ import {
|
||||
useSetFooterMode,
|
||||
useSetOnBack
|
||||
} from '@/widgets/sub-layout/use-sub-layout';
|
||||
import { useExtensionAccountHolderSearchDetailMutation } from '@/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation';
|
||||
import { AdditionalServiceCategory, DetailInfo, DetailResponse, TitleInfo } from '@/entities/additional-service/model/types';
|
||||
import { TitleInfoWrap } from '@/entities/additional-service/ui/info-wrap/title-info-wrap';
|
||||
import { useLocation } from 'react-router';
|
||||
import { DetailInfoWrap } from '@/entities/additional-service/ui/info-wrap/detail-info-wrap';
|
||||
import { ExtensionAccountHolderSearchDetailParams } from '@/entities/additional-service/model/account-holder-search/types';
|
||||
import { ExtensionAccountHolderSearchDetailParams, ExtensionAccountHolderSearchDetailResponse } from '@/entities/additional-service/model/account-holder-search/types';
|
||||
import { useExtensionAccountHolderSearchDetailtMutation } from '@/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation';
|
||||
import { getAccountHolderStatusText } from '@/entities/additional-service/model/account-holder-search/constant';
|
||||
|
||||
export const AccountHolderSearchDetailPage = () => {
|
||||
const { navigate } = useNavigate();
|
||||
@@ -22,8 +23,7 @@ export const AccountHolderSearchDetailPage = () => {
|
||||
|
||||
const { mid, tid } = location.state || {};
|
||||
|
||||
const [titleInfo, setTitleInfo] = useState<TitleInfo>();
|
||||
const [detailInfo, setDetailInfo] = useState<DetailInfo>();
|
||||
const [detail, setDetail] = useState<ExtensionAccountHolderSearchDetailResponse>();
|
||||
|
||||
useSetHeaderTitle('계좌성명조회 상세');
|
||||
useSetHeaderType(HeaderType.LeftArrow);
|
||||
@@ -32,19 +32,22 @@ export const AccountHolderSearchDetailPage = () => {
|
||||
navigate(PATHS.additionalService.accountHolderSearch.list);
|
||||
});
|
||||
|
||||
const { mutateAsync: accountHolderSearchDetail } = useExtensionAccountHolderSearchDetailMutation();
|
||||
const { mutateAsync: accountHolderSearchDetail } = useExtensionAccountHolderSearchDetailtMutation();
|
||||
|
||||
const callDetail = () => {
|
||||
let accountHolderSearchDetailParams: ExtensionAccountHolderSearchDetailParams = {
|
||||
mid: mid,
|
||||
tid: tid
|
||||
}
|
||||
accountHolderSearchDetail(accountHolderSearchDetailParams).then((rs: DetailResponse) => {
|
||||
console.log("Detail Info: ", rs)
|
||||
setTitleInfo(rs.titleInfo);
|
||||
setDetailInfo(rs.detailInfo);
|
||||
accountHolderSearchDetail(accountHolderSearchDetailParams).then((rs: ExtensionAccountHolderSearchDetailResponse) => {
|
||||
setDetail(rs);
|
||||
});
|
||||
};
|
||||
|
||||
const getDate = (date?: string) => {
|
||||
return (date) ? moment(date, 'YYYYMMDDHHmmss').format('YYYY.MM.DD HH:mm:ss') : '';
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
callDetail();
|
||||
}, []);
|
||||
@@ -54,17 +57,45 @@ export const AccountHolderSearchDetailPage = () => {
|
||||
<div className="tab-content">
|
||||
<div className="tab-pane sub active">
|
||||
<div className="pay-top">
|
||||
<TitleInfoWrap
|
||||
additionalServiceCategory={AdditionalServiceCategory.AccountHolderSearch}
|
||||
titleInfo={titleInfo}
|
||||
></TitleInfoWrap>
|
||||
<div className="num-amount">
|
||||
<span className="amount">{detail?.accountNo}</span>
|
||||
</div>
|
||||
<span className="num-day">{detail?.bankName}</span>
|
||||
<div className="num-day">{getDate(detail?.requestDate)}</div>
|
||||
</div>
|
||||
<div className="pay-detail">
|
||||
<div className="detail-divider"></div>
|
||||
<DetailInfoWrap
|
||||
additionalServiceCategory={AdditionalServiceCategory.AccountHolderSearch}
|
||||
detailInfo={detailInfo}
|
||||
></DetailInfoWrap>
|
||||
<div className="pay-detail">
|
||||
<div className="detail-title">상세 정보</div>
|
||||
<ul className="kv-list">
|
||||
<li className="kv-row">
|
||||
<span className="k">예금주</span>
|
||||
<span className="v">{detail?.accountName}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">조회 일시</span>
|
||||
<span className="v">{detail?.requestDate}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">결과</span>
|
||||
<span className="v">{getAccountHolderStatusText(detail?.resultStatus)}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">실패사유</span>
|
||||
<span className="v">{detail?.failReason}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">은행</span>
|
||||
<span className="v">{detail?.bankName}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">계좌번호</span>
|
||||
<span className="v">{detail?.accountNo}</span>
|
||||
</li>
|
||||
<li className="kv-row">
|
||||
<span className="k">요청 구분</span>
|
||||
<span className="v">{detail?.requestWay}</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,8 @@ import { useStore } from '@/shared/model/store';
|
||||
export const AccountHolderSearchRequestPage = () => {
|
||||
const { navigate } = useNavigate();
|
||||
|
||||
const userMid = useStore.getState().UserStore.mid
|
||||
const midOptions = useStore.getState().UserStore.selectOptionsMids
|
||||
const bankList = useStore.getState().CommonStore.bankList
|
||||
|
||||
useSetHeaderTitle('계좌성명조회_신청');
|
||||
useSetHeaderType(HeaderType.LeftArrow);
|
||||
@@ -27,7 +28,7 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
const { mutateAsync: accountHolderSearchRequest } = useExtensionAccountHolderSearchRequestMutation();
|
||||
|
||||
const [formData, setFormData] = useState({
|
||||
mid: userMid,
|
||||
mid: '',
|
||||
bankCode: '',
|
||||
accountNo: ''
|
||||
})
|
||||
@@ -39,7 +40,7 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
const onClickToRequest = () => {
|
||||
const reuqestParams: ExtensionAccountHolderSearchRequestParams = {
|
||||
mid: formData.mid,
|
||||
bankCode: formData.bankCode, // 추후 진짜 은행코드 삽입 필요
|
||||
bankCode: formData.bankCode,
|
||||
accountNo: formData.accountNo
|
||||
}
|
||||
|
||||
@@ -55,6 +56,14 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
})
|
||||
};
|
||||
|
||||
const isFormValid = () => {
|
||||
return (
|
||||
formData.mid.trim() !== '' &&
|
||||
formData.bankCode.trim() !== '' &&
|
||||
formData.accountNo.trim() !== ''
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<main>
|
||||
@@ -65,12 +74,15 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
<div className="billing-row">
|
||||
<div className="billing-label">가맹점</div>
|
||||
<div className="billing-field">
|
||||
<select
|
||||
className="wid-100"
|
||||
value={formData.mid}
|
||||
onChange={(e) => handleInputChange('mid', e.target.value)}
|
||||
>
|
||||
<option>nictest00m</option>
|
||||
<select value={formData.mid} onChange={(e) => handleInputChange('mid', e.target.value)}>
|
||||
{
|
||||
midOptions.map((value) => (
|
||||
<option
|
||||
key={value.value}
|
||||
value={value.value}
|
||||
>{value.name}</option>
|
||||
))
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -78,13 +90,18 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
<div className="billing-row">
|
||||
<div className="billing-label">은행</div>
|
||||
<div className="billing-field">
|
||||
<select
|
||||
className="wid-100"
|
||||
value={formData.bankCode}
|
||||
onChange={(e) => handleInputChange('bankCode', e.target.value)}
|
||||
>
|
||||
<option>우리은행</option>
|
||||
<option>카카오뱅크</option>
|
||||
<select value={formData.bankCode} onChange={(e) => handleInputChange('bankCode', e.target.value)}>
|
||||
<option value="">선택하세요</option>
|
||||
{
|
||||
bankList
|
||||
.filter((bank) => bank.code1 !== '****')
|
||||
.map((bank) => (
|
||||
<option
|
||||
key={bank.code1}
|
||||
value={bank.code1}
|
||||
>{bank.desc1}</option>
|
||||
))
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -105,6 +122,7 @@ export const AccountHolderSearchRequestPage = () => {
|
||||
<div className="apply-row">
|
||||
<button
|
||||
className="btn-50 btn-blue flex-1"
|
||||
disabled={!isFormValid()}
|
||||
onClick={() => onClickToRequest()}
|
||||
>신청</button>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user