Commit ef640258 by Liu

fix: 清空记录后新建会话

parent 9ea85437
......@@ -69,6 +69,8 @@ export const TacticsChat: React.FC = () => {
const scrollableRef = useRef<HTMLDivElement | any>(null)
const position = useScroll(scrollableRef)
const currentIdRef = useRef<string | undefined>(id)
// 标记当前会话是否由「清空记录」操作创建,用于控制是否需要自动调用提问接口
const createdFromClearRef = useRef(false)
const lastSentQuestionRef = useRef<string>('')
const abortControllerRef = useRef<AbortController | null>(null)
// 读取 from=tactics 的额外参数
......@@ -79,14 +81,18 @@ export const TacticsChat: React.FC = () => {
if (from !== 'tactics') {
return undefined
}
const taskId = searchParams.get('taskId') || undefined
return {
version,
taskId: searchParams.get('taskId') || undefined,
taskId,
pinBeginTime: searchParams.get('pinBeginTime') || undefined,
pinEndTime: searchParams.get('pinEndTime') || undefined,
partOrAll: searchParams.get('partOrAll') || undefined,
channel: searchParams.get('channel') || undefined,
channelName: searchParams.get('channelName') || undefined,
// from=tactics 场景下,新建会话需要的业务识别参数
busiType: '02',
busiId: taskId,
}
}, [searchParams])
const tacticsMetaFromStorage = useMemo(() => {
......@@ -595,10 +601,14 @@ export const TacticsChat: React.FC = () => {
setHasCleared(true)
setHistoryDividerIndex(null)
setHistoryDividerTime(null)
// 标记接下来创建的新会话来源于「清空记录」,用于阻止自动触发一次提问
createdFromClearRef.current = true
dispatch(
createTacticsConversation({
conversationData: getConversationExtra(),
shouldNavigate: false,
// 清空记录后创建的新会话也需要更新路由中的 conversationId
// 因此这里改为 shouldNavigate: true,让下方 useEffect 触发 navigate
shouldNavigate: true,
shouldSendQuestion: '',
}),
)
......@@ -624,7 +634,10 @@ export const TacticsChat: React.FC = () => {
// - 有 userMeta:按 userMeta.numberType 映射 numberType(A03/A05/A07/A09),不传 recordType,仅传 userMeta
const hasUserMeta = !!userMeta
if (hasUserMeta) {
const mappedNumberType = getNumberTypeWithUserMeta('A02', true)
// place=user 场景下,重新分析也视为“自动调用”:
// - numberType 为 3/4/5/6:映射为 A03/A05/A07/A09
// - 其它值或不存在:recordType=A01
const mappedNumberType = getNumberTypeWithUserMeta('A01', true)
await handleSubmitQuestion(undefined, undefined, undefined, {
busiType: '02',
recordType: mappedNumberType,
......@@ -697,13 +710,23 @@ export const TacticsChat: React.FC = () => {
useEffect(() => {
// 仅在历史记录查询完成且为空时,才自动触发一次提交
if (currentIdRef.current && !isLoading && hasHistory === false && !hasAutoSubmittedRef.current) {
// 如果当前会话是由「清空记录」创建的,则不自动调用提问接口
// 但仍然标记为已处理,避免后续重复触发
if (createdFromClearRef.current) {
createdFromClearRef.current = false
hasAutoSubmittedRef.current = true
return
}
hasAutoSubmittedRef.current = true
// 进入会话后自动触发一次提交:
// - 无 userMeta:沿用原逻辑,recordType=A02,携带 tacticsMeta
// - 有 userMeta:按 userMeta.numberType 映射 numberType(A03/A05/A07/A09),不传 recordType,仅传 userMeta
const hasUserMeta = !!userMeta
if (hasUserMeta) {
const mappedNumberType = getNumberTypeWithUserMeta('A02', true)
// place=user 场景下,首次自动调用:
// - numberType 为 3/4/5/6:映射为 A03/A05/A07/A09
// - 其它值或不存在:recordType=A01
const mappedNumberType = getNumberTypeWithUserMeta('A01', true)
handleSubmitQuestion(
undefined,
undefined,
......
......@@ -25,23 +25,24 @@ export const TacticsHome: React.FC = () => {
defaultValue: '',
})
// 仅在 from=tactics 且 version=2 时读取并缓存额外参数
// from=tactics 时读取并缓存额外参数(无论 version 是否为 2),用于新建会话
const tacticsMetaFromSearch = useMemo(() => {
const from = searchParams.get('from')
const version = searchParams.get('version')
if (from !== 'tactics' || version !== '2') {
if (from !== 'tactics') {
return undefined
}
const taskId = searchParams.get('taskId') || undefined
return {
version,
taskId: searchParams.get('taskId') || undefined,
version: searchParams.get('version'),
taskId,
pinBeginTime: searchParams.get('pinBeginTime') || undefined,
pinEndTime: searchParams.get('pinEndTime') || undefined,
partOrAll: searchParams.get('partOrAll') || undefined,
channel: searchParams.get('channel') || undefined,
channelName: searchParams.get('channelName') || undefined,
// 新建会话需要的业务识别参数
busiType: '02',
busiId: searchParams.get('taskId') || undefined,
busiId: taskId,
}
}, [searchParams])
const tacticsMetaFromStorage = useMemo(() => {
......@@ -51,7 +52,7 @@ export const TacticsHome: React.FC = () => {
}
try {
const parsed = JSON.parse(raw)
if (parsed?.from === 'tactics' && parsed?.version === '2') {
if (parsed?.from === 'tactics') {
return parsed
}
}
......
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