From 74ed1ff1add71d76203674e5327efa53d5529ca7 Mon Sep 17 00:00:00 2001 From: "focp212@naver.com" Date: Thu, 23 Oct 2025 11:07:56 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=B8=EA=B8=88=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EC=84=9C=20=EB=B0=8F=20=EB=8B=AC=EB=A0=A5=20=EC=9B=94=20?= =?UTF-8?q?=ED=98=95=ED=83=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../use-business-property-by-mid-mutation.ts | 29 +++++++++++++ src/entities/user/model/store.ts | 19 ++++++++- src/entities/user/model/types.ts | 11 +++++ src/entities/vat-return/model/types.ts | 4 +- .../vat-return/ui/filter/list-filter.tsx | 32 +++++++------- src/entities/vat-return/ui/list-wrap.tsx | 42 ++++++++++++++----- src/shared/api/api-url-user.ts | 7 +++- .../ui/calendar/nice-calendar-month.tsx | 14 +++---- src/shared/ui/filter/calendar-month.tsx | 4 +- src/widgets/sub-layout/index.tsx | 27 ++++++++++-- 10 files changed, 146 insertions(+), 43 deletions(-) create mode 100644 src/entities/user/api/use-business-property-by-mid-mutation.ts diff --git a/src/entities/user/api/use-business-property-by-mid-mutation.ts b/src/entities/user/api/use-business-property-by-mid-mutation.ts new file mode 100644 index 0000000..3b33507 --- /dev/null +++ b/src/entities/user/api/use-business-property-by-mid-mutation.ts @@ -0,0 +1,29 @@ +import axios from 'axios'; +import { API_URL_USER } from '@/shared/api/api-url-user'; +import { resultify } from '@/shared/lib/resultify'; +import { NiceAxiosError } from '@/shared/@types/error'; +import { + BusinessPropertyByMidParams, + BusinessPropertyByMidResponse +} from '../model/types'; +import { + useMutation, + UseMutationOptions +} from '@tanstack/react-query'; + +export const businessPropertyByMid = (params: BusinessPropertyByMidParams) => { + return resultify( + axios.post(API_URL_USER.businessPropertyByMid(), params), + ); +}; + +export const useBusinessPropertyByMidMutation = (options?: UseMutationOptions) => { + const mutation = useMutation({ + ...options, + mutationFn: (params: BusinessPropertyByMidParams) => businessPropertyByMid(params), + }); + + return { + ...mutation, + }; +}; diff --git a/src/entities/user/model/store.ts b/src/entities/user/model/store.ts index 31ccb57..1c0935c 100644 --- a/src/entities/user/model/store.ts +++ b/src/entities/user/model/store.ts @@ -1,12 +1,15 @@ import { lens } from '@dhmk/zustand-lens'; import { SetStateAction } from 'react'; -import { UserFavorite, UserInfo } from './types'; +import { BusinessInfo, UserFavorite, UserInfo } from './types'; import { StorageKeys } from '@/shared/constants/local-storage'; export interface UserInfoState { userInfo: UserInfo; setUserInfo: (update: SetStateAction>) => void; resetUserInfo: () => void; + businessInfo: BusinessInfo; + setBusinessInfo: (update: SetStateAction>) => void; + userFavorite: Array; setUserFavorite: (update: SetStateAction>) => void; userMids: Array; @@ -21,6 +24,7 @@ export interface UserInfoState { const initialUserInfoState = { userInfo: {} as UserInfo, + businessInfo: {} as BusinessInfo, userFavorite: [] as Array, userMids: [] as Array, selectOptionsMids: [] as Array>, @@ -43,6 +47,19 @@ export const createUserInfoStore = lens((set, get) => ({ }; }); }, + setBusinessInfo: (update) => { + set((state: UserInfoState) => { + const newBusinessInfo = (typeof update === 'function') + ? update(state.businessInfo): update; + return { + ...state, + businessInfo: { + ...state.businessInfo, + ...newBusinessInfo + }, + }; + }); + }, resetUserInfo: () => { window.localStorage.removeItem(StorageKeys.TokenType); window.localStorage.removeItem(StorageKeys.AccessToken); diff --git a/src/entities/user/model/types.ts b/src/entities/user/model/types.ts index a4fdafa..b9ef356 100644 --- a/src/entities/user/model/types.ts +++ b/src/entities/user/model/types.ts @@ -259,4 +259,15 @@ export interface ShortcutUserParams { export interface ShortcutUserResponse { shortcuts: Array; usingDefault: boolean; +}; + +export interface BusinessPropertyByMidParams { + mid: string; +}; +export interface BusinessPropertyByMidResponse { + companyNumber: string; + businessScaleTypeName: string; +}; +export interface BusinessInfo extends BusinessPropertyByMidResponse { + }; \ No newline at end of file diff --git a/src/entities/vat-return/model/types.ts b/src/entities/vat-return/model/types.ts index 649db13..ee33175 100644 --- a/src/entities/vat-return/model/types.ts +++ b/src/entities/vat-return/model/types.ts @@ -26,8 +26,8 @@ export enum VatReturnTargetType { export interface VatReturnListParams { mid: string; - startDate?: string; - endDate?: string; + startMonth?: string; + endMonth?: string; receiptType?: VatReturnReceiptType; targetType?: VatReturnTargetType; page?: DefaultRequestPagination; diff --git a/src/entities/vat-return/ui/filter/list-filter.tsx b/src/entities/vat-return/ui/filter/list-filter.tsx index 9a7432b..3a49029 100644 --- a/src/entities/vat-return/ui/filter/list-filter.tsx +++ b/src/entities/vat-return/ui/filter/list-filter.tsx @@ -13,13 +13,13 @@ export interface ListFilterProps { filterOn: boolean; setFilterOn: (filterOn: boolean) => void; mid: string; - startDate: string; - endDate: string; + startMonth: string; + endMonth: string; receiptType: VatReturnReceiptType; targetType: VatReturnTargetType; setMid: (mid: string) => void; - setStartDate: (date: string) => void; - setEndDate: (date: string) => void; + setStartMonth: (startMonth: string) => void; + setEndMonth: (endMonth: string) => void; setReceiptType: (receiptType: VatReturnReceiptType) => void; setTargetType: (targetType: VatReturnTargetType) => void; }; @@ -28,20 +28,20 @@ export const ListFilter = ({ filterOn, setFilterOn, mid, - startDate, - endDate, + startMonth, + endMonth, receiptType, targetType, setMid, - setStartDate, - setEndDate, + setStartMonth, + setEndMonth, setReceiptType, setTargetType }: ListFilterProps) => { const [filterMid, setFilterMid] = useState(mid); - const [filterStartDate, setFilterStartDate] = useState(startDate); - const [filterEndDate, setFilterEndDate] = useState(endDate); + const [filterStartMonth, setFilterStartMonth] = useState(startMonth); + const [filterEndMonth, setFilterEndMonth] = useState(endMonth); const [filterReceiptType, setFIlterReceiptType] = useState(receiptType); const [filterTargetType, setFilterTargetType] = useState(targetType); @@ -53,8 +53,8 @@ export const ListFilter = ({ const onClickToSetFilter = () => { setMid(filterMid); - setStartDate(filterStartDate); - setEndDate(filterEndDate); + setStartMonth(filterStartMonth); + setEndMonth(filterEndMonth); setReceiptType(filterReceiptType); setTargetType(filterTargetType); onClickToClose(); @@ -95,10 +95,10 @@ export const ListFilter = ({ > { const userMid = useStore.getState().UserStore.mid; @@ -25,11 +26,13 @@ export const ListWrap = () => { const [listItems, setListItems] = useState>([]); const [pageParam, setPageParam] = useState(DEFAULT_PAGE_PARAM); const [mid, setMid] = useState(userMid); - const [startDate, setStartDate] = useState(moment().subtract(1, 'month').format('YYYYMM')); - const [endDate, setEndDate] = useState(moment().format('YYYYMM')); + const [startMonth, setStartMonth] = useState(moment().subtract(1, 'month').format('YYYYMM')); + const [endMonth, setEndMonth] = useState(moment().format('YYYYMM')); const [receiptType, setReceiptType] = useState(VatReturnReceiptType.ALL); const [targetType, setTargetType] = useState(VatReturnTargetType.ALL); + const [emailBottomSheetOn, setEmailBottomSheetOn] = useState(false); + const { mutateAsync: vatReturnList } = useVatReturnListMutation(); const callList = (option?: { @@ -37,8 +40,8 @@ export const ListWrap = () => { }) => { let params: VatReturnListParams = { mid: mid, - startDate: startDate, - endDate: endDate, + startMonth: startMonth, + endMonth: endMonth, receiptType: receiptType, targetType: targetType, page: pageParam @@ -59,10 +62,19 @@ export const ListWrap = () => { const onClickToSort = (sort: SortTypeKeys) => { setSortType(sort); }; + const onClickToDownloadExcel = () => { + setEmailBottomSheetOn(true); + }; + const onRequestDownloadExcel = (userEmail?: string) => { + + }; useEffect(() => { callList(); - }, [mid, startDate, endDate, receiptType, targetType]); + }, [ + mid, startMonth, endMonth, + receiptType, targetType + ]); const getListDateGroup = () => { let rs = []; @@ -115,7 +127,7 @@ export const ListWrap = () => { @@ -149,16 +162,25 @@ export const ListWrap = () => { filterOn={ filterOn } setFilterOn={ setFilterOn } mid={ mid } - startDate={ startDate } - endDate={ endDate } + startMonth={ startMonth } + endMonth={ endMonth } receiptType={ receiptType } targetType={ targetType } setMid={ setMid } - setStartDate={ setStartDate } - setEndDate={ setEndDate } + setStartMonth={ setStartMonth } + setEndMonth={ setEndMonth } setReceiptType={ setReceiptType } setTargetType={ setTargetType } > + { !!emailBottomSheetOn && + + } ); }; \ No newline at end of file diff --git a/src/shared/api/api-url-user.ts b/src/shared/api/api-url-user.ts index 57b4e78..a52ada1 100644 --- a/src/shared/api/api-url-user.ts +++ b/src/shared/api/api-url-user.ts @@ -57,5 +57,10 @@ export const API_URL_USER = { shortcutUser: () => { // 사용자 바로가기 메뉴 조회 return `${API_BASE_URL}/api/v1/${API_URL_KEY}/shortcut/user`; - } + }, + + // mid 로 사업자 정보 조회 + businessPropertyByMid: () => { + return `${API_BASE_URL}/api/v1/amsw/business-property/by-mid`; + }, } \ No newline at end of file diff --git a/src/shared/ui/calendar/nice-calendar-month.tsx b/src/shared/ui/calendar/nice-calendar-month.tsx index c00d0d2..2059b48 100644 --- a/src/shared/ui/calendar/nice-calendar-month.tsx +++ b/src/shared/ui/calendar/nice-calendar-month.tsx @@ -25,10 +25,10 @@ const NiceCalendarMonth = ({ calendarType, setNewMonth }: NiceCalendarProps) => { - const [valueMonth, setValueMonth] = useState(); + const [valueYear, setValueYear] = useState(); const [minMonth, setMinMonth] = useState(); const [maxMonth, setMaxMonth] = useState(); - const onchangeToMonth = (selectedMonth: any) => { + const onChangeToMonth = (selectedMonth: any) => { setNewMonth(moment(selectedMonth).format('YYYY.MM')); setCalendarOpen(false); }; @@ -42,17 +42,17 @@ const NiceCalendarMonth = ({ if(!!endMonth){ setMaxMonth(new Date(endMonth)); } - setValueMonth(startMonth); + setValueYear(startMonth?.substring(0, 4)); } else if(calendarType === CalendarType.End){ if(!!startMonth){ setMinMonth(new Date(startMonth)); } setMaxMonth(new Date()); - setValueMonth(endMonth); + setValueYear(endMonth?.substring(0, 4)); } else if(calendarType === CalendarType.Single){ - setValueMonth(singleMonth); + setValueYear(singleMonth?.substring(0,4)); } }; @@ -97,8 +97,8 @@ const NiceCalendarMonth = ({ { console.log(month) if(calendarType === CalendarType.Start){ - setStartMonth(month); + setStartMonth(moment(month+'.01').format('YYYYMM')); } else if(calendarType === CalendarType.End){ - setEndMonth(month); + setEndMonth(moment(month+'.01').format('YYYYMM')); } setCalendarOpen(false); } diff --git a/src/widgets/sub-layout/index.tsx b/src/widgets/sub-layout/index.tsx index 8e0b8cf..6882908 100644 --- a/src/widgets/sub-layout/index.tsx +++ b/src/widgets/sub-layout/index.tsx @@ -18,10 +18,11 @@ import { useStore } from '@/shared/model/store'; import { getLocalStorage, setLocalStorage } from '@/shared/lib'; import { StorageKeys } from '@/shared/constants/local-storage'; import { HomeGroupsParams, HomeGroupsResponse } from '@/entities/home/model/types'; -import { LoginResponse, ShortcutUserParams, ShortcutUserResponse } from '@/entities/user/model/types'; +import { BusinessPropertyByMidParams, BusinessPropertyByMidResponse, LoginResponse, ShortcutUserParams, ShortcutUserResponse } from '@/entities/user/model/types'; import { useCodesListByCodeClMutation } from '@/entities/common/api/use-codes-list-by-codeCl-mutaion'; import { useShortcutUserMutation } from '@/entities/user/api/use-shortcut-user-mutation'; import { useShortcutDefaultMutation } from '@/entities/user/api/use-shortcut-detault-mutation'; +import { useBusinessPropertyByMidMutation } from '@/entities/user/api/use-business-property-by-mid-mutation'; export interface ContextType { setOnBack: (onBack: () => void) => void; @@ -56,12 +57,14 @@ export const SubLayout = () => { const [favoriteEdit, setFavoriteEdit] = useState(false); const [headerNavigationKey, setHeaderNavigationKey] = useState(1); const [loginSuccess, setLoginSuccess] = useState(false); - + const [mid, setMid] = useState(); + const { isNativeEnvironment } = useAppBridge(); const { mutateAsync: homeGroups } = useHomeGroupsMutation(); const { mutateAsync: codesListByCodeCl} = useCodesListByCodeClMutation(); const { mutateAsync: shortcutUser } = useShortcutUserMutation(); const { mutateAsync: shortcutDefault } = useShortcutDefaultMutation(); + const { mutateAsync: businessPropertyByMid } = useBusinessPropertyByMidMutation(); const wrapperClassName = 'wrapper'; @@ -82,6 +85,7 @@ export const SubLayout = () => { if(!!rs.mids[0]){ useStore.getState().UserStore.setMid(rs.mids[0]); + setMid(rs.mids[0]); } setLoginSuccess(true); setHeaderNavigationKey(headerNavigationKey + 1); @@ -91,10 +95,21 @@ export const SubLayout = () => { codeCl: '0022', code1Filter: filter0022 }); - }); }; + const callBusinessPropertyByMid = () => { + if(!!mid){ + let params: BusinessPropertyByMidParams = { + mid: mid + }; + businessPropertyByMid(params).then((rs: BusinessPropertyByMidResponse) => { + console.log(rs); + }); + } + + }; + const callSortcutDefault = () => { console.log("============================callSortcutDefault") let userInfo = useStore.getState().UserStore.userInfo; @@ -196,8 +211,12 @@ export const SubLayout = () => { useEffect(() => { handleLogin(); - }, []); + useEffect(() => { + if(!!mid){ + // callBusinessPropertyByMid(); + } + }, [mid]); return (