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
e254a080
Commit
e254a080
authored
Jan 05, 2026
by
Liu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:工单参数
parent
c4cb0a30
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
89 additions
and
17 deletions
+89
-17
src/pages/ChatTactics/TacticsChat.tsx
+26
-3
src/pages/Home/HomeNew.tsx
+63
-14
No files found.
src/pages/ChatTactics/TacticsChat.tsx
View file @
e254a080
...
@@ -111,12 +111,21 @@ export const TacticsChat: React.FC = () => {
...
@@ -111,12 +111,21 @@ export const TacticsChat: React.FC = () => {
const
orderMeta
=
useMemo
(()
=>
{
const
orderMeta
=
useMemo
(()
=>
{
const
from
=
searchParams
.
get
(
'from'
)
const
from
=
searchParams
.
get
(
'from'
)
const
place
=
searchParams
.
get
(
'place'
)
const
place
=
searchParams
.
get
(
'place'
)
console
.
log
(
'[TacticsChat] orderMeta useMemo:'
,
{
from
,
place
,
allSearchParams
:
Object
.
fromEntries
(
searchParams
.
entries
()),
})
if
(
from
!==
'tactics'
||
place
!==
'order'
)
{
if
(
from
!==
'tactics'
||
place
!==
'order'
)
{
return
undefined
return
undefined
}
}
return
{
const
workOrderIds
=
searchParams
.
get
(
'workOrderIds'
)
workOrderIds
:
searchParams
.
get
(
'workOrderIds'
)
||
undefined
,
const
result
=
{
workOrderIds
:
workOrderIds
!==
null
?
workOrderIds
:
undefined
,
}
}
console
.
log
(
'[TacticsChat] orderMeta result:'
,
result
)
// 如果 URL 中有 workOrderIds 参数(包括空字符串),则使用它;否则为 undefined
return
result
},
[
searchParams
])
},
[
searchParams
])
// 仅用于创建会话的额外参数(create_conversation)
// 仅用于创建会话的额外参数(create_conversation)
...
@@ -401,7 +410,7 @@ export const TacticsChat: React.FC = () => {
...
@@ -401,7 +410,7 @@ export const TacticsChat: React.FC = () => {
const
shouldIncludeOrderMeta
=
extra
?.
includeOrderMeta
!==
false
const
shouldIncludeOrderMeta
=
extra
?.
includeOrderMeta
!==
false
// 去除缓存中可能存在的 from 字段,避免作为参数传递
// 去除缓存中可能存在的 from 字段,避免作为参数传递
const
{
from
:
_omitFrom
,
...
safeTacticsMeta
}
=
tacticsMeta
||
{}
const
{
from
:
_omitFrom
,
...
safeTacticsMeta
}
=
(
tacticsMeta
||
{})
as
Record
<
string
,
any
>
const
requestBody
:
Record
<
string
,
any
>
=
{
const
requestBody
:
Record
<
string
,
any
>
=
{
conversationId
:
currentIdRef
.
current
,
conversationId
:
currentIdRef
.
current
,
...
@@ -415,7 +424,12 @@ export const TacticsChat: React.FC = () => {
...
@@ -415,7 +424,12 @@ export const TacticsChat: React.FC = () => {
// 优先级:orderMeta > userMeta > tacticsMeta
// 优先级:orderMeta > userMeta > tacticsMeta
// 优先使用 orderMeta,如果存在 orderMeta 且需要包含,则传入 orderMeta 的字段
// 优先使用 orderMeta,如果存在 orderMeta 且需要包含,则传入 orderMeta 的字段
if
(
orderMeta
&&
shouldIncludeOrderMeta
)
{
if
(
orderMeta
&&
shouldIncludeOrderMeta
)
{
console
.
log
(
'[TacticsChat] handleSubmitQuestion: orderMeta'
,
orderMeta
)
Object
.
assign
(
requestBody
,
orderMeta
)
Object
.
assign
(
requestBody
,
orderMeta
)
console
.
log
(
'[TacticsChat] handleSubmitQuestion: requestBody after orderMeta'
,
{
workOrderIds
:
requestBody
.
workOrderIds
,
hasWorkOrderIds
:
'workOrderIds'
in
requestBody
,
})
}
}
// 如果没有 orderMeta 或不需要包含 orderMeta,则使用 userMeta
// 如果没有 orderMeta 或不需要包含 orderMeta,则使用 userMeta
else
if
(
userMeta
&&
shouldIncludeUserMeta
)
{
else
if
(
userMeta
&&
shouldIncludeUserMeta
)
{
...
@@ -463,6 +477,15 @@ export const TacticsChat: React.FC = () => {
...
@@ -463,6 +477,15 @@ export const TacticsChat: React.FC = () => {
if
(
shouldSendQuestion
||
(
question
&&
extra
?.
includeQuestion
===
false
))
{
if
(
shouldSendQuestion
||
(
question
&&
extra
?.
includeQuestion
===
false
))
{
requestBody
.
question
=
question
??
''
requestBody
.
question
=
question
??
''
}
}
// 调试日志:检查最终请求参数
console
.
log
(
'[TacticsChat] handleSubmitQuestion: final requestBody'
,
{
workOrderIds
:
requestBody
.
workOrderIds
,
hasWorkOrderIds
:
'workOrderIds'
in
requestBody
,
orderMeta
,
shouldIncludeOrderMeta
,
requestBodyKeys
:
Object
.
keys
(
requestBody
),
requestBodyStringified
:
JSON
.
stringify
(
requestBody
),
})
fetchStreamResponse
(
fetchStreamResponse
(
fetchUrl
,
fetchUrl
,
requestBody
,
requestBody
,
...
...
src/pages/Home/HomeNew.tsx
View file @
e254a080
...
@@ -13,9 +13,27 @@ import { fetchEfficiencyQuestionList } from '@/api/home'
...
@@ -13,9 +13,27 @@ import { fetchEfficiencyQuestionList } from '@/api/home'
import
SdreamLoading
from
'@/components/SdreamLoading'
import
SdreamLoading
from
'@/components/SdreamLoading'
import
{
fetchLoginByToken
,
fetchLoginByUid
}
from
'@/api/common'
import
{
fetchLoginByToken
,
fetchLoginByUid
}
from
'@/api/common'
import
{
fetchSessionConversationId
}
from
'@/api/conversation'
import
{
fetchSessionConversationId
}
from
'@/api/conversation'
import
{
fetchCheckTokenApi
}
from
'@/api/chat'
import
{
getUserRolesFromRoute
,
safeLocalStorageGetItem
,
safeSessionStorageGetItem
,
safeSessionStorageRemoveItem
,
safeSessionStorageSetItem
}
from
'@/lib/utils'
import
{
getUserRolesFromRoute
,
safeLocalStorageGetItem
,
safeSessionStorageGetItem
,
safeSessionStorageRemoveItem
,
safeSessionStorageSetItem
}
from
'@/lib/utils'
import
type
{
Conversation
}
from
'@/types/conversation'
import
type
{
Conversation
}
from
'@/types/conversation'
// 从 localStorage 获取 token 的辅助函数
function
getTokenFromStorage
():
string
|
null
{
const
tokenStr
=
safeLocalStorageGetItem
(
'__TOKEN__'
)
if
(
!
tokenStr
)
{
return
null
}
try
{
// useLocalStorageState 会将值序列化为 JSON,需要解析
const
parsed
=
JSON
.
parse
(
tokenStr
)
return
parsed
||
tokenStr
}
catch
{
// 如果不是 JSON 格式,直接使用原始值
return
tokenStr
}
}
function
getAnimationProps
(
delay
:
number
)
{
function
getAnimationProps
(
delay
:
number
)
{
return
{
return
{
variants
:
{
variants
:
{
...
@@ -52,6 +70,7 @@ export const Home: React.FC = () => {
...
@@ -52,6 +70,7 @@ export const Home: React.FC = () => {
const
dispatch
=
useAppDispatch
()
const
dispatch
=
useAppDispatch
()
const
location
=
useLocation
()
const
location
=
useLocation
()
const
hasFetched
=
useRef
(
false
)
const
hasFetched
=
useRef
(
false
)
const
hasCalledBusinessApis
=
useRef
(
false
)
// 防止业务接口重复调用
// 使用 useState
// 使用 useState
const
[
otherQuestions
,
setOtherQuestions
]
=
useState
<
any
>
({
content
:
[]
})
const
[
otherQuestions
,
setOtherQuestions
]
=
useState
<
any
>
({
content
:
[]
})
const
[
isToolBtnActive
,
setIsToolBtnActive
]
=
useState
<
boolean
>
(
false
)
const
[
isToolBtnActive
,
setIsToolBtnActive
]
=
useState
<
boolean
>
(
false
)
...
@@ -289,6 +308,8 @@ export const Home: React.FC = () => {
...
@@ -289,6 +308,8 @@ export const Home: React.FC = () => {
if
(
res
.
data
.
userName
)
{
if
(
res
.
data
.
userName
)
{
setUserName
(
res
.
data
.
userName
)
setUserName
(
res
.
data
.
userName
)
}
}
// 确保 token 已写入 localStorage(useLocalStorageState 是同步的,但为了保险起见,使用微任务确保写入完成)
await
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
0
))
window
.
dispatchEvent
(
window
.
dispatchEvent
(
new
StorageEvent
(
'storage'
,
{
new
StorageEvent
(
'storage'
,
{
key
:
'__TOKEN__'
,
key
:
'__TOKEN__'
,
...
@@ -301,12 +322,17 @@ export const Home: React.FC = () => {
...
@@ -301,12 +322,17 @@ export const Home: React.FC = () => {
// 如果是 from=tactics,只执行登录,不执行其他业务逻辑(由 TacticsHome 处理)
// 如果是 from=tactics,只执行登录,不执行其他业务逻辑(由 TacticsHome 处理)
if
(
from
!==
'tactics'
)
{
if
(
from
!==
'tactics'
)
{
console
.
log
(
'homeNew sso555555'
)
console
.
log
(
'homeNew sso555555'
)
// 触发自定义事件,通知 ChatEditor 强制重置为制度活化
// 确保 token 已写入 localStorage 后再调用业务接口
window
.
dispatchEvent
(
new
CustomEvent
(
'forceResetToGeneralMode'
))
const
actualToken
=
getTokenFromStorage
()
||
res
.
data
.
token
getSessionConversationId
()
if
(
actualToken
&&
!
hasCalledBusinessApis
.
current
)
{
dispatch
(
fetchConversations
())
hasCalledBusinessApis
.
current
=
true
// 2. 拉取常见问题等业务数据
// 触发自定义事件,通知 ChatEditor 强制重置为制度活化
_handleToolClick
(
false
,
''
,
true
)
window
.
dispatchEvent
(
new
CustomEvent
(
'forceResetToGeneralMode'
))
getSessionConversationId
()
dispatch
(
fetchConversations
())
// 2. 拉取常见问题等业务数据
_handleToolClick
(
false
,
''
,
true
)
}
}
}
}
}
}
}
...
@@ -324,8 +350,24 @@ export const Home: React.FC = () => {
...
@@ -324,8 +350,24 @@ export const Home: React.FC = () => {
console
.
log
(
'homeNew sso666666'
)
console
.
log
(
'homeNew sso666666'
)
hasFetched
.
current
=
true
hasFetched
.
current
=
true
if
(
viteOutputObj
===
'inner'
)
{
if
(
viteOutputObj
===
'inner'
)
{
getSessionConversationId
()
// inner 环境下,如果没有 loginCode,先验证 token 是否有效
dispatch
(
fetchConversations
())
// 保证登录成功(token 有效)后再调用业务接口
const
existingToken
=
getTokenFromStorage
()
if
(
existingToken
&&
!
hasCalledBusinessApis
.
current
)
{
try
{
// 验证 token 是否有效
await
fetchCheckTokenApi
()
// token 验证成功,调用业务接口
hasCalledBusinessApis
.
current
=
true
getSessionConversationId
()
dispatch
(
fetchConversations
())
}
catch
(
error
)
{
// token 验证失败,不调用业务接口
console
.
error
(
'Token 验证失败:'
,
error
)
}
}
// 如果没有 token,不调用业务接口,等待 loginCode 或用户手动登录
}
}
else
{
else
{
// 模拟登录 可以用来测试
// 模拟登录 可以用来测试
...
@@ -343,6 +385,8 @@ export const Home: React.FC = () => {
...
@@ -343,6 +385,8 @@ export const Home: React.FC = () => {
if
(
res
.
data
.
userName
)
{
if
(
res
.
data
.
userName
)
{
setUserName
(
res
.
data
.
userName
)
setUserName
(
res
.
data
.
userName
)
}
}
// 确保 token 已写入 localStorage(useLocalStorageState 是同步的,但为了保险起见,使用微任务确保写入完成)
await
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
0
))
// 主动触发 storage 事件,确保其他组件能监听到变化
// 主动触发 storage 事件,确保其他组件能监听到变化
window
.
dispatchEvent
(
window
.
dispatchEvent
(
new
StorageEvent
(
'storage'
,
{
new
StorageEvent
(
'storage'
,
{
...
@@ -353,12 +397,17 @@ export const Home: React.FC = () => {
...
@@ -353,12 +397,17 @@ export const Home: React.FC = () => {
storageArea
:
localStorage
,
storageArea
:
localStorage
,
}),
}),
)
)
// 触发自定义事件,通知 ChatEditor 强制重置为制度活化
// 确保 token 已写入 localStorage 后再调用业务接口
window
.
dispatchEvent
(
new
CustomEvent
(
'forceResetToGeneralMode'
))
const
actualToken
=
getTokenFromStorage
()
||
res
.
data
.
token
getSessionConversationId
()
if
(
actualToken
&&
!
hasCalledBusinessApis
.
current
)
{
dispatch
(
fetchConversations
())
hasCalledBusinessApis
.
current
=
true
// 2. 拉取常见问题等业务数据
// 触发自定义事件,通知 ChatEditor 强制重置为制度活化
_handleToolClick
(
false
,
''
,
true
)
window
.
dispatchEvent
(
new
CustomEvent
(
'forceResetToGeneralMode'
))
getSessionConversationId
()
dispatch
(
fetchConversations
())
// 2. 拉取常见问题等业务数据
_handleToolClick
(
false
,
''
,
true
)
}
}
}
}
}
}
}
...
...
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