feat: 공차중계 운전자 차량/프로필 관리 기능 구현
This commit is contained in:
@@ -9,7 +9,10 @@ import {
|
||||
updateDriverProfile,
|
||||
updateDriverStatus,
|
||||
deleteDriverAccount,
|
||||
deleteDriverVehicle,
|
||||
registerDriverVehicle,
|
||||
DriverProfile,
|
||||
VehicleRegisterData,
|
||||
} from "@/lib/api/driver";
|
||||
import { DriverInfo, DriverFormData } from "@/components/layout/ProfileModal";
|
||||
|
||||
@@ -58,12 +61,22 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
|
||||
// 운전자 정보 상태
|
||||
const [isDriver, setIsDriver] = useState(false);
|
||||
const [hasVehicle, setHasVehicle] = useState(false); // 차량 보유 여부
|
||||
const [driverInfo, setDriverInfo] = useState<DriverInfo | null>(null);
|
||||
const [driverFormData, setDriverFormData] = useState<DriverFormData>({
|
||||
vehicleNumber: "",
|
||||
vehicleType: "",
|
||||
licenseNumber: "",
|
||||
phoneNumber: "",
|
||||
branchName: "",
|
||||
});
|
||||
|
||||
// 새 차량 등록 모달 상태
|
||||
const [isVehicleRegisterModalOpen, setIsVehicleRegisterModalOpen] = useState(false);
|
||||
const [newVehicleData, setNewVehicleData] = useState<VehicleRegisterData>({
|
||||
vehicleNumber: "",
|
||||
vehicleType: "",
|
||||
branchName: "",
|
||||
});
|
||||
|
||||
// 알림 모달 표시 함수
|
||||
@@ -99,21 +112,27 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
const response = await getDriverProfile();
|
||||
if (response.success && response.data) {
|
||||
setIsDriver(true);
|
||||
// 차량 보유 여부 확인
|
||||
const vehicleExists = !!response.data.vehicleNumber;
|
||||
setHasVehicle(vehicleExists);
|
||||
setDriverInfo({
|
||||
vehicleNumber: response.data.vehicleNumber,
|
||||
vehicleType: response.data.vehicleType,
|
||||
licenseNumber: response.data.licenseNumber,
|
||||
phoneNumber: response.data.phoneNumber,
|
||||
vehicleStatus: response.data.vehicleStatus,
|
||||
branchName: response.data.branchName,
|
||||
});
|
||||
setDriverFormData({
|
||||
vehicleNumber: response.data.vehicleNumber || "",
|
||||
vehicleType: response.data.vehicleType || "",
|
||||
licenseNumber: response.data.licenseNumber || "",
|
||||
phoneNumber: response.data.phoneNumber || "",
|
||||
branchName: response.data.branchName || "",
|
||||
});
|
||||
} else {
|
||||
setIsDriver(false);
|
||||
setHasVehicle(false);
|
||||
setDriverInfo(null);
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -229,6 +248,83 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
}
|
||||
}, [showAlert]);
|
||||
|
||||
/**
|
||||
* 차량 삭제
|
||||
*/
|
||||
const handleDeleteVehicle = useCallback(async () => {
|
||||
if (!confirm("이 차량을 더 이상 사용하지 않습니까?\n차량 정보가 삭제됩니다.")) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await deleteDriverVehicle();
|
||||
if (response.success) {
|
||||
showAlert("삭제 완료", "차량이 삭제되었습니다.", "success");
|
||||
// 운전자 정보 새로고침
|
||||
await loadDriverInfo();
|
||||
} else {
|
||||
showAlert("삭제 실패", response.message || "차량 삭제에 실패했습니다.", "error");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("차량 삭제 실패:", error);
|
||||
showAlert("오류", "차량 삭제 중 오류가 발생했습니다.", "error");
|
||||
}
|
||||
}, [showAlert, loadDriverInfo]);
|
||||
|
||||
/**
|
||||
* 새 차량 등록 모달 열기
|
||||
*/
|
||||
const openVehicleRegisterModal = useCallback(() => {
|
||||
setNewVehicleData({
|
||||
vehicleNumber: "",
|
||||
vehicleType: "",
|
||||
branchName: driverFormData.branchName || "", // 기존 소속 지점 유지
|
||||
});
|
||||
setIsVehicleRegisterModalOpen(true);
|
||||
}, [driverFormData.branchName]);
|
||||
|
||||
/**
|
||||
* 새 차량 등록 모달 닫기
|
||||
*/
|
||||
const closeVehicleRegisterModal = useCallback(() => {
|
||||
setIsVehicleRegisterModalOpen(false);
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* 새 차량 데이터 변경
|
||||
*/
|
||||
const updateNewVehicleData = useCallback((field: keyof VehicleRegisterData, value: string) => {
|
||||
setNewVehicleData((prev) => ({
|
||||
...prev,
|
||||
[field]: value,
|
||||
}));
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* 새 차량 등록 처리
|
||||
*/
|
||||
const handleRegisterVehicle = useCallback(async () => {
|
||||
if (!newVehicleData.vehicleNumber) {
|
||||
showAlert("입력 오류", "차량번호는 필수입니다.", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await registerDriverVehicle(newVehicleData);
|
||||
if (response.success) {
|
||||
showAlert("등록 완료", "차량이 등록되었습니다.", "success");
|
||||
setIsVehicleRegisterModalOpen(false);
|
||||
// 운전자 정보 새로고침
|
||||
await loadDriverInfo();
|
||||
} else {
|
||||
showAlert("등록 실패", response.message || "차량 등록에 실패했습니다.", "error");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("차량 등록 실패:", error);
|
||||
showAlert("오류", "차량 등록 중 오류가 발생했습니다.", "error");
|
||||
}
|
||||
}, [newVehicleData, showAlert, loadDriverInfo]);
|
||||
|
||||
/**
|
||||
* 이미지 선택 처리
|
||||
*/
|
||||
@@ -341,6 +437,7 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
licenseNumber: driverFormData.licenseNumber,
|
||||
vehicleNumber: driverFormData.vehicleNumber,
|
||||
vehicleType: driverFormData.vehicleType,
|
||||
branchName: driverFormData.branchName,
|
||||
});
|
||||
|
||||
if (!driverResponse.success) {
|
||||
@@ -400,9 +497,14 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
|
||||
// 운전자 관련 상태
|
||||
isDriver,
|
||||
hasVehicle,
|
||||
driverInfo,
|
||||
driverFormData,
|
||||
|
||||
// 새 차량 등록 모달 상태
|
||||
isVehicleRegisterModalOpen,
|
||||
newVehicleData,
|
||||
|
||||
// 액션
|
||||
openProfileModal,
|
||||
closeProfileModal,
|
||||
@@ -415,5 +517,10 @@ export const useProfile = (user: any, refreshUserData: () => Promise<void>, refr
|
||||
updateDriverFormData,
|
||||
handleDriverStatusChange,
|
||||
handleDriverAccountDelete,
|
||||
handleDeleteVehicle,
|
||||
openVehicleRegisterModal,
|
||||
closeVehicleRegisterModal,
|
||||
updateNewVehicleData,
|
||||
handleRegisterVehicle,
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user