전투시스템 스케줄러 game mode 방식 변경

This commit is contained in:
2025-06-19 18:54:15 +09:00
parent 495243a1a3
commit b2b579ead1
4 changed files with 84 additions and 36 deletions

View File

@@ -129,4 +129,21 @@ export const BattleRewardView = async (token) => {
throw new Error('BattleRewardView Error', e); throw new Error('BattleRewardView Error', e);
} }
} }
};
export const GameModeView = async (token) => {
try {
const res = await Axios.get(
`/api/v1/battle/game-mode/list`,
{
headers: { Authorization: `Bearer ${token}` },
},
);
return res.data.data.game_mode_list;
} catch (e) {
if (e instanceof Error) {
throw new Error('GameModeView Error', e);
}
}
}; };

View File

@@ -33,7 +33,7 @@ import { isValidDayRange } from '../../utils/date';
import { useAlert } from '../../context/AlertProvider'; import { useAlert } from '../../context/AlertProvider';
import { useLoading } from '../../context/LoadingProvider'; import { useLoading } from '../../context/LoadingProvider';
const BattleEventModal = ({ modalType, detailView, handleDetailView, content, setDetailData, configData, rewardData }) => { const BattleEventModal = ({ modalType, detailView, handleDetailView, content, setDetailData, configData, rewardData, gameModeData }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const token = sessionStorage.getItem('token'); const token = sessionStorage.getItem('token');
const { showToast, showModal } = useAlert(); const { showToast, showModal } = useAlert();
@@ -46,7 +46,8 @@ const BattleEventModal = ({ modalType, detailView, handleDetailView, content, se
if(modalType === TYPE_MODIFY && content && Object.keys(content).length > 0){ if(modalType === TYPE_MODIFY && content && Object.keys(content).length > 0){
setResultData({ setResultData({
group_id: content.group_id, group_id: content.group_id,
event_id: content.event_id, id: content.id,
event_id: content.id,
event_name: content.event_name, event_name: content.event_name,
repeat_type: content.repeat_type, repeat_type: content.repeat_type,
config_id: content.config_id, config_id: content.config_id,
@@ -54,6 +55,7 @@ const BattleEventModal = ({ modalType, detailView, handleDetailView, content, se
round_count: content.round_count, round_count: content.round_count,
hot_time: content.hot_time, hot_time: content.hot_time,
round_time: content.round_time, round_time: content.round_time,
game_mode_id: content.game_mode_id,
status: content.status, status: content.status,
event_start_dt: convertKTCDate(content.event_start_dt), event_start_dt: convertKTCDate(content.event_start_dt),
event_end_dt: content.event_end_dt, event_end_dt: content.event_end_dt,
@@ -262,6 +264,7 @@ const BattleEventModal = ({ modalType, detailView, handleDetailView, content, se
case "reward": case "reward":
case "round": case "round":
case "hot": case "hot":
case "mode":
return modalType === TYPE_REGISTRY || (modalType === TYPE_MODIFY &&(content?.status === battleEventStatusType.stop)); return modalType === TYPE_REGISTRY || (modalType === TYPE_MODIFY &&(content?.status === battleEventStatusType.stop));
default: default:
return modalType === TYPE_MODIFY && (content?.status !== battleEventStatusType.stop); return modalType === TYPE_MODIFY && (content?.status !== battleEventStatusType.stop);
@@ -326,14 +329,14 @@ const BattleEventModal = ({ modalType, detailView, handleDetailView, content, se
} }
</FormRowGroup> </FormRowGroup>
<FormRowGroup> <FormRowGroup>
<FormLabel>라운드 시간</FormLabel> {/*<FormLabel>라운드 시간</FormLabel>*/}
<SelectInput value={resultData.config_id} onChange={handleConfigChange} disabled={!isView('config')} width="200px"> {/*<SelectInput value={resultData.config_id} onChange={handleConfigChange} disabled={!isView('config')} width="200px">*/}
{configData && configData?.map((data, index) => ( {/* {configData && configData?.map((data, index) => (*/}
<option key={index} value={data.id}> {/* <option key={index} value={data.id}>*/}
{data.desc}({data.id}) {/* {data.desc}({data.id})*/}
</option> {/* </option>*/}
))} {/* ))}*/}
</SelectInput> {/*</SelectInput>*/}
<FormLabel>라운드 </FormLabel> <FormLabel>라운드 </FormLabel>
<SelectInput value={resultData.round_count} onChange={e => setResultData({ ...resultData, round_count: e.target.value })} disabled={!isView('round')} width="100px"> <SelectInput value={resultData.round_count} onChange={e => setResultData({ ...resultData, round_count: e.target.value })} disabled={!isView('round')} width="100px">
{battleEventRoundCount.map((data, index) => ( {battleEventRoundCount.map((data, index) => (
@@ -344,11 +347,19 @@ const BattleEventModal = ({ modalType, detailView, handleDetailView, content, se
</SelectInput> </SelectInput>
</FormRowGroup> </FormRowGroup>
<FormRowGroup> <FormRowGroup>
<FormLabel>배정 포드</FormLabel> {/*<FormLabel>배정 포드</FormLabel>*/}
<SelectInput value={resultData.reward_group_id} onChange={e => setResultData({ ...resultData, reward_group_id: e.target.value })} disabled={!isView('reward')} width="200px"> {/*<SelectInput value={resultData.reward_group_id} onChange={e => setResultData({ ...resultData, reward_group_id: e.target.value })} disabled={!isView('reward')} width="200px">*/}
{rewardData && rewardData?.map((data, index) => ( {/* {rewardData && rewardData?.map((data, index) => (*/}
<option key={index} value={data.group_id}> {/* <option key={index} value={data.group_id}>*/}
{data.desc}({data.group_id}) {/* {data.desc}({data.group_id})*/}
{/* </option>*/}
{/* ))}*/}
{/*</SelectInput>*/}
<FormLabel>게임 모드</FormLabel>
<SelectInput value={resultData.game_mode_id} onChange={e => setResultData({ ...resultData, game_mode_id: e.target.value })} disabled={!isView('mode')} width="200px">
{gameModeData && gameModeData?.map((data, index) => (
<option key={index} value={data.id}>
{data.desc}({data.id})
</option> </option>
))} ))}
</SelectInput> </SelectInput>
@@ -421,6 +432,7 @@ export const initData = {
reward_group_id: 1, reward_group_id: 1,
round_count: 1, round_count: 1,
hot_time: 1, hot_time: 1,
game_mode_id: 1,
event_start_dt: '', event_start_dt: '',
event_end_dt: '' event_end_dt: ''
} }

View File

@@ -126,7 +126,7 @@ export const useBattleEventSearch = (token, initialPageSize) => {
}; };
}; };
const BattleEventSearchBar = ({ searchParams, onSearch, onReset, configData, rewardData }) => { const BattleEventSearchBar = ({ searchParams, onSearch, onReset, configData, rewardData, gameModeData }) => {
const handleSubmit = event => { const handleSubmit = event => {
event.preventDefault(); event.preventDefault();
@@ -153,22 +153,33 @@ const BattleEventSearchBar = ({ searchParams, onSearch, onReset, configData, rew
</InputGroup> </InputGroup>
</>, </>,
<> <>
<InputLabel>라운드 시간</InputLabel> {/*<InputLabel>라운드 시간</InputLabel>*/}
{/*<InputGroup>*/}
{/* <SelectInput value={searchParams.configId} onChange={e => onSearch({ configId: e.target.value })}>*/}
{/* <option value="ALL">전체</option>*/}
{/* {configData?.map((data, index) => (*/}
{/* <option key={index} value={data.id}>*/}
{/* {data.desc}*/}
{/* </option>*/}
{/* ))}*/}
{/* </SelectInput>*/}
{/*</InputGroup>*/}
{/*<InputLabel>배정 포드</InputLabel>*/}
{/*<InputGroup>*/}
{/* <SelectInput value={searchParams.rewardId} onChange={e => onSearch({ rewardId: e.target.value })}>*/}
{/* <option value='ALL'>전체</option>*/}
{/* {rewardData?.map((data, index) => (*/}
{/* <option key={index} value={data.id}>*/}
{/* {data.desc}*/}
{/* </option>*/}
{/* ))}*/}
{/* </SelectInput>*/}
{/*</InputGroup>*/}
<InputLabel>게임모드</InputLabel>
<InputGroup> <InputGroup>
<SelectInput value={searchParams.configId} onChange={e => onSearch({ configId: e.target.value })}> <SelectInput value={searchParams.game_mode_id} onChange={e => onSearch({ game_mode_id: e.target.value })}>
<option value="ALL">전체</option>
{configData?.map((data, index) => (
<option key={index} value={data.id}>
{data.desc}
</option>
))}
</SelectInput>
</InputGroup>
<InputLabel>배정 포드</InputLabel>
<InputGroup>
<SelectInput value={searchParams.rewardId} onChange={e => onSearch({ rewardId: e.target.value })}>
<option value='ALL'>전체</option> <option value='ALL'>전체</option>
{rewardData?.map((data, index) => ( {gameModeData?.map((data, index) => (
<option key={index} value={data.id}> <option key={index} value={data.id}>
{data.desc} {data.desc}
</option> </option>

View File

@@ -8,7 +8,7 @@ import {
BattleEventDelete, BattleEventDelete,
BattleEventDetailView, BattleEventStop, BattleEventDetailView, BattleEventStop,
BattleEventView, BattleEventView,
BattleRewardView, BattleRewardView, GameModeView,
} from '../../apis/Battle'; } from '../../apis/Battle';
import { authList } from '../../store/authList'; import { authList } from '../../store/authList';
@@ -91,6 +91,10 @@ const BattleEvent = () => {
data: battleRewardData data: battleRewardData
} = useDataFetch(() => BattleRewardView(token), [token]); } = useDataFetch(() => BattleRewardView(token), [token]);
const {
data: gameModeData
} = useDataFetch(() => GameModeView(token), [token]);
const endTime = (start_dt, operation_time) =>{ const endTime = (start_dt, operation_time) =>{
const startDate = new Date(start_dt); const startDate = new Date(start_dt);
@@ -262,6 +266,7 @@ const BattleEvent = () => {
onReset={handleReset} onReset={handleReset}
configData={battleConfigData} configData={battleConfigData}
rewardData={battleRewardData} rewardData={battleRewardData}
gameModeData={gameModeData}
/> />
</FormWrapper> </FormWrapper>
<ViewTableInfo total={dataList?.total} total_all={dataList?.total_all} handleOrderBy={handleOrderByChange} handlePageSize={handlePageSizeChange}> <ViewTableInfo total={dataList?.total} total_all={dataList?.total_all} handleOrderBy={handleOrderByChange} handlePageSize={handlePageSizeChange}>
@@ -296,8 +301,9 @@ const BattleEvent = () => {
<th width="100">이벤트 시작시간(KST)</th> <th width="100">이벤트 시작시간(KST)</th>
<th width="100">이벤트 종료시간(KST)</th> <th width="100">이벤트 종료시간(KST)</th>
<th width="90">이벤트 상태</th> <th width="90">이벤트 상태</th>
<th width="90">라운드 시간</th> <th width="90">게임모드</th>
<th width="90">배정포드</th> {/*<th width="90">라운드 시간</th>*/}
{/*<th width="90">배정포드</th>*/}
<th width="70">라운드 </th> <th width="70">라운드 </th>
<th width="70">핫타임</th> <th width="70">핫타임</th>
<th width="100">확인 / 수정</th> <th width="100">확인 / 수정</th>
@@ -313,7 +319,7 @@ const BattleEvent = () => {
checked={isRowSelected(battle.id)} /> checked={isRowSelected(battle.id)} />
</td> </td>
<td>{battle.group_id}</td> <td>{battle.group_id}</td>
<td>{battle.event_id}</td> <td>{battle.id}</td>
<td>{battle.event_name}</td> <td>{battle.event_name}</td>
<StatusWapper> <StatusWapper>
<StatusLabel $status={battle.repeat_type}> <StatusLabel $status={battle.repeat_type}>
@@ -329,8 +335,9 @@ const BattleEvent = () => {
{battleEventStatus.find(data => data.value === battle.status).name} {battleEventStatus.find(data => data.value === battle.status).name}
</StatusLabel> </StatusLabel>
</StatusWapper> </StatusWapper>
<td>{secondToMinutes(battle.round_time)}</td> <td>{battle.game_mode_id}</td>
<td>{battle.reward_group_id}</td> {/*<td>{secondToMinutes(battle.round_time)}분</td>*/}
{/*<td>{battle.reward_group_id}</td>*/}
<td>{battle.round_count}</td> <td>{battle.round_count}</td>
<td>{battle.hot_time}</td> <td>{battle.hot_time}</td>
<td> <td>
@@ -359,6 +366,7 @@ const BattleEvent = () => {
setDetailData={setDetailData} setDetailData={setDetailData}
configData={battleConfigData} configData={battleConfigData}
rewardData={battleRewardData} rewardData={battleRewardData}
gameModeData={gameModeData}
/> />
<LogDetailModal <LogDetailModal