Procházet zdrojové kódy

feat: 判断默认至少一个方框

过卫栋 před 3 týdny
rodič
revize
0f223ae9f9

+ 23 - 0
resources/views/components/exam/paper-body.blade.php

@@ -467,6 +467,29 @@
                         // 重新组合所有部分
                         $solutionProcessed = implode('', $processedSections);
 
+                        // 【新增】如果没有匹配到任何section标记,整个solution都没有方框,则默认加一个方框
+                        if (empty($processedSections) || (count($processedSections) === 1 && !str_contains($processedSections[0] ?? '', 'step-box'))) {
+                            // 检查是否有步骤关键词
+                            if (preg_match('/(步骤\s*\d+|第\s*\d+\s*步)/u', $solutionProcessed)) {
+                                // 有步骤关键词:为每个步骤添加方框
+                                $allSteps = preg_split('/(?=步骤\s*\d+|第\s*\d+\s*步)/u', $solutionProcessed, -1, PREG_SPLIT_NO_EMPTY);
+                                if (count($allSteps) > 0) {
+                                    $processed = '';
+                                    for ($i = 0; $i < count($allSteps); $i++) {
+                                        $stepText = trim($allSteps[$i]);
+                                        if (!empty($stepText)) {
+                                            $prefix = ($i > 0) ? '<br>' : '';
+                                            $processed .= $prefix . '<span class="solution-step"><span class="step-box">' . $renderBoxes(1) . '</span><span class="step-label">' . $stepText . '</span></span>';
+                                        }
+                                    }
+                                    $solutionProcessed = $processed;
+                                }
+                            } else {
+                                // 没有步骤关键词:默认在开头添加一个方框
+                                $solutionProcessed = '<span class="solution-step"><span class="step-box">' . $renderBoxes(1) . '</span><span class="step-label">' . trim($solutionProcessed) . '</span></span>';
+                            }
+                        }
+
                         // 将多余的换行转换为<br>,但保留合理的段落间距
                         $solutionProcessed = preg_replace('/\n{3,}/u', "\n\n", $solutionProcessed);
                         $solutionProcessed = nl2br($solutionProcessed);