에스크로 및 세금계산서 상세 수정

This commit is contained in:
focp212@naver.com
2025-10-28 20:09:43 +09:00
parent cf428c7466
commit 84ade896c4
4 changed files with 142 additions and 101 deletions

View File

@@ -43,7 +43,7 @@ export interface Breakdown {
totalAmount: number; totalAmount: number;
supplyAmount: number; supplyAmount: number;
vatAmount: number; vatAmount: number;
transactionCount: number; transactionAmount: number;
}; };
export interface VatReturnListResponse extends DefaulResponsePagination { export interface VatReturnListResponse extends DefaulResponsePagination {
@@ -77,6 +77,7 @@ export interface VatReturnDetailParams {
export interface VatReturnDetailResponse { export interface VatReturnDetailResponse {
id?: number; id?: number;
transactionAmount?: number;
totalAmount?: number; totalAmount?: number;
supplyAmount?: number; supplyAmount?: number;
vatAmount?: number; vatAmount?: number;

View File

@@ -1,21 +1,47 @@
import { IMAGE_ROOT } from "@/shared/constants/common"; import { IMAGE_ROOT } from "@/shared/constants/common";
import { Breakdown } from "../model/types"; import { Breakdown } from "../model/types";
import moment from "moment";
import { NumericFormat } from "react-number-format";
import { SlideDown } from 'react-slidedown';
import 'react-slidedown/lib/slidedown.css';
import { useEffect, useState } from "react";
export interface VatReturnListDetailBottomSheetProps { export interface VatReturnListDetailBottomSheetProps {
bottomSheetOn: boolean; bottomSheetOn: boolean;
setBottomSheetOn: (bottomSheetOn: boolean) => void; setBottomSheetOn: (bottomSheetOn: boolean) => void;
breakdown: Array<Breakdown> breakdown: Array<Breakdown>;
transactionAmount?: number;
supplyAmount?: number;
vatAmount?: number;
totalAmount?: number;
}; };
export const VatReturnListDetailBottomSheet = ({ export const VatReturnListDetailBottomSheet = ({
bottomSheetOn, bottomSheetOn,
setBottomSheetOn, setBottomSheetOn,
breakdown breakdown,
transactionAmount,
supplyAmount,
vatAmount,
totalAmount
}: VatReturnListDetailBottomSheetProps) => { }: VatReturnListDetailBottomSheetProps) => {
const [isOpenDetail, setIsOpenDetail] = useState<Array<boolean>>([]);
const onClickToClose = () => { const onClickToClose = () => {
setBottomSheetOn(false); setBottomSheetOn(false);
}; };
const openDetail = (index: number) => {
let arr = breakdown.map((value, index) => false);
arr[index] = true;
setIsOpenDetail(arr);
};
useEffect(() => {
let arr = breakdown.map((value, index) => false);
setIsOpenDetail(arr);
}, [])
return ( return (
<> <>
<div className="bg-dim"></div> <div className="bg-dim"></div>
@@ -41,99 +67,119 @@ export const VatReturnListDetailBottomSheet = ({
<div className="summary"> <div className="summary">
<div className="row"> <div className="row">
<div className="label desc dot"> :</div> <div className="label desc dot"> :</div>
<div className="value">1,000,000,000</div> <div className="value">
<NumericFormat
value={ transactionAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</div>
</div> </div>
<div className="row"> <div className="row">
<div className="label desc dot"> :</div> <div className="label desc dot"> :</div>
<div className="value">43,758,520</div> <div className="value">
<NumericFormat
value={ supplyAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</div>
</div> </div>
<div className="row"> <div className="row">
<div className="label desc dot">VAT :</div> <div className="label desc dot">VAT :</div>
<div className="value">4,366,850</div> <div className="value">
<NumericFormat
value={ vatAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</div>
</div> </div>
<div className="row"> <div className="row">
<div className="label desc dot"> :</div> <div className="label desc dot"> :</div>
<div className="value">48,125,100</div> <div className="value">
</div> <NumericFormat
</div> value={ totalAmount }
<div className="list"> thousandSeparator
<div className="list-header"> displayType="text"
<div className="head-date"></div> suffix='원'
<div className="head-amount"></div> ></NumericFormat>
</div>
<div className="item">
<span className="dot"></span>
<span className="date">2025/08/01</span>
<div className="amount">
<span className="text">8,125,100</span>
<img
className="arrow up"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
alt=""
/>
</div>
</div>
<div className="item item-detail">
<div className="labels">
<span></span>
<span></span>
<span>VAT</span>
</div>
<div className="values">
<span>1,000,000</span>
<span>720,000</span>
<span>80,000</span>
</div>
</div>
<div className="item">
<span className="dot"></span>
<span className="date">2025/08/01</span>
<div className="amount">
<span className="text">8,125,100</span>
<img
className="arrow down"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
alt=""
/>
</div>
</div>
<div className="item">
<span className="dot"></span>
<span className="date">2025/08/01</span>
<div className="amount">
<span className="text">8,125,100</span>
<img
className="arrow down"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
alt=""
/>
</div>
</div>
<div className="item">
<span className="dot"></span>
<span className="date">2025/08/01</span>
<div className="amount">
<span className="text">8,125,100</span>
<img
className="arrow down"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
alt=""
/>
</div>
</div>
<div className="item">
<span className="dot"></span>
<span className="date">2025/08/01</span>
<div className="amount">
<span className="text">8,125,100</span>
<img
className="arrow down"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
alt=""
/>
</div> </div>
</div> </div>
</div> </div>
{ breakdown && breakdown.length > 0 &&
<div className="list">
<div className="list-header">
<div className="head-date"></div>
<div className="head-amount"></div>
</div>
{
breakdown.map((value, index) => (
<>
<div className="item">
<span className="dot"></span>
<span className="date">{ value.transactionDate? moment(value.transactionDate).format('YYYY-MM-DD'): '' }</span>
<div className="amount">
<span className="text">
<NumericFormat
value={ value.totalAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</span>
<img
className="arrow down"
src={ IMAGE_ROOT + '/ico_arrow.svg' }
onClick={ () => openDetail(index) }
/>
</div>
</div>
<SlideDown className={'my-dropdown-slidedown'}>
{ isOpenDetail[index] &&
<div className="item item-detail">
<div className="labels">
<span></span>
<span></span>
<span>VAT</span>
</div>
<div className="values">
<span>
<NumericFormat
value={ value.transactionAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</span>
<span>
<NumericFormat
value={ value.supplyAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</span>
<span>
<NumericFormat
value={ value.vatAmount }
thousandSeparator
displayType="text"
suffix='원'
></NumericFormat>
</span>
</div>
</div>
}
</SlideDown>
</>
))
}
</div>
}
</div> </div>
</div> </div>
</div> </div>

View File

@@ -164,7 +164,7 @@ export const BillingListPage = () => {
return ( return (
<> <>
<main> <main>
<div className="tab-content"> <div className="tab-content pb-86">
<div className="tab-pane sub active"> <div className="tab-pane sub active">
<div className="summary-section"> <div className="summary-section">
<div className="credit-controls"> <div className="credit-controls">

View File

@@ -9,9 +9,7 @@ import {
VatReturnBreakdownParams, VatReturnBreakdownParams,
VatReturnBreakdownResponse, VatReturnBreakdownResponse,
VatReturnDetailParams, VatReturnDetailParams,
VatReturnDetailResponse, VatReturnDetailResponse
VatReturnTaxInvoiceParams,
VatReturnTaxInvoiceResponse
} from '@/entities/vat-return/model/types'; } from '@/entities/vat-return/model/types';
import { import {
useSetOnBack, useSetOnBack,
@@ -32,13 +30,13 @@ export const DetailPage = () => {
const location = useLocation(); const location = useLocation();
let taxInvoiceNumber = location?.state.taxInvoiceNumber; let taxInvoiceNumber = location?.state.taxInvoiceNumber;
taxInvoiceNumber = 'TAX202506300001'; // taxInvoiceNumber = 'TAX202506300001';
const [openAmount, setOpenAmount] = useState<boolean>(false); const [openAmount, setOpenAmount] = useState<boolean>(false);
const [bottomSheetOn, setBottomSheetOn] = useState<boolean>(false); const [bottomSheetOn, setBottomSheetOn] = useState<boolean>(false);
const [detail, setDetail] = useState<VatReturnTaxInvoiceResponse>({}); const [detail, setDetail] = useState<VatReturnDetailResponse>({});
const [breakdown, setBreakdown] = useState<Array<Breakdown>>([]); const [breakdown, setBreakdown] = useState<Array<Breakdown>>([]);
useSetHeaderTitle('세금계산서 상세'); useSetHeaderTitle('세금계산서 상세');
useSetHeaderType(HeaderType.RightClose); useSetHeaderType(HeaderType.RightClose);
useSetOnBack(() => { useSetOnBack(() => {
@@ -56,24 +54,16 @@ export const DetailPage = () => {
}; };
vatReturnDetail(params).then((rs: VatReturnDetailResponse) => { vatReturnDetail(params).then((rs: VatReturnDetailResponse) => {
setDetail(rs); setDetail(rs);
}); });
}; };
const callVatReturnBreakdown = async() => { const callVatReturnBreakdown = async() => {
let params: VatReturnBreakdownParams = { let params: VatReturnBreakdownParams = {
taxInvoiceNumber: taxInvoiceNumber, taxInvoiceNumber: taxInvoiceNumber,
}; };
try{
let rs = await vatReturnBreakdown(params);
}
catch{
console.log('error');
return;
}
/*
vatReturnBreakdown(params).then((rs: VatReturnBreakdownResponse) => { vatReturnBreakdown(params).then((rs: VatReturnBreakdownResponse) => {
setBreakdown(rs.breakdown); setBreakdown(rs.breakdown);
}); });
*/
}; };
const onClickToOpenBottomSheet = () => { const onClickToOpenBottomSheet = () => {
@@ -82,7 +72,7 @@ export const DetailPage = () => {
useEffect(() => { useEffect(() => {
callTaxInvoice(); callTaxInvoice();
// callVatReturnBreakdown(); callVatReturnBreakdown();
}, []); }, []);
return ( return (
@@ -123,6 +113,10 @@ export const DetailPage = () => {
bottomSheetOn={ bottomSheetOn } bottomSheetOn={ bottomSheetOn }
setBottomSheetOn={ setBottomSheetOn } setBottomSheetOn={ setBottomSheetOn }
breakdown={ breakdown } breakdown={ breakdown }
transactionAmount={ detail?.transactionAmount }
supplyAmount={ detail?.supplyAmount }
vatAmount={ detail?.vatAmount }
totalAmount={ detail?.totalAmount }
></VatReturnListDetailBottomSheet> ></VatReturnListDetailBottomSheet>
} }
</> </>