fix: 换一批改为先从热点池轮换,用完再调AI生成
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled

This commit is contained in:
selfrelease
2026-08-31 17:20:50 +08:00
parent 9e8291e8bd
commit e510393eb8
+22 -3
View File
@@ -285,6 +285,10 @@ export function ChatPanel({
const [loading, setLoading] = useState(false)
const [dynamicSamples, setDynamicSamples] = useState<string[]>(samples)
const [refreshing, setRefreshing] = useState(false)
/** 当天热点问题池(从后端加载的全部问题)和当前批次起始索引 */
const [dailyPool, setDailyPool] = useState<string[]>([])
const [poolIndex, setPoolIndex] = useState(0)
const BATCH_SIZE = 12
// ===== 2.0 新增:案卡状态 =====
const [matterId, setMatterId] = useState<number | null>(null)
@@ -402,12 +406,14 @@ export function ChatPanel({
setDynamicSamples(samples)
}, [samples])
/** 挂载时取当天热点问题,有则覆盖兜底示例 */
/** 挂载时取当天热点问题,有则存入池并显示首批 */
useEffect(() => {
api.getDailyTopics(scene)
.then((res) => {
if (res.questions?.length > 0) {
setDynamicSamples(res.questions)
setDailyPool(res.questions)
setPoolIndex(0)
setDynamicSamples(res.questions.slice(0, BATCH_SIZE))
}
})
.catch(() => {/* 用兜底示例 */})
@@ -545,13 +551,26 @@ export function ChatPanel({
}, answers.length > 0 ? answers : undefined)
}
/** AI 换一批示例问题(注入用户画像,个性化推荐) */
/** 换一批:优先从当天热点池轮换,池用完再调 AI 生成(注入用户画像) */
const handleRefreshSamples = async () => {
// 池里还有未展示的,直接取下一批
const nextIndex = poolIndex + BATCH_SIZE
if (dailyPool.length > 0 && nextIndex < dailyPool.length) {
setPoolIndex(nextIndex)
setDynamicSamples(dailyPool.slice(nextIndex, nextIndex + BATCH_SIZE))
return
}
// 池用完,调 AI 生成新问题
setRefreshing(true)
try {
const phone = getPhone() || undefined
const res = await api.generateSamples(scene, topic, dynamicSamples, phone)
if (res.samples?.length > 0) {
setDynamicSamples(res.samples)
// AI 生成的新问题加入池,重置索引
setDailyPool(prev => [...prev, ...res.samples])
setPoolIndex(dailyPool.length)
}
} catch {
toast.error('换一批失败,请稍后重试')
} finally {