- 지급대행 입금확인서 다운로드 활성화 조건 수정

- 일부 확인 스낵바 문자열 다국어화 적용
This commit is contained in:
HyeonJongKim
2025-11-11 18:14:03 +09:00
parent 297215fe09
commit b72d68ede6
11 changed files with 69 additions and 49 deletions

View File

@@ -29,6 +29,7 @@ export interface PayoutListItem {
companyName?: string;
status?: PayoutDisbursementStatus;
amount?: number;
depositAmount?: number;
};
export interface ExtensionPayoutRequestParams {
@@ -93,4 +94,12 @@ export interface ExtensionPayoutDetailDownloadCertificateParams extends Extensio
email: string;
};
export interface ExtensionPayoutDetailDownloadCertificateResponse { };
export interface ExtensionPayoutDetailDownloadCertificateResponse {
depositDateTime?: string;
depositBank?: string;
depositAccount?: string;
amount?: number;
depositRemark?: string;
depositId?: string;
message?: string;
};

View File

@@ -154,6 +154,7 @@ export interface DetailData {
requestId?: string;
subReqId?: string;
detailOn: boolean;
depositAmount?: number;
}
// ========================================

View File

@@ -64,6 +64,7 @@ export const ListDateGroup = ({
settlementDate={ items[i]?.settlementDate }
companyName={ items[i]?. companyName }
status={ items[i]?.status }
depositAmount={ items[i]?.depositAmount }
orderStatus={ items[i]?.orderStatus }
orderTime={ items[i]?.orderTime }

View File

@@ -35,7 +35,8 @@ export const ListItem = ({
authResult, failReason, requestTime,
resendEnabled,
onResendClick,
setDetailData
setDetailData,
depositAmount
}: ListItemProps) => {
const { navigate } = useNavigate();
const { t, i18n } = useTranslation();
@@ -222,7 +223,8 @@ export const ListItem = ({
setDetailData({
mid: mid,
tid: tid,
detailOn: true
detailOn: true,
depositAmount: depositAmount
});
}
}

View File

@@ -12,19 +12,22 @@ import { showAlert } from '@/widgets/show-alert';
import { checkGrant } from '@/shared/lib/check-grant';
import { snackBar } from '@/shared/lib';
import { DepositReceiptSample } from '@/entities/common/ui/deposit-receipt-sample';
import { DepositInfo } from '@/entities/transaction/model/types';
export interface PayoutDetailProps {
detailOn: boolean;
setDetailOn: (detailOn: boolean) => void;
mid: string;
tid: string;
depositAmount?: number;
};
export const PayoutDetail = ({
detailOn,
setDetailOn,
mid,
tid
tid,
depositAmount
}: PayoutDetailProps) => {
const { t } = useTranslation();
@@ -32,6 +35,7 @@ export const PayoutDetail = ({
const [downloadBottomSheetOn, setDownloadBottomSheetOn] = useState<boolean>(false);
const [depositReceiptSampleOn, setDepositReceiptSampleOn] = useState<boolean>(false);
const [depositReceiptData, setDepositReceiptData] = useState<ExtensionPayoutDetailDownloadCertificateResponse>();
const { mutateAsync: extensionPayoutDetail } = useExtensionPayoutDetailMutation();
const { mutateAsync: extensionPayoutDetailDownloadCertification } = useExtensionPayoutDetailDownloadCertificateMutation();
@@ -70,12 +74,13 @@ export const PayoutDetail = ({
requestType: selectedMode,
email: ''
};
extensionPayoutDetailDownloadCertification(params).then((rs: ExtensionPayoutDetailDownloadCertificateResponse) => {
extensionPayoutDetailDownloadCertification(params).then((rs: any) => {
console.log('Certificate Download Status:', rs);
if (selectedMode === DownloadSelectedMode.IMAGE) {
setDepositReceiptSampleOn(true)
setDepositReceiptData(rs);
setDepositReceiptSampleOn(true);
} else if (selectedMode === DownloadSelectedMode.EMAIL) {
snackBar('입금확인서 다운 성공')
console.log('Certificate Download Status:', rs);
}
}).catch((error) => {
console.error('Certificate Download Failed:', error);
@@ -136,6 +141,7 @@ export const PayoutDetail = ({
</div>
<div className="num-store">{detail?.companyName}</div>
<div className="num-day">{moment(detail?.settlementDate).format('YYYY.MM.DD')}</div>
{depositAmount != null && (
<div className="receipt-row">
<button
className="receipt-btn"
@@ -146,6 +152,7 @@ export const PayoutDetail = ({
<span>{t('additionalService.payout.depositCertificate')}</span>
</button>
</div>
)}
</div>
<div className="detail-divider"></div>
<div className="pay-detail">
@@ -208,6 +215,14 @@ export const PayoutDetail = ({
<DepositReceiptSample
depositReceiptSampleOn={depositReceiptSampleOn}
setDepositReceiptSampleOn={setDepositReceiptSampleOn}
depositInfo={{
depositDate: depositReceiptData?.depositDateTime ? moment(depositReceiptData.depositDateTime, 'YYYYMMDDHHmmss').format('YYYY/MM/DD HH:mm:ss') : undefined,
depositBank: depositReceiptData?.depositBank,
depositAccount: depositReceiptData?.depositAccount,
amount: depositReceiptData?.amount,
depositReason: depositReceiptData?.depositRemark,
depositId: depositReceiptData?.depositId
}}
></DepositReceiptSample>
}
</>

View File

@@ -95,7 +95,7 @@ export const DepositReceiptSample = ({
value={depositInfo?.amount}
thousandSeparator
displayType='text'
suffix='원'
suffix=' 원'
>
</NumericFormat>
</div>

View File

@@ -1020,7 +1020,8 @@
"select": "Select",
"request": "Request",
"searchRequest": "Search Request",
"searchRequestSuccess": "Search Reqeust Complete"
"searchRequestSuccess": "Search Reqeust Complete",
"accountNumberWrong": "Invalid account number. Please check the account number."
},
"faceAuth": {
"authentication": "Authentication",

View File

@@ -1020,7 +1020,8 @@
"select": "선택",
"request": "신청",
"searchRequest": "조회 신청",
"searchRequestSuccess": "조회 신청을 성공하였습니다."
"searchRequestSuccess": "조회 신청을 성공하였습니다.",
"accountNumberWrong": "잘못된 계좌번호입니다. 계좌번호를 확인해주세요."
},
"faceAuth": {
"authentication": "인증",

View File

@@ -172,13 +172,12 @@ export const AccountHolderSearchPage = () => {
bankCode: bank,
resultStatus: resultStatus
}).then((rs) => {
// if (rs.status) {
// setTimeout(() => {
// snackBar("다운로드가 완료되었습니다.");
// }, 2000);
// } else {
// snackBar("다운로드에 실패했습니다.")
// }
console.log('Excel Download Status:', rs.status);
}).catch((e: any) => {
if(e.response?.data?.error?.message){
snackBar(e.response?.data?.error?.message);
return;
}
});
}
};

View File

@@ -20,9 +20,6 @@ import { AccountHolderSearchDetail } from '@/entities/additional-service/ui/acco
export const AccountHolderSearchRequestPage = () => {
const { navigate } = useNavigate();
const { t } = useTranslation();
// const [detailOn, setDetailOn] = useState<boolean>(false);
// const [detailMid, setDetailMid] = useState<string>('');
// const [detailTid, setDetailTid] = useState<string>('');
const userMid = useStore.getState().UserStore.mid;
const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids;
@@ -59,16 +56,6 @@ export const AccountHolderSearchRequestPage = () => {
setFormData({ ...formData, [field]: value });
};
// const setDetailData = (response: ExtensionAccountHolderSearchRequestResponse) => {
// if (formData.mid) {
// setDetailMid(formData.mid);
// }
// if (response?.data?.tid) {
// setDetailTid(response.data.tid);
// }
// setDetailOn(true);
// }
const onClickToRequest = () => {
const requestParams: ExtensionAccountHolderSearchRequestParams = {
mid: formData.mid,
@@ -83,11 +70,16 @@ export const AccountHolderSearchRequestPage = () => {
console.log("Account holder search request success: ", response.status)
snackBar(t('additionalService.accountHolderSearch.searchRequestSuccess'))
navigate(PATHS.additionalService.accountHolderSearch.list);
//setDetailData(response)
} else {
console.log("AccountHolder Fail", response.error?.code)
if (response.error?.code === "007") {
const errorMessage = t('additionalService.accountHolderSEarch.accountNumberWrong')
snackBar(`[${t('common.failed')}] ${errorMessage}`)
} else {
const errorMessage = response.error?.message || t('common.requestFailed');
snackBar(`[${t('common.failed')}] ${errorMessage}`);
}
}
})
.catch((e) => {
const errorMessage = e?.response?.data?.error?.message || e?.message || t('common.errorOccurred');
@@ -180,12 +172,6 @@ export const AccountHolderSearchRequestPage = () => {
</div>
</div>
</main>
{/* <AccountHolderSearchDetail
detailOn={detailOn}
setDetailOn={setDetailOn}
mid={detailMid}
tid={detailTid}
></AccountHolderSearchDetail> */}
</>
)
}

View File

@@ -65,6 +65,7 @@ export const PayoutListPage = () => {
const [detailOn, setDetailOn] = useState<boolean>(false);
const [detailMid, setDetailMid] = useState<string>('');
const [detailTid, setDetailTid] = useState<string>('');
const [detailDepositAmount, setDetailDepositAmount] = useState<number | undefined>();
const { mutateAsync: extensionPayoutList } = useExtensionPayoutListMutation();
const { mutateAsync: extensionPayoutExcel } = useExtensionPayoutExcelMutation();
@@ -196,6 +197,9 @@ export const PayoutListPage = () => {
if (detailData.tid) {
setDetailTid(detailData.tid);
}
if (detailData.depositAmount !== undefined) {
setDetailDepositAmount(detailData.depositAmount);
}
};
const onClickToOpenFilter = () => {
@@ -378,6 +382,7 @@ export const PayoutListPage = () => {
setDetailOn={setDetailOn}
mid={detailMid}
tid={detailTid}
depositAmount={detailDepositAmount}
>
</PayoutDetail>
{ !!downloadBottomSheetOn &&