From 989147ab4b5f78af113464ac8018e48c810f453a Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Wed, 24 Sep 2025 10:48:44 +0900 Subject: [PATCH] =?UTF-8?q?ars=20=EC=83=81=EC=84=B8=20=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B2=BD=EB=A1=9C?= =?UTF-8?q?=20=EC=84=A4=E3=84=B9=EC=A0=95=20=EC=B6=94=EA=B0=80=20ars=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EB=B0=8F=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../additional-service/model/ars/constant.ts | 11 +- .../additional-service/model/ars/types.ts | 34 ++-- .../ui/filter/ars-filter.tsx | 169 ++++++++++++++++++ .../additional-service/ui/list-item.tsx | 15 ++ .../additional-service-pages.tsx | 2 + .../additional-service/ars/detail-page.tsx | 6 + .../additional-service/ars/list-page.tsx | 29 ++- src/shared/constants/paths.ts | 4 + src/shared/constants/route-names.ts | 1 + src/shared/ui/filter/calendar.tsx | 12 +- 10 files changed, 254 insertions(+), 29 deletions(-) create mode 100644 src/entities/additional-service/ui/filter/ars-filter.tsx create mode 100644 src/pages/additional-service/ars/detail-page.tsx diff --git a/src/entities/additional-service/model/ars/constant.ts b/src/entities/additional-service/model/ars/constant.ts index 773350a..01aa0fb 100644 --- a/src/entities/additional-service/model/ars/constant.ts +++ b/src/entities/additional-service/model/ars/constant.ts @@ -1,7 +1,14 @@ -import { PaymentStatus } from './types'; +import { OrderStatus, PaymentStatus } from './types'; -export const PaymentStatusBtnGroup = [ +export const ArsPaymentStatusBtnGroup = [ {name: '전체', value: PaymentStatus.ALL }, {name: '결제완료', value: PaymentStatus.COMPLETE }, {name: '미결제', value: PaymentStatus.UNPAID } +]; +export const ArsOrderStatusBtnGroup = [ + {name: '전체', value: OrderStatus.ALL }, + {name: '결제대기', value: OrderStatus.PENDING }, + {name: '결제성공', value: OrderStatus.SUCCESS }, + {name: '기간만료', value: OrderStatus.EXPIRED }, + {name: '취소완료', value: OrderStatus.CANCELED }, ]; \ No newline at end of file diff --git a/src/entities/additional-service/model/ars/types.ts b/src/entities/additional-service/model/ars/types.ts index 9fc5713..3aeae7e 100644 --- a/src/entities/additional-service/model/ars/types.ts +++ b/src/entities/additional-service/model/ars/types.ts @@ -21,15 +21,15 @@ export interface ExtensionArsResendParams { }; export interface ExtensionArsResendResponse {}; export interface ExtensionArsListParams { - mid: string; - moid: string; - fromDate: string; - toDate: string; - paymentStatus: string; - orderStatus: string; - minAmount: number; - maxAmount: number; - page: DefaultRequestPagination; + mid?: string; + moid?: string; + fromDate?: string; + toDate?: string; + paymentStatus?: PaymentStatus + orderStatus?: OrderStatus; + minAmount?: number; + maxAmount?: number; + page?: DefaultRequestPagination; }; export interface ArsListContent { tid?: string; @@ -43,14 +43,14 @@ export interface ExtensionArsListResponse extends DefaulResponsePagination { content: Array; }; export interface ExtensionArsDownloadExcelParams { - mid: string; - moid: string; - fromDate: string; - toDate: string; - paymentStatus: string; - orderStatus: string; - minAmount: number; - maxAmount: number; + mid?: string; + moid?: string; + fromDate?: string; + toDate?: string; + paymentStatus?: string; + orderStatus?: string; + minAmount?: number; + maxAmount?: number; }; export interface ExtensionArsDownloadExcelResponse {}; export interface ExtensionArsDetailParams { diff --git a/src/entities/additional-service/ui/filter/ars-filter.tsx b/src/entities/additional-service/ui/filter/ars-filter.tsx new file mode 100644 index 0000000..3ca167e --- /dev/null +++ b/src/entities/additional-service/ui/filter/ars-filter.tsx @@ -0,0 +1,169 @@ +import { useEffect, useState } from 'react'; +import { motion } from 'framer-motion'; +import { IMAGE_ROOT } from '@/shared/constants/common'; +import { FilterSelect } from '@/shared/ui/filter/select'; +import { FilterCalendar } from '@/shared/ui/filter/calendar'; +import { FilterButtonGroups } from '@/shared/ui/filter/button-groups'; +import { FilterRangeAmount } from '@/shared/ui/filter/range-amount'; +import { + FilterMotionDuration, + FilterMotionStyle, + FilterMotionVariants +} from '@/entities/common/model/constant'; +import moment from 'moment'; +import { FilterInput } from '@/shared/ui/filter/input'; +import { OrderStatus, PaymentStatus } from '../../model/ars/types'; +import { ArsOrderStatusBtnGroup, ArsPaymentStatusBtnGroup } from '../../model/ars/constant'; + +export interface ArsFilterProps { + filterOn: boolean; + setFilterOn: (filterOn: boolean) => void; + mid: string; + moid: string; + fromDate: string; + toDate: string; + paymentStatus: PaymentStatus; + orderStatus: OrderStatus; + minAmount?: number; + maxAmount?: number; + setMid: (mid: string) => void; + setMoid: (moid: string) => void; + setFromDate: (fromDate: string) => void; + setToDate: (toDate: string) => void; + setPaymentStatus: (paymentStatus: PaymentStatus) => void; + setOrderStatus: (orderStatus: OrderStatus) => void; + setMinAmount: (minAmount?: number) => void; + setMaxAmount: (maxAmount?: number) => void; +}; + +export const ArsFilter = ({ + filterOn, + setFilterOn, + mid, + moid, + fromDate, + toDate, + paymentStatus, + orderStatus, + minAmount, + maxAmount, + setMid, + setMoid, + setFromDate, + setToDate, + setPaymentStatus, + setOrderStatus, + setMinAmount, + setMaxAmount +}: ArsFilterProps) => { + + 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 [filterPaymentStatus, setFilterPaymentStatus] = useState(paymentStatus); + const [filterOrderStatus, setFilterOrderStatus] = useState(orderStatus); + const [filterMinAmount, setFilterMinAmount] = useState(minAmount); + const [filterMaxAmount, setFilterMaxAmount] = useState(maxAmount); + + const onClickToClose = () => { + setFilterOn(false); + }; + + const onClickToSetFilter = () => { + setMid(filterMid); + setFilterMoid(filterMoid); + setFromDate(filterFromDate); + setToDate(filterToDate); + setPaymentStatus(filterPaymentStatus); + setOrderStatus(filterOrderStatus); + setMinAmount(filterMinAmount); + setMaxAmount(filterMaxAmount); + onClickToClose(); + }; + + let MidOptions = [ + {name: 'nictest001m', value: 'nictest001m'} + ]; + + useEffect(() => { + setFilterPaymentStatus(paymentStatus); + }, [paymentStatus]); + + return ( + <> + +
+
+
필터
+
+ +
+
+
+ + + + + + +
+
+ +
+
+
+ + ); +}; \ No newline at end of file diff --git a/src/entities/additional-service/ui/list-item.tsx b/src/entities/additional-service/ui/list-item.tsx index 024e05c..2a9313a 100644 --- a/src/entities/additional-service/ui/list-item.tsx +++ b/src/entities/additional-service/ui/list-item.tsx @@ -442,6 +442,21 @@ export const ListItem = ({ ); } + else if (additionalServiceCategory === AdditionalServiceCategory.Ars) { + rs.push( +
+ +
+ ); + } return rs; } diff --git a/src/pages/additional-service/additional-service-pages.tsx b/src/pages/additional-service/additional-service-pages.tsx index 15576ed..e05ea6e 100644 --- a/src/pages/additional-service/additional-service-pages.tsx +++ b/src/pages/additional-service/additional-service-pages.tsx @@ -3,6 +3,7 @@ import { SentryRoutes } from '@/shared/configs/sentry'; import { ROUTE_NAMES } from '@/shared/constants/route-names'; import { IntroPage } from './intro/intro-page'; import { ArsListPage } from './ars/list-page'; +import { ArsDetailPage } from './ars/detail-page'; import { ArsRequestPage } from './ars/request-page'; import { ArsRequestSuccessPage } from './ars/request-success-page'; import { KeyInPaymentPage } from './key-in-payment/key-in-payment-page'; @@ -45,6 +46,7 @@ export const AdditionalServicePages = () => { } /> + } /> } /> } /> diff --git a/src/pages/additional-service/ars/detail-page.tsx b/src/pages/additional-service/ars/detail-page.tsx new file mode 100644 index 0000000..43edcf1 --- /dev/null +++ b/src/pages/additional-service/ars/detail-page.tsx @@ -0,0 +1,6 @@ +export const ArsDetailPage = () => { + + return ( + <> + ); +}; \ No newline at end of file diff --git a/src/pages/additional-service/ars/list-page.tsx b/src/pages/additional-service/ars/list-page.tsx index bf1b010..f3f873b 100644 --- a/src/pages/additional-service/ars/list-page.tsx +++ b/src/pages/additional-service/ars/list-page.tsx @@ -17,7 +17,8 @@ import { useExtensionArsDownloadExcelMutation } from '@/entities/additional-serv import { ListDateGroup } from '@/entities/additional-service/ui/list-date-group'; import { AdditionalServiceCategory } from '@/entities/additional-service/model/types'; import { SortOptionsBox } from '@/entities/common/ui/sort-options-box'; -import { PaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant'; +import { ArsPaymentStatusBtnGroup } from '@/entities/additional-service/model/ars/constant'; +import { ArsFilter } from '@/entities/additional-service/ui/filter/ars-filter'; export const ArsListPage = () => { const { navigate } = useNavigate(); @@ -32,8 +33,8 @@ export const ArsListPage = () => { const [toDate, setToDate] = useState(moment().format('YYYYMMDD')); const [paymentStatus, setPaymentStatus] = useState(PaymentStatus.ALL); const [orderStatus, setOrderStatus] = useState(OrderStatus.ALL); - const [minAmount, setMinAmount] = useState(0); - const [maxAmount, setMaxAmount] = useState(0); + const [minAmount, setMinAmount] = useState(); + const [maxAmount, setMaxAmount] = useState(); const { mutateAsync: extensionArsList } = useExtensionArsListMutation(); const { mutateAsync: extensionArsDownloadExcel } = useExtensionArsDownloadExcelMutation(); @@ -188,7 +189,7 @@ export const ArsListPage = () => {
{ - PaymentStatusBtnGroup.map((value, index) => ( + ArsPaymentStatusBtnGroup.map((value, index) => ( {
+ ); }; \ No newline at end of file diff --git a/src/shared/constants/paths.ts b/src/shared/constants/paths.ts index b8c63be..791ff88 100644 --- a/src/shared/constants/paths.ts +++ b/src/shared/constants/paths.ts @@ -148,6 +148,10 @@ export const PATHS: RouteNamesType = { `${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`, ROUTE_NAMES.additionalService.ars.list, ), + detail: generatePath( + `${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`, + ROUTE_NAMES.additionalService.ars.detail, + ), request: generatePath( `${ROUTE_NAMES.additionalService.base}${ROUTE_NAMES.additionalService.ars.base}`, ROUTE_NAMES.additionalService.ars.request, diff --git a/src/shared/constants/route-names.ts b/src/shared/constants/route-names.ts index 91575ba..0d1f433 100644 --- a/src/shared/constants/route-names.ts +++ b/src/shared/constants/route-names.ts @@ -73,6 +73,7 @@ export const ROUTE_NAMES = { ars: { base: '/ars/*', list: 'list', + detail: 'detail', request: 'request', requestSuccess: 'request-success', }, diff --git a/src/shared/ui/filter/calendar.tsx b/src/shared/ui/filter/calendar.tsx index f6c44da..01b167d 100644 --- a/src/shared/ui/filter/calendar.tsx +++ b/src/shared/ui/filter/calendar.tsx @@ -28,20 +28,20 @@ export const FilterCalendar = ({ const setFilterDate = (dateOptions: FilterDateOptions) => { if(dateOptions === FilterDateOptions.Today){ - setStartDate(moment().format('YYYY-MM-DD')); - setEndDate(moment().format('YYYY-MM-DD')); + setStartDate(moment().format('YYYY.MM.DD')); + setEndDate(moment().format('YYYY.MM.DD')); setDateReadyOnly(true); setFilterDateOptionsBtn(FilterDateOptions.Today); } else if(dateOptions === FilterDateOptions.Week){ - setStartDate(moment().subtract(1, 'week').format('YYYY-MM-DD')); - setEndDate(moment().format('YYYY-MM-DD')); + setStartDate(moment().subtract(1, 'week').format('YYYY.MM.DD')); + setEndDate(moment().format('YYYY.MM.DD')); setDateReadyOnly(true); setFilterDateOptionsBtn(FilterDateOptions.Week); } else if(dateOptions === FilterDateOptions.Month){ - setStartDate(moment().subtract(1, 'month').format('YYYY-MM-DD')); - setEndDate(moment().format('YYYY-MM-DD')); + setStartDate(moment().subtract(1, 'month').format('YYYY.MM.DD')); + setEndDate(moment().format('YYYY.MM.DD')); setDateReadyOnly(true); setFilterDateOptionsBtn(FilterDateOptions.Month); }