From 0464223d003730c2e4da35d2bc112fbb26bcce80 Mon Sep 17 00:00:00 2001 From: yanlongqi Date: Tue, 18 Nov 2025 02:45:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BD=BF=E7=94=A8=E4=B8=8B?= =?UTF-8?q?=E5=88=92=E7=BA=BF=E5=AD=97=E7=AC=A6=E5=A1=AB=E5=85=85=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AFCSS=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 将填空题从CSS边框样式改为传统的下划线字符(____) 2. 移除像素计算,使用纯文本下划线字符 3. 保持最少8个下划线字符的最小长度 4. 根据答案长度动态调整下划线数量 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- web/src/pages/ExamPrint.tsx | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/web/src/pages/ExamPrint.tsx b/web/src/pages/ExamPrint.tsx index 9b1284d..a9dafae 100644 --- a/web/src/pages/ExamPrint.tsx +++ b/web/src/pages/ExamPrint.tsx @@ -151,33 +151,33 @@ const ExamPrint: React.FC = () => { ? [String(question.answer)] : [] - // 计算下划线宽度,根据答案长度自动调整 - const calculateUnderscoreWidth = (blankIndex: number, totalBlanks: number) => { + // 计算下划线字符数量 + const calculateUnderscoreCount = (blankIndex: number, totalBlanks: number) => { // 优先使用 answer_lengths 字段(在 show_answer=false 时也会返回) if (question.answer_lengths && question.answer_lengths[blankIndex] !== undefined) { const answerLength = question.answer_lengths[blankIndex] - // 每个字符对应约4px宽度,最少8个字符=32px,最多60px - return Math.max(Math.max(answerLength, 8) * 4, 32) + // 最少8个下划线字符 + return Math.max(answerLength, 8) } // 如果有实际的答案数据,使用答案长度 if (answers[blankIndex]) { const answerText = String(answers[blankIndex]) - // 每个字符对应约4px宽度,最少8个字符=32px - return Math.max(Math.max(answerText.length, 8) * 4, 32) + // 最少8个下划线字符 + return Math.max(answerText.length, 8) } // 如果没有任何答案数据,使用默认策略 if (totalBlanks === 1) { - return 32 // 单个填空:32px(约8个字符) + return 8 // 单个填空:8个下划线字符 } else { - // 多个填空:30-40px循环(约8-10个字符) - const widths = [32, 36, 40, 34, 38] - return widths[blankIndex % widths.length] + // 多个填空:8-12个下划线字符循环 + const counts = [8, 10, 12, 9, 11] + return counts[blankIndex % counts.length] } } - // 处理题目内容,将 **** 替换为双下划线 + // 处理题目内容,将 **** 替换为下划线字符 const renderQuestionContent = (content: string) => { if (!content) return content @@ -187,11 +187,11 @@ const ExamPrint: React.FC = () => { // 先计算出总共有多少个填空 const totalBlanks = (content.match(/\*{4,}/g) || []).length - // 将所有的 **** 替换为连续的下划线 + // 将所有的 **** 替换为下划线字符 processedContent = processedContent.replace(/\*{4,}/g, () => { - const width = calculateUnderscoreWidth(blankIndex, totalBlanks) + const underscoreCount = calculateUnderscoreCount(blankIndex, totalBlanks) blankIndex++ - return `` + return '_'.repeat(underscoreCount) }) return processedContent