From 2c693b250313d8e72df4f4de6dfae01c386eae67 Mon Sep 17 00:00:00 2001 From: bcjang Date: Wed, 2 Apr 2025 18:02:11 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=A0=91=EC=86=8D=20=EC=83=81=ED=83=9C=20=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=EC=9C=A0=EC=A0=80=20=EC=A1=B0=ED=9A=8C=20kick=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis/Users.js | 14 ++ src/assets/data/options.js | 20 +++ src/components/DataManage/UserDefaultInfo.js | 147 +++++++++++++------ src/components/Skeleton/UserInfoSkeleton.js | 42 +++--- src/i18n.js | 3 + 5 files changed, 161 insertions(+), 65 deletions(-) diff --git a/src/apis/Users.js b/src/apis/Users.js index 375839b..213c24a 100644 --- a/src/apis/Users.js +++ b/src/apis/Users.js @@ -65,6 +65,20 @@ export const UserChangeAdminLevel = async (token, params) => { } }; +export const UserKick = async (token, params) => { + try { + const res = await Axios.put('/api/v1/users/user-kick', params, { + headers: { Authorization: `Bearer ${token}` }, + }); + + return res.data; + } catch (e) { + if (e instanceof Error) { + throw new Error('UserKick Error', e); + } + } +}; + // 아바타 조회 export const UserAvatarView = async (token, guid) => { try { diff --git a/src/assets/data/options.js b/src/assets/data/options.js index eb2b3c9..00b9c10 100644 --- a/src/assets/data/options.js +++ b/src/assets/data/options.js @@ -247,6 +247,26 @@ export const opSuccessType = [ { value: false, name: '실패' }, ]; +export const opUserSessionType = [ + { value: true, name: '접속중' }, + { value: false, name: '미접속' }, +]; + +export const opYNType = [ + { value: true, name: 'Y' }, + { value: false, name: 'N' }, +]; + +export const opReadType = [ + { value: true, name: '확인' }, + { value: false, name: '미확인' }, +]; + +export const opPickupType = [ + { value: true, name: '수령' }, + { value: false, name: '미수령' }, +]; + // export const logAction = [ // { value: "None", name: "ALL" }, // { value: "AIChatDeleteCharacter", name: "NPC 삭제" }, diff --git a/src/components/DataManage/UserDefaultInfo.js b/src/components/DataManage/UserDefaultInfo.js index 6ab490d..34c79ae 100644 --- a/src/components/DataManage/UserDefaultInfo.js +++ b/src/components/DataManage/UserDefaultInfo.js @@ -1,11 +1,11 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { Link } from 'react-router-dom'; import styled from 'styled-components'; import Profile from '../../assets/img/datamanage/img-profile.png'; import NicknameChangeModal from '../../components/DataManage/NicknameChangeModal'; import EditIcon from '../../assets/img/icon/icon-edit.png'; -import { UserChangeAdminLevel, UserInfoView } from '../../apis/Users'; +import { UserChangeAdminLevel, UserInfoView, UserKick } from '../../apis/Users'; import { SelectInput } from '../../styles/Components'; import { adminLevelType, authType, modalTypes } from '../../assets/data'; import DynamicModal from '../common/modal/DynamicModal'; @@ -16,53 +16,89 @@ import { convertKTC } from '../../utils'; import { EditButton, ProfileWrapper, UserDefault, UserInfoTable } from '../../styles/ModuleComponents'; import { TableSkeleton } from '../Skeleton/TableSkeleton'; import { UserInfoSkeleton } from '../Skeleton/UserInfoSkeleton'; +import { opUserSessionType } from '../../assets/data/options'; +import Button from '../common/button/Button'; +import { useModal } from '../../utils/hook'; +import { InitData } from '../../apis/Data'; const UserDefaultInfo = ({ userInfo }) => { const { t } = useTranslation(); const authInfo = useRecoilValue(authList); - - const [pwPop, setPwPop] = useState('hidden'); - const [gmModal, setGmModal] = useState('hidden'); + const token = sessionStorage.getItem('token'); + const { + modalState, + handleModalView, + handleModalClose + } = useModal({ + userKick: 'hidden', + gmLevelChange: 'hidden', + pwChange: 'hidden' + }); + const [alertMsg, setAlertMsg] = useState(''); const [dataList, setDataList] = useState({}); const [adminLevel, setAdminLevel] = useState('0'); const [loading, setLoading] = useState(true); - const handleClick = () => { - if (pwPop === 'hidden') setPwPop('view'); - else setPwPop('hidden'); - }; - useEffect(() => { fetchData(); }, [userInfo]); const fetchData = async () => { - const token = sessionStorage.getItem('token'); + setLoading(true); await UserInfoView(token, userInfo.guid).then(data => { setDataList(data); setLoading(false); }); }; - const handleGMChange = (e) =>{ - setAdminLevel(e.target.value); - setGmModal('view'); - } - - const handleSubmit = async () => { - const token = sessionStorage.getItem('token'); + const handleSubmit = async (type, param = null) => { let params = {}; - params.guid = userInfo.guid; - params.admin_level = adminLevel; - await UserChangeAdminLevel(token, params); + switch (type) { + case "gmLevelChangeSubmit": + setAdminLevel(param); - handleCancel(); - await fetchData(); - } + handleModalView('gmLevelChange'); + break; + case "userKickSubmit": + handleModalView('userKick'); + break; + case "gmLevelChange": + setLoading(true); - const handleCancel = () => { - setGmModal('hidden'); + params.guid = userInfo.guid; + params.admin_level = adminLevel; + + await UserChangeAdminLevel(token, params).then(data =>{ + setAlertMsg(t('USER_GM_CHANGE_COMPLETE')) + }).catch(error => { + console.log(error); + }).finally(() => { + setLoading(false); + handleModalClose('gmLevelChange'); + fetchData(); + }); + + break; + case "userKick": + params.guid = userInfo.guid; + await UserKick(token, params).then((data) =>{ + setAlertMsg(t('USER_KICK_COMPLETE')) + }).catch(error => { + console.log(error); + }).finally(() => { + setLoading(false); + handleModalClose('userKick'); + fetchData(); + }); + break; + case "registComplete": + handleModalClose('registComplete'); + break; + case "warning": + setAlertMsg(''); + break; + } } return ( @@ -76,11 +112,11 @@ const UserDefaultInfo = ({ userInfo }) => { - AID(GUID) + GUID {dataList.user_info && dataList.user_info.aid} - 계정 ID + Account ID {dataList.user_info && dataList.user_info.user_id} @@ -88,12 +124,11 @@ const UserDefaultInfo = ({ userInfo }) => { {dataList.user_info && dataList.user_info.nation} - 멤버십 - {dataList.user_info && dataList.user_info.membership} - - - 친구 추천코드 - {dataList.user_info && dataList.user_info.friend_code} + 접속상태 + {dataList.user_session !== undefined && opUserSessionType.find(session => session.value === dataList.user_session)?.name} + {