diff --git a/src/RouteInfo.js b/src/RouteInfo.js index a68c33a..8032da7 100644 --- a/src/RouteInfo.js +++ b/src/RouteInfo.js @@ -13,7 +13,7 @@ import { LogView, } from './pages/UserManage'; import { EconomicIndex, UserIndex } from './pages/IndexManage'; -import { LandView, CryptView, GameLogView, UserView } from './pages/DataManage'; +import { LandInfoView, CryptView, GameLogView, UserView } from './pages/DataManage'; import { Board, Event, @@ -56,7 +56,7 @@ const RouteInfo = () => { } /> - } /> + } /> } /> } /> diff --git a/src/apis/Land.js b/src/apis/Land.js index 3c68533..c69bfb1 100644 --- a/src/apis/Land.js +++ b/src/apis/Land.js @@ -21,6 +21,24 @@ export const LandAuctionView = async (token, landType, landData, userType, userD } }; +export const LandInfoData = async (token, landType, landData, landSize, category, status, startDate, endDate, order, size, currentPage) => { + try { + const res = await Axios.get( + `/api/v1/land/info?land_type=${landType}&land_data=${landData}&land_size=${landSize}&category=${category}&status=${status}&start_dt=${startDate}&end_dt=${endDate}&orderby=${order}&page_no=${currentPage} + &page_size=${size}`, + { + headers: { Authorization: `Bearer ${token}` }, + }, + ); + + return res.data.data; + } catch (e) { + if (e instanceof Error) { + throw new Error('LandInfoData Error', e); + } + } +}; + // 랜드 경매 상세보기 export const LandAuctionDetailView = async (token, id) => { try { diff --git a/src/assets/data/menuConfig.js b/src/assets/data/menuConfig.js index e458c1d..388c0a5 100644 --- a/src/assets/data/menuConfig.js +++ b/src/assets/data/menuConfig.js @@ -65,7 +65,7 @@ export const menuConfig = { } }, landview: { - title: '랜드 조회', + title: '랜드 정보 조회', permissions: { read: authType.landRead, update: authType.landUpdate, diff --git a/src/assets/data/options.js b/src/assets/data/options.js index b4b8c86..4e57abe 100644 --- a/src/assets/data/options.js +++ b/src/assets/data/options.js @@ -205,4 +205,4 @@ export const eventSearchType = [ ]; export const battleEventRoundCount = [1,2,3,4,8,12,16]; -export const battleEventHotTime = [1,2,3,4,5,6,7,8]; \ No newline at end of file +export const battleEventHotTime = [1,2,3,4,5,6,7,8]; diff --git a/src/components/ServiceManage/index.js b/src/components/ServiceManage/index.js index ca18eeb..813fcae 100644 --- a/src/components/ServiceManage/index.js +++ b/src/components/ServiceManage/index.js @@ -1,25 +1,29 @@ import BoardInfoModal from './modal/BoardInfoModal'; import BoardRegistModal from './modal/BoardRegistModal'; import MailDetailModal from './modal/MailDetailModal'; -import MailListSearchBar from './searchBar/MailListSearchBar'; +import LandAuctionModal from './modal/LandAuctionModal' +import BattleEventModal from './modal/BattleEventModal' import ReportListAnswerModal from './modal/ReportListAnswerModal'; import ReportListDetailModal from './modal/ReportListDetailModal'; -import ReportListSearchBar from './searchBar/ReportListSearchBar'; import UserBlockDetailModal from './modal/UserBlockDetailModal'; +//searchbar +import ReportListSearchBar from './searchBar/ReportListSearchBar'; import UserBlockSearchBar from './searchBar/UserBlockSearchBar'; -import WhiteListSearchBar from './WhiteListRegistBar'; -import ReportListSummary from './ReportListSummary'; import ItemsSearchBar from './searchBar/ItemsSearchBar'; import EventListSearchBar from './searchBar/EventListSearchBar'; import LandAuctionSearchBar from './searchBar/LandAuctionSearchBar' -import LandAuctionModal from './modal/LandAuctionModal' -import BattleEventModal from './modal/BattleEventModal' +import MailListSearchBar from './searchBar/MailListSearchBar'; +import LandInfoSearchBar from './searchBar/LandInfoSearchBar'; +//etc +import ReportListSummary from './ReportListSummary'; +import WhiteListSearchBar from './WhiteListRegistBar'; export { BoardInfoModal, BoardRegistModal, MailDetailModal, MailListSearchBar, + LandInfoSearchBar, ReportListAnswerModal, ReportListDetailModal, ReportListSearchBar, diff --git a/src/components/ServiceManage/searchBar/LandInfoSearchBar.js b/src/components/ServiceManage/searchBar/LandInfoSearchBar.js new file mode 100644 index 0000000..faa5c04 --- /dev/null +++ b/src/components/ServiceManage/searchBar/LandInfoSearchBar.js @@ -0,0 +1,200 @@ +import { TextInput, BtnWrapper, InputLabel, SelectInput, InputGroup } from '../../../styles/Components'; +import Button from '../../common/button/Button'; +import { SearchBarLayout, SearchPeriod } from '../../common/SearchBar'; +import { useCallback, useEffect, useState } from 'react'; +import { LandAuctionView, LandInfoData } from '../../../apis'; +import { landAuctionStatus, landSearchType, landSize } from '../../../assets/data'; + +export const useLandInfoSearch = (token, initialPageSize) => { + const [searchParams, setSearchParams] = useState({ + landType: 'ID', + landData: '', + landSize: 'ALL', + category: 'ALL', + status: 'ALL', + startDate: '', + endDate: '', + orderBy: 'DESC', + pageSize: initialPageSize, + currentPage: 1 + }); + + const [loading, setLoading] = useState(false); + const [data, setData] = useState(null); + + useEffect(() => { + // fetchData(searchParams); // 컴포넌트 마운트 시 초기 데이터 로드 + const initialLoad = async () => { + await fetchData(searchParams); + }; + + initialLoad(); + }, [token]); + + const fetchData = useCallback(async (params) => { + if (!token) return; + + try { + setLoading(true); + const result = await LandInfoData( + token, + params.landType, + params.landData, + params.landSize, + params.category, + params.status, + params.startDate && new Date(params.startDate).toISOString(), + params.endDate && new Date(params.endDate).toISOString(), + params.orderBy, + params.pageSize, + params.currentPage + ); + setData(result); + return result; + } catch (error) { + console.error('Error fetching auction data:', error); + throw error; + } finally { + setLoading(false); + } + }, [token]); + + const updateSearchParams = useCallback((newParams) => { + setSearchParams(prev => ({ + ...prev, + ...newParams + })); + }, []); + + const handleSearch = useCallback(async (newParams = {}) => { + const updatedParams = { + ...searchParams, + ...newParams, + currentPage: newParams.currentPage || 1 // Reset to first page on new search + }; + updateSearchParams(updatedParams); + return await fetchData(updatedParams); + }, [searchParams, fetchData]); + + const handleReset = useCallback(async () => { + const resetParams = { + landType: 'ID', + landData: '', + landSize: 'ALL', + category: 'ALL', + status: 'ALL', + startDate: '', + endDate: '', + orderBy: 'DESC', + pageSize: initialPageSize, + currentPage: 1 + }; + setSearchParams(resetParams); + return await fetchData(resetParams); + }, [initialPageSize, fetchData]); + + const handlePageChange = useCallback(async (newPage) => { + return await handleSearch({ currentPage: newPage }); + }, [handleSearch]); + + const handlePageSizeChange = useCallback(async (newSize) => { + return await handleSearch({ pageSize: newSize, currentPage: 1 }); + }, [handleSearch]); + + const handleOrderByChange = useCallback(async (newOrder) => { + return await handleSearch({ orderBy: newOrder }); + }, [handleSearch]); + + return { + searchParams, + loading, + data, + handleSearch, + handleReset, + handlePageChange, + handlePageSizeChange, + handleOrderByChange, + updateSearchParams + }; +}; + +const LandInfoSearchBar = ({ searchParams, onSearch, onReset }) => { + const handleSubmit = event => { + event.preventDefault(); + + onSearch(searchParams); + }; + + const searchList = [ + <> + + onSearch({landType: e.target.value })}> + {landSearchType.map((data, index) => ( + + ))} + + onSearch({ landData: e.target.value })} + /> + + , + <> + 랜드크기 + onSearch({ landSize: e.target.value }, false)} > + {landSize.map((data, index) => ( + + ))} + + , + <> + 랜드상태 + onSearch({ status: e.target.value }, false)} > + {landAuctionStatus.map((data, index) => ( + + ))} + + , + ]; + + const optionList = [ + <> + 카테고리 + onSearch({ category: e.target.value }, false)}> + {landAuctionStatus.map((data, index) => ( + + ))} + + , + <> + 일자 + onSearch({ startDate: date }, false)} + endDate={searchParams.endDate} + handleEndDate={date => onSearch({ endDate: date }, false)} + /> + , + <>,<>, + <> + +