修复路径问题

This commit is contained in:
2025-06-04 20:23:40 +08:00
parent 18f3787b9c
commit 224f964626
2 changed files with 23 additions and 22 deletions

View File

@@ -2,7 +2,7 @@
import React, { useState, useEffect, useCallback } from 'react'; import React, { useState, useEffect, useCallback } from 'react';
import { useAuth } from '@/contexts/AuthContext'; import { useAuth } from '@/contexts/AuthContext';
import { useRouter } from 'next/navigation'; import { useRouter, useSearchParams } from 'next/navigation';
import Link from 'next/link'; import Link from 'next/link';
import LoadingSpinner from '@/components/LoadingSpinner'; import LoadingSpinner from '@/components/LoadingSpinner';
import { api, BaseResponse } from '@/utils/axios'; import { api, BaseResponse } from '@/utils/axios';
@@ -27,6 +27,8 @@ const TERMINAL_STATUSES = ['COMPLETED', 'PAID', 'CANCELLED_BY_USER', 'CANCELLED_
export default function ChargingStatusPage() { export default function ChargingStatusPage() {
const { isAuthenticated, isLoading: authLoading } = useAuth(); const { isAuthenticated, isLoading: authLoading } = useAuth();
const router = useRouter(); const router = useRouter();
const searchParams = useSearchParams();
const sessionIdParam = searchParams.get('id');
const [session, setSession] = useState<ActiveChargingSession | null | undefined>(undefined); const [session, setSession] = useState<ActiveChargingSession | null | undefined>(undefined);
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
@@ -34,33 +36,33 @@ export default function ChargingStatusPage() {
const [isStopping, setIsStopping] = useState(false); const [isStopping, setIsStopping] = useState(false);
const [elapsedTime, setElapsedTime] = useState("00:00:00"); const [elapsedTime, setElapsedTime] = useState("00:00:00");
const fetchActiveSession = useCallback(async () => { const fetchSession = useCallback(async () => {
if (!isAuthenticated) return; if (!isAuthenticated) return;
try { setIsLoading(true);
const response = await api.get<BaseResponse<ActiveChargingSession | null>>('/session/my/active');
console.log('Active charging session response:', response.data);
if (response.data && response.data.code === 0) {
const activeSessionData = response.data.data;
setSession(activeSessionData);
setError(null); setError(null);
if (activeSessionData) { try {
console.log('Current session status:', activeSessionData.status); let response;
if (TERMINAL_STATUSES.includes(activeSessionData.status)) { if (sessionIdParam) {
setTimeout(() => router.push('/dashboard'), 3000); response = await api.get<BaseResponse<ActiveChargingSession | null>>(`/api/session/get`, { params: { id: sessionIdParam } });
}
} else { } else {
console.log('No active charging session found'); response = await api.get<BaseResponse<ActiveChargingSession | null>>('/api/session/my/active');
}
if (response.data && response.data.code === 0) {
const sessionData = response.data.data;
setSession(sessionData);
setError(null);
if (sessionData && TERMINAL_STATUSES.includes(sessionData.status)) {
setTimeout(() => router.push('/dashboard'), 3000);
} }
} else { } else {
setError(response.data?.message || '获取充电状态失败'); setError(response.data?.message || '获取充电状态失败');
} }
} catch (err: any) { } catch (err: any) {
console.error("Error fetching active session:", err);
setError(err.response?.data?.message || err.message || '网络错误,无法获取充电状态'); setError(err.response?.data?.message || err.message || '网络错误,无法获取充电状态');
} finally { } finally {
setIsLoading(false); setIsLoading(false);
} }
}, [isAuthenticated, router]); }, [isAuthenticated, router, sessionIdParam]);
useEffect(() => { useEffect(() => {
if (!authLoading && !isAuthenticated) { if (!authLoading && !isAuthenticated) {
@@ -68,20 +70,19 @@ export default function ChargingStatusPage() {
return; return;
} }
if (isAuthenticated) { if (isAuthenticated) {
setIsLoading(true); fetchSession();
fetchActiveSession();
} }
}, [authLoading, isAuthenticated, router, fetchActiveSession]); }, [authLoading, isAuthenticated, router, fetchSession]);
useEffect(() => { useEffect(() => {
let intervalId: NodeJS.Timeout; let intervalId: NodeJS.Timeout;
if (isAuthenticated && session && !isLoading) { if (isAuthenticated && session && !isLoading) {
if (session && !TERMINAL_STATUSES.includes(session.status)) { if (session && !TERMINAL_STATUSES.includes(session.status)) {
intervalId = setInterval(fetchActiveSession, POLLING_INTERVAL); intervalId = setInterval(fetchSession, POLLING_INTERVAL);
} }
} }
return () => clearInterval(intervalId); return () => clearInterval(intervalId);
}, [isAuthenticated, session, isLoading, fetchActiveSession]); }, [isAuthenticated, session, isLoading, fetchSession]);
const calculateDuration = useCallback((startTime: string | null): string => { const calculateDuration = useCallback((startTime: string | null): string => {
if (!startTime) return '00:00:00'; if (!startTime) return '00:00:00';
@@ -123,7 +124,7 @@ export default function ChargingStatusPage() {
if (response.data && response.data.code === 0) { if (response.data && response.data.code === 0) {
// Rely on polling to update the session state // Rely on polling to update the session state
// Optionally, trigger an immediate refresh: // Optionally, trigger an immediate refresh:
fetchActiveSession(); fetchSession();
} else { } else {
setError(response.data?.message || "停止充电请求失败"); setError(response.data?.message || "停止充电请求失败");
} }

View File

@@ -230,7 +230,7 @@ export default function DashboardPage() {
{/* 操作按钮区域 */} {/* 操作按钮区域 */}
<div className="mt-6 flex flex-col md:flex-row gap-3"> <div className="mt-6 flex flex-col md:flex-row gap-3">
{/* 前往充电状态详情页的按钮 */} {/* 前往充电状态详情页的按钮 */}
<Link href="/charging-status" className="inline-block bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-2 px-4 rounded-md shadow-sm transition duration-150 ease-in-out text-center"> <Link href={`/charging-status?id=${activeSession.id}`} className="inline-block bg-indigo-600 hover:bg-indigo-700 text-white font-semibold py-2 px-4 rounded-md shadow-sm transition duration-150 ease-in-out text-center">
</Link> </Link>