Commit 3b632092 by Liu

fix: 首次进入时调用接口逻辑

parent de73cb84
......@@ -9,5 +9,6 @@ export default antfu({
'n/prefer-global/process': ['off'], // 关闭process报错
'react-hooks/exhaustive-deps': ['off'],
'ban-ts-comment': ['off'],
'no-console': 'off', // 允许使用 console
},
})
......@@ -543,8 +543,10 @@ export const Chat: React.FC = () => {
fromCollect,
locationStateFromCollect: location.state?.fromCollect,
sessionStorageFromCollect: sessionStorage.getItem('fromCollect'),
allItemsLength: allItems.length,
})
if (!fromCollect) {
// 如果 allItems 为空,说明是首次加载,需要加载历史记录
if (!fromCollect && allItems.length > 0) {
console.log('[Chat] 路由不变且非收藏页返回,跳过历史记录加载,只更新 toolId')
// 不是从收藏页返回,只是 location.state 变化(比如点击常见问题但路由不变),
// 不应该重新加载历史记录,只需要更新 toolId 相关状态
......
......@@ -288,16 +288,26 @@ export const Home: React.FC = () => {
catch (error) {
// localStorage 被阻止时,使用安全函数降级存储
console.warn('setToken 失败,使用降级方案:', error)
try {
safeLocalStorageSetItem('__TOKEN__', JSON.stringify(res.data.token))
}
catch (storageError) {
console.error('降级存储也失败:', storageError)
}
}
if (res.data.userName) {
try {
setUserName(res.data.userName)
}
catch {
// userName 存储失败时使用降级方案
try {
safeLocalStorageSetItem('__USER_NAME__', JSON.stringify(res.data.userName))
}
catch (storageError) {
console.error('userName 降级存储失败:', storageError)
}
}
}
// 确保 token 已写入 localStorage(useLocalStorageState 是同步的,但为了保险起见,使用微任务确保写入完成)
await new Promise(resolve => setTimeout(resolve, 0))
......@@ -305,8 +315,13 @@ export const Home: React.FC = () => {
const verifyToken = getTokenFromStorage()
if (!verifyToken) {
// 如果 useLocalStorageState 写入失败,使用安全函数再次尝试
try {
safeLocalStorageSetItem('__TOKEN__', JSON.stringify(res.data.token))
}
catch (storageError) {
console.error('token 验证后降级存储失败:', storageError)
}
}
window.dispatchEvent(
new StorageEvent('storage', {
key: '__TOKEN__',
......@@ -385,16 +400,26 @@ export const Home: React.FC = () => {
catch (error) {
// localStorage 被阻止时,使用安全函数降级存储
console.warn('setToken 失败,使用降级方案:', error)
try {
safeLocalStorageSetItem('__TOKEN__', JSON.stringify(res.data.token))
}
catch (storageError) {
console.error('降级存储也失败:', storageError)
}
}
if (res.data.userName) {
try {
setUserName(res.data.userName)
}
catch {
// userName 存储失败时使用降级方案
try {
safeLocalStorageSetItem('__USER_NAME__', JSON.stringify(res.data.userName))
}
catch (storageError) {
console.error('userName 降级存储失败:', storageError)
}
}
}
// 确保 token 已写入 localStorage(useLocalStorageState 是同步的,但为了保险起见,使用微任务确保写入完成)
await new Promise(resolve => setTimeout(resolve, 0))
......@@ -402,8 +427,13 @@ export const Home: React.FC = () => {
const verifyToken = getTokenFromStorage()
if (!verifyToken) {
// 如果 useLocalStorageState 写入失败,使用安全函数再次尝试
try {
safeLocalStorageSetItem('__TOKEN__', JSON.stringify(res.data.token))
}
catch (storageError) {
console.error('token 验证后降级存储失败:', storageError)
}
}
// 主动触发 storage 事件,确保其他组件能监听到变化
window.dispatchEvent(
new StorageEvent('storage', {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment