email bottom

This commit is contained in:
focp212@naver.com
2025-10-22 17:45:38 +09:00
parent 0fe0299a58
commit d5d8eed699
2 changed files with 84 additions and 32 deletions

View File

@@ -1,22 +1,37 @@
import { BottomSheetMotionDuration, BottomSheetMotionVaiants } from '@/entities/common/model/constant'; import { BottomSheetMotionDuration, BottomSheetMotionVaiants } from '@/entities/common/model/constant';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import { ChangeEvent, useState } from 'react';
export interface EmailBottomSheetProps { export interface EmailBottomSheetProps {
bottomSheetOn: boolean; bottomSheetOn: boolean;
setBottomSheetOn: (bottomSheetOn: boolean) => void; setBottomSheetOn: (bottomSheetOn: boolean) => void;
callPurposeUpdate: () => void; imageSave: boolean;
sendEmail: boolean;
sendRequest: (email?: string) => void;
}; };
export const EmailBottomSheet = ({ export const EmailBottomSheet = ({
bottomSheetOn, bottomSheetOn,
setBottomSheetOn, setBottomSheetOn,
imageSave,
sendEmail,
sendRequest
}: EmailBottomSheetProps) => { }: EmailBottomSheetProps) => {
const [userEmail, setUserEmail] = useState<string>('');
const emailList = [
{name: 'test1@nicepay.co.kr', value: 'test1@nicepay.co.kr'},
{name: 'test2@nicepay.co.kr', value: 'test2@nicepay.co.kr'},
{name: 'test3@nicepay.co.kr', value: 'test3@nicepay.co.kr'},
];
const onClickToClose = () => { const onClickToClose = () => {
setBottomSheetOn(false); setBottomSheetOn(false);
}; };
const onClickToRequest = () => {
sendRequest(userEmail);
};
return ( return (
<> <>
@@ -48,6 +63,7 @@ export const EmailBottomSheet = ({
<div className="bottomsheet-content"> <div className="bottomsheet-content">
<div className="email-section"> <div className="email-section">
{ !!imageSave &&
<div className="email-label mb-10"> <div className="email-label mb-10">
<div className="mail-icon"> <div className="mail-icon">
<div className="mail-icon-bg"></div> <div className="mail-icon-bg"></div>
@@ -58,6 +74,9 @@ export const EmailBottomSheet = ({
</div> </div>
<span className="label-text"> </span> <span className="label-text"> </span>
</div> </div>
}
{ !!sendEmail &&
<>
<div className="email-label"> <div className="email-label">
<div className="mail-icon"> <div className="mail-icon">
<div className="mail-icon-bg"></div> <div className="mail-icon-bg"></div>
@@ -68,20 +87,28 @@ export const EmailBottomSheet = ({
</div> </div>
<span className="label-text"> </span> <span className="label-text"> </span>
</div> </div>
<div className="email-select"> <div className="email-select">
<div className="select-wrapper"> <div className="select-wrapper">
<select> <select
<option>test@nicepay.co.kr</option> value={ userEmail }
<option>test@nicepay.co.kr</option> onChange={ (e: ChangeEvent<HTMLSelectElement>) => setUserEmail(e.target.value) }
<option>2</option> >
{
emailList.map((value, index) => (
<option value={ value.value }>{ value.value }</option>
))
}
</select> </select>
</div> </div>
</div> </div>
{/*
<div className="error-message"> <div className="error-message">
<p>등록된 메일 정보가 없습니다.<br />이메일 인증정보를 사용자관리 메뉴에서 추가 후 신청하세요.</p> <p>등록된 메일 정보가 없습니다.<br />이메일 인증정보를 사용자관리 메뉴에서 추가 후 신청하세요.</p>
</div> </div>
*/}
</>
}
</div> </div>
</div> </div>
@@ -89,7 +116,7 @@ export const EmailBottomSheet = ({
<button <button
className="btn-50 btn-blue flex-1" className="btn-50 btn-blue flex-1"
type="button" type="button"
disabled onClick={ onClickToRequest }
></button> ></button>
</div> </div>
</motion.div> </motion.div>

View File

@@ -1,11 +1,20 @@
import moment from 'moment'; import moment from 'moment';
import { useStore } from '@/shared/model/store';
import { ChangeEvent, useEffect, useState } from 'react'; import { ChangeEvent, useEffect, useState } from 'react';
import { NumericFormat } from 'react-number-format'; import { NumericFormat } from 'react-number-format';
import { IMAGE_ROOT } from '@/shared/constants/common'; import { IMAGE_ROOT } from '@/shared/constants/common';
import { PATHS } from '@/shared/constants/paths'; import { PATHS } from '@/shared/constants/paths';
import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { useNavigate } from '@/shared/lib/hooks/use-navigate';
import { AllTransactionList } from '@/entities/transaction/ui/all-transaction-list'; import { AllTransactionList } from '@/entities/transaction/ui/all-transaction-list';
import { AllTransactionListItem, TransactionCategory, AllTransactionStatusCode, AllTransactionServiceCode, AllTransactionSearchCl, AllTransactionListParams, ListItemProps, AllTransactionListSummaryParams, AllTransactionListResponse, AllTransactionListSummaryResponse } from '@/entities/transaction/model/types'; import {
TransactionCategory,
AllTransactionSearchCl,
AllTransactionListParams,
ListItemProps,
AllTransactionListSummaryParams,
AllTransactionListResponse,
AllTransactionListSummaryResponse
} from '@/entities/transaction/model/types';
import { useAllTransactionListMutation } from '@/entities/transaction/api/use-all-transaction-list-mutation'; import { useAllTransactionListMutation } from '@/entities/transaction/api/use-all-transaction-list-mutation';
import { useAllTransactionListSummaryMutation } from '@/entities/transaction/api/use-all-transaction-list-summary-mutation'; import { useAllTransactionListSummaryMutation } from '@/entities/transaction/api/use-all-transaction-list-summary-mutation';
import { useDownloadExcelMutation } from '@/entities/transaction/api/use-download-excel-mutation'; import { useDownloadExcelMutation } from '@/entities/transaction/api/use-download-excel-mutation';
@@ -19,8 +28,7 @@ import {
useSetHeaderType, useSetHeaderType,
useSetFooterMode useSetFooterMode
} from '@/widgets/sub-layout/use-sub-layout'; } from '@/widgets/sub-layout/use-sub-layout';
import { useStore } from '@/shared/model/store'; import { EmailBottomSheet } from '@/entities/common/ui/email-bottom-sheet';
import { useCodesListByCodeClMutation } from '@/entities/common/api/use-codes-list-by-codeCl-mutaion';
export const AllTransactionListPage = () => { export const AllTransactionListPage = () => {
const { navigate } = useNavigate(); const { navigate } = useNavigate();
@@ -35,8 +43,8 @@ export const AllTransactionListPage = () => {
const [mid, setMid] = useState<string>(userMid); const [mid, setMid] = useState<string>(userMid);
const [moid, setMoid] = useState<string>(''); const [moid, setMoid] = useState<string>('');
const [tid, setTid] = useState<string>(''); const [tid, setTid] = useState<string>('');
const [dateCl, setDateCl] = useState<string>(); const [dateCl, setDateCl] = useState<string>('');
const [goodsName, setGoodsName] = useState<string>(); const [goodsName, setGoodsName] = useState<string>('');
// const [fromDate, setFromDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD')); // const [fromDate, setFromDate] = useState(moment().subtract(1, 'month').format('YYYYMMDD'));
const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD')); const [fromDate, setFromDate] = useState(moment().format('YYYYMMDD'));
const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [toDate, setToDate] = useState(moment().format('YYYYMMDD'));
@@ -52,6 +60,8 @@ export const AllTransactionListPage = () => {
const [totalCount, setTotalCount] = useState<number>(0); const [totalCount, setTotalCount] = useState<number>(0);
const [totalAmount, setTotalAmount] = useState<number>(0); const [totalAmount, setTotalAmount] = useState<number>(0);
const [emailBottomSheetOn, setEmailBottomSheetOn] = useState<boolean>(false);
useSetHeaderTitle('거래내역 조회'); useSetHeaderTitle('거래내역 조회');
useSetHeaderType(HeaderType.LeftArrow); useSetHeaderType(HeaderType.LeftArrow);
@@ -62,7 +72,6 @@ export const AllTransactionListPage = () => {
const { mutateAsync: allTransactionList } = useAllTransactionListMutation(); const { mutateAsync: allTransactionList } = useAllTransactionListMutation();
const { mutateAsync: allTransactionListSummary } = useAllTransactionListSummaryMutation(); const { mutateAsync: allTransactionListSummary } = useAllTransactionListSummaryMutation();
const { mutateAsync: codesListByCodeCl} = useCodesListByCodeClMutation();
const { mutateAsync: downloadExcel } = useDownloadExcelMutation(); const { mutateAsync: downloadExcel } = useDownloadExcelMutation();
const callList = (option?: { const callList = (option?: {
@@ -112,12 +121,18 @@ export const AllTransactionListPage = () => {
setFilterOn(!filterOn); setFilterOn(!filterOn);
}; };
const onClickToDownloadExcel = () => { const onClickToDownloadExcel = () => {
setEmailBottomSheetOn(true);
};
const onRequestDownloadExcel = (userEmail?: string) => {
// tid??? 확인 필요 // tid??? 확인 필요
/*
downloadExcel({ downloadExcel({
// tid: tid // tid: tid
}).then((rs) => { }).then((rs) => {
}); });
*/
}; };
const onClickToSort = (sort: SortTypeKeys) => { const onClickToSort = (sort: SortTypeKeys) => {
setSortType(sort); setSortType(sort);
@@ -270,6 +285,16 @@ export const AllTransactionListPage = () => {
setSearchValue={ setSearchValue } setSearchValue={ setSearchValue }
serviceCodeOptions={ serviceCodeOptions } serviceCodeOptions={ serviceCodeOptions }
></AllTransactionFilter> ></AllTransactionFilter>
{ !!emailBottomSheetOn &&
<EmailBottomSheet
bottomSheetOn={ emailBottomSheetOn }
setBottomSheetOn={ setEmailBottomSheetOn }
imageSave={ false }
sendEmail={ true }
sendRequest={ onRequestDownloadExcel }
></EmailBottomSheet>
}
</> </>
); );
}; };