Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sdream-ai-fe
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
侯明涛
sdream-ai-fe
Commits
87199471
Commit
87199471
authored
Jan 05, 2026
by
Liu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 优化 token 初始化逻辑并添加 SSO 登录调试日志
parent
0ace2d9a
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
3 deletions
+69
-3
src/pages/ChatTactics/TacticsHome.tsx
+63
-3
src/pages/Home/HomeNew.tsx
+6
-0
No files found.
src/pages/ChatTactics/TacticsHome.tsx
View file @
87199471
// 问答功能独立首页
import
type
React
from
'react'
import
{
useCallback
,
useEffect
,
useMemo
}
from
'react'
import
{
useCallback
,
useEffect
,
useMemo
,
useRef
}
from
'react'
import
{
useLocation
,
useNavigate
,
useSearchParams
}
from
'react-router-dom'
import
{
useLocalStorageState
}
from
'ahooks'
import
styles
from
'../Home/Home.module.less'
...
...
@@ -8,7 +8,7 @@ import { TacticsWelcome } from './components/TacticsWelcome'
import
{
clearTacticsNavigationFlag
,
createTacticsConversation
,
fetchTacticsConversations
}
from
'@/store/tacticsSlice'
import
{
useAppDispatch
,
useAppSelector
}
from
'@/store/hook'
import
type
{
RootState
}
from
'@/store'
import
{
getUserRolesFromRoute
}
from
'@/lib/utils'
import
{
getUserRolesFromRoute
,
safeLocalStorageGetItem
}
from
'@/lib/utils'
import
{
TacticsChatEditor
}
from
'@/components/TacticsChatEditor'
export
const
TacticsHome
:
React
.
FC
=
()
=>
{
...
...
@@ -21,6 +21,7 @@ export const TacticsHome: React.FC = () => {
const
[
token
]
=
useLocalStorageState
<
string
|
undefined
>
(
'__TOKEN__'
,
{
defaultValue
:
''
,
})
const
hasInitialized
=
useRef
(
false
)
// from=tactics 时读取额外参数,用于新建会话(直接从 query 读取,不再使用 sessionStorage)
const
tacticsMeta
=
useMemo
(()
=>
{
...
...
@@ -172,12 +173,71 @@ export const TacticsHome: React.FC = () => {
// 当 token 存在时,初始化会话和获取会话列表
useEffect
(()
=>
{
if
(
token
)
{
// 防止重复执行
if
(
hasInitialized
.
current
)
{
return
}
// 直接从 localStorage 读取 token,避免 state 更新延迟的问题
const
getTokenFromStorage
=
()
=>
{
const
tokenFromStorage
=
safeLocalStorageGetItem
(
'__TOKEN__'
)
if
(
!
tokenFromStorage
)
{
return
null
}
try
{
// useLocalStorageState 会将值序列化为 JSON,需要解析
const
parsed
=
JSON
.
parse
(
tokenFromStorage
)
return
parsed
||
tokenFromStorage
}
catch
{
// 如果不是 JSON 格式,直接使用原始值
return
tokenFromStorage
}
}
const
actualToken
=
getTokenFromStorage
()
||
token
// 确保 token 存在后再执行业务逻辑
if
(
actualToken
)
{
hasInitialized
.
current
=
true
initTacticsConversation
()
dispatch
(
fetchTacticsConversations
())
}
},
[
token
,
dispatch
])
// 监听 localStorage 中 token 的变化(处理跨组件 token 更新的情况)
useEffect
(()
=>
{
const
handleStorageChange
=
(
e
:
StorageEvent
)
=>
{
// 防止重复执行(如果已经初始化过,不再执行)
if
(
hasInitialized
.
current
)
{
return
}
if
(
e
.
key
===
'__TOKEN__'
&&
e
.
newValue
)
{
// token 更新后,重新执行业务逻辑
let
actualToken
=
null
try
{
const
parsed
=
JSON
.
parse
(
e
.
newValue
)
actualToken
=
parsed
||
e
.
newValue
}
catch
{
actualToken
=
e
.
newValue
}
if
(
actualToken
)
{
hasInitialized
.
current
=
true
initTacticsConversation
()
dispatch
(
fetchTacticsConversations
())
}
}
}
window
.
addEventListener
(
'storage'
,
handleStorageChange
)
return
()
=>
{
window
.
removeEventListener
(
'storage'
,
handleStorageChange
)
}
},
[
dispatch
])
return
(
<
div
className=
{
styles
.
homePage
}
...
...
src/pages/Home/HomeNew.tsx
View file @
87199471
...
...
@@ -246,10 +246,12 @@ export const Home: React.FC = () => {
const
login
=
useCallback
(
async
()
=>
{
// 防止重复调用(使用 sessionStorage,跨组件共享)
if
(
sessionStorage
.
getItem
(
SSO_LOGIN_FLAG
)
===
'true'
)
{
console
.
log
(
'homeNew sso111111'
)
return
}
// 防止重复调用(组件级别保护)
if
(
hasFetched
.
current
)
{
console
.
log
(
'homeNew sso222222'
)
return
}
const
url
=
new
URL
(
window
.
location
.
href
)
...
...
@@ -260,6 +262,7 @@ export const Home: React.FC = () => {
// 如果有 loginCode,执行 SSO 登录(包括 from=tactics 的情况)
if
(
_loginCode
&&
viteOutputObj
===
'inner'
)
{
console
.
log
(
'homeNew sso333333'
)
// 立即设置标志,防止重复执行
sessionStorage
.
setItem
(
SSO_LOGIN_FLAG
,
'true'
)
hasFetched
.
current
=
true
...
...
@@ -269,6 +272,7 @@ export const Home: React.FC = () => {
try
{
const
res
=
await
fetchLoginByToken
(
_loginCode
)
if
(
res
.
data
)
{
console
.
log
(
'homeNew sso444444'
)
// 登录成功后先清理旧状态,避免沿用上一次的工具模式
dispatch
(
clearCurrentToolId
())
safeSessionStorageRemoveItem
(
'currentToolId'
)
...
...
@@ -291,6 +295,7 @@ export const Home: React.FC = () => {
)
// 如果是 from=tactics,只执行登录,不执行其他业务逻辑(由 TacticsHome 处理)
if
(
from
!==
'tactics'
)
{
console
.
log
(
'homeNew sso555555'
)
// 触发自定义事件,通知 ChatEditor 强制重置为制度活化
window
.
dispatchEvent
(
new
CustomEvent
(
'forceResetToGeneralMode'
))
getSessionConversationId
()
...
...
@@ -311,6 +316,7 @@ export const Home: React.FC = () => {
// 如果没有 loginCode,执行其他逻辑(非 from=tactics 的情况)
if
(
from
!==
'tactics'
)
{
console
.
log
(
'homeNew sso666666'
)
hasFetched
.
current
=
true
if
(
viteOutputObj
===
'inner'
)
{
getSessionConversationId
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment