우편 칼리움 첨부 처리

This commit is contained in:
2025-02-24 17:49:22 +09:00
parent 68c44cbf09
commit 4bc8b34c26
4 changed files with 87 additions and 22 deletions

View File

@@ -36,6 +36,20 @@ export const MailDetailView = async (token, id) => {
}
};
export const MailCaliumTotalView = async (token) => {
try {
const res = await Axios.get(`/api/v1/mail/calium`, {
headers: { Authorization: `Bearer ${token}` },
});
return res.data.data.stock_calium;
} catch (e) {
if (e instanceof Error) {
throw new Error('MailCaliumTotalView Error', e);
}
}
};
// 우편 단일 등록
export const MailSingleRegist = async (token, params) => {
try {
@@ -43,7 +57,7 @@ export const MailSingleRegist = async (token, params) => {
headers: { Authorization: `Bearer ${token}` },
});
return res;
return res.data;
} catch (e) {
if (e instanceof Error) {
throw new Error('MailRegist Error', e);

View File

@@ -73,6 +73,7 @@ export const wellType = [
{ value: '19010001', name: '골드' },
{ value: '19010002', name: '사파이어' },
{ value: '19010005', name: '루비' },
{ value: '19010003', name: '칼리움' },
];
export const logOption = [
@@ -177,9 +178,10 @@ export const CurrencyType = [
export const battleEventStatus = [
{ value: 'ALL', name: '전체' },
{ value: 'WAIT', name: '중단' },
{ value: 'WAIT', name: '대기' },
{ value: 'REGISTER', name: '예약완료' },
{ value: 'CANCEL', name: '예약취소' },
{ value: 'STOP', name: '중단' },
{ value: 'END', name: '종료' },
{ value: 'RUNNING', name: '진행중' },
{ value: 'FAIL', name: '실패' },

View File

@@ -119,3 +119,10 @@ export const battleEventStatusType = {
cancel: "CANCEL",
running: "RUNNING",
}
export const currencyCodeTypes = {
gold: "19010001",
sapphire: "19010002",
ruby: "19010005",
calium: "19010003"
}

View File

@@ -10,13 +10,13 @@ import { Title, BtnWrapper, TextInput, SelectInput, Label, InputLabel, DatePicke
import IconDelete from '../../assets/img/icon/icon-delete.png';
import CloseIcon from '../../assets/img/icon/icon-close.png';
import { HourList, MinuteList, wellType } from '../../assets/data';
import { HourList, MinuteList, modalTypes, wellType } from '../../assets/data';
import { useNavigate } from 'react-router-dom';
import MailRegistUploadBtn from '../../components/ServiceManage/MailRegistUploadBtn';
import DatePickerComponent from '../../components/common/Date/DatePickerComponent';
import Modal from '../../components/common/modal/Modal';
import { MailIsItem, MailMultiRegsit, MailSingleRegist } from '../../apis';
import { MailCaliumTotalView, MailIsItem, MailMultiRegsit, MailSingleRegist } from '../../apis';
import { authList } from '../../store/authList';
import { useRecoilValue } from 'recoil';
@@ -24,12 +24,17 @@ import { useTranslation } from 'react-i18next';
import { MailReceiver, RegistInputRow } from '../../styles/ModuleComponents';
import AuthModal from '../../components/common/modal/AuthModal';
import { authType } from '../../assets/data';
import { useDataFetch } from '../../utils/hook';
import { BattleConfigView } from '../../apis/Battle';
import { currencyCodeTypes } from '../../assets/data/types';
import { DynamicModal } from '../../components/common';
const MailRegist = () => {
const navigate = useNavigate();
const userInfo = useRecoilValue(authList);
const { t } = useTranslation();
const environment = process.env.REACT_APP_ENV;
const token = sessionStorage.getItem('token');
const [doubleSubmitFlag, setDoubleSubmitFlag] = useState(false);
@@ -55,6 +60,11 @@ const MailRegist = () => {
const [confirmText, setConfirmText] = useState('');
const [alertMessage, setAlertMessage] = useState('');
const [loading, setLoading] = useState(false);
const [alertMsg, setAlertMsg] = useState('');
const {
data: caliumTotalData
} = useDataFetch(() => MailCaliumTotalView(token), [token]);
const [resultData, setResultData] = useState({
is_reserve: false,
@@ -109,7 +119,7 @@ const MailRegist = () => {
}
item.length === 0 || itemCount.length === 0 ? setIsItemNullValue(true) : setIsItemNullValue(false);
const token = sessionStorage.getItem('token');
// const token = sessionStorage.getItem('token');
const result = await MailIsItem(token, {item: item});
if(result.data.result === "ERROR"){
@@ -183,8 +193,20 @@ const MailRegist = () => {
if (itemIndex !== -1) {
const item_cnt = resultData.item_list[itemIndex].item_cnt;
if(resource === currencyCodeTypes.calium){
if((Number(resourceCount) + Number(item_cnt)) > caliumTotalData){
setAlertMsg(t('MAIL_ITEM_CALIUM_TOTAL_OVER_WARNING'))
return;
}
}
resultData.item_list[itemIndex].item_cnt = Number(item_cnt) + Number(resourceCount);
} else {
if(resource === currencyCodeTypes.calium){
if(Number(resourceCount) > caliumTotalData){
setAlertMsg(t('MAIL_ITEM_CALIUM_TOTAL_OVER_WARNING'))
return;
}
}
const name = wellType.find(well => well.value === resource).name;
const newItem = { item: resource, item_cnt: resourceCount, item_name: name };
resultData.item_list.push(newItem);
@@ -266,19 +288,33 @@ const MailRegist = () => {
const handleRegistMail = async () => {
setLoading(true);
const token = sessionStorage.getItem('token');
const message = await MailSingleRegist(token, resultData);
if (message.data.data.message === t('EXCEL_SELECT')) {
setConfirmText('파일 내 중복된 유저 정보가 있습니다. \n 파일을 다시 확인 후 이용해주세요.');
} else if (message.data.data.message === '저장 하였습니다.') {
setConfirmText('우편이 정상 등록되었습니다.');
} else {
setConfirmText(message.data.data.message);
}
setLoading(false);
handleCompleteModal();
handleSubmitModal();
await MailSingleRegist(token, resultData).then(data => {
setLoading(false);
handleSubmitModal();
console.log(data);
if(data.result === "ERROR"){
if(data.data.message === "ERROR_MAIL_ITEM_CALIUM_OVER"){
setAlertMsg(t('MAIL_ITEM_CALIUM_TOTAL_OVER_WARNING'));
}else if(data.data.message === "NOT_EXIT_EXCEL"){
setAlertMsg(t('EXCEL_SELECT'));
}else if(data.data.message === "GUID_CHECK"){
setAlertMsg(t('WARNING_GUID_CHECK'));
}else if(data.data.message === "NICKNAME_CHECK"){
setAlertMsg(t('WARNING_NICKNAME_CHECK'));
}else if(data.data.message === "EMAIL_CHECK"){
setAlertMsg(t('WARNING_EMAIL_CHECK'));
}else if(data.data.message === "USERTYPE_CHECK_EXCEL") {
setAlertMsg(t('WARNING_TYPE_CHECK'));
}else{
setAlertMsg(data.data.message);
}
}else{
setConfirmText('우편이 정상 등록되었습니다.');
handleCompleteModal();
}
}).catch(error => {
setAlertMsg(t('API_FAIL'));
});
};
const handleSingleBtn = () => {
@@ -524,9 +560,11 @@ const MailRegist = () => {
<option value="19010001">골드</option>
<option value="19010002">사파이어</option>
<option value="19010005">루비</option>
<option value="19010003">칼리움</option>
</SelectInput>
<TextInput placeholder="수량" type="number" value={resourceCount} onChange={e => handleResourceCount(e)} width="200px" />
<Button text="추가" theme={resourceCount.length === 0 || resource.length === 0 ? 'disable' : 'search'} handleClick={handleResourceList} width="100px" height="35px" />
{resource === currencyCodeTypes.calium && <Label>(잔여 수량: {caliumTotalData})</Label>}
</InputItem>
{isItemNullValue && <SearchBarAlert $marginTop="15px">필수값을 입력해주세요.</SearchBarAlert>}
@@ -588,10 +626,7 @@ const MailRegist = () => {
type="submit"
size="large"
width="100%"
handleClick={() => {
doubleSubmitFlag || handleRegistMail();
setDoubleSubmitFlag(true);
}}
handleClick={() => {handleRegistMail();}}
/>
</BtnWrapper>
</Modal>
@@ -630,6 +665,13 @@ const MailRegist = () => {
/>
</BtnWrapper>
</Modal>
{/* 경고 모달 */}
<DynamicModal
modalType={modalTypes.completed}
view={alertMsg ? 'view' : 'hidden'}
modalText={alertMsg}
handleSubmit={() => setAlertMsg('')}
/>
{loading && <Loading/>}
</>
)}