diff --git a/src/pages/CustomerDetailPage/CustomerDetailPage.tsx b/src/pages/CustomerDetailPage/CustomerDetailPage.tsx index ed2551f..b20c056 100644 --- a/src/pages/CustomerDetailPage/CustomerDetailPage.tsx +++ b/src/pages/CustomerDetailPage/CustomerDetailPage.tsx @@ -174,27 +174,40 @@ function CustomerDetailPage() { const handleSaveEdit = async () => { if (!editedCustomer) return; - const requestData = { - name: editedCustomer.name, - phoneNo: editedCustomer.phoneNo, - telProvider: editedCustomer.telProvider, - legalDistrictCode: editedCustomer.legalDistrictCode, - minRent: editedCustomer.minRent, - maxRent: editedCustomer.maxRent, - trafficSource: editedCustomer.trafficSource || null, - landlord: editedCustomer.landlord, - tenant: editedCustomer.tenant, - buyer: editedCustomer.buyer, - seller: editedCustomer.seller, - maxPrice: editedCustomer.maxPrice, - minPrice: editedCustomer.minPrice, - minDeposit: editedCustomer.minDeposit, - maxDeposit: editedCustomer.maxDeposit, - birthday: editedCustomer.birthDay, - labelUids: editedCustomer.labels.map((label) => label.uid), - }; - try { + if (!editedCustomer.name) { + toast.error("이름을 입력해주세요."); + return; + } + if (!editedCustomer.phoneNo) { + toast.error("전화번호를 입력해주세요."); + return; + } + if (editedCustomer.birthDay && !/^\d{8}$/.test(editedCustomer.birthDay)) { + toast.error("생년월일을 올바르게 입력해주세요. ex)19910501"); + return; + } + + const requestData = { + name: editedCustomer.name, + phoneNo: editedCustomer.phoneNo, + telProvider: editedCustomer.telProvider, + legalDistrictCode: editedCustomer.legalDistrictCode, + minRent: editedCustomer.minRent, + maxRent: editedCustomer.maxRent, + trafficSource: editedCustomer.trafficSource || null, + landlord: editedCustomer.landlord, + tenant: editedCustomer.tenant, + buyer: editedCustomer.buyer, + seller: editedCustomer.seller, + maxPrice: editedCustomer.maxPrice, + minPrice: editedCustomer.minPrice, + minDeposit: editedCustomer.minDeposit, + maxDeposit: editedCustomer.maxDeposit, + birthday: editedCustomer.birthDay, + labelUids: editedCustomer.labels.map((label) => label.uid), + }; + const response = await apiClient.put( `/customers/${customerId}`, requestData @@ -205,9 +218,9 @@ function CustomerDetailPage() { setIsEditing(false); fetchCustomerData(); } - } catch (error) { + } catch (error: any) { console.error("Failed to update customer:", error); - toast.error("고객 정보 수정에 실패했습니다."); + toast.error(error.response?.data?.message || "고객 정보 수정에 실패했습니다."); } }; diff --git a/src/pages/CustomerListPage/CustomerAddButtonList/CustomerAddModal/CustomerAddModal.tsx b/src/pages/CustomerListPage/CustomerAddButtonList/CustomerAddModal/CustomerAddModal.tsx index 39124ab..05e1969 100644 --- a/src/pages/CustomerListPage/CustomerAddButtonList/CustomerAddModal/CustomerAddModal.tsx +++ b/src/pages/CustomerListPage/CustomerAddButtonList/CustomerAddModal/CustomerAddModal.tsx @@ -22,6 +22,7 @@ import Button from "@components/Button"; import TextField from "@components/TextField"; import apiClient from "@apis/apiClient"; import AddIcon from '@mui/icons-material/Add'; +import { toast } from "react-toastify"; const phoneRegex = /^\d{3}-\d{3,4}-\d{4}$/; @@ -116,10 +117,31 @@ function CustomerAddModal({ const handleChange = (e: React.ChangeEvent) => { const { name, value, type, checked } = e.target; - setFormData(prev => ({ - ...prev, - [name]: type === 'checkbox' ? checked : value - })); + + if (name === 'phoneNo') { + // 숫자만 추출 + const numbers = value.replace(/[^0-9]/g, ''); + + // 전화번호 형식으로 변환 + let formattedNumber = ''; + if (numbers.length <= 3) { + formattedNumber = numbers; + } else if (numbers.length <= 7) { + formattedNumber = `${numbers.slice(0, 3)}-${numbers.slice(3)}`; + } else { + formattedNumber = `${numbers.slice(0, 3)}-${numbers.slice(3, 7)}-${numbers.slice(7, 11)}`; + } + + setFormData(prev => ({ + ...prev, + [name]: formattedNumber + })); + } else { + setFormData(prev => ({ + ...prev, + [name]: type === 'checkbox' ? checked : value + })); + } }; const handleRegionChange = (type: 'sido' | 'sigungu' | 'dong') => (event: SelectChangeEvent) => { @@ -138,6 +160,19 @@ function CustomerAddModal({ const handleSubmit = async () => { try { + if (!formData.name) { + toast.error("이름을 입력해주세요."); + return; + } + if (!formData.phoneNo) { + toast.error("전화번호를 입력해주세요."); + return; + } + if (formData.birthDay && !/^\d{8}$/.test(formData.birthDay)) { + toast.error("생년월일을 올바르게 입력해주세요. ex)19910501"); + return; + } + // 선택된 지역 코드 (동 > 군구 > 시도 순으로 선택) const selectedRegion = region.selectedDong || region.selectedSigungu || region.selectedSido; @@ -171,11 +206,13 @@ function CustomerAddModal({ const response = await apiClient.post("/customers", customerData); if (response.status === 201) { - fetchCustomerList(); // 목록 새로고침 - onClose(); // 모달 닫기 + toast.success("고객 등록에 성공했습니다."); + fetchCustomerList(); + onClose(); } - } catch (error) { - console.error("고객 등록 실패:", error); + } catch (error: any) { + console.error("Failed to register customer:", error); + toast.error(error.response?.data?.message || "고객 등록 실패"); } }; @@ -700,7 +737,7 @@ function CustomerAddModal({ onClick={handleSubmit} variant="contained" sx={{ bgcolor: '#6366F1' }} - disabled={isSubmitButtonDisabled} + disabled={false} />