restapi 도 경로보기 가능, 출발지목적지 동시에 같은거 못하게, 자물쇠걸면 컬럼 수정 못함 tablelistcomponent
This commit is contained in:
@@ -365,7 +365,70 @@ export default function MapTestWidgetV2({ element }: MapTestWidgetV2Props) {
|
||||
const mappedRows = applyColumnMapping(rows, source.columnMapping);
|
||||
|
||||
// 마커와 폴리곤으로 변환 (mapDisplayType + dataSource 전달)
|
||||
return convertToMapData(mappedRows, source.name || source.id || "API", source.mapDisplayType, source);
|
||||
const mapData = convertToMapData(mappedRows, source.name || source.id || "API", source.mapDisplayType, source);
|
||||
|
||||
// ✅ REST API 데이터를 vehicle_location_history에 자동 저장 (경로 보기용)
|
||||
// - 모든 REST API 차량 위치 데이터는 자동으로 저장됨
|
||||
if (mapData.markers.length > 0) {
|
||||
try {
|
||||
const authToken = typeof window !== "undefined" ? localStorage.getItem("authToken") || "" : "";
|
||||
|
||||
// 마커 데이터를 vehicle_location_history에 저장
|
||||
for (const marker of mapData.markers) {
|
||||
// user_id 추출 (마커 description에서 파싱)
|
||||
let userId = "";
|
||||
let vehicleId: number | undefined = undefined;
|
||||
let vehicleName = "";
|
||||
|
||||
if (marker.description) {
|
||||
try {
|
||||
const parsed = JSON.parse(marker.description);
|
||||
// 다양한 필드명 지원 (plate_no 우선 - 차량 번호판으로 경로 구분)
|
||||
userId = parsed.plate_no || parsed.plateNo || parsed.car_number || parsed.carNumber ||
|
||||
parsed.user_id || parsed.userId || parsed.driver_id || parsed.driverId ||
|
||||
parsed.car_no || parsed.carNo || parsed.vehicle_no || parsed.vehicleNo ||
|
||||
parsed.id || parsed.code || "";
|
||||
vehicleId = parsed.vehicle_id || parsed.vehicleId || parsed.car_id || parsed.carId;
|
||||
vehicleName = parsed.plate_no || parsed.plateNo || parsed.car_name || parsed.carName ||
|
||||
parsed.vehicle_name || parsed.vehicleName || parsed.name || parsed.title || "";
|
||||
} catch {
|
||||
// 파싱 실패 시 무시
|
||||
}
|
||||
}
|
||||
|
||||
// user_id가 없으면 마커 이름이나 ID를 사용
|
||||
if (!userId) {
|
||||
userId = marker.name || marker.id || `marker_${Date.now()}`;
|
||||
}
|
||||
|
||||
// vehicle_location_history에 저장
|
||||
await fetch(getApiUrl("/api/dynamic-form/location-history"), {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bearer ${authToken}`,
|
||||
},
|
||||
credentials: "include",
|
||||
body: JSON.stringify({
|
||||
latitude: marker.lat,
|
||||
longitude: marker.lng,
|
||||
userId: userId,
|
||||
vehicleId: vehicleId,
|
||||
tripStatus: "api_tracking", // REST API에서 가져온 데이터 표시
|
||||
departureName: source.name || "REST API",
|
||||
destinationName: vehicleName || marker.name,
|
||||
}),
|
||||
});
|
||||
|
||||
console.log("📍 [saveToHistory] 저장 완료:", { userId, lat: marker.lat, lng: marker.lng });
|
||||
}
|
||||
} catch (saveError) {
|
||||
console.error("❌ [saveToHistory] 저장 실패:", saveError);
|
||||
// 저장 실패해도 마커 표시는 계속
|
||||
}
|
||||
}
|
||||
|
||||
return mapData;
|
||||
};
|
||||
|
||||
// Database 데이터 로딩
|
||||
@@ -1659,16 +1722,20 @@ export default function MapTestWidgetV2({ element }: MapTestWidgetV2Props) {
|
||||
{(() => {
|
||||
try {
|
||||
const parsed = JSON.parse(marker.description || "{}");
|
||||
const userId = parsed.user_id;
|
||||
if (userId) {
|
||||
// 다양한 필드명 지원 (plate_no 우선)
|
||||
const visibleUserId = parsed.plate_no || parsed.plateNo || parsed.car_number || parsed.carNumber ||
|
||||
parsed.user_id || parsed.userId || parsed.driver_id || parsed.driverId ||
|
||||
parsed.car_no || parsed.carNo || parsed.vehicle_no || parsed.vehicleNo ||
|
||||
parsed.id || parsed.code || marker.name;
|
||||
if (visibleUserId) {
|
||||
return (
|
||||
<div className="mt-2 border-t pt-2">
|
||||
<button
|
||||
onClick={() => loadRoute(userId)}
|
||||
onClick={() => loadRoute(visibleUserId)}
|
||||
disabled={routeLoading}
|
||||
className="w-full rounded bg-blue-500 px-2 py-1 text-xs text-white hover:bg-blue-600 disabled:opacity-50"
|
||||
>
|
||||
{routeLoading && selectedUserId === userId ? "로딩 중..." : "🛣️ 이동경로 보기"}
|
||||
{routeLoading && selectedUserId === visibleUserId ? "로딩 중..." : "🛣️ 이동경로 보기"}
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user