diff --git a/src/entities/additional-service/model/ars/types.ts b/src/entities/additional-service/model/ars/types.ts index 7dd13b8..79f59e9 100644 --- a/src/entities/additional-service/model/ars/types.ts +++ b/src/entities/additional-service/model/ars/types.ts @@ -39,11 +39,14 @@ export interface ExtensionArsListParams { }; export interface ArsListContent { tid?: string; - paymentDate?: string; - paymentStatus?: PaymentStatus | string; - orderStatus?: OrderStatus; - arsPaymentMethod?: string; + orderDate?: string; + orderTime?: string; + buyerName?: string; + buyerPhoneLast4?: string; + orderStatus?: string; + transactionType?: string; amount?: number; + statusColor?: string; }; export interface ExtensionArsListResponse extends DefaulResponsePagination { content: Array; @@ -67,6 +70,7 @@ export interface ExtensionArsDetailResponse { corpName: string; mid: string; arsPaymentMethod: string; + amount: string; paymentStatus: PaymentStatus; orderStatus: string; paymentDate: string; @@ -89,4 +93,16 @@ export interface ExtensionArsApplyParams { email: string; arsPaymentMethod: string; }; -export interface ExtensionArsApplyResponse {}; \ No newline at end of file +export interface ExtensionArsApplyResponse { + status: boolean; + error?: { + root?: string; + errKey?: string; + code?: string; + message?: string; + timestamp?: string; + details?: { + path?: string; + }; + }; +}; \ 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 a090bd9..a0edac0 100644 --- a/src/entities/additional-service/model/key-in/types.ts +++ b/src/entities/additional-service/model/key-in/types.ts @@ -93,8 +93,7 @@ export interface ExtensionKeyinDownloadExcelResponse { export interface ExtensionKeyinApplyParams extends ExtensionRequestParams { cardNo: string; - expYear: string; - expMon: string; + cardExpire: string; instmnt: string; amount: number; productName: string; diff --git a/src/entities/additional-service/model/sms-payment/types.ts b/src/entities/additional-service/model/sms-payment/types.ts index 62e5b78..cffd94c 100644 --- a/src/entities/additional-service/model/sms-payment/types.ts +++ b/src/entities/additional-service/model/sms-payment/types.ts @@ -2,7 +2,7 @@ import { DefaulResponsePagination, DefaultRequestPagination } from '@/entities/c import { AdditionalServiceCategory, ExtensionRequestParams, FilterProps, ListItemProps } from '../types'; export enum SmsCl { - ALL = "", + ALL = "ALL", VACCOUNT_REQ = "VACCOUNT_REQ", VACCOUNT_REQ_DEPOSIT = "VACCOUNT_REQ_DEPOSIT" } @@ -15,9 +15,13 @@ export enum SmsPaymentSearchCl { export interface SmsPaymentListItem { mid?: string; tid?: string; - paymentDate?: string; - paymentStatus?: string; + buyerName?: string; + buyerPhoneLast4?: string; + sendDate?: string; + amount?: number; + smsTypeName?: string; smsCl?: string; + resendEnabled?: boolean; } export interface SmsPaymentListProps { diff --git a/src/entities/additional-service/ui/filter/ars-filter.tsx b/src/entities/additional-service/ui/filter/ars-filter.tsx index 1d4cc5f..664c0fe 100644 --- a/src/entities/additional-service/ui/filter/ars-filter.tsx +++ b/src/entities/additional-service/ui/filter/ars-filter.tsx @@ -60,8 +60,8 @@ export const ArsFilter = ({ const [filterMid, setFilterMid] = useState(mid); const [filterMoid, setFilterMoid] = useState(moid); - 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 [filterPaymentStatus, setFilterPaymentStatus] = useState(paymentStatus); const [filterOrderStatus, setFilterOrderStatus] = useState(orderStatus); const [filterMinAmount, setFilterMinAmount] = useState(minAmount); @@ -75,7 +75,7 @@ export const ArsFilter = ({ const onClickToSetFilter = () => { setMid(filterMid); - setFilterMoid(filterMoid); + setMoid(filterMoid); setFromDate(filterFromDate); setToDate(filterToDate); setPaymentStatus(filterPaymentStatus); diff --git a/src/entities/additional-service/ui/list-date-group.tsx b/src/entities/additional-service/ui/list-date-group.tsx index 6e0d205..daedc76 100644 --- a/src/entities/additional-service/ui/list-date-group.tsx +++ b/src/entities/additional-service/ui/list-date-group.tsx @@ -27,7 +27,7 @@ export const ListDateGroup = ({ key={ key } mid={ mid } tid={ items[i]?.tid } - paymentDate= { items[i]?.paymentDate} + orderDate= { items[i]?.orderDate} paymentStatus={ items[i]?.paymentStatus} requestDate={ items[i]?.requestDate } requestTime={ items[i]?.requestTime} @@ -58,9 +58,10 @@ export const ListDateGroup = ({ status={ items[i]?.status } orderStatus={ items[i]?.orderStatus } - arsPaymentMethod={ items[i]?.arsPaymentMethod } - + orderTime={ items[i]?.orderTime } + buyerPhoneLast4={ items[i]?.buyerPhoneLast4 } buyerName={ items[i]?.buyerName} + statusColor={ items[i]?.statusColor} cursorId={ items[i]?.cursorId} subReqId={ items[i]?.subReqId} requestId={ items[i]?.requestId} diff --git a/src/entities/additional-service/ui/list-item.tsx b/src/entities/additional-service/ui/list-item.tsx index 34cd57c..ecaa9d6 100644 --- a/src/entities/additional-service/ui/list-item.tsx +++ b/src/entities/additional-service/ui/list-item.tsx @@ -16,16 +16,12 @@ import { getPayoutStatusText } from '../model/payout/constant'; export const ListItem = ({ additionalServiceCategory, - mid, tid, paymentDate, paymentStatus, - + mid, tid, orderDate, paymentStatus, + orderTime,buyerPhoneLast4,statusColor, applicationDate, requestDate, bankName, accountNo, resultStatus, resultMessage, amount, sendMethod, processStatus, registDate, - - accountName, - - submallId, settlementDate, companyName, - - orderStatus, arsPaymentMethod, + transactionTime,transactionCode,transactionType, + accountName,submallId, settlementDate, companyName,orderStatus, alimCl, sendType, sendCl, paymentMethod, receiverName, @@ -36,6 +32,7 @@ export const ListItem = ({ smsCl, groupId, userMallId, transType, authResult, failReason, requestTime, + resendEnabled, onResendClick }: ListItemProps) => { const { navigate } = useNavigate(); @@ -59,16 +56,16 @@ export const ListItem = ({ const getDotClass = (str?: string) => { let rs = ''; if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) { - if (paymentStatus === '') { + if (transactionType === '') { rs = ''; } - else if (paymentStatus === "APPROVAL") { + else if (transactionType === "APPROVAL") { rs = 'blue'; } - else if (paymentStatus === "ALL_CANCEL") { + else if (transactionType === "FULL_CANCEL") { rs = 'gray'; } - else if (paymentStatus === 'AFTER_CANCEL') { + else if (transactionType === 'PARTIAL_CANCEL') { rs = 'gray'; } @@ -143,6 +140,12 @@ export const ListItem = ({ } else if (status === "FAIL") { rs = 'gray'; } + } else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { + if (paymentStatus === "PENDING" || paymentStatus === "SUCCESS") { + rs = 'blue'; + } else { + rs = 'gray'; + } } return rs; @@ -231,8 +234,7 @@ export const ListItem = ({ state: { additionalServiceCategory: additionalServiceCategory, mid: mid, - tid: tid, - amount: amount + tid: tid } }); } @@ -261,7 +263,7 @@ export const ListItem = ({ const getTime = () => { let timeStr = ''; if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) { - let time = paymentDate?.substring(8, 12); + let time = transactionTime?.substring(0, 4); timeStr = time?.substring(0, 2) + ':' + time?.substring(2, 4); } else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderAuth) { @@ -289,8 +291,7 @@ export const ListItem = ({ } } else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { - let time = paymentDate?.substring(8, 12); - timeStr = time?.substring(0, 2) + ':' + time?.substring(2, 4); + timeStr = orderTime?.substring(0, 2) + ':' + orderTime?.substring(2, 4); } else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) { let time = sendDate?.substring(8, 12); @@ -323,7 +324,7 @@ export const ListItem = ({ statusText = getSmsClName(smsCl); } else if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) { - statusText = getKeyInPaymentPaymentStatusName(paymentStatus) + statusText = getKeyInPaymentPaymentStatusName(transactionType) } else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { statusText = getArsPaymentStatusName(paymentStatus) @@ -337,7 +338,7 @@ export const ListItem = ({ const getTitle = () => { let str: string | undefined = ''; if (additionalServiceCategory === AdditionalServiceCategory.KeyInPayment) { - str = `${tid}(${amount})`; + str = `${transactionCode}`; } else if (additionalServiceCategory === AdditionalServiceCategory.AccountHolderAuth) { str = `${accountName}(${accountNo})`; @@ -363,10 +364,15 @@ export const ListItem = ({ str = `${accountName}(${accountNo})`; } else if (additionalServiceCategory === AdditionalServiceCategory.SMSPayment) { - str = `${paymentDate}(${paymentStatus})[추후 수정 필요]` + if (buyerPhoneLast4) { + str = `${buyerName}(${buyerPhoneLast4})` + } else { + str = `${buyerName}` + } + } else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { - str = '이름(' + tid + ')'; + str = `${buyerName}(${tid})`; } else if (additionalServiceCategory === AdditionalServiceCategory.Alimtalk) { str = `${receiverName}(${getAlimtalkSendTypeText(sendType)})`; @@ -493,7 +499,7 @@ export const ListItem = ({ | {getArsOrderStatusName(orderStatus)} | - {arsPaymentMethod} + {transactionType} ); } @@ -625,12 +631,12 @@ export const ListItem = ({ >{getAlimtalkSendClTypeText(sendCl)} ); } - else if (additionalServiceCategory === AdditionalServiceCategory.SMSPayment && onResendClick && tid) { + else if (additionalServiceCategory === AdditionalServiceCategory.SMSPayment && onResendClick && resendEnabled) { rs.push(
mid && tid && onResendClick(mid, tid)} + onClick={() => mid && onResendClick(mid, tid || '')} >{'재발송'}
) } diff --git a/src/entities/additional-service/ui/sms-payment/sms-payment-filter.tsx b/src/entities/additional-service/ui/sms-payment/sms-payment-filter.tsx index 901bbfb..2004c22 100644 --- a/src/entities/additional-service/ui/sms-payment/sms-payment-filter.tsx +++ b/src/entities/additional-service/ui/sms-payment/sms-payment-filter.tsx @@ -30,8 +30,8 @@ export const SmsPaymentFilter = ({ 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 [filterSmsCl, setFilterSmsCl] = useState(smsCl); const midOptions = useStore.getState().UserStore.selectOptionsMids; diff --git a/src/entities/additional-service/ui/sms-payment/sms-payment-list.tsx b/src/entities/additional-service/ui/sms-payment/sms-payment-list.tsx index fa09a77..22472d6 100644 --- a/src/entities/additional-service/ui/sms-payment/sms-payment-list.tsx +++ b/src/entities/additional-service/ui/sms-payment/sms-payment-list.tsx @@ -1,5 +1,4 @@ -import { SmsPaymentListItem, SmsPaymentListProps } from '../../model/sms-payment/types'; -import { AdditionalServiceCategory } from '../../model/types'; +import { SmsPaymentListProps } from '../../model/sms-payment/types'; import { ListDateGroup } from '../list-date-group'; export const SmsPaymentList = ({ @@ -16,24 +15,26 @@ export const SmsPaymentList = ({ for (let i = 0; i < listItems.length; i++) { let items = listItems[i]; if(!!items) { - let paymentDate = items?.paymentDate; - paymentDate = paymentDate?.substring(0, 8); - if(!!paymentDate) { + let sendDate = items?.sendDate; + sendDate = sendDate?.substring(0, 8); + if(!!sendDate) { if(i === 0) { - date = paymentDate; + date = sendDate; } - if(date !== paymentDate) { + if(date !== sendDate) { if(list.length > 0) { rs.push( ); } - date = paymentDate; + date = sendDate; list = []; } list.push(items); diff --git a/src/entities/alarm/ui/login-type-bottom-sheet.tsx b/src/entities/alarm/ui/login-type-bottom-sheet.tsx index 071f9f1..0becf46 100644 --- a/src/entities/alarm/ui/login-type-bottom-sheet.tsx +++ b/src/entities/alarm/ui/login-type-bottom-sheet.tsx @@ -9,13 +9,15 @@ export interface LoginTypeBottomSheetProps { loginType: LoginType; setLoginType: (loginType: string) => void; onBiometricRegistered?: () => void; + isAndroid: boolean; }; export const LoginTypeBottomSheet = ({ setLoginTypeBottomSheetOn, loginType, setLoginType, - onBiometricRegistered + onBiometricRegistered, + isAndroid }: LoginTypeBottomSheetProps) => { const { t } = useTranslation(); const { registerBiometric, setLoginType: setLoginTypeNative } = useAppBridge(); @@ -25,21 +27,31 @@ export const LoginTypeBottomSheet = ({ }; const onChangeLoginType = async (type: string) => { if (loginType !== type) { - if (type === 'BIOMETRIC') { - onClickToClose(); - registerBiometric().then(() => { - onBiometricRegistered?.(); - }).catch(() => { - // 에러 처리 - }); - } else { + if (isAndroid) { setLoginTypeNative(type).then(() => { - setLoginType(type); + setLoginType(type); + onClickToClose(); + }).catch(() => { + onClickToClose(); + }); + } else { + if (type === 'BIOMETRIC') { onClickToClose(); - }).catch(() => { - onClickToClose(); - }); + registerBiometric().then(() => { + onBiometricRegistered?.(); + }).catch(() => { + // 에러 처리 + }); + } else { + setLoginTypeNative(type).then(() => { + setLoginType(type); + onClickToClose(); + }).catch(() => { + onClickToClose(); + }); + } } + } }; @@ -55,9 +67,9 @@ export const LoginTypeBottomSheet = ({ type="button" > {t('common.close')} @@ -67,12 +79,12 @@ export const LoginTypeBottomSheet = ({
  • onChangeLoginType('ID') } + className={`${(loginType === LoginType.ID) ? 'selected' : ''}`} + onClick={() => onChangeLoginType('ID')} >{t('settings.loginType.idPassword')}
  • onChangeLoginType('BIOMETRIC') } + className={`${(loginType === LoginType.BIOMETRIC) ? 'selected' : ''}`} + onClick={() => onChangeLoginType('BIOMETRIC')} >{t('settings.loginType.biometric')}
diff --git a/src/pages/additional-service/ars/detail-page.tsx b/src/pages/additional-service/ars/detail-page.tsx index 5621adb..dd86ba3 100644 --- a/src/pages/additional-service/ars/detail-page.tsx +++ b/src/pages/additional-service/ars/detail-page.tsx @@ -30,7 +30,6 @@ export const ArsDetailPage = () => { const tid = location.state.tid; const mid = location.state.mid; - const amount = location.state.amount; const [detail, setDetail] = useState(); const [bottomSheetOn, setBottomSheetOn] = useState(false); @@ -86,7 +85,7 @@ export const ArsDetailPage = () => {
{
)} diff --git a/src/pages/additional-service/ars/list-page.tsx b/src/pages/additional-service/ars/list-page.tsx index 3404522..7e06546 100644 --- a/src/pages/additional-service/ars/list-page.tsx +++ b/src/pages/additional-service/ars/list-page.tsx @@ -187,8 +187,8 @@ export const ArsListPage = () => { for (let i = 0; i < listItems.length; i++) { let item = listItems[i]; if (!!item) { - let paymentDate = item?.paymentDate || ''; - let itemDate = paymentDate.substring(0, 8); + let orderDate = item?.orderDate || ''; + let itemDate = orderDate.substring(0, 8); if (!!itemDate) { if (i === 0) { date = itemDate; diff --git a/src/pages/additional-service/ars/request-page.tsx b/src/pages/additional-service/ars/request-page.tsx index d40f97c..2313827 100644 --- a/src/pages/additional-service/ars/request-page.tsx +++ b/src/pages/additional-service/ars/request-page.tsx @@ -11,13 +11,17 @@ import { useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; -import { ArsPaymentMethod, ExtensionArsApplyParams } from '@/entities/additional-service/model/ars/types'; +import { ArsPaymentMethod, ExtensionArsApplyParams, ExtensionArsApplyResponse } from '@/entities/additional-service/model/ars/types'; import { ArsRequestSuccessPage } from './request-success-page'; +import { useStore } from '@/shared/model/store'; +import { snackBar } from '@/shared/lib'; export const ArsRequestPage = () => { const { navigate } = useNavigate(); const location = useLocation(); + const midOptions = useStore.getState().UserStore.selectOptionsMids + const { mid: receivedMid } = location.state || {}; const { mutateAsync: arsApply } = useExtensionArsApplyMutation(); @@ -26,7 +30,7 @@ export const ArsRequestPage = () => { const [moid, setMoid] = useState(''); const [goodsName, setGoodsName] = useState(''); const [amount, setAmount] = useState(0); - const [instmntMonth, setInstmntMonth] = useState(''); + const [instmntMonth, setInstmntMonth] = useState('00'); const [buyerName, setBuyerName] = useState(''); const [phoneNumber, setPhoneNumber] = useState(''); const [email, setEamil] = useState(''); @@ -53,15 +57,18 @@ export const ArsRequestPage = () => { email: email, arsPaymentMethod: arsPaymentMethod, }; - arsApply(arsApplyParams).then((rs) => { - console.log(rs) - setResultMessage('결제 신청이 완료되었습니다'); - setSuccessPageOn(true); - }).catch(() => { - - }).finally(() => { - - }); + arsApply(arsApplyParams) + .then((rs: ExtensionArsApplyResponse) => { + if (rs.status === true) { + setSuccessPageOn(true); + } else { + const errorMessage = rs.error?.message || '신청을 실패하였습니다.'; + snackBar(`[실패] ${errorMessage}`); + } + }) + .catch((error) => { + snackBar(`[실패] ${error?.response?.data?.message || error?.response?.data?.error?.message}` || '[실패] 신청을 실패하였습니다.') + }) }; @@ -116,10 +123,19 @@ export const ArsRequestPage = () => {
가맹점 *
- + onChange={(e: ChangeEvent) => setMid(e.target.value)} + > + { + midOptions.map((value) => ( + + )) + } +
@@ -164,9 +180,12 @@ export const ArsRequestPage = () => {
할부기간 *
- ) => setInstmntMonth(e.target.value)} + > +
diff --git a/src/pages/additional-service/key-in-payment/key-in-payment-page.tsx b/src/pages/additional-service/key-in-payment/key-in-payment-page.tsx index bbfac33..2a0e7c5 100644 --- a/src/pages/additional-service/key-in-payment/key-in-payment-page.tsx +++ b/src/pages/additional-service/key-in-payment/key-in-payment-page.tsx @@ -77,7 +77,7 @@ export const KeyInPaymentPage = () => { const callList = (type?: string) => { setOnActionIntersect(false); let listParams = { - mid: mid, + mid: 'nictest02m', startDate: startDate, endDate: endDate, transactionType: transactionType, diff --git a/src/pages/additional-service/key-in-payment/requeset-page.tsx b/src/pages/additional-service/key-in-payment/requeset-page.tsx index 8d3cd49..4a0df26 100644 --- a/src/pages/additional-service/key-in-payment/requeset-page.tsx +++ b/src/pages/additional-service/key-in-payment/requeset-page.tsx @@ -64,12 +64,11 @@ export const KeyInPaymentRequestPage = () => { const callKeyInPaymentRequest = () => { const cardNo = `${cardNo1}${cardNo2}${cardNo3}${cardNo4}`; - + const cardExpire = `${expMon}${expYear}` let keyInApplyParams = { mid: mid, cardNo: cardNo, - expYear: expYear, - expMon: expMon, + cardExpire: cardExpire, instmnt: instmnt, amount: amount, productName: productName, diff --git a/src/pages/setting/setting-page.tsx b/src/pages/setting/setting-page.tsx index 5240a2b..2e9e88d 100644 --- a/src/pages/setting/setting-page.tsx +++ b/src/pages/setting/setting-page.tsx @@ -440,6 +440,7 @@ export const SettingPage = () => { loginType={ loginType } setLoginType={ handleSetLoginType } onBiometricRegistered={ loadLoginType } + isAndroid={ isAndroid } > } { !!serviceLanguageBottomSheetOn && diff --git a/src/shared/api/api-url-additional-service.ts b/src/shared/api/api-url-additional-service.ts index b73da17..5fbc472 100644 --- a/src/shared/api/api-url-additional-service.ts +++ b/src/shared/api/api-url-additional-service.ts @@ -91,7 +91,7 @@ export const API_URL_ADDITIONAL_SERVICE = { }, extensionSmsDetail: () => { // POST: SMS 결제 통보 상세 조회 - return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/sms/detail`; + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/extension/sms/resend-info`; }, extensionList: () => { // POST: 부가서비스 조회