diff --git a/src/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-deatil-mutation.ts b/src/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-deatil-mutation.ts index c72e801..4b2c2f7 100644 --- a/src/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-deatil-mutation.ts +++ b/src/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-deatil-mutation.ts @@ -13,35 +13,14 @@ import { } from '@tanstack/react-query'; import { ExtensionAccountHolderAuthDetailParams, ExtensionAccountHolderAuthDetailResponse } from '../../model/account-holder-auth/types'; -export const extensionAccountHolderAuthDetail = async (params: ExtensionAccountHolderAuthDetailParams): Promise => { - const response = await resultify( - axios.post(API_URL_ADDITIONAL_SERVICE.extensionAccountHolderAuthDetail(), params), - ); - - const detailResponse: DetailResponse = { - titleInfo: { - accountName: response.accountName, - accountNo: response.accountNo, - scheduledSendDate: response.requestDate //추후 발송예정일자로 수정 - } as TitleInfo, - detailInfo: { - companyName: response.companyName, - mid: response.mid, - requestDate: response.requestDate, - bankName: response.bankName, - accountNo: response.accountNo, - accountName: response.accountName, - transferStatus: response.transferStatus, - failureReason: response.failReason, - } as DetailInfo - - }; - - return detailResponse; +export const extensionAccountHolderAuthDetail = async (params: ExtensionAccountHolderAuthDetailParams): Promise => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionAccountHolderAuthDetail(), params), + ); }; -export const useExtensionAccountHolderAuthDetailMutation = (options?: UseMutationOptions) => { - const mutation = useMutation({ +export const useExtensionAccountHolderAuthDetailMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ ...options, mutationFn: (params: ExtensionAccountHolderAuthDetailParams) => extensionAccountHolderAuthDetail(params), }); diff --git a/src/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation.ts b/src/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation.ts index 5cde56e..34fc066 100644 --- a/src/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation.ts +++ b/src/entities/additional-service/api/account-holder-search/use-extension-account-holder-search-detail-mutation.ts @@ -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 => { - const response = await resultify( - axios.post(API_URL_ADDITIONAL_SERVICE.extensionAccountHolderSearchDetail(), params), +export const extensionAccountHolderSearchDetail = (params: ExtensionAccountHolderSearchDetailParams) => { + return resultify( + axios.post(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) => { - const mutation = useMutation({ +export const useExtensionAccountHolderSearchDetailtMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ ...options, mutationFn: (params: ExtensionAccountHolderSearchDetailParams) => extensionAccountHolderSearchDetail(params), }); + return { ...mutation, }; -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/entities/additional-service/api/face-auth/use-extension-face-auth-detail-mutation.ts b/src/entities/additional-service/api/face-auth/use-extension-face-auth-detail-mutation.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/entities/additional-service/api/face-auth/use-extension-face-auth-download-excel-mutation.ts b/src/entities/additional-service/api/face-auth/use-extension-face-auth-download-excel-mutation.ts new file mode 100644 index 0000000..bf3be16 --- /dev/null +++ b/src/entities/additional-service/api/face-auth/use-extension-face-auth-download-excel-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 { + ExtensionFaceAuthExcelDownlaodPrams, + ExtensionFaceAuthExcelDownlaodResponse +} from '../../model/face-auth/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const extensionFaceAuthDownloadExcel = (params: ExtensionFaceAuthExcelDownlaodPrams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionFaceAuthExcelDownload(), params), + ); +}; + +export const useExtensionFaceAuthDownloadExcelMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionFaceAuthExcelDownlaodPrams) => extensionFaceAuthDownloadExcel(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/additional-service/api/face-auth/use-extension-face-auth-list-mutation.ts b/src/entities/additional-service/api/face-auth/use-extension-face-auth-list-mutation.ts new file mode 100644 index 0000000..48a76c6 --- /dev/null +++ b/src/entities/additional-service/api/face-auth/use-extension-face-auth-list-mutation.ts @@ -0,0 +1,26 @@ +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 { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; +import { ExtensionFaceAuthListParams, ExtensionFaceAuthListResponse } from '../../model/face-auth/types'; + +export const extensionFaceAuthList = (params: ExtensionFaceAuthListParams) => { + return resultify( + axios.post(API_URL_ADDITIONAL_SERVICE.extensionFaceAuthList(), params), + ); +}; + +export const useExtensionFaceAuthListtMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: ExtensionFaceAuthListParams) => extensionFaceAuthList(params), + }); + + return { + ...mutation, + }; +}; \ No newline at end of file diff --git a/src/entities/additional-service/model/account-holder-auth/constant.ts b/src/entities/additional-service/model/account-holder-auth/constant.ts index f79c9cc..bd963c1 100644 --- a/src/entities/additional-service/model/account-holder-auth/constant.ts +++ b/src/entities/additional-service/model/account-holder-auth/constant.ts @@ -1,8 +1,32 @@ -import { AuthAndTransferStatus } from "./types"; +import { AccountHolderAuthStatus } from "./types"; export const authStatusBtnGroup = [ - { name: '전체', value: AuthAndTransferStatus.ALL }, - { name: '요청', value: AuthAndTransferStatus.REQUEST}, - { name: '성공', value: AuthAndTransferStatus.SUCCESS}, - { name: '실패', value: AuthAndTransferStatus.FAIL} -] \ No newline at end of file + { name: '전체', value: AccountHolderAuthStatus.ALL }, + { name: '요청', value: AccountHolderAuthStatus.REQUEST}, + { name: '성공', value: AccountHolderAuthStatus.SUCCESS}, + { name: '실패', value: AccountHolderAuthStatus.FAIL} +] + +export const getAuthStatusText = (status?: string): string => { + if (!status) return ''; + + const AuthStatusMap: Record = { + 'REQUEST' : '요청', + 'SUCCESS' : '성공', + 'FAIL' : '실패' + } + + return AuthStatusMap[status] || status; +} + +export const getAuthResultText = (status?: string): string => { + if (!status) return ''; + + const AuthResultMap: Record = { + 'MATCHED' : '예금주명 일치', + 'NOT_MATCHED' : '예금주명 불일치', + 'FAILED' : '인증실패 (계좌 오류 등)' + } + + return AuthResultMap[status] || status; +} \ No newline at end of file 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 c3019ef..c2bcb56 100644 --- a/src/entities/additional-service/model/account-holder-auth/types.ts +++ b/src/entities/additional-service/model/account-holder-auth/types.ts @@ -2,20 +2,26 @@ import { DefaulResponsePagination, DefaultRequestPagination } from "@/entities/c import { AdditionalServiceCategory, ExtensionRequestParams, FilterProps, ListItemProps } from "../types"; // 계좌 점유 조회 관련 타입들 -export enum AuthAndTransferStatus { +export enum AccountHolderAuthStatus { ALL = "", REQUEST = "REQUEST", SUCCESS = "SUCCESS", FAIL = "FAIL" } +export enum AccountHolderAuthResult { + MATCHED = "MATCHED", + NOT_MATCHED = "NOT_MATCHED", + FAILED = "FAILED" +} + export interface AccountHolderAuthListItem { tid?: string; accountName?: string; accountNo?: string; requestDate?: string; bankName?: string; - transferStatus?: AuthAndTransferStatus; + authStatus?: AccountHolderAuthStatus; } export interface AccountHolderAuthListProps { additionalServiceCategory: AdditionalServiceCategory; @@ -26,11 +32,11 @@ export interface AccountHolderAuthFilterProps extends FilterProps { mid: string; startDate: string; endDate: string; - authStatus: AuthAndTransferStatus; + authStatus: AccountHolderAuthStatus; setMid: (mid: string) => void; setStartDate: (startDate: string) => void; setEndDate: (endDate: string) => void; - setAuthStatus: (authStatus: AuthAndTransferStatus) => void; + setAuthStatus: (authStatus: AccountHolderAuthStatus) => void; } // 계좌 점유 인증 확장 서비스 @@ -53,14 +59,14 @@ export interface ExtensionAccountHolderAuthContentItem { accountNo?: string; requestDate?: string; bankName?: string; - authStatus?: AuthAndTransferStatus; + authStatus?: AccountHolderAuthStatus; } export interface ExtensionAccountHolderAuthDownloadExcelParams extends ExtensionRequestParams { mid: string; fromDate: string; toDate: string; - authStatus: AuthAndTransferStatus; + authStatus: AccountHolderAuthStatus; } export interface ExtensionAccountHolderAuthDownloadExcelResponse { @@ -79,6 +85,8 @@ export interface ExtensionAccountHolderAuthDetailResponse { requestDate: string; companyName: string; bankName: string; - transferStatus: AuthAndTransferStatus; - failReason: string; + authStatus: AccountHolderAuthStatus; + authResult: AccountHolderAuthResult; + authAmount: number; + requestName: string; } \ No newline at end of file diff --git a/src/entities/additional-service/model/account-holder-search/constant.ts b/src/entities/additional-service/model/account-holder-search/constant.ts index c9aaf31..2e4c67f 100644 --- a/src/entities/additional-service/model/account-holder-search/constant.ts +++ b/src/entities/additional-service/model/account-holder-search/constant.ts @@ -1,9 +1,25 @@ import { ProcessResult } from "../types"; -import { AccountHolderResultStatus } from "./types"; +import { AccountHolderResultStatus, AccountHolderSearchCl } from "./types"; export const resultStatusBtnGroup = [ { name: '전체', value: AccountHolderResultStatus.ALL }, { name: '성공', value: AccountHolderResultStatus.SUCCESS }, { name: '실패', value: AccountHolderResultStatus.FAIL }, -] \ No newline at end of file +] + +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 = { + 'SUCCESS': '성공', + 'FAIL': '실패' + }; + return resultStatusMap[status] || status; +} \ No newline at end of file diff --git a/src/entities/additional-service/model/face-auth/constant.ts b/src/entities/additional-service/model/face-auth/constant.ts index b998593..b80f192 100644 --- a/src/entities/additional-service/model/face-auth/constant.ts +++ b/src/entities/additional-service/model/face-auth/constant.ts @@ -1,9 +1,36 @@ -import { ProcessResult } from "../types"; +import { FaceAuthResult, FaceAuthTransType } from "./types"; + +export const AuthResultBtnGroup = [ + { name: '전체', value: FaceAuthResult.ALL }, + { name: '성공', value: FaceAuthResult.SUCCESS }, + { name: '실패', value: FaceAuthResult.FAIL }, +]; + +export const TransactionTypeBtnGroup = [ + { name: '전체', value: FaceAuthTransType.ALL }, + { name: '인증', value: FaceAuthTransType.AUTH }, + { name: '등록', value: FaceAuthTransType.REGISTER }, +]; +export const getAuthResultStatusText = (status?: string): string => { + if (!status) return ''; -export const ResultStatusBtnGroup = [ - { name: '전체', value: ProcessResult.ALL }, - { name: '성공', value: ProcessResult.SUCCESS }, - { name: '실패', value: ProcessResult.FAIL }, -]; \ No newline at end of file + const authResultMap: Record = { + 'SUCCESS': '성공', + 'FAIL': '실패' + } + + return authResultMap[status] || status; +} + +export const getTransTypeText = (transType?: string): string => { + if (!transType) return ''; + + const transTypeMap: Record = { + 'REGISTER': '등록', + 'AUTH': '인증' + } + + return transTypeMap[transType] || transType; +} \ No newline at end of file diff --git a/src/entities/additional-service/model/face-auth/types.ts b/src/entities/additional-service/model/face-auth/types.ts index 7c359a0..5bc2007 100644 --- a/src/entities/additional-service/model/face-auth/types.ts +++ b/src/entities/additional-service/model/face-auth/types.ts @@ -3,19 +3,32 @@ // 안면인증 관련 타입들 // ======================================== -import { FilterProps, ListItemProps, ProcessResult } from "../types"; +import { DefaulResponsePagination, DefaultRequestPagination } from "@/entities/common/model/types"; +import { ExtensionRequestParams, FilterProps, ListItemProps, ProcessResult } from "../types"; -export enum FaceAuthTransactionType { - ALL = "ALL", - AUTH = "AUTH", - REGISTER = "REGISTER" +export enum FaceAuthTransType { + ALL = "", + REGISTER = "REGISTER", + AUTH = "AUTH" +} + +export enum FaceAuthResult { + ALL = "", + SUCCESS = "SUCCESS", + FAIL = "FAIL" } export interface FaceAuthListItem { - tid?: string; + companyName?: string; + mid?: string; + groupId?: string; requestDate?: string; - resultStatus?: string; - name?: string; + requestTime?: string; + cpid?: string; + userMallId?: string; + transType?: FaceAuthTransType; + authResult?: string; + failReason?: string; } export interface FaceAuthListProps { @@ -25,15 +38,39 @@ export interface FaceAuthListProps { export interface FaceAuthFilterProps extends FilterProps { mid: string; - memberId: string; - startDate: string; - endDate: string; - transactionType: FaceAuthTransactionType; - processResult: ProcessResult; + userMallId: string; + fromDate: string; + toDate: string; + transType: FaceAuthTransType; + authResult: FaceAuthResult; setMid: (mid: string) => void; - setMemberId: (memberId: string) => void; - setStartDate: (startDate: string) => void; - setEndDate: (endDate: string) => void; - setTransactionType: (transactionType: FaceAuthTransactionType) => void; - setProcessResult: (processResult: ProcessResult) => void; + setUserMallId: (userMallId: string) => void; + setFromDate: (fromDate: string) => void; + setToDate: (toDate: string) => void; + setTransType: (transType: FaceAuthTransType) => void; + setAuthResult: (authResult: FaceAuthResult) => void; +} + +export interface ExtensionFaceAuthListParams extends ExtensionRequestParams { + fromDate: string; + toDate: string; + userMallId: string; + transType: FaceAuthTransType; + authResult: string; + page?: DefaultRequestPagination +} + +export interface ExtensionFaceAuthListResponse extends DefaulResponsePagination { + content: Array +} + +export interface ExtensionFaceAuthExcelDownlaodPrams { + mid: string; + email: string; + fromDate: string; + toDate: string; +} + +export interface ExtensionFaceAuthExcelDownlaodResponse { + status : boolean; } \ No newline at end of file diff --git a/src/entities/additional-service/model/types.ts b/src/entities/additional-service/model/types.ts index f85753f..a90dede 100644 --- a/src/entities/additional-service/model/types.ts +++ b/src/entities/additional-service/model/types.ts @@ -8,7 +8,7 @@ import type { ExtensionSmsDetailResponse } from './sms-payment/types'; import { FaceAuthListItem } from './face-auth/types'; import { AccountHolderSearchListItem } from './account-holder-search/types'; import { KeyInPaymentListItem } from './key-in/types'; -import { AccountHolderAuthListItem, AuthAndTransferStatus } from './account-holder-auth/types'; +import { AccountHolderAuthListItem, AccountHolderAuthStatus } from './account-holder-auth/types'; import { LinkContentType, LinkPaymentHistoryListItem, LinkPaymentSendMethod, LinkPaymentWaitListItem } from './link-pay/types'; // ======================================== @@ -56,6 +56,7 @@ export interface TitleInfo { corpName?: string, accountNo?: string, accountName?: string, + authDate?: string, bankName?: string, requestDate?: string, sendDate?: string, @@ -66,10 +67,13 @@ export interface DetailInfo { accountName?: string; // 예금주 requestDate?: string; // 조회 일시 resultStatus?: string; // 결과 + authDate?: string; bankName?: string; // 은행 명 failureReason?: string; // 실패사유 accountNo?: string; // 계좌번호 requestWay?: string; //요청 구분 + authStatus?: string; + authResult?: string; mid?: string; companyName?: string; @@ -77,7 +81,7 @@ export interface DetailInfo { phoneNumber: string; goodsName: string; moid: string; - transferStatus: AuthAndTransferStatus; + transferStatus: AccountHolderAuthStatus; } 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 68851b9..7166e99 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 @@ -4,59 +4,62 @@ import { AccountHolderAuthListProps, ExtensionAccountHolderAuthContentItem } fro import { JSX } from 'react'; export const AccountHolderAuthList = ({ - additionalServiceCategory, - listItems, - mid + additionalServiceCategory, + listItems, + mid }: AccountHolderAuthListProps) => { const getListDateGroup = () => { - let rs: JSX.Element[] = []; + let rs = []; let date = ''; - let list: ExtensionAccountHolderAuthContentItem[] = []; + let list = []; 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( - - ); + 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) { + + if (list.length > 0) { + rs.push( + + ); + } + date = requestDate; + list = []; + } + list.push(items); } - date = itemDate; - list = []; } - list.push(listItems[i] as any); } if (list.length > 0) { rs.push( - ); + ) } return rs; }; - return ( - <> -
- {getListDateGroup()} -
- - ) + return ( + <> +
+ {getListDateGroup()} +
+ + ) } \ No newline at end of file diff --git a/src/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter.tsx b/src/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter.tsx index 2278df7..e0a63ec 100644 --- a/src/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter.tsx +++ b/src/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter.tsx @@ -8,7 +8,7 @@ import { FilterButtonGroups } from '@/shared/ui/filter/button-groups'; import { authStatusBtnGroup } from '@/entities/additional-service/model/account-holder-auth/constant'; import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant'; import { useStore } from '@/shared/model/store'; -import { AccountHolderAuthFilterProps, AuthAndTransferStatus } from '@/entities/additional-service/model/account-holder-auth/types'; +import { AccountHolderAuthFilterProps, AccountHolderAuthStatus } from '@/entities/additional-service/model/account-holder-auth/types'; export const AccountHolderAuthFilter = ({ filterOn, @@ -26,7 +26,7 @@ export const AccountHolderAuthFilter = ({ const [filterMid, setFilterMid] = useState(mid); const [filterStartDate, setFilterStartDate] = useState(moment(startDate).format('YYYY.MM.DD')); const [filterEndDate, setFilterEndDate] = useState(moment(endDate).format('YYYY.MM.DD')); - const [filterAuthStatus, setFilterAuthStatus] = useState(authStatus); + const [filterAuthStatus, setFilterAuthStatus] = useState(authStatus); const midOptions = useStore.getState().UserStore.selectOptionsMids; 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 504cfd9..c57da14 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 @@ -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); - 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) { + if (list.length > 0) { + rs.push( + + ); + } + date = requestDate; + list = []; + } + list.push(items); } - date = itemDate; // 그 다음에 날짜 업데이트 - list = []; } - list.push(listItems[i] as any); } 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} > ); } return rs; }; + const onClickToNavigate = () => { navigate(PATHS.additionalService.accountHolderSearch.request) }; diff --git a/src/entities/additional-service/ui/account-holder-search/filter/account-holder-search-filter.tsx b/src/entities/additional-service/ui/account-holder-search/filter/account-holder-search-filter.tsx index d189883..b77d5de 100644 --- a/src/entities/additional-service/ui/account-holder-search/filter/account-holder-search-filter.tsx +++ b/src/entities/additional-service/ui/account-holder-search/filter/account-holder-search-filter.tsx @@ -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,15 +43,15 @@ export const AccountHolderSearchFilter = ({ const [filterResultStatus, setFilterResultStatus] = useState(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); }; - const setNewDate = (newDate: any) => { - console.log(newDate) - }; - const onClickToSetFilter = () => { setMid(filterMid); setSearchType(filterSearchType); @@ -61,22 +62,6 @@ export const AccountHolderSearchFilter = ({ setResultStatus(filterResultStatus); 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,17 +69,17 @@ 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} >
필터
diff --git a/src/entities/additional-service/ui/face-auth/filter/face-auth-filter.tsx b/src/entities/additional-service/ui/face-auth/filter/face-auth-filter.tsx index 59a8fbc..b3a2bf7 100644 --- a/src/entities/additional-service/ui/face-auth/filter/face-auth-filter.tsx +++ b/src/entities/additional-service/ui/face-auth/filter/face-auth-filter.tsx @@ -1,7 +1,7 @@ import moment from 'moment'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { motion } from 'framer-motion'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import {ProcessResult} from '../../../model/types'; import { FilterSelect } from '@/shared/ui/filter/select'; import { FilterInput } from '@/shared/ui/filter/input'; @@ -9,60 +9,53 @@ import { FilterCalendar } from '@/shared/ui/filter/calendar'; import { FilterButtonGroups } from '@/shared/ui/filter/button-groups'; import { FilterMotionDuration, FilterMotionStyle, FilterMotionVariants } from '@/entities/common/model/constant'; import { useStore } from '@/shared/model/store'; -import { FaceAuthFilterProps, FaceAuthTransactionType } from '@/entities/additional-service/model/face-auth/types'; +import { FaceAuthFilterProps, FaceAuthResult, FaceAuthTransType } from '@/entities/additional-service/model/face-auth/types'; +import { AuthResultBtnGroup, TransactionTypeBtnGroup } from '@/entities/additional-service/model/face-auth/constant'; export const FaceAuthFilter = ({ filterOn, setFilterOn, mid, - memberId, - startDate, - endDate, - transactionType, - processResult, + userMallId, + fromDate, + toDate, + transType, + authResult, setMid, - setMemberId, - setStartDate, - setEndDate, - setTransactionType, - setProcessResult + setUserMallId, + setFromDate, + setToDate, + setTransType, + setAuthResult }: FaceAuthFilterProps) => { const [filterMid, setFilterMid] = useState(mid); - const [filterMemberId, setFilterMemberId] = useState(memberId); - const [filterStartDate, setFilterStartDate] = useState(moment(startDate).format('YYYY.MM.DD')); - const [filterEndDate, setFilterEndDate] = useState(moment(endDate).format('YYYY.MM.DD')); - const [filterTransactionType, setFilterTransactionType] = useState(transactionType); - const [filterProcessResult, setFilterProcessResult] = useState(processResult); + const [filterMemberId, setFilterMemberId] = useState(userMallId); + const [filterFromDate, setFilterFromDate] = useState(moment(fromDate).format('YYYYMMDD')); + const [filterToDate, setFilterToDate] = useState(moment(toDate).format('YYYYMMDD')); + const [filterTransType, setFIlterTransType] = useState(transType); + const [filterAuthResult, setFilterAuthResult] = useState(authResult); const midOptions = useStore.getState().UserStore.selectOptionsMids; + useEffect(() => { + setFilterAuthResult(authResult); + }, [authResult]); + const onClickToClose = () => { setFilterOn(false); }; const onClickToSetFilter = () => { setMid(filterMid); - setMemberId(filterMemberId); - setStartDate(filterStartDate); - setEndDate(filterEndDate); - setTransactionType(filterTransactionType); - setProcessResult(filterProcessResult); + setUserMallId(filterMemberId); + setFromDate(filterFromDate); + setToDate(filterToDate); + setTransType(filterTransType); + setAuthResult(filterAuthResult); onClickToClose(); }; - const transactionTypeBtnGroup = [ - { name: '전체', value: FaceAuthTransactionType.ALL }, - { name: '인증', value: FaceAuthTransactionType.AUTH }, - { name: '등록', value: FaceAuthTransactionType.REGISTER }, - ]; - - const processResultBtnGroup = [ - { name: '전체', value: ProcessResult.ALL }, - { name: '성공', value: ProcessResult.SUCCESS }, - { name: '실패', value: ProcessResult.FAIL }, - ]; - return ( <>
diff --git a/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx b/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx index cf4e9a1..de830a1 100644 --- a/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx +++ b/src/entities/additional-service/ui/link-payment/link-payment-history-list.tsx @@ -22,17 +22,19 @@ export const LinkPaymentHistoryList = ({ date = sendDate; } if (date !== sendDate) { - date = sendDate; + if (list.length > 0) { rs.push( ); } + date = sendDate; list = []; } list.push(items); diff --git a/src/entities/additional-service/ui/link-payment/link-payment-wait-list.tsx b/src/entities/additional-service/ui/link-payment/link-payment-wait-list.tsx index 92a0079..d09a9bf 100644 --- a/src/entities/additional-service/ui/link-payment/link-payment-wait-list.tsx +++ b/src/entities/additional-service/ui/link-payment/link-payment-wait-list.tsx @@ -14,25 +14,26 @@ export const LinkPaymentWaitList = ({ let list = []; for (let i = 0; i < listItems.length; i++) { let items = listItems[i]; - if(!!items) { + if (!!items) { let scheduledSendDate = items?.scheduledSendDate; scheduledSendDate = scheduledSendDate?.substring(0, 8); - if(!!scheduledSendDate) { - if(i === 0) { + if (!!scheduledSendDate) { + if (i === 0) { date = scheduledSendDate; } - if(date !== scheduledSendDate) { - date = scheduledSendDate; - if(list.length > 0) { + if (date !== scheduledSendDate) { + if (list.length > 0) { rs.push( ); } + date = scheduledSendDate; list = []; } list.push(items); diff --git a/src/entities/additional-service/ui/list-date-group.tsx b/src/entities/additional-service/ui/list-date-group.tsx index 0a7a35c..edbf480 100644 --- a/src/entities/additional-service/ui/list-date-group.tsx +++ b/src/entities/additional-service/ui/list-date-group.tsx @@ -30,11 +30,11 @@ export const ListDateGroup = ({ paymentDate= { items[i]?.paymentDate} paymentStatus={ items[i]?.paymentStatus} requestDate={ items[i]?.requestDate } + requestTime={ items[i]?.requestTime} registDate={ items[i]?.registDate } bankName={ items[i]?.bankName} accountName={ items[i]?.accountName} accountNo={ items[i]?.accountNo } - transferStatus={ items[i]?.transferStatus} resultStatus={ items[i]?.resultStatus } resultMessage={ items[i]?.resultMessage } applicationDate={ items[i]?.applicationDate } @@ -61,7 +61,7 @@ export const ListDateGroup = ({ requestId={ items[i]?.requestId} detailExposure={ items[i]?.detailExposure} receiverInfo={ items[i]?.receiverInfo} - + authStatus= { items[i]?.authStatus} alimCl={ items[i]?.alimCl } sendType={ items[i]?.sendType } @@ -69,6 +69,12 @@ export const ListDateGroup = ({ paymentMethod={ items[i]?.paymentMethod } receiverName={ items[i]?.receiverName } serviceCode={ items[i]?.serviceCode} + groupId={ items[i]?.groupId} + cpid={ items[i]?.cpid} + userMallId={ items[i]?.userMallId} + transType={ items[i]?.transType } + authResult={ items[i]?.authResult } + failReason={ items[i]?.failReason } smsCl= { items[i]?.smsCl } onResendClick={ onResendClick } diff --git a/src/entities/additional-service/ui/list-item.tsx b/src/entities/additional-service/ui/list-item.tsx index 791e80c..c6a756e 100644 --- a/src/entities/additional-service/ui/list-item.tsx +++ b/src/entities/additional-service/ui/list-item.tsx @@ -11,6 +11,7 @@ import { getKeyInPaymentPaymentStatusName } from '../model/key-in/constant'; import { getArsPaymentStatusName, getArsOrderStatusName } from '../model/ars/constant'; import { ServiceCode } from '../model/alimtalk/types'; import { getAlimtalkAlimClText, getAlimtalkSendClTypeText, getAlimtalkSendTypeText, getAlimtalkServiceCodeText } from '../model/alimtalk/constant'; +import { getAuthResultStatusText, getTransTypeText } from '../model/face-auth/constant'; export const ListItem = ({ additionalServiceCategory, @@ -19,7 +20,7 @@ export const ListItem = ({ applicationDate, requestDate, bankName, accountNo, resultStatus, resultMessage, amount, sendMethod, processStatus,registDate, - accountName, transferStatus, + accountName, submallId, settlementDate, companyName, disbursementStatus, disbursementAmount, @@ -31,9 +32,10 @@ export const ListItem = ({ requestId,subReqId, buyerName,receiverInfo, seq,serviceCode,sendDate, + authStatus, - smsCl, - name, + smsCl,groupId,userMallId,transType, + authResult,failReason,requestTime, onResendClick }: ListItemProps) => { const { navigate } = useNavigate(); @@ -72,9 +74,9 @@ export const ListItem = ({ } else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderAuth) { - if (transferStatus === "REQUEST" || transferStatus === "SUCCESS") { + if (authStatus === "REQUEST" || authStatus === "SUCCESS") { rs = 'blue'; - } else if (transferStatus === "FAIL") { + } else if (authStatus === "FAIL") { rs = 'gray'; } } @@ -87,10 +89,10 @@ export const ListItem = ({ } } else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { - if (resultStatus === "SUCCESS") { + if (authResult === "SUCCESS") { rs = 'blue'; } - else if (resultStatus === "FAIL") { + else if (authResult === "FAIL") { rs = 'gray'; } } @@ -237,6 +239,14 @@ export const ListItem = ({ } }); } + // else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { + // navigate(PATHS.additionalService.faceAuth.detail, { + // state: { + // additionalServiceCategory: additionalServiceCategory, + // mid: mid + // } + // }) + // } else { alert('additionalServiceCategory가 존재하지 않습니다.'); } @@ -298,13 +308,12 @@ export const ListItem = ({ statusText = resultStatus || ''; } else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderAuth) { - statusText = transferStatus || ''; + statusText = authStatus || ''; } else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { - statusText = status || ''; + statusText = getTransTypeText(transType) } else if (additionalServiceCategory === AdditionalServiceCategory.SMSPayment) { - console.log(smsCl) statusText = getSmsClName(smsCl); } else if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) { @@ -331,7 +340,7 @@ export const ListItem = ({ str = `${accountNo}`; } else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { - str = `${name}(${tid})`; + str = `${userMallId}(${mid})`; } else if (additionalServiceCategory === AdditionalServiceCategory.LinkPaymentHistory || additionalServiceCategory === AdditionalServiceCategory.LinkPaymentWait @@ -390,11 +399,15 @@ export const ListItem = ({ } else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { rs.push( - //TODO :
- {processStatus} + {getStatus()} | - {status} + + {authResult === 'FAIL' + ? `${getAuthResultStatusText(authResult)}: ${failReason}` + : getAuthResultStatusText(authResult) + } +
); } @@ -512,15 +525,15 @@ export const ListItem = ({ } else if (additionalServiceCategory === AdditionalServiceCategory.FaceAuth) { rs.push( -
- {resultStatus === 'SUCCESS' ? '성공' : '실패'} +
+ {authResult === 'SUCCESS' ? '성공' : '실패'}
); } else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderAuth) { rs.push( -
- {(transferStatus === 'REQUEST' || transferStatus === 'SUCCESS') ? '성공' : '실패'} +
+ {(authStatus === 'REQUEST' || authStatus === 'SUCCESS') ? '성공' : '실패'}
); } diff --git a/src/entities/common/model/types.ts b/src/entities/common/model/types.ts index 7e116d6..3cd1da2 100644 --- a/src/entities/common/model/types.ts +++ b/src/entities/common/model/types.ts @@ -91,6 +91,7 @@ export enum SortTypeKeys { export interface SortTypeBoxProps { sortType: SortTypeKeys; onClickToSort: (sortType: SortTypeKeys) => void; + sortOptions?: Array<{key: SortTypeKeys, label: string}>; }; export interface CodesSelectParams { diff --git a/src/entities/common/ui/sort-type-box.tsx b/src/entities/common/ui/sort-type-box.tsx index 5c894a8..542450c 100644 --- a/src/entities/common/ui/sort-type-box.tsx +++ b/src/entities/common/ui/sort-type-box.tsx @@ -1,21 +1,25 @@ import { SortTypeKeys, SortTypeBoxProps } from '../model/types'; export const SortTypeBox = ({ sortType, - onClickToSort + onClickToSort, + sortOptions = [ + { key: SortTypeKeys.LATEST, label: '최신순' }, + { key: SortTypeKeys.HIGH_AMOUNT, label: '고액순' } + ] }: SortTypeBoxProps) => { - + return ( <>
- - | - + {sortOptions.map((option, index) => ( + + {index > 0 && | } + + + ))}
); diff --git a/src/entities/home/ui/favorite-wrapper.tsx b/src/entities/home/ui/favorite-wrapper.tsx index c214c53..f5824e3 100644 --- a/src/entities/home/ui/favorite-wrapper.tsx +++ b/src/entities/home/ui/favorite-wrapper.tsx @@ -70,7 +70,7 @@ export const FavoriteWrapper = ({
onClickToNavigate(favoriteItems[i]?.programPath) } + onClick={ () => !editMode && onClickToNavigate(favoriteItems[i]?.programPath) } >
; setMenuOn?: (menuOn: boolean) => void; editMode?: boolean; + changeMenuId?: string; setChangeMenuId: (menuIdChecked?: string) => void; buttonRefs: RefObject>; itemIndex: number; @@ -25,6 +26,7 @@ export const MenuCategory = ({ subMenu, setMenuOn, editMode, + changeMenuId, setChangeMenuId, buttonRefs, itemIndex @@ -68,6 +70,11 @@ export const MenuCategory = ({ ]; } else{ + // 즐겨찾기가 1개 남았을 때는 해제하지 않음 + if(userFavorite.length <= 1){ + callFavoiteItems(); + return; + } userFavorite = userFavorite.filter((value, _) => { return value.menuId !== menuId }); @@ -76,7 +83,7 @@ export const MenuCategory = ({ setChangeMenuId(`${menuId}-${checked}`); callFavoiteItems(); // if(location.pathname === PATHS.home){ - + // } }; @@ -93,11 +100,15 @@ export const MenuCategory = ({ callFavoiteItems(); }, []); + useEffect(() => { + callFavoiteItems(); + }, [changeMenuId]); + useEffect(() => { if(menuIds.length > 0) { // callShortcutSave(); } - + }, [menuIds]); const getMenuItems = () => { @@ -138,9 +149,8 @@ export const MenuCategory = ({ rs.push(
  • onClickToNavigate(subMenu[i]?.programPath) } >{ subMenu[i]?.menuName }
  • - ); + ); } } diff --git a/src/pages/additional-service/account-holder-auth/account-holder-auth-page.tsx b/src/pages/additional-service/account-holder-auth/account-holder-auth-page.tsx index a825f09..9601bad 100644 --- a/src/pages/additional-service/account-holder-auth/account-holder-auth-page.tsx +++ b/src/pages/additional-service/account-holder-auth/account-holder-auth-page.tsx @@ -19,7 +19,7 @@ import { AccountHolderAuthList } from '@/entities/additional-service/ui/account- import { useExtensionAccountHolderAuthDownloadExcelMutation } from '@/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-download-excel-mutation'; import { AccountHolderAuthFilter } from '@/entities/additional-service/ui/account-holder-auth/filter/account-holder-auth-filter'; import { useStore } from '@/shared/model/store'; -import { AccountHolderAuthListItem, AuthAndTransferStatus, ExtensionAccountHolderAuthContentItem, ExtensionAccountHolderAuthDownloadExcelParams, ExtensionAccountHolderAuthDownloadExcelResponse } from '@/entities/additional-service/model/account-holder-auth/types'; +import { AccountHolderAuthListItem, AccountHolderAuthStatus, ExtensionAccountHolderAuthContentItem, ExtensionAccountHolderAuthDownloadExcelParams, ExtensionAccountHolderAuthDownloadExcelResponse } from '@/entities/additional-service/model/account-holder-auth/types'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; @@ -35,7 +35,7 @@ export const AccountHolderAuthPage = () => { const [mid, setMid] = useState(userMid); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); - const [authStatus, setAuthStatus] = useState(AuthAndTransferStatus.ALL) + const [authStatus, setAuthStatus] = useState(AccountHolderAuthStatus.ALL) const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); useSetHeaderTitle('계좌점유인증'); useSetHeaderType(HeaderType.LeftArrow); @@ -49,7 +49,7 @@ export const AccountHolderAuthPage = () => { const callList = (option?: { sortType?: SortTypeKeys, - status?: AuthAndTransferStatus + status?: AccountHolderAuthStatus }) => { let listParams = { mid: mid, @@ -81,7 +81,7 @@ export const AccountHolderAuthPage = () => { }); }; - const onClickToAuthStatus = (val: AuthAndTransferStatus) => { + const onClickToAuthStatus = (val: AccountHolderAuthStatus) => { setAuthStatus(val); callList({ status: val diff --git a/src/pages/additional-service/account-holder-auth/detail-page.tsx b/src/pages/additional-service/account-holder-auth/detail-page.tsx index 1ab785e..9f4a38b 100644 --- a/src/pages/additional-service/account-holder-auth/detail-page.tsx +++ b/src/pages/additional-service/account-holder-auth/detail-page.tsx @@ -13,7 +13,10 @@ import { TitleInfoWrap } from '@/entities/additional-service/ui/info-wrap/title- import { useLocation } from 'react-router'; import { DetailInfoWrap } from '@/entities/additional-service/ui/info-wrap/detail-info-wrap'; import { useExtensionAccountHolderAuthDetailMutation } from '@/entities/additional-service/api/account-holder-auth/use-extension-account-holder-auth-deatil-mutation'; -import { ExtensionAccountHolderAuthDetailParams } from '@/entities/additional-service/model/account-holder-auth/types'; +import { ExtensionAccountHolderAuthDetailParams, ExtensionAccountHolderAuthDetailResponse } from '@/entities/additional-service/model/account-holder-auth/types'; +import moment from 'moment'; +import { getAuthStatusText } from '@/entities/additional-service/model/account-holder-auth/constant'; +import { getAuthResultStatusText } from '@/entities/additional-service/model/face-auth/constant'; export const AccountHolderAuthDetailPage = () => { const { navigate } = useNavigate(); @@ -21,8 +24,7 @@ export const AccountHolderAuthDetailPage = () => { const { mid, tid } = location.state || {}; - const [titleInfo, setTitleInfo] = useState(); - const [detailInfo, setDetailInfo] = useState(); + const [detail, setDetail] = useState(); useSetHeaderTitle('계좌점유인증 상세'); useSetHeaderType(HeaderType.LeftArrow); @@ -38,32 +40,71 @@ export const AccountHolderAuthDetailPage = () => { mid: mid, tid: tid } - accountHolderAuthDetail(accountHolderAuthDetailParams).then((rs: DetailResponse) => { - console.log("Detail Info: ", rs) - setTitleInfo(rs.titleInfo); - setDetailInfo(rs.detailInfo); + accountHolderAuthDetail(accountHolderAuthDetailParams).then((rs: ExtensionAccountHolderAuthDetailResponse) => { + setDetail(rs); }); }; useEffect(() => { callDetail(); }, []); + + const getDate = (date?: string) => { + return (date) ? moment(date, 'YYYYMMDDHHmmss').format('YYYY.MM.DD HH:mm:ss') : ''; + }; return ( <>
    - +
    + {detail?.accountName} + {detail?.accountNo} +
    +
    {getDate(detail?.requestDate)}
    +
    -
    - +
    상세 정보
    +
      +
    • + 가맹점상호 + {detail?.companyName} +
    • +
    • + MID + {detail?.mid} +
    • +
    • + 요청일시 + {getDate(detail?.requestDate)} +
    • +
    • + 은행 + {detail?.bankName} +
    • +
    • + 계좌번호 + {detail?.bankName} +
    • +
    • + 예금주 + {detail?.accountName} +
    • +
    • + 결과 + {getAuthStatusText(detail?.authStatus)} +
    • +
    • + 실패 사유 + {detail?.authResult !== "MATCHED" && + {getAuthResultStatusText(detail?.authResult)} + } + {detail?.authResult === "MATCHED" && + - + } +
    • +
    diff --git a/src/pages/additional-service/account-holder-search/detail-page.tsx b/src/pages/additional-service/account-holder-search/detail-page.tsx index 9cb0b9d..e4aef18 100644 --- a/src/pages/additional-service/account-holder-search/detail-page.tsx +++ b/src/pages/additional-service/account-holder-search/detail-page.tsx @@ -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(); - const [detailInfo, setDetailInfo] = useState(); + const [detail, setDetail] = useState(); 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 = () => {
    - +
    + {detail?.accountNo} +
    + {detail?.bankName} +
    {getDate(detail?.requestDate)}
    +
    -
    - +
    상세 정보
    +
      +
    • + 예금주 + {detail?.accountName} +
    • +
    • + 조회 일시 + {detail?.requestDate} +
    • +
    • + 결과 + {getAccountHolderStatusText(detail?.resultStatus)} +
    • +
    • + 실패사유 + {detail?.failReason} +
    • +
    • + 은행 + {detail?.bankName} +
    • +
    • + 계좌번호 + {detail?.accountNo} +
    • +
    • + 요청 구분 + {detail?.requestWay} +
    • +
    diff --git a/src/pages/additional-service/account-holder-search/request-page.tsx b/src/pages/additional-service/account-holder-search/request-page.tsx index 885b8b8..fb4e658 100644 --- a/src/pages/additional-service/account-holder-search/request-page.tsx +++ b/src/pages/additional-service/account-holder-search/request-page.tsx @@ -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,22 +40,30 @@ export const AccountHolderSearchRequestPage = () => { const onClickToRequest = () => { const reuqestParams: ExtensionAccountHolderSearchRequestParams = { mid: formData.mid, - bankCode: formData.bankCode, // 추후 진짜 은행코드 삽입 필요 + bankCode: formData.bankCode, accountNo: formData.accountNo } console.log("계좌성명 조회 조회신청 요청 파라미터 : ", reuqestParams); accountHolderSearchRequest(reuqestParams) - .then((response) => { - console.log("계좌성명 조회 조회 신청 성공 응답: ", response.status) - navigate(PATHS.additionalService.accountHolderSearch.list); - }) - .catch((error) => { - console.error("계좌성명 조회 조회 신청 실패: ", error) - }) + .then((response) => { + console.log("계좌성명 조회 조회 신청 성공 응답: ", response.status) + navigate(PATHS.additionalService.accountHolderSearch.list); + }) + .catch((error) => { + console.error("계좌성명 조회 조회 신청 실패: ", error) + }) }; + const isFormValid = () => { + return ( + formData.mid.trim() !== '' && + formData.bankCode.trim() !== '' && + formData.accountNo.trim() !== '' + ) + } + return ( <>
    @@ -65,12 +74,15 @@ export const AccountHolderSearchRequestPage = () => {
    가맹점
    - handleInputChange('mid', e.target.value)}> + { + midOptions.map((value) => ( + + )) + }
    @@ -78,13 +90,18 @@ export const AccountHolderSearchRequestPage = () => {
    은행
    - handleInputChange('bankCode', e.target.value)}> + + { + bankList + .filter((bank) => bank.code1 !== '****') + .map((bank) => ( + + )) + }
    @@ -93,10 +110,10 @@ export const AccountHolderSearchRequestPage = () => {
    계좌번호
    handleInputChange('accountNo', e.target.value)} + type="number" + placeholder='' + value={formData.accountNo} + onChange={(e) => handleInputChange('accountNo', e.target.value)} >
    @@ -105,6 +122,7 @@ export const AccountHolderSearchRequestPage = () => {
    diff --git a/src/pages/additional-service/face-auth/face-auth-page.tsx b/src/pages/additional-service/face-auth/face-auth-page.tsx index 3daa739..9b05354 100644 --- a/src/pages/additional-service/face-auth/face-auth-page.tsx +++ b/src/pages/additional-service/face-auth/face-auth-page.tsx @@ -1,12 +1,11 @@ import moment from 'moment'; -import { ProcessResult } from '@/entities/additional-service/model/types'; -import { SortTypeKeys } from '@/entities/common/model/types'; +import { AdditionalServiceCategory, ProcessResult } from '@/entities/additional-service/model/types'; +import { DefaultRequestPagination, HeaderType, SortTypeKeys } from '@/entities/common/model/types'; import { SortTypeBox } from '@/entities/common/ui/sort-type-box'; import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { IMAGE_ROOT } from '@/shared/constants/common'; -import { HeaderType } from '@/entities/common/model/types'; -import { useEffect, useState } from 'react'; +import { JSX, useEffect, useState } from 'react'; import { useStore } from '@/shared/model/store'; import { PATHS } from '@/shared/constants/paths'; import { @@ -16,26 +15,28 @@ import { useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; -import { FaceAuthList } from '@/entities/additional-service/ui/face-auth/face-auth-list'; import { FaceAuthFilter } from '@/entities/additional-service/ui/face-auth/filter/face-auth-filter'; -import { FaceAuthListItem, FaceAuthTransactionType } from '@/entities/additional-service/model/face-auth/types'; -import { ResultStatusBtnGroup } from '@/entities/additional-service/model/face-auth/constant'; +import { ExtensionFaceAuthExcelDownlaodPrams, ExtensionFaceAuthExcelDownlaodResponse, ExtensionFaceAuthListParams, ExtensionFaceAuthListResponse, FaceAuthListItem, FaceAuthResult, FaceAuthTransType } from '@/entities/additional-service/model/face-auth/types'; +import { AuthResultBtnGroup } from '@/entities/additional-service/model/face-auth/constant'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet'; +import { useExtensionFaceAuthListtMutation } from '@/entities/additional-service/api/face-auth/use-extension-face-auth-list-mutation'; +import { useExtensionFaceAuthDownloadExcelMutation } from '@/entities/additional-service/api/face-auth/use-extension-face-auth-download-excel-mutation'; +import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; export const FaceAuthPage = () => { const { navigate } = useNavigate(); const userMid = useStore.getState().UserStore.mid; const [sortType, setSortType] = useState(SortTypeKeys.LATEST); - const [listItems, setListItems] = useState({}); - const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); + const [listItems, setListItems] = useState>([]); const [filterOn, setFilterOn] = useState(false); + const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); - const [memberId, setMemberId] = useState(''); - const [startDate, setStartDate] = useState(moment().format('YYYY-MM-DD')); - const [endDate, setEndDate] = useState(moment().format('YYYY-MM-DD')); - const [transactionType, setTransactionType] = useState(FaceAuthTransactionType.ALL); - const [processResult, setProcessResult] = useState(ProcessResult.ALL); + const [userMallId, setUserMallId] = useState(''); + const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); + const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); + const [transType, setTransType] = useState(FaceAuthTransType.ALL); + const [authResult, setAuthResult] = useState(FaceAuthResult.ALL); const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); useSetHeaderTitle('안면인증'); @@ -45,48 +46,31 @@ export const FaceAuthPage = () => { navigate(PATHS.home); }); - //TODO : API 연동 - //const { mutateAsync: faceAuthHistoryList } = useExtensionFaceAuthHistoryListMutation(); - //const { mutateAsync: downloadExcel } = useExtensionFaceAuthDownloadExcelMutation(); - - const assembleData = (content: Array) => { - console.log('rs.content:', content); - let data: any = {}; - if (content && content.length > 0) { - for (let i = 0; i < content?.length; i++) { - let requestDate = content[i]?.requestDate?.substring(0, 8); - let groupDate = moment(requestDate).format('YYYYMMDD'); - if (!!groupDate && !data.hasOwnProperty(groupDate)) { - data[groupDate] = []; - } - if (!!groupDate && data.hasOwnProperty(groupDate)) { - data[groupDate].push(content[i]); - } - } - } - console.log('Data : ', data); - return data; - }; + const { mutateAsync: faceAuthHistoryList } = useExtensionFaceAuthListtMutation(); + const { mutateAsync: downloadExcel } = useExtensionFaceAuthDownloadExcelMutation(); const callList = (option?: { sortType?: SortTypeKeys, - val?: string + authResult?: FaceAuthResult }) => { - pageParam.sortType = (option?.sortType) ? option.sortType : sortType; - setPageParam(pageParam); - let listParams = { + let params: ExtensionFaceAuthListParams = { mid: mid, - memberId: memberId, - fromDate: startDate, - toDate: endDate, - transactionType: transactionType, - resultStatus: processResult, + userMallId: userMallId, + fromDate: fromDate, + toDate: toDate, + transType: transType, + authResult: option?.authResult ?? authResult, page: pageParam }; - //faceAuthHistoryList(listParams).then((rs) => { - // setListItems(assembleData(rs.content)); - //}); + if (params.page) { + params.page.sortType = option?.sortType || sortType; + setPageParam(params.page); + } + + faceAuthHistoryList(params).then((rs: ExtensionFaceAuthListResponse) => { + setListItems(rs.content); + }); }; const onClickToOpenEmailBottomSheet = () => { @@ -95,17 +79,15 @@ export const FaceAuthPage = () => { const onSendRequest = (selectedEmail?: string) => { if (selectedEmail) { - // downloadExcel({ - // mid: mid, - // //email: selectedEmail, - // memberId: memberId, - // fromDate: startDate, - // toDate: endDate, - // transactionType: transactionType, - // resultStatus: processResult - // }).then((rs) => { - // console.log('Excel Download Status: ' + rs.status); - // }); + const params: ExtensionFaceAuthExcelDownlaodPrams = { + mid: mid, + email: selectedEmail, + fromDate: fromDate, + toDate: toDate + }; + downloadExcel(params).then((rs: ExtensionFaceAuthExcelDownlaodResponse) => { + console.log('Excel Download Status:', rs.status); + }); } setEmailBottomSheetOn(false); }; @@ -119,16 +101,62 @@ export const FaceAuthPage = () => { callList({ sortType: sort }); }; - const onClickToTransactionStatus = (val: ProcessResult) => { - setProcessResult(val); + const onClickToAuthResult = (val: FaceAuthResult) => { + setAuthResult(val); callList({ - val: val + authResult: val }); }; + const getListDateGroup = () => { + let rs= []; + let date = ''; + let list= []; + for (let i = 0; i < listItems.length; i++) { + let item = listItems[i]; + if (!!item) { + let requestDate = item?.requestDate; + requestDate = requestDate?.substring(0, 8); + if (!!requestDate) { + if (i === 0) { + date = requestDate; + } + if (date !== requestDate) { + if (list.length > 0) { + rs.push( + + ); + } + date = requestDate; + list = []; + } + list.push(item); + } + } + } + if (list.length > 0) { + rs.push( + + ); + } + return rs; + }; + useEffect(() => { callList(); - }, [mid, memberId, startDate, endDate, transactionType, processResult]); + }, [mid, userMallId, fromDate, toDate, transType, authResult]); return ( <> @@ -141,7 +169,7 @@ export const FaceAuthPage = () => {
    - +
    + {getListDateGroup()} +
    @@ -198,17 +229,17 @@ export const FaceAuthPage = () => { filterOn={filterOn} setFilterOn={setFilterOn} mid={mid} - memberId={memberId} - startDate={startDate} - endDate={endDate} - transactionType={transactionType} - processResult={processResult} + userMallId={userMallId} + fromDate={fromDate} + toDate={toDate} + transType={transType} + authResult={authResult} setMid={setMid} - setMemberId={setMemberId} - setStartDate={setStartDate} - setEndDate={setEndDate} - setTransactionType={setTransactionType} - setProcessResult={setProcessResult} + setUserMallId={setUserMallId} + setFromDate={setFromDate} + setToDate={setToDate} + setTransType={setTransType} + setAuthResult={setAuthResult} /> { } linkPayWaitDetail(detailParam).then((rs: DetailResponse) => { - console.log("Detail Info: ", rs) setTitleInfo(rs.titleInfo) setPaymentInfo(rs.paymentInfo) }) 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 1bf080b..57d96ad 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 @@ -254,19 +254,23 @@ export const LinkPaymentSeparateApprovalPage = () => { • 결제상태: {item.paymentStatusName} -
  • - • 유효기간: - - {item.paymentLimitDate - ? moment(item.paymentLimitDate, 'YYYYMMDD').format('YYYY/MM/DD') - : '-' - } - -
  • -
  • - • 연장횟수: - {item.paymentLimitCount} -
  • + {item.type !== LinkPaymentSeparateType.MAIN && ( + <> +
  • + • 유효기간: + + {item.paymentLimitDate + ? moment(item.paymentLimitDate, 'YYYYMMDD').format('YYYY/MM/DD') + : '-' + } + +
  • +
  • + • 연장횟수: + {item.paymentLimitCount} +
  • + + )}
    @@ -275,6 +279,7 @@ export const LinkPaymentSeparateApprovalPage = () => {