fix: 任务详情页 JWT 鉴权失败导致回退登录页

- TaskListPanel 用 React Router <Link> 替代原生 <a href>,避免整页刷新
- auth store 初始化时同步读取 token 设置 isAuthenticated,避免 useEffect 异步执行前 ProtectedRoute 误判未登录
This commit is contained in:
2026-05-25 20:15:06 +08:00
parent f44fd56e22
commit 7921edd71e
2 changed files with 9 additions and 5 deletions
+8 -4
View File
@@ -1,5 +1,5 @@
import { useEffect, useState, useCallback } from 'react'
import { useParams } from 'react-router-dom'
import { Link, useParams } from 'react-router-dom'
import { getTasks } from '../api/project'
import type { Task } from '../api/types'
import StatusBadge from './StatusBadge'
@@ -67,9 +67,9 @@ export default function TaskListPanel() {
</p>
) : (
tasks.map(task => (
<a
<Link
key={task.id}
href={task.status === 'completed' ? `/projects/${projectId}/tasks/${task.id}` : undefined}
to={task.status === 'completed' ? `/projects/${projectId}/tasks/${task.id}` : '#'}
style={{
display: 'block',
padding: '12px 16px',
@@ -77,8 +77,12 @@ export default function TaskListPanel() {
textDecoration: 'none',
color: 'inherit',
cursor: task.status === 'completed' ? 'pointer' : 'default',
pointerEvents: task.status === 'completed' ? 'auto' : 'none',
transition: 'background 0.15s',
}}
onClick={e => {
if (task.status !== 'completed') e.preventDefault()
}}
onMouseEnter={e => {
if (task.status === 'completed')
(e.currentTarget as HTMLElement).style.background = 'var(--accent-dim)'
@@ -115,7 +119,7 @@ export default function TaskListPanel() {
)}
</div>
<PipelineStages currentStage={task.stage ?? null} status={task.status} />
</a>
</Link>
))
)}
</div>
+1 -1
View File
@@ -22,7 +22,7 @@ interface AuthState {
export const useAuthStore = create<AuthState>((set) => ({
user: null,
isAuthenticated: false,
isAuthenticated: getToken() !== null,
loading: false,
error: null,