From 41cf72db12c3915204c2178acdde50eb9fac32ab Mon Sep 17 00:00:00 2001 From: yanlongqi Date: Mon, 10 Nov 2025 13:49:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E5=92=8C=E9=9A=8F=E6=9C=BA=E6=A8=A1=E5=BC=8F=E7=9A=84=E4=B8=A4?= =?UTF-8?q?=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 后端改动: - 修复搜索功能中的 PostgreSQL 类型问题,将 question_id 转换为文本类型进行搜索 前端改动: - 优化随机刷题模式,避免在答题后选到相同题目 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- internal/handlers/practice_handler.go | 3 ++- web/src/pages/Question.tsx | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/internal/handlers/practice_handler.go b/internal/handlers/practice_handler.go index de6fe84..6bd4315 100644 --- a/internal/handlers/practice_handler.go +++ b/internal/handlers/practice_handler.go @@ -100,7 +100,8 @@ func GetPracticeQuestions(c *gin.Context) { // 根据搜索关键词过滤(搜索题目内容或题目编号) if searchQuery != "" { - query = query.Where("question LIKE ? OR question_id LIKE ?", "%"+searchQuery+"%", "%"+searchQuery+"%") + // 将 question_id 显式转换为文本类型,避免 PostgreSQL 将其作为数字类型处理 + query = query.Where("question LIKE ? OR question_id::text LIKE ?", "%"+searchQuery+"%", "%"+searchQuery+"%") } // 获取总数 diff --git a/web/src/pages/Question.tsx b/web/src/pages/Question.tsx index 6b55873..1b18a10 100644 --- a/web/src/pages/Question.tsx +++ b/web/src/pages/Question.tsx @@ -303,15 +303,16 @@ const QuestionPage: React.FC = () => { // 随机模式:从题库中随机选择一题 if (randomMode) { - // 获取所有未答题目的索引 + // 获取所有未答题目的索引(排除当前题目) const unansweredIndexes: number[] = []; for (let i = 0; i < allQuestions.length; i++) { - if (!answeredStatus.has(i)) { + // 排除当前题目索引,避免选到同一题 + if (i !== currentIndex && !answeredStatus.has(i)) { unansweredIndexes.push(i); } } - // 如果所有题目都已回答,显示总结页面 + // 如果没有未答题目,显示总结页面 if (unansweredIndexes.length === 0) { setShowSummary(true); // 清除进度