Selaa lähdekoodia

fix(exam-sprint): 对齐展望报告频率卡星标

金逸霄 2 viikkoa sitten
vanhempi
commit
eb85397889

+ 16 - 7
abilities/exam-sprint/infrastructure/src/main/java/cn/yunzhixue/ability/center/examsprint/infrastructure/report/rendering/outlook/ClasspathOutlookExamSprintReportRenderer.java

@@ -449,19 +449,28 @@ public class ClasspathOutlookExamSprintReportRenderer implements ExamSprintRepor
             if (card.recommended()) {
                 builder.append(" active");
             }
-            builder.append("'>")
-                    .append("<div class='freq-header'>")
-                    .append(card.cadencePerWeek()).append("套/周");
+            builder.append("'>");
 
             if (card.recommended()) {
                 String badgeLabel = card.badgeLabel() == null || card.badgeLabel().isBlank() ? "推荐" : card.badgeLabel();
-                builder.append(" <span class='badge'>").append(escape(badgeLabel)).append("</span>");
+                builder.append("<div class='freq-header'>")
+                        .append(card.cadencePerWeek()).append("套/周")
+                        .append(" <span class='badge'>").append(escape(badgeLabel)).append("</span>")
+                        .append("</div>");
             } else if (card.cadencePerWeek() == 5) {
-                builder.append(" <span class='crown'>★</span>");
+                builder.append("<table class='freq-header-table' role='presentation'><tr>")
+                        .append("<td class='freq-title-cell'><div class='freq-header'>")
+                        .append(card.cadencePerWeek()).append("套/周")
+                        .append("</div></td>")
+                        .append("<td class='freq-star-cell'><span class='crown'>★</span></td>")
+                        .append("</tr></table>");
+            } else {
+                builder.append("<div class='freq-header'>")
+                        .append(card.cadencePerWeek()).append("套/周")
+                        .append("</div>");
             }
 
-            builder.append("</div>")
-                    .append(renderFrequencyPlanProgressBar(card.winRatePercent(), columnNumber))
+            builder.append(renderFrequencyPlanProgressBar(card.winRatePercent(), columnNumber))
                     .append("<div class='freq-data'>提升 <strong>")
                     .append(escape(card.scoreGainLabel()))
                     .append("</strong> · 胜率 <strong>")

+ 28 - 3
abilities/exam-sprint/infrastructure/src/main/resources/templates/outlook-exam-sprint-report-template.html

@@ -179,6 +179,29 @@
             margin-bottom: 10px;
         }
 
+        .freq-header-table {
+            width: 100%;
+            table-layout: fixed;
+            border-collapse: collapse;
+            margin-bottom: 10px;
+        }
+
+        .freq-title-cell {
+            vertical-align: middle;
+            padding: 0;
+        }
+
+        .freq-star-cell {
+            width: 28px;
+            text-align: right;
+            vertical-align: middle;
+            padding: 0;
+        }
+
+        .freq-header-table .freq-header {
+            margin-bottom: 0;
+        }
+
         .badge {
             display: inline-block;
             margin-left: 5px;
@@ -191,10 +214,12 @@
         }
 
         .crown {
-            position: absolute;
-            top: -10px;
-            right: 10px;
+            display: inline-block;
+            position: relative;
+            top: -4px;
             font-size: 20px;
+            line-height: 1;
+            vertical-align: middle;
         }
 
         .freq-progress-svg {

+ 4 - 1
abilities/exam-sprint/infrastructure/src/test/java/cn/yunzhixue/ability/center/examsprint/infrastructure/report/rendering/outlook/ClasspathOutlookExamSprintReportRendererTest.java

@@ -51,12 +51,15 @@ class ClasspathOutlookExamSprintReportRendererTest {
                 .contains("class='freq-card card-2 active'")
                 .contains("class='freq-header'>2套/周")
                 .contains("class='freq-header'>3套/周 <span class='badge'>推荐</span>")
-                .contains("class='freq-header'>5套/周 <span class='crown'>★</span>")
+                .contains("class='freq-header-table'")
+                .contains("class='freq-title-cell'><div class='freq-header'>5套/周</div>")
+                .contains("class='freq-star-cell'><span class='crown'>★</span>")
                 .contains("class='chart-track' cx='110' cy='110' r='76' fill='none' stroke='#e8eef7' stroke-width='18'")
                 .doesNotContain("class='freq-title'>")
                 .doesNotContain("class='freq-header'>1套/周")
                 .doesNotContain("2套/周 <span class='badge'>")
                 .doesNotContain("5套/周 <span class='badge'>")
+                .doesNotContain("class='freq-header'>5套/周 <span class='crown'>★</span>")
                 .doesNotContain("④")
                 .contains("胜率 <strong>72%</strong>")
                 .contains("class='suggest-box'")

+ 6 - 0
abilities/exam-sprint/infrastructure/src/test/java/cn/yunzhixue/ability/center/examsprint/infrastructure/report/rendering/outlook/OutlookExamSprintReportTemplateCompatibilityTest.java

@@ -60,6 +60,12 @@ class OutlookExamSprintReportTemplateCompatibilityTest {
                 .containsPattern("\\.freq-card\\s*\\{[^}]*page-break-inside\\s*:\\s*avoid\\s*;[^}]*}")
                 .contains(".freq-header")
                 .containsPattern("\\.freq-header\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*font-size\\s*:\\s*18px\\s*;[^}]*font-weight\\s*:\\s*600\\s*;[^}]*}")
+                .contains(".freq-header-table")
+                .containsPattern("\\.freq-header-table\\s*\\{[^}]*width\\s*:\\s*100%\\s*;[^}]*table-layout\\s*:\\s*fixed\\s*;[^}]*border-collapse\\s*:\\s*collapse\\s*;[^}]*}")
+                .containsPattern("\\.freq-title-cell\\s*\\{[^}]*vertical-align\\s*:\\s*middle\\s*;[^}]*padding\\s*:\\s*0\\s*;[^}]*}")
+                .containsPattern("\\.freq-star-cell\\s*\\{[^}]*width\\s*:\\s*28px\\s*;[^}]*text-align\\s*:\\s*right\\s*;[^}]*vertical-align\\s*:\\s*middle\\s*;[^}]*}")
+                .doesNotContainPattern("\\.crown\\s*\\{[^}]*position\\s*:\\s*absolute\\s*;")
+                .containsPattern("\\.crown\\s*\\{[^}]*position\\s*:\\s*relative\\s*;[^}]*top\\s*:\\s*-4px\\s*;[^}]*}")
                 .containsPattern("\\.data-text\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")
                 .contains(".text-desc")
                 .containsPattern("\\.text-desc\\s*\\{[^}]*font-family\\s*:\\s*MiSans, ReportFont, sans-serif\\s*;[^}]*line-height\\s*:\\s*1.72\\s*;[^}]*}")