From 32dec9af259f300fa3a3ea5f6bda2f0f0e9de23b Mon Sep 17 00:00:00 2001 From: Jay Sheen Date: Wed, 24 Sep 2025 09:53:09 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=B8=EA=B8=88=EA=B3=84=EC=82=B0=EC=84=9C?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EB=B0=8F=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tax/api/use-invoice-detail-mutation.ts | 5 +- .../tax/api/use-invoice-list-mutation.ts | 29 +++++++++ src/entities/tax/model/types.ts | 36 +++++++---- src/entities/tax/ui/invoice-filter.tsx | 12 +++- src/entities/tax/ui/invoice-list-wrap.tsx | 63 ++++++++++++++++--- src/entities/tax/ui/list-date-group.tsx | 10 +-- src/entities/tax/ui/list-item.tsx | 19 +++--- src/pages/tax/invoice/list-page.tsx | 3 +- src/shared/api/api-url-tax.ts | 13 ++++ 9 files changed, 150 insertions(+), 40 deletions(-) create mode 100644 src/entities/tax/api/use-invoice-list-mutation.ts create mode 100644 src/shared/api/api-url-tax.ts diff --git a/src/entities/tax/api/use-invoice-detail-mutation.ts b/src/entities/tax/api/use-invoice-detail-mutation.ts index 642f13e..49f9447 100644 --- a/src/entities/tax/api/use-invoice-detail-mutation.ts +++ b/src/entities/tax/api/use-invoice-detail-mutation.ts @@ -1,5 +1,5 @@ import axios from 'axios'; -import { API_URL } from '@/shared/api/urls'; +import { API_URL_TAX } from '@/shared/api/api-url-tax'; import { resultify } from '@/shared/lib/resultify'; import { CBDCAxiosError } from '@/shared/@types/error'; import { @@ -10,11 +10,10 @@ import { useMutation, UseMutationOptions } from '@tanstack/react-query'; -import { API_URL_TRANSACTION } from '@/shared/api/api-url-transaction'; export const invoiceDetail = (params: InvoiceDetailParams) => { return resultify( - axios.post(API_URL_TRANSACTION.allTransactionList(), params), + axios.post(API_URL_TAX.invoiceDetail(), params), ); }; diff --git a/src/entities/tax/api/use-invoice-list-mutation.ts b/src/entities/tax/api/use-invoice-list-mutation.ts new file mode 100644 index 0000000..6353b42 --- /dev/null +++ b/src/entities/tax/api/use-invoice-list-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_TAX } from '@/shared/api/api-url-tax'; +import { resultify } from '@/shared/lib/resultify'; +import { CBDCAxiosError } from '@/shared/@types/error'; +import { + InvoiceListResponse, + InvoiceListParams, +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const invoiceList = (params: InvoiceListParams) => { + return resultify( + axios.post(API_URL_TAX.invoiceList(), params), + ); +}; + +export const useInvoiceListMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: InvoiceListParams) => invoiceList(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/tax/model/types.ts b/src/entities/tax/model/types.ts index 9391853..6124c87 100644 --- a/src/entities/tax/model/types.ts +++ b/src/entities/tax/model/types.ts @@ -1,3 +1,6 @@ +import { DefaulResponsePagination, DefaultRequestPagination } from '@/entities/common/model/types'; + + export enum TaxTabKeys { InvoiceList = 'InvoiceList', VatReference = 'VatReference', @@ -18,22 +21,30 @@ export enum DetailInfoSectionKeys { }; export interface InvoiceListParams { + mid: string; + startDate?: string; + endDate?: string; + receiptType?: string; + targetType?: string; +}; -}; -export interface invoiceListResponse { +export interface InvoiceListResponse extends DefaulResponsePagination { + content: Array; +} + +export interface ListItemProps extends InvoiceListItem { }; -export interface ListItem { - tid?: string; - pname?: string; - userid?: string; - idate?: string; - kind?: string; - amount?: number; -}; -export interface ListItemProps extends ListItem{ - + +export interface InvoiceListItem { + id: number + companyName: string; + mid: string; + issueDate: string; + paymentMethod: string; + amount: number; }; + export interface ListDateGroupProps { date: string; items: Array @@ -45,6 +56,7 @@ export interface InvoiceDetailParams { svcCd?: string; tid: string; }; + export interface InvoiceDetailResponse { }; diff --git a/src/entities/tax/ui/invoice-filter.tsx b/src/entities/tax/ui/invoice-filter.tsx index 4897e7e..2d1406b 100644 --- a/src/entities/tax/ui/invoice-filter.tsx +++ b/src/entities/tax/ui/invoice-filter.tsx @@ -4,7 +4,17 @@ import { InvoiceFilterProps } from '../model/types'; export const InvoiceFilter = ({ filterOn, - setFilterOn + setFilterOn, + mid, + startDate, + endDate, + receiptType, + targetType, + setMid, + setStartDate, + setEndDate, + setReceiptType, + setTargetType }: InvoiceFilterProps) => { const variants = { hidden: { x: '100%' }, diff --git a/src/entities/tax/ui/invoice-list-wrap.tsx b/src/entities/tax/ui/invoice-list-wrap.tsx index b30c473..b7fcb0a 100644 --- a/src/entities/tax/ui/invoice-list-wrap.tsx +++ b/src/entities/tax/ui/invoice-list-wrap.tsx @@ -1,23 +1,45 @@ +import moment from 'moment'; + import { useEffect, useState } from 'react'; import { IMAGE_ROOT } from '@/shared/constants/common'; import { InvoiceFilter } from './invoice-filter'; import { SortOptionsBox } from '@/entities/common/ui/sort-options-box'; import { SortByKeys } from '@/entities/common/model/types'; import { InvoiceList } from './invoice-list'; +import { useInvoiceListMutation } from '../api/use-invoice-list-mutation'; +import { DEFAULT_PAGE_PARAM } from '@/entities/common/model/constant'; export const InvoiceListWrap = () => { const [filterOn, setFilterOn] = useState(false); const [sortBy, setSortBy] = useState(SortByKeys.New); const [listItems, setListItems] = useState({}); + const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); + const [mid, setMid] = useState('nictest00m'); + const [startDate, setStartDate] = useState(moment().subtract(1, 'month').format('YYYY-MM-DD')); + const [endDate, setEndDate] = useState(moment().format('YYYY-MM-DD')); + const [receiptType, setReceiptType] = useState(''); + const [targetType, setTargetType] = useState(''); + const { mutateAsync: invoiceList } = useInvoiceListMutation(); const callList = () => { - setListItems({ - '20250601': [ - {tid: 'a1234567', pname: '와와디디', userid: 'nictest01m', idate: '20250630', kind: 'PG수수료', amount: 48125100}, - {tid: 'b34534534', pname: '와와디디', userid: 'wadizcop@m', idate: '20250630', kind: 'PG수수료', amount: 23845000}, - ] - }) + let listParams = { + mid: mid, + startDate: startDate, + endDate: endDate, + receiptType: receiptType, + targetType: targetType, + }; + invoiceList(listParams).then((rs) => { + setListItems(assembleData(rs.content)); + }); + // setListItems({ + // '20250601': [ + // {tid: 'a1234567', pname: '와와디디', userid: 'nictest01m', idate: '20250630', kind: 'PG수수료', amount: 48125100}, + // {tid: 'b34534534', pname: '와와디디', userid: 'wadizcop@m', idate: '20250630', kind: 'PG수수료', amount: 23845000}, + // ] + // }) }; + const onClickToOpenFIlter = () => { setFilterOn(true); }; @@ -28,6 +50,23 @@ export const InvoiceListWrap = () => { useEffect(() => { callList(); }, []); + + const assembleData = (content: Array) => { + let data: any = {}; + if(content && content.length > 0){ + for(let i=0;i
@@ -36,7 +75,7 @@ export const InvoiceListWrap = () => {
-
{ pname } ({ userid })
+
{ companyName } ({ mid })
- { moment(idate).format('YYYY.MM.DD') } + { moment(issueDate).format('YYYY.MM.DD') } | - { kind } + { paymentMethod }
diff --git a/src/pages/tax/invoice/list-page.tsx b/src/pages/tax/invoice/list-page.tsx index 2d12013..e8999c1 100644 --- a/src/pages/tax/invoice/list-page.tsx +++ b/src/pages/tax/invoice/list-page.tsx @@ -14,7 +14,6 @@ import { export const InvoiceListPage = () => { const { navigate } = useNavigate(); - const [activeTab, setActiveTab] = useState(TaxTabKeys.InvoiceList); useSetHeaderTitle('부가세 신고 자료'); useSetHeaderType(HeaderType.LeftArrow); @@ -27,7 +26,7 @@ export const InvoiceListPage = () => { <>
-
+
diff --git a/src/shared/api/api-url-tax.ts b/src/shared/api/api-url-tax.ts new file mode 100644 index 0000000..f10f1d9 --- /dev/null +++ b/src/shared/api/api-url-tax.ts @@ -0,0 +1,13 @@ +import { + API_BASE_URL, + API_URL_KEY, +} from './../constants/url'; + +export const API_URL_TAX = { + invoiceList: () => { + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/list`; + }, + invoiceDetail: () => { + return `${API_BASE_URL}/api/v1/${API_URL_KEY}/vat-return/detail`; + }, +}; \ No newline at end of file