diff --git a/src/entities/additional-service/api/fund-account/use-extension-fund-account-download-certificate-mutation.ts b/src/entities/additional-service/api/fund-account/use-extension-fund-account-download-certificate-mutation.ts new file mode 100644 index 0000000..acee7bf --- /dev/null +++ b/src/entities/additional-service/api/fund-account/use-extension-fund-account-download-certificate-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_ADDITIONAL_SERVICE } from '@/shared/api/api-url-additional-service'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + ExtensionFundAccountDownloadReceiptParams as ExtensionFundAccountDownloadReceiptParams, + ExtensionFundAccountDownloadReceiptResponse as ExtensionFundAccountDownloadReceiptResponse +} from '../../model/fund-account/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const extensionFundAccountDownloadReceipt = (params: ExtensionFundAccountDownloadReceiptParams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionFundAccountDownloadReceipt(), params), + ); +}; + +export const useExtensionFundAccountDownloadReceiptMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionFundAccountDownloadReceiptParams) => extensionFundAccountDownloadReceipt(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-regist-mutation.ts b/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-regist-mutation.ts new file mode 100644 index 0000000..fab63ba --- /dev/null +++ b/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-regist-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_ADDITIONAL_SERVICE } from '@/shared/api/api-url-additional-service'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + ExtensionFundAccountTransferRegistParams, + ExtensionFundAccountTransferRegistResponse +} from '../../model/fund-account/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const extensionFundAccountTransferRegist = (params: ExtensionFundAccountTransferRegistParams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionFundAccountTransferRegist(), params), + ); +}; + +export const useExtensionFundAccountTransferRegistMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionFundAccountTransferRegistParams) => extensionFundAccountTransferRegist(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-request-mutation.ts b/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-request-mutation.ts deleted file mode 100644 index 9ed5290..0000000 --- a/src/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-request-mutation.ts +++ /dev/null @@ -1,29 +0,0 @@ -import axios from 'axios'; -import { API_URL_ADDITIONAL_SERVICE } from '@/shared/api/api-url-additional-service'; -import { resultify } from '@/shared/lib/resultify'; -import { CBDCAxiosError } from '@/shared/@types/error'; -import { - ExtensionFundAccountTransferRequestParams, - ExtensionFundAccountTransferRequestResponse -} from '../../model/fund-account/types'; -import { - useMutation, - UseMutationOptions -} from '@tanstack/react-query'; - -export const extensionFundAccountTransferRequest = (params: ExtensionFundAccountTransferRequestParams) => { - return resultify( - axios.post(API_URL_ADDITIONAL_SERVICE.extensionFundAccountTransferRequest(), params), - ); -}; - -export const useExtensionFundAccountTransferRequestMutation = (options?: UseMutationOptions) => { - const mutation = useMutation({ - ...options, - mutationFn: (params: ExtensionFundAccountTransferRequestParams) => extensionFundAccountTransferRequest(params), - }); - - return { - ...mutation, - }; -}; diff --git a/src/entities/additional-service/model/account-holder-auth/types.ts b/src/entities/additional-service/model/account-holder-auth/types.ts index 1e0d918..c3019ef 100644 --- a/src/entities/additional-service/model/account-holder-auth/types.ts +++ b/src/entities/additional-service/model/account-holder-auth/types.ts @@ -1,5 +1,5 @@ import { DefaulResponsePagination, DefaultRequestPagination } from "@/entities/common/model/types"; -import { ExtensionRequestParams, FilterProps, ListItemProps } from "../types"; +import { AdditionalServiceCategory, ExtensionRequestParams, FilterProps, ListItemProps } from "../types"; // 계좌 점유 조회 관련 타입들 export enum AuthAndTransferStatus { @@ -18,7 +18,8 @@ export interface AccountHolderAuthListItem { transferStatus?: AuthAndTransferStatus; } export interface AccountHolderAuthListProps { - listItems: Record>; + additionalServiceCategory: AdditionalServiceCategory; + listItems: Array; mid: string; } export interface AccountHolderAuthFilterProps extends FilterProps { @@ -34,7 +35,8 @@ export interface AccountHolderAuthFilterProps extends FilterProps { // 계좌 점유 인증 확장 서비스 // ======================================== -export interface ExtensionAccountHolderAuthListParams extends ExtensionRequestParams { +export interface ExtensionAccountHolderAuthListParams { + mid: string; fromDate: string; toDate: string; authStatus: string; @@ -42,7 +44,16 @@ export interface ExtensionAccountHolderAuthListParams extends ExtensionRequestPa } export interface ExtensionAccountHolderAuthListResponse extends DefaulResponsePagination { - content: Array + content: Array +} + +export interface ExtensionAccountHolderAuthContentItem { + tid?: string; + accountName?: string; + accountNo?: string; + requestDate?: string; + bankName?: string; + authStatus?: AuthAndTransferStatus; } export interface ExtensionAccountHolderAuthDownloadExcelParams extends ExtensionRequestParams { diff --git a/src/entities/additional-service/model/account-holder-search/types.ts b/src/entities/additional-service/model/account-holder-search/types.ts index 6e913a0..3cbcab0 100644 --- a/src/entities/additional-service/model/account-holder-search/types.ts +++ b/src/entities/additional-service/model/account-holder-search/types.ts @@ -24,7 +24,6 @@ export interface AccountHolderSearchListItem { export interface AccountHolderSearchListProps { listItems: Array; mid: string; - setTarget: (element: HTMLElement | null) => void; } export interface AccountHolderSearchFilterProps extends FilterProps { diff --git a/src/entities/additional-service/model/alimtalk/constant.ts b/src/entities/additional-service/model/alimtalk/constant.ts index e69de29..f5dccf7 100644 --- a/src/entities/additional-service/model/alimtalk/constant.ts +++ b/src/entities/additional-service/model/alimtalk/constant.ts @@ -0,0 +1,42 @@ +import { AlimtalkAlimCl, AlimtalkSearchCl, AlimTalkSendCl, AlimtalkSendType, ServiceCode } from "./types"; + +export const AlimtalkSearchClOptionGroup = [ + {name: '주문자', value: AlimtalkSearchCl.BUYER_NAME }, + {name: 'TID', value: AlimtalkSearchCl.TID }, +]; + +export const AlimtalkServiceCodeOptionGroup = [ + {name: '전체', value: ''}, + {name: '카드', value: ServiceCode.CARD }, + {name: '계좌이체', value: ServiceCode.BANK }, + {name: '가상계좌', value: ServiceCode.VBANK }, + {name: '휴대폰', value: ServiceCode.PHONE } +] + +// 알림구분 - 카드/계좌이체/휴대폰용 +export const AlimtalkAlimClBtnGroupForGeneral = [ + {name: '전체', value: '' }, + {name: '승인', value: AlimtalkAlimCl.APPROVAL }, + {name: '취소', value: AlimtalkAlimCl.CANCEL } +] + +// 알림구분 - 가상계좌용 +export const AlimtalkAlimClBtnGroupForVBank = [ + {name: '전체', value: '' }, + {name: '입금요청', value: AlimtalkAlimCl.DEPOSIT_REQUEST }, + {name: '입금완료', value: AlimtalkAlimCl.DEPOSIT_COMPLETE }, + {name: '환불', value: AlimtalkAlimCl.REFUND } +] + +export const AlimtalkSendTypeBtnGroup = [ + {name: '전체', value: AlimtalkSendType.ALL }, + {name: '카카오톡', value: AlimtalkSendType.KAKAOTALK }, + {name: 'FB SMS', value: AlimtalkSendType.FB_SMS } +] + +export const AlimtalkSendClBtnGroup = [ + {name: '전체', value: AlimTalkSendCl.ALL }, + {name: '요청', value: AlimTalkSendCl.REQUEST }, + {name: '성공', value: AlimTalkSendCl.SUCCESS }, + {name: '실패', value: AlimTalkSendCl.FAIL } +] \ No newline at end of file diff --git a/src/entities/additional-service/model/alimtalk/types.ts b/src/entities/additional-service/model/alimtalk/types.ts index 7cc527e..2ef576a 100644 --- a/src/entities/additional-service/model/alimtalk/types.ts +++ b/src/entities/additional-service/model/alimtalk/types.ts @@ -31,6 +31,14 @@ export enum AlimTalkSendCl { SUCCESS = 'SUCCESS', FAIL = 'FAIL' }; + +export enum ServiceCode { + CARD = 'CARD', + BANK = 'BANK', + VBANK = 'VBANK', + PHONE = 'PHONE' +} + export interface ExtensionAlimtalkSettingSaveParams { mid: string; sendMerchantInfo?: SendMerchantInfo; @@ -97,7 +105,7 @@ export interface ExtensionAlimtalkDownloadExcelParams { mid?: string; searchCl?: AlimtalkSearchCl; searchValue?: string; - paymentMethod?: string; + serviceCode?: string; alimCl?: AlimtalkAlimCl; fromDate?: string; toDate?: string; @@ -105,7 +113,9 @@ export interface ExtensionAlimtalkDownloadExcelParams { sendCl?: AlimTalkSendCl; }; -export interface ExtensionAlimtalkDownloadExcelResponse {}; +export interface ExtensionAlimtalkDownloadExcelResponse { + status : boolean +}; export interface ExtensionAlimtalkDetailParams { mid: string; diff --git a/src/entities/additional-service/model/fund-account/types.ts b/src/entities/additional-service/model/fund-account/types.ts index e2d9864..f43a48a 100644 --- a/src/entities/additional-service/model/fund-account/types.ts +++ b/src/entities/additional-service/model/fund-account/types.ts @@ -20,8 +20,7 @@ export enum FundAccountReceiveAccountNameNo { ReceiveAccountName = 'ReceiveAccountName' }; - -export interface ExtensionFundAccountTransferRequestParams { +export interface ExtensionFundAccountTransferRegistParams { mid?: string; bankCode: string; accountNo: string; @@ -30,10 +29,19 @@ export interface ExtensionFundAccountTransferRequestParams { moid: string; depositParameter?: string; }; -export interface ExtensionFundAccountTransferRequestResponse { + +export interface ExtensionFundAccountTransferRegistResponse { status: boolean; }; +export interface ExtensionFundAccountTransferRequestParams { + +} + +export interface ExtensionFundAccountTransferRequestResponse { + +} + export enum FundAccountSearchCl { ACCOUNT_NAME = 'ACCOUNT_NAME', ACCOUNT_NO = 'ACCOUNT_NO' @@ -94,8 +102,7 @@ export interface ExtensionFundAccountTransferExcelResponse { status: boolean; }; export interface ExtensionFundAccountTransferDetailParams { - mid: string; - tid: string; + seq: string; }; export interface ExtensionFundAccountTransferDetailResponse { tid: string; @@ -177,7 +184,7 @@ export interface ExtensionFundAccountResultDetailResponse { requsetDate: string; resultMessage: string; failReason: string; - bankCode: string; + bankName: string; }; export interface ExtensionFundAccountBalanceParams { mid: string; @@ -187,11 +194,11 @@ export interface ExtensionFundAccountBalanceResponse { }; // 입금확인증 다운로드 -export interface ExtensionFundAccountDownloadCertificateParams { +export interface ExtensionFundAccountDownloadReceiptParams { mid: string; tid: string; email: string; }; -export interface ExtensionFundAccountDownloadCertificateResponse { +export interface ExtensionFundAccountDownloadReceiptResponse { status: boolean; }; \ No newline at end of file diff --git a/src/entities/additional-service/model/key-in/types.ts b/src/entities/additional-service/model/key-in/types.ts index bd208f8..5049559 100644 --- a/src/entities/additional-service/model/key-in/types.ts +++ b/src/entities/additional-service/model/key-in/types.ts @@ -22,7 +22,6 @@ export interface KeyInPaymentListProps { additionalServiceCategory: AdditionalServiceCategory; listItems: Array; mid?: string; - setTarget: (element: HTMLElement | null) => void; } export interface KeyInPaymentFilterProps extends FilterProps { diff --git a/src/entities/additional-service/model/link-pay/types.ts b/src/entities/additional-service/model/link-pay/types.ts index d6b2f34..c97b715 100644 --- a/src/entities/additional-service/model/link-pay/types.ts +++ b/src/entities/additional-service/model/link-pay/types.ts @@ -103,14 +103,12 @@ export interface LinkPaymentWaitListItem { export interface LinkPaymentHistoryListProps { additionalServiceCategory: AdditionalServiceCategory; listItems: Array; - setTarget: (element: HTMLElement | null) => void; mid: string; } export interface LinkPaymentWaitListProps { additionalServiceCategory: AdditionalServiceCategory; listItems: Array; - setTarget: (element: HTMLElement | null) => void; mid: string; } diff --git a/src/entities/additional-service/model/sms-payment/types.ts b/src/entities/additional-service/model/sms-payment/types.ts index 7875cd2..51b9dee 100644 --- a/src/entities/additional-service/model/sms-payment/types.ts +++ b/src/entities/additional-service/model/sms-payment/types.ts @@ -25,7 +25,6 @@ export interface SmsPaymentListProps { additionalServiceCategory: AdditionalServiceCategory; mid: string; onResendClick?: (mid: string, tid: string) => void; - setTarget: (element: HTMLElement | null) => void; } export interface SmsPaymentFilterProps extends FilterProps { diff --git a/src/entities/additional-service/model/types.ts b/src/entities/additional-service/model/types.ts index c6ee102..f85753f 100644 --- a/src/entities/additional-service/model/types.ts +++ b/src/entities/additional-service/model/types.ts @@ -167,6 +167,7 @@ export interface ListItemProps extends ArsListContent, AlimtalkListContent, FaceAuthListItem { additionalServiceCategory?: AdditionalServiceCategory; mid?: string; + seq?: string; onResendClick?: (mid: string, tid: string) => void; } diff --git a/src/entities/additional-service/ui/account-holder-auth/account-holder-auth-list.tsx b/src/entities/additional-service/ui/account-holder-auth/account-holder-auth-list.tsx index 031356e..68851b9 100644 --- a/src/entities/additional-service/ui/account-holder-auth/account-holder-auth-list.tsx +++ b/src/entities/additional-service/ui/account-holder-auth/account-holder-auth-list.tsx @@ -1,27 +1,56 @@ import { ListDateGroup } from '../list-date-group'; import { AdditionalServiceCategory } from '../../model/types'; -import { AccountHolderAuthListProps } from '../../model/account-holder-auth/types'; +import { AccountHolderAuthListProps, ExtensionAccountHolderAuthContentItem } from '../../model/account-holder-auth/types'; +import { JSX } from 'react'; export const AccountHolderAuthList = ({ + additionalServiceCategory, listItems, mid }: AccountHolderAuthListProps) => { - const getListDateGroup = () => { - let rs = []; - for (const [key, value] of Object.entries(listItems)) { - rs.push( - - ) + const getListDateGroup = () => { + let rs: JSX.Element[] = []; + let date = ''; + let list: ExtensionAccountHolderAuthContentItem[] = []; + for (let i = 0; i < listItems.length; i++) { + + // sendDate(발송일자) 기준 + let requestDate = listItems[i]?.requestDate || ''; + let itemDate = requestDate.substring(0, 8); + if (i === 0) { + date = itemDate; + } + if (date !== itemDate) { + if (list.length > 0) { + rs.push( + + ); } - return rs; - }; + date = itemDate; + list = []; + } + list.push(listItems[i] as any); + } + if (list.length > 0) { + rs.push( + + ); + } + return rs; + }; return ( <> diff --git a/src/entities/additional-service/ui/account-holder-search/account-holder-search-list.tsx b/src/entities/additional-service/ui/account-holder-search/account-holder-search-list.tsx index 7dab6fc..504cfd9 100644 --- a/src/entities/additional-service/ui/account-holder-search/account-holder-search-list.tsx +++ b/src/entities/additional-service/ui/account-holder-search/account-holder-search-list.tsx @@ -7,8 +7,7 @@ import { JSX } from 'react'; export const AccountHolderSearchList = ({ listItems, - mid, - setTarget + mid }: AccountHolderSearchListProps) => { const { navigate } = useNavigate(); @@ -63,7 +62,6 @@ export const AccountHolderSearchList = ({ <>
{getListDateGroup()} -
@@ -118,46 +137,54 @@ export const AlimtalkFilter = ({
- + + + -
-
diff --git a/src/entities/additional-service/ui/filter/fund-account-trnasaction-filter.tsx b/src/entities/additional-service/ui/filter/fund-account-trnasaction-filter.tsx index 996a588..8fea085 100644 --- a/src/entities/additional-service/ui/filter/fund-account-trnasaction-filter.tsx +++ b/src/entities/additional-service/ui/filter/fund-account-trnasaction-filter.tsx @@ -51,8 +51,8 @@ export const FundAccountTransactionFilter = ({ const [filterMid, setFilterMid] = useState(mid); const [filterSearchCl,setFilterSearchCl] = useState(searchCl); const [filterSearchValue, setFilterSearchValue] = useState(searchValue); - const [filterFromDate, setFilterFromDate] = useState(moment(fromDate).format('YYYY.MM.DD')); - const [filterToDate, setFilterToDate] = useState(moment(toDate).format('YYYY.MM.DD')); + const [filterFromDate, setFilterFromDate] = useState(moment(fromDate).format('YYYYMMDD')); + const [filterToDate, setFilterToDate] = useState(moment(toDate).format('YYYYMMDD')); const [filterBankCode, setFilterBankCode] = useState(bankCode); const [filterStatus, setFilterStatus] = useState(status); const midOptions = useStore.getState().UserStore.selectOptionsMids; diff --git a/src/entities/additional-service/ui/fund-account/result-list-wrap.tsx b/src/entities/additional-service/ui/fund-account/result-list-wrap.tsx index 44718e3..66751a5 100644 --- a/src/entities/additional-service/ui/fund-account/result-list-wrap.tsx +++ b/src/entities/additional-service/ui/fund-account/result-list-wrap.tsx @@ -1,5 +1,5 @@ import moment from 'moment'; -import { SortTypeKeys } from '@/entities/common/model/types'; +import { DefaultRequestPagination, SortTypeKeys } from '@/entities/common/model/types'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { JSX, useEffect, useState } from 'react'; @@ -16,38 +16,17 @@ import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { FundAccountResultStatusBtnGroup, FundAccountStatusBtnGroup } from '../../model/fund-account/constant'; import { FundAccountResultFilter } from '../filter/fund-account-result-filter'; import { useStore } from '@/shared/model/store'; -import useIntersectionObserver from '@/widgets/intersection-observer'; +import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; export const FundAccountResultListWrap = () => { const { navigate } = useNavigate(); - const [onActionIntersect, setOnActionIntersect] = useState(false); - const onIntersect: IntersectionObserverCallback = (entries: Array) => { - entries.forEach((entry: IntersectionObserverEntry) => { - if (entry.isIntersecting) { - console.log('Element is now intersecting with the root. [' + onActionIntersect + ']'); - if (onActionIntersect) { - callList(); - } - } - else { - console.log('Element is no longer intersecting with the root.'); - } - }); - }; - - const { setTarget } = useIntersectionObserver({ - threshold: 1, - onIntersect - }); - const userMid = useStore.getState().UserStore.mid; const [sortType, setSortType] = useState(SortTypeKeys.LATEST); const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); - const [nextCursor, setNextCursor] = useState(null); - const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); + const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); const [searchCl, setSearchCl] = useState(FundAccountSearchCl.ACCOUNT_NAME); @@ -74,49 +53,28 @@ export const FundAccountResultListWrap = () => { const callList = (option?: { sortType?: SortTypeKeys, - resultStatus?: FundAccountResultStatus, - resetPage?: boolean + resultStatus?: FundAccountResultStatus }) => { - setOnActionIntersect(false); - - const currentPageParam = option?.resetPage - ? { ...DEFAULT_PAGE_PARAM, sortType: option?.sortType ?? sortType } - : { ...pageParam, sortType: option?.sortType ?? sortType }; - - setPageParam(currentPageParam); - let listSummaryParams: ExtensionFundAccountResultListParams = { mid: mid, searchCl: searchCl, searchValue: searchValue, searchDateType: searchDateType, - fromDate: '20240901', - toDate: '20250930', + fromDate: fromDate, + toDate: toDate, bankCode: bankCode, resultStatus: option?.resultStatus ?? resultStatus, - ... { - page: currentPageParam - } + page: pageParam }; + if (listSummaryParams.page) { + listSummaryParams.page.sortType = option?.sortType || sortType; + setPageParam(listSummaryParams.page); + } + extensionFundAccountResultList(listSummaryParams).then((rs: any) => { console.log(rs); - // resetPage면 기존 리스트 무시, 아니면 추가 - setListItems(option?.resetPage ? rs.content : [ - ...listItems, - ...rs.content - ]); - if (rs.hasNext) { - setNextCursor(rs.nextCursor); - setPageParam({ - ...currentPageParam, // pageParam이 아니라 currentPageParam 사용 - cursor: rs.nextCursor - }); - setOnActionIntersect(true) - } - else { - setNextCursor(null); - } + setListItems(rs.content); }); }; @@ -159,46 +117,46 @@ export const FundAccountResultListWrap = () => { const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callList({ - sortType: sort, - resetPage: true + sortType: sort }); }; const onClickToStatus = (val: FundAccountResultStatus) => { setResultStatus(val); callList({ - resultStatus: val, - resetPage: true + resultStatus: val }); }; const getListDateGroup = () => { - let rs: JSX.Element[] = []; + let rs = []; let date = ''; - let list: FundAccountResultContentItem[] = []; + 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); - if (i === 0) { - date = itemDate; - } - if (date !== itemDate) { - // 날짜가 바뀌면 이전 리스트를 푸시 (날짜 업데이트 전에!) - if (list.length > 0) { - rs.push( - - ); + let items = listItems[i]; + if (!!items) { + let requestDate = items?.requestDate; + requestDate = requestDate?.substring(0, 8); + if (!!requestDate) { + if (i === 0) { + date = requestDate; + } + if (date !== requestDate) { + date = requestDate; + if (list.length > 0) { + rs.push( + + ); + } + list = []; + } + list.push(items); } - date = itemDate; // 그 다음에 날짜 업데이트 - list = []; } - list.push(listItems[i] as any); } if (list.length > 0) { rs.push( @@ -207,7 +165,7 @@ export const FundAccountResultListWrap = () => { mid={mid} key={date + '-last'} date={date} - items={list as any} + items={list} > ); } @@ -219,8 +177,7 @@ export const FundAccountResultListWrap = () => { }, []); useEffect(() => { - // 필터 조건이 변경되면 첫 페이지부터 다시 시작 - callList({ resetPage: true }); + callList(); }, [ mid, searchCl, @@ -361,7 +318,6 @@ export const FundAccountResultListWrap = () => {
{getListDateGroup()} -
@@ -222,7 +204,6 @@ export const AccountHolderSearchPage = () => { @@ -245,6 +226,14 @@ export const AccountHolderSearchPage = () => { setBank={setBank} setProcessResult={setProcessResult} > + + ); }; \ No newline at end of file diff --git a/src/pages/additional-service/alimtalk/list-page.tsx b/src/pages/additional-service/alimtalk/list-page.tsx index c199dad..d7855ef 100644 --- a/src/pages/additional-service/alimtalk/list-page.tsx +++ b/src/pages/additional-service/alimtalk/list-page.tsx @@ -3,9 +3,9 @@ import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { - useSetHeaderTitle, - useSetHeaderType, - useSetFooterMode, + useSetHeaderTitle, + useSetHeaderType, + useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { JSX, useEffect, useState } from 'react'; @@ -19,7 +19,8 @@ import { ExtensionAlimtalkDownloadExcelParams, ExtensionAlimtalkDownloadExcelResponse, ExtensionAlimtalkListParams, - ExtensionAlimtalkListResponse + ExtensionAlimtalkListResponse, + ServiceCode } from '@/entities/additional-service/model/alimtalk/types'; import moment from 'moment'; import { useExtensionAlimtalkListMutation } from '@/entities/additional-service/api/alimtalk/use-extansion-alimtalk-list-mutation'; @@ -27,47 +28,29 @@ import { useExtensionAlimtalkDownloadExcelMutation } from '@/entities/additional import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { useStore } from '@/shared/model/store'; -import useIntersectionObserver from '@/widgets/intersection-observer'; +import { snackBar } from '@/shared/lib'; +import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; +import { AlimtalkFilter } from '@/entities/additional-service/ui/filter/alimtalk-filter'; export const AlimtalkListPage = () => { const { navigate } = useNavigate(); const userMid = useStore.getState().UserStore.mid; - const [onActionIntersect, setOnActionIntersect] = useState(false); - const onIntersect: IntersectionObserverCallback = (entries: Array) => { - entries.forEach((entry: IntersectionObserverEntry) => { - if (entry.isIntersecting) { - console.log('Element is now intersecting with the root. [' + onActionIntersect + ']'); - if (onActionIntersect) { - callList(); - } - } - else { - console.log('Element is no longer intersecting with the root.'); - } - }); - }; - - const { setTarget } = useIntersectionObserver({ - threshold: 1, - onIntersect - }); - const [sortType, setSortType] = useState(SortTypeKeys.LATEST); const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); - const [nextCursor, setNextCursor] = useState(null); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); const [searchCl, setSearchCl] = useState(AlimtalkSearchCl.BUYER_NAME); - const [searchValue, setSearchValue] = useState(); - const [paymentMethod, setPaymentMethod] = useState(); + const [searchValue, setSearchValue] = useState(''); + const [serviceCode, setServiceCode] = useState(ServiceCode.CARD); const [alimCl, setAlimCl] = useState(AlimtalkAlimCl.DEPOSIT_REQUEST); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [sendType, setSendType] = useState(AlimtalkSendType.ALL); const [sendCl, setSendCl] = useState(AlimTalkSendCl.ALL); + const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); const { mutateAsync: extensionAlimtalkList } = useExtensionAlimtalkListMutation(); const { mutateAsync: extensionAlimtalkDownloadExcel } = useExtensionAlimtalkDownloadExcelMutation(); @@ -79,101 +62,97 @@ export const AlimtalkListPage = () => { }); const callList = (option?: { - sortType?: SortTypeKeys, - resetPage?: boolean - }) => { - setOnActionIntersect(false); - - const currentPageParam = option?.resetPage - ? { ...DEFAULT_PAGE_PARAM, sortType: option?.sortType ?? sortType } - : { ...pageParam, sortType: option?.sortType ?? sortType }; - - setPageParam(currentPageParam); - + sortType?: SortTypeKeys + }) => { let params: ExtensionAlimtalkListParams = { mid: mid, searchCl: searchCl, searchValue: searchValue, - serviceCode: paymentMethod, - fromDate: fromDate, - toDate: toDate, - sendType: sendType, - sendCl: sendCl, - page: currentPageParam - }; - extensionAlimtalkList(params).then((rs: ExtensionAlimtalkListResponse) => { - setListItems(option?.resetPage ? rs.content : [ - ...listItems, - ...rs.content - ]); - if (rs.hasNext) { - setNextCursor(rs.nextCursor); - setPageParam({ - ...currentPageParam, - cursor: rs.nextCursor - }); - setOnActionIntersect(true); - } - else { - setNextCursor(null); - } - }); - }; - - const callDownloadExcel = () => { - let params: ExtensionAlimtalkDownloadExcelParams = { - mid: mid, - searchCl: searchCl, - searchValue: searchValue, - paymentMethod: paymentMethod, + serviceCode: serviceCode, alimCl: alimCl, fromDate: fromDate, toDate: toDate, sendType: sendType, - sendCl: sendCl + sendCl: sendCl, + page: pageParam }; - extensionAlimtalkDownloadExcel(params).then((rs: ExtensionAlimtalkDownloadExcelResponse) => { + if (params.page) { + params.page.sortType = option?.sortType || sortType; + setPageParam(params.page); + } + + extensionAlimtalkList(params).then((rs: ExtensionAlimtalkListResponse) => { + setListItems(rs.content); }); }; + + const onClickToOpenEmailBottomSheet = () => { + setEmailBottomSheetOn(true); + } + + const onSendRequest = (selectedEmail?: string) => { + if (selectedEmail) { + const params: ExtensionAlimtalkDownloadExcelParams = { + mid: mid, + searchCl: searchCl, + searchValue: searchValue, + serviceCode: serviceCode, + alimCl: alimCl, + fromDate: fromDate, + toDate: toDate, + sendType: sendType, + sendCl: sendCl, + //email: selectedEmail + }; + extensionAlimtalkDownloadExcel(params).then((rs: ExtensionAlimtalkDownloadExcelResponse) => { + console.log('Excel Download Status:', rs.status); + }); + }; + setEmailBottomSheetOn(false); + }; + const onClickToNavigate = () => { navigate(PATHS.additionalService.alimtalk.setting); }; - const onClickToDownloadExcel = () => { - callDownloadExcel(); - }; + + const onClickToOpenFilter = () => { setFilterOn(!filterOn); }; const getAlimtalkList = () => { - let rs: JSX.Element[] = []; + let rs = []; let date = ''; - let list: AlimtalkListContent[] = []; + let list = []; for (let i = 0; i < listItems.length; i++) { - // sendDate format: "20211018140420" (YYYYMMDDHHmmss) - let sendDate = listItems[i]?.sendDate || ''; - let itemDate = sendDate.substring(0, 8); - if (i === 0) { - date = itemDate; - } - if (date !== itemDate) { - // 날짜가 바뀌면 이전 리스트를 푸시 - if (list.length > 0) { - rs.push( - - ); + let item = listItems[i]; + if (!!item) { + // sendDate format: "20211018140420" (YYYYMMDDHHmmss) + let sendDate = item?.sendDate || ''; + let itemDate = sendDate.substring(0, 8); + if (!!itemDate) { + if (i === 0) { + date = itemDate; + } + if (date !== itemDate) { + date = itemDate; + if (list.length > 0) { + rs.push( + + ); + } + list = []; + } + list.push(item); } - date = itemDate; - list = []; } - list.push(listItems[i] as any); } if (list.length > 0) { rs.push( @@ -188,15 +167,15 @@ export const AlimtalkListPage = () => { } return rs; } - + useEffect(() => { - // 필터 조건이 변경되면 첫 페이지부터 다시 시작 - callList({ resetPage: true }); + callList(); }, [ mid, searchCl, searchValue, - paymentMethod, + serviceCode, + alimCl, fromDate, toDate, sendType, @@ -211,49 +190,78 @@ export const AlimtalkListPage = () => {
- -
-
- +
- { getAlimtalkList() } -
+ {getAlimtalkList()}
-
+ + + ); }; \ No newline at end of file diff --git a/src/pages/additional-service/ars/list-page.tsx b/src/pages/additional-service/ars/list-page.tsx index 36adde8..d90381b 100644 --- a/src/pages/additional-service/ars/list-page.tsx +++ b/src/pages/additional-service/ars/list-page.tsx @@ -3,9 +3,9 @@ import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { - useSetHeaderTitle, - useSetHeaderType, - useSetFooterMode, + useSetHeaderTitle, + useSetHeaderType, + useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { JSX, useEffect, useState } from 'react'; @@ -20,37 +20,15 @@ import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { ArsPaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant'; import { ArsFilter } from '@/entities/additional-service/ui/filter/ars-filter'; import { useStore } from '@/shared/model/store'; -import useIntersectionObserver from '@/widgets/intersection-observer'; export const ArsListPage = () => { const { navigate } = useNavigate(); - const [onActionIntersect, setOnActionIntersect] = useState(false); - const onIntersect: IntersectionObserverCallback = (entries: Array) => { - entries.forEach((entry: IntersectionObserverEntry) => { - if (entry.isIntersecting) { - console.log('Element is now intersecting with the root. [' + onActionIntersect + ']'); - if (onActionIntersect) { - callList(); - } - } - else { - console.log('Element is no longer intersecting with the root.'); - } - }); - }; - - const { setTarget } = useIntersectionObserver({ - threshold: 1, - onIntersect - }); - const userMid = useStore.getState().UserStore.mid; const [sortType, setSortType] = useState(SortTypeKeys.LATEST); const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); - const [nextCursor, setNextCursor] = useState(null); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); const [moid, setMoid] = useState(''); @@ -63,7 +41,7 @@ export const ArsListPage = () => { const { mutateAsync: extensionArsList } = useExtensionArsListMutation(); const { mutateAsync: extensionArsDownloadExcel } = useExtensionArsDownloadExcelMutation(); - + useSetHeaderTitle('신용카드 ARS 결제'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); @@ -73,17 +51,8 @@ export const ArsListPage = () => { const callList = (option?: { sortType?: SortTypeKeys, - paymentStatus?: PaymentStatus, - resetPage?: boolean + paymentStatus?: PaymentStatus }) => { - setOnActionIntersect(false); - - const currentPageParam = option?.resetPage - ? { ...DEFAULT_PAGE_PARAM, sortType: option?.sortType ?? sortType } - : { ...pageParam, sortType: option?.sortType ?? sortType }; - - setPageParam(currentPageParam); - let params: ExtensionArsListParams = { mid: mid, moid: moid, @@ -93,25 +62,16 @@ export const ArsListPage = () => { orderStatus: orderStatus, minAmount: minAmount, maxAmount: maxAmount, - page: currentPageParam + page: pageParam }; + + if (params.page) { + params.page.sortType = option?.sortType || sortType; + setPageParam(params.page); + } + extensionArsList(params).then((rs: ExtensionArsListResponse) => { - // resetPage면 기존 리스트 무시, 아니면 추가 - setListItems(option?.resetPage ? rs.content : [ - ...listItems, - ...rs.content - ]); - if (rs.hasNext) { - setNextCursor(rs.nextCursor); - setPageParam({ - ...currentPageParam, - cursor: rs.nextCursor - }); - setOnActionIntersect(true) - } - else { - setNextCursor(null); - } + setListItems(rs.content); }); }; @@ -146,21 +106,21 @@ export const ArsListPage = () => { const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callList({ - sortType: sort, - resetPage: true + sortType: sort }); }; const onClickToPaymentStatus = (val: PaymentStatus) => { setPaymentStatus(val); callList({ - paymentStatus: val, - resetPage: true + paymentStatus: val }); }; useEffect(() => { - // 필터 조건이 변경되면 첫 페이지부터 다시 시작 - callList({ resetPage: true }); + callList(); + }, []); + useEffect(() => { + callList(); }, [ mid, moid, @@ -173,33 +133,36 @@ export const ArsListPage = () => { ]); const getListDateGroup = () => { - let rs: JSX.Element[] = []; + let rs = []; let date = ''; - let list: ArsListContent[] = []; + let list = []; for (let i = 0; i < listItems.length; i++) { - // paymentDate format: "20211018140420" (YYYYMMDDHHmmss) - let paymentDate = listItems[i]?.paymentDate || ''; - let itemDate = paymentDate.substring(0, 8); - if (i === 0) { - date = itemDate; - } - if (date !== itemDate) { - // 날짜가 바뀌면 이전 리스트를 푸시 (날짜 업데이트 전에!) - if (list.length > 0) { - rs.push( - - ); + let item = listItems[i]; + if (!!item) { + let paymentDate = item?.paymentDate || ''; + let itemDate = paymentDate.substring(0, 8); + if (!!itemDate) { + if (i === 0) { + date = itemDate; + } + if (date !== itemDate) { + date = itemDate; + if (list.length > 0) { + rs.push( + + ); + } + list = []; + } + list.push(item); } - date = itemDate; // 그 다음에 날짜 업데이트 - list = []; } - list.push(listItems[i] as any); } if (list.length > 0) { rs.push( @@ -223,30 +186,30 @@ export const ArsListPage = () => {
- -
- @@ -255,56 +218,55 @@ export const ArsListPage = () => {
{ ArsPaymentStatusBtnGroup.map((value, index) => ( - onClickToPaymentStatus(value.value) } - >{ value.name } + onClickToPaymentStatus(value.value)} + >{value.name} )) }
- +
- { getListDateGroup() } -
+ {getListDateGroup()}
); diff --git a/src/pages/additional-service/fund-account/result-detail-page.tsx b/src/pages/additional-service/fund-account/result-detail-page.tsx index fc53148..20eb1b9 100644 --- a/src/pages/additional-service/fund-account/result-detail-page.tsx +++ b/src/pages/additional-service/fund-account/result-detail-page.tsx @@ -11,11 +11,14 @@ import { useLocation } from 'react-router'; import { useEffect, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { + ExtensionFundAccountDownloadReceiptParams, + ExtensionFundAccountDownloadReceiptResponse, ExtensionFundAccountResultDetailParams, ExtensionFundAccountResultDetailResponse, } from '@/entities/additional-service/model/fund-account/types'; import moment from 'moment'; import { useExtensionFundAccountResultDetailMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-result-detail-mutation'; +import { useExtensionFundAccountDownloadReceiptMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-download-certificate-mutation'; export const FundAccountResultDetailPage = () => { const { navigate } = useNavigate(); @@ -25,8 +28,10 @@ export const FundAccountResultDetailPage = () => { const mid = location.state.mid; const [detail, setDetail] = useState(); + const [email, setEmail] = useState(''); const { mutateAsync: extensionFundAccountResultDetail } = useExtensionFundAccountResultDetailMutation(); + const { mutateAsync: extensionFundAccountDownlaodReceipt } = useExtensionFundAccountDownloadReceiptMutation(); const callDetail = () => { let params: ExtensionFundAccountResultDetailParams = { @@ -39,6 +44,17 @@ export const FundAccountResultDetailPage = () => { }); }; + const onClickToDownload = () => { + let params: ExtensionFundAccountDownloadReceiptParams = { + mid: mid, + tid: tid, + email: email + }; + extensionFundAccountDownlaodReceipt(params).then((rs: ExtensionFundAccountDownloadReceiptResponse) => { + console.log(rs); + }); + }; + useSetHeaderTitle('자금이체 상세'); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); @@ -72,7 +88,11 @@ export const FundAccountResultDetailPage = () => { {/* ✅ resultMessage가 "정상"일 때만 표시 */} {detail?.resultMessage === '정상' && (
- @@ -104,7 +124,7 @@ export const FundAccountResultDetailPage = () => {
  • 은행 - {detail?.bankCode} + {detail?.bankName}
  • 계좌번호 diff --git a/src/pages/additional-service/fund-account/transfer-detail-page.tsx b/src/pages/additional-service/fund-account/transfer-detail-page.tsx index dd66d53..ea1546c 100644 --- a/src/pages/additional-service/fund-account/transfer-detail-page.tsx +++ b/src/pages/additional-service/fund-account/transfer-detail-page.tsx @@ -11,27 +11,25 @@ import { useLocation } from 'react-router'; import { useEffect, useState } from 'react'; import { NumericFormat } from 'react-number-format'; import { useExtensionFundAccountTransferDetailMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-detail-mutation'; -import { ExtensionFundAccountTransferDetailParams, ExtensionFundAccountTransferDetailResponse, ExtensionFundAccountTransferRequestParams, ExtensionFundAccountTransferRequestResponse, FundAccountStatus } from '@/entities/additional-service/model/fund-account/types'; +import { ExtensionFundAccountTransferDetailParams, ExtensionFundAccountTransferDetailResponse, ExtensionFundAccountTransferRegistParams, ExtensionFundAccountTransferRequestResponse, FundAccountStatus } from '@/entities/additional-service/model/fund-account/types'; import { getFundAccountStatusName } from '@/entities/additional-service/model/fund-account/constant'; import moment from 'moment'; -import { useExtensionFundAccountTransferRequestMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-request-mutation'; +import { useExtensionFundAccountTransferRegistMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-regist-mutation'; export const FundAccountTransferDetailPage = () => { const { navigate } = useNavigate(); const location = useLocation(); - const tid = location.state.tid; - const mid = location.state.mid; + const seq = location.state.seq; const [detail, setDetail] = useState(); const { mutateAsync: extensionFundAccountTransferDetail } = useExtensionFundAccountTransferDetailMutation(); - const { mutateAsync: extensionFundAccountTransferRequest } = useExtensionFundAccountTransferRequestMutation(); + const { mutateAsync: extensionFundAccountTransferRequest } = useExtensionFundAccountTransferRegistMutation(); const callDetail = () => { let params: ExtensionFundAccountTransferDetailParams = { - tid: tid, - mid: mid, + seq: seq }; extensionFundAccountTransferDetail(params).then((rs: ExtensionFundAccountTransferDetailResponse) => { @@ -50,26 +48,26 @@ export const FundAccountTransferDetailPage = () => { callDetail(); }, []); - const onClickToRequest = () => { - if (!detail) { - alert('상세 정보를 불러오는 중입니다.'); - return; - } + // const onClickToRequest = () => { + // if (!detail) { + // alert('상세 정보를 불러오는 중입니다.'); + // return; + // } - let params: ExtensionFundAccountTransferRequestParams = { - mid: mid, - bankCode: detail.bankCode || '', - accountNo: detail.accountNo || '', - accountName: detail.accountName || '', - amount: detail.amount || 0, - moid: detail.moid || '' - }; - extensionFundAccountTransferRequest(params).then((rs: ExtensionFundAccountTransferRequestResponse) => { - console.log(rs) - alert(rs.status ? '이체 요청이 완료되었습니다.' : '이체 요청에 실패했습니다.'); - navigate(PATHS.additionalService.fundAccount.transferList); - }); - }; + // let params: ExtensionFundAccountTransferRegistParams = { + // mid: mid, + // bankCode: detail.bankCode || '', + // accountNo: detail.accountNo || '', + // accountName: detail.accountName || '', + // amount: detail.amount || 0, + // moid: detail.moid || '' + // }; + // extensionFundAccountTransferRequest(params).then((rs: ExtensionFundAccountTransferRequestResponse) => { + // console.log(rs) + // alert(rs.status ? '이체 요청이 완료되었습니다.' : '이체 요청에 실패했습니다.'); + // navigate(PATHS.additionalService.fundAccount.transferList); + // }); + // }; return ( <> @@ -138,7 +136,7 @@ export const FundAccountTransferDetailPage = () => {
    diff --git a/src/pages/additional-service/fund-account/transfer-request-page.tsx b/src/pages/additional-service/fund-account/transfer-request-page.tsx index 2858648..a7d12f6 100644 --- a/src/pages/additional-service/fund-account/transfer-request-page.tsx +++ b/src/pages/additional-service/fund-account/transfer-request-page.tsx @@ -7,15 +7,15 @@ import { useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; -import { ChangeEvent, useEffect, useState } from 'react'; -import { useExtensionFundAccountTransferRequestMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-request-mutation'; -import { ExtensionFundAccountTransferRequestParams, ExtensionFundAccountTransferRequestResponse } from '@/entities/additional-service/model/fund-account/types'; +import { ChangeEvent, useState } from 'react'; +import { ExtensionFundAccountTransferRegistParams, ExtensionFundAccountTransferRegistResponse } from '@/entities/additional-service/model/fund-account/types'; import { useStore } from '@/shared/model/store'; +import { snackBar } from '@/shared/lib'; +import { useExtensionFundAccountTransferRegistMutation } from '@/entities/additional-service/api/fund-account/use-extension-fund-account-transfer-regist-mutation'; export const FundAccountTransferRequestPage = () => { const { navigate } = useNavigate(); - const midOptions = useStore.getState().UserStore.selectOptionsMids; const userMid = useStore.getState().UserStore.mid; @@ -27,7 +27,7 @@ export const FundAccountTransferRequestPage = () => { const [moid, setMoid] = useState(''); const [depositParameter, setDepositParameter] = useState(''); - const { mutateAsync: extensionFundAccountRequest } = useExtensionFundAccountTransferRequestMutation(); + const { mutateAsync: extensionFundAccountRegist } = useExtensionFundAccountTransferRegistMutation(); useSetHeaderTitle('자금이체 이체등록'); useSetHeaderType(HeaderType.RightClose); @@ -36,8 +36,17 @@ export const FundAccountTransferRequestPage = () => { navigate(PATHS.additionalService.fundAccount.transferList); }); - const callExtensionFundAccountTransferRequest = () => { - let params: ExtensionFundAccountTransferRequestParams = { + const resetForm = () => { + setBankCode(''); + setAccountNo(''); + setAccountName(''); + setAmount(0); + setMoid(''); + setDepositParameter(''); + }; + + const callExtensionFundAccountTransferRegist = () => { + let params: ExtensionFundAccountTransferRegistParams = { mid: mid, bankCode: bankCode, accountNo: accountNo, @@ -46,8 +55,13 @@ export const FundAccountTransferRequestPage = () => { moid: moid, depositParameter: depositParameter }; - extensionFundAccountRequest(params).then((rs: ExtensionFundAccountTransferRequestResponse) => { - navigate(PATHS.additionalService.payout.list); + extensionFundAccountRegist(params).then((rs: ExtensionFundAccountTransferRegistResponse) => { + if (rs.status) { + snackBar("이체등록을 성공하였습니다.") + resetForm(); + } else { + snackBar("이체등록이 실패하였습니다.") + } }); }; @@ -72,10 +86,7 @@ export const FundAccountTransferRequestPage = () => {
    가맹점*
    - setMid(e.target.value)}> { midOptions.map((value, index) => (
    diff --git a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx index 7574cda..1bf080b 100644 --- a/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx +++ b/src/pages/additional-service/link-payment/separate-approval/link-payment-separate-approval-page.tsx @@ -256,7 +256,12 @@ export const LinkPaymentSeparateApprovalPage = () => {
  • • 유효기간: - {item.paymentLimitDate} + + {item.paymentLimitDate + ? moment(item.paymentLimitDate, 'YYYYMMDD').format('YYYY/MM/DD') + : '-' + } +
  • • 연장횟수: @@ -272,13 +277,11 @@ export const LinkPaymentSeparateApprovalPage = () => { onChange={(e) => handleExtendPeriodChange(itemId, e.target.value)} > - - - - - - - + {[1, 2, 3, 4, 5, 6, 7].map(days => { + const baseDate = moment(item.paymentLimitDate, 'YYYYMMDD'); + const targetDate = baseDate.clone().add(days, 'days').format('YYYY/MM/DD'); + return ; + })}
  • diff --git a/src/pages/additional-service/payout/list-page.tsx b/src/pages/additional-service/payout/list-page.tsx index b4fe353..5f6f5a2 100644 --- a/src/pages/additional-service/payout/list-page.tsx +++ b/src/pages/additional-service/payout/list-page.tsx @@ -28,36 +28,14 @@ import { PayoutDisbursementStatusBtnGroup } from '@/entities/additional-service/ import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { useStore } from '@/shared/model/store'; -import useIntersectionObserver from '@/widgets/intersection-observer'; export const PayoutListPage = () => { const { navigate } = useNavigate(); const userMid = useStore.getState().UserStore.mid; - const [onActionIntersect, setOnActionIntersect] = useState(false); - const onIntersect: IntersectionObserverCallback = (entries: Array) => { - entries.forEach((entry: IntersectionObserverEntry) => { - if (entry.isIntersecting) { - console.log('Element is now intersecting with the root. [' + onActionIntersect + ']'); - if (onActionIntersect) { - callExtensionPayoutList(); - } - } - else { - console.log('Element is no longer intersecting with the root.'); - } - }); - }; - - const { setTarget } = useIntersectionObserver({ - threshold: 1, - onIntersect - }); - const [sortType, setSortType] = useState(SortTypeKeys.LATEST); const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); - const [nextCursor, setNextCursor] = useState(null); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); const [searchDateType, setSearchDateType] = useState(PayoutSearchDateType.REQUEST_DATE); @@ -83,17 +61,8 @@ export const PayoutListPage = () => { const callExtensionPayoutList = (option?: { sortType?: SortTypeKeys, - status?: PayoutDisbursementStatus, - resetPage?: boolean + status?: PayoutDisbursementStatus }) => { - setOnActionIntersect(false); - - const currentPageParam = option?.resetPage - ? { ...DEFAULT_PAGE_PARAM, sortType: option?.sortType ?? sortType } - : { ...pageParam, sortType: option?.sortType ?? sortType }; - - setPageParam(currentPageParam); - let newMinAmount = minAmount; if(!!minAmount && typeof(minAmount) === 'string'){ newMinAmount = parseInt(minAmount); @@ -110,25 +79,16 @@ export const PayoutListPage = () => { status: option?.status ?? status, minAmount: newMinAmount, maxAmount: newMaxAmount, - page: currentPageParam + page: pageParam }; + + if(params.page){ + params.page.sortType = option?.sortType || sortType; + setPageParam(params.page); + } + extensionPayoutList(params).then((rs: ExtensionPayoutListResponse) => { - // resetPage면 기존 리스트 무시, 아니면 추가 - setListItems(option?.resetPage ? rs.content : [ - ...listItems, - ...rs.content - ]); - if (rs.hasNext) { - setNextCursor(rs.nextCursor); - setPageParam({ - ...currentPageParam, - cursor: rs.nextCursor - }); - setOnActionIntersect(true) - } - else { - setNextCursor(null); - } + setListItems(rs.content); }); }; @@ -156,21 +116,18 @@ export const PayoutListPage = () => { const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); callExtensionPayoutList({ - sortType: sort, - resetPage: true + sortType: sort }); }; const onClickToDisbursementStatus = (val: PayoutDisbursementStatus) => { setStatus(val); callExtensionPayoutList({ - status: val, - resetPage: true + status: val }); }; useEffect(() => { - // 필터 조건이 변경되면 첫 페이지부터 다시 시작 - callExtensionPayoutList({ resetPage: true }); + callExtensionPayoutList(); }, [ mid, searchDateType, @@ -298,7 +255,6 @@ export const PayoutListPage = () => {
    { getListDateGroup() } -
    diff --git a/src/shared/api/api-url-additional-service.ts b/src/shared/api/api-url-additional-service.ts index 3f61148..a59876f 100644 --- a/src/shared/api/api-url-additional-service.ts +++ b/src/shared/api/api-url-additional-service.ts @@ -173,6 +173,10 @@ export const API_URL_ADDITIONAL_SERVICE = { }, // Fund Account Management 부가서비스 > 자금이체 API + extensionFundAccountTransferRegist: () => { + // POST: 자금이체 > 이체등록 + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/fund-account/transfer/regist` + }, extensionFundAccountTransferRequest: () => { // POST: 자금이체 > 이체신청 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/fund-account/transfer/request`; diff --git a/src/shared/ui/assets/css/style-fix.css b/src/shared/ui/assets/css/style-fix.css index 4899f27..d5ec029 100644 --- a/src/shared/ui/assets/css/style-fix.css +++ b/src/shared/ui/assets/css/style-fix.css @@ -176,16 +176,22 @@ main.home-main{ } .approval-cards-wrapper { + display: flex; + flex-direction: column; gap: 16px; + padding: 16px; padding-bottom: 2px; } .separate-approval-main .apply-row.two-button { + display: flex; + gap: 8px; flex-shrink: 0; position: sticky; bottom: 0; background: white; z-index: 10; + padding: 16px; } /* 분할승인 안내 박스 */ @@ -215,13 +221,15 @@ main.home-main{ border: 2px solid var(--color-d6d6d6); border-radius: 16px; padding: 16px; - margin-bottom: 16px; - transition: all 0.4s ease; + margin-bottom: 0; + transition: all 0.3s ease; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .approval-card.selected { border-color: var(--color-3E6AFC); background: var(--color-F4F8FF); + box-shadow: 0 4px 12px rgba(62, 106, 252, 0.2); } .approval-card .card-checkbox { @@ -270,6 +278,8 @@ main.home-main{ /* 분할승인 카드 헤더 */ .approval-card .card-header { + display: flex; + align-items: center; gap: 8px; margin-bottom: 16px; padding-bottom: 12px; @@ -309,6 +319,8 @@ main.home-main{ } .approval-card .info-list { + display: flex; + flex-direction: column; list-style: none; padding: 0; margin: 0; @@ -316,6 +328,7 @@ main.home-main{ } .approval-card .info-list li { + display: flex; align-items: center; font-size: var(--fs-14); color: var(--color-2D3436); @@ -351,6 +364,7 @@ main.home-main{ } .approval-card .period-selector select { + flex: 1; height: 36px; font-size: var(--fs-14); padding: 6px 30px 6px 12px; @@ -358,6 +372,7 @@ main.home-main{ border-radius: 4px; background-color: var(--color-white); transition: all 0.2s ease; + cursor: pointer; } /* Scrollbar hide utility class */