From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目

---
 frontend/src/pages/AttemptReviewPage.css |  392 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 392 insertions(+), 0 deletions(-)

diff --git a/frontend/src/pages/AttemptReviewPage.css b/frontend/src/pages/AttemptReviewPage.css
new file mode 100644
index 0000000..cb70dbc
--- /dev/null
+++ b/frontend/src/pages/AttemptReviewPage.css
@@ -0,0 +1,392 @@
+.attempt-review {
+  display: flex;
+  flex-direction: column;
+  flex: 1;
+  min-height: 0;
+  height: 100%;
+  max-height: 100%;
+  overflow: hidden;
+  box-sizing: border-box;
+  background: #fff;
+}
+
+.attempt-review__center-right {
+  flex: 1;
+  min-width: 0;
+  min-height: 0;
+  display: flex;
+  flex-direction: column;
+  position: relative;
+}
+
+.attempt-review__center-right-mask {
+  position: absolute;
+  inset: 0;
+  z-index: 3;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: rgba(255, 255, 255, 0.72);
+  pointer-events: none;
+}
+
+.attempt-review__center-right-placeholder {
+  flex: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  min-height: 200px;
+}
+
+.attempt-review__index-detail-row {
+  flex: 1;
+  min-height: 0;
+  display: flex;
+  gap: 12px;
+}
+
+.attempt-review__header {
+  flex-shrink: 0;
+  margin-bottom: 12px;
+}
+
+.attempt-review__split {
+  flex: 1;
+  min-height: 0;
+  display: flex;
+  gap: 12px;
+}
+
+.attempt-review__roster-col {
+  flex: 0 0 200px;
+  width: 200px;
+  min-height: 0;
+  display: flex;
+}
+
+.attempt-review__roster {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  min-height: 0;
+  height: 100%;
+  background: #fff;
+  border: 1px solid #f0f0f0;
+  border-radius: 8px;
+  overflow: hidden;
+}
+
+.attempt-review__roster-form {
+  flex-shrink: 0;
+  padding: 8px 8px 4px;
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.attempt-review__roster-form .attempt-review__roster-field {
+  margin-bottom: 6px;
+}
+
+.attempt-review__roster-form .ant-form-item-row {
+  flex-wrap: nowrap;
+  align-items: center;
+}
+
+.attempt-review__roster-form .ant-form-item-label {
+  padding-bottom: 0;
+  text-align: right;
+}
+
+.attempt-review__roster-form .ant-form-item-label > label {
+  font-size: 12px;
+  height: 22px;
+  justify-content: flex-end;
+}
+
+.attempt-review__roster-form .ant-form-item-control {
+  min-width: 0;
+}
+
+.attempt-review__roster-list {
+  flex: 1;
+  min-height: 0;
+  overflow-y: auto;
+  overscroll-behavior: contain;
+  padding: 4px;
+}
+
+.attempt-review__roster-item {
+  display: block;
+  width: 100%;
+  text-align: left;
+  border: 1px solid transparent;
+  border-radius: 6px;
+  background: #fafafa;
+  padding: 8px 8px;
+  margin-bottom: 4px;
+  cursor: pointer;
+  transition: background 0.15s, border-color 0.15s;
+}
+
+.attempt-review__roster-item:hover {
+  background: #f0f5ff;
+}
+
+.attempt-review__roster-item--active {
+  background: #e6f4ff;
+  border-color: #1677ff;
+}
+
+.attempt-review__roster-name {
+  font-size: 13px;
+  font-weight: 600;
+  color: #262626;
+  margin-bottom: 2px;
+}
+
+.attempt-review__roster-meta {
+  display: flex;
+  justify-content: space-between;
+  gap: 4px;
+  font-size: 11px;
+  color: #8c8c8c;
+}
+
+.attempt-review__roster-subject {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  max-width: 100px;
+}
+
+.attempt-review__roster-hint {
+  text-align: center;
+  font-size: 12px;
+  color: #bfbfbf;
+  padding: 8px 4px;
+}
+
+.attempt-review__index-col {
+  flex: 0 0 280px;
+  width: 280px;
+  min-height: 0;
+  display: flex;
+}
+
+.attempt-review__index-col--collapsed {
+  flex: 0 0 48px;
+  width: 48px;
+}
+
+.attempt-review__index-mobile-wrap {
+  flex-shrink: 0;
+  margin-bottom: 12px;
+}
+
+.attempt-review__detail {
+  flex: 1;
+  min-width: 0;
+  min-height: 0;
+  overflow-y: auto;
+  overflow-x: hidden;
+  overscroll-behavior: contain;
+  background: #fff;
+  border-radius: 8px;
+  border: 1px solid #f0f0f0;
+  padding: 12px 16px;
+  -webkit-overflow-scrolling: touch;
+}
+
+.attempt-review__detail-inner {
+  min-height: min-content;
+  background: #fff;
+}
+
+.attempt-review__question-anchor {
+  scroll-margin-top: 0;
+}
+
+.attempt-review__question-card {
+  margin-bottom: 12px;
+  border: 1px solid #f0f0f0;
+}
+
+.attempt-review__index {
+  background: #fff;
+  border-radius: 8px;
+  border: 1px solid #f0f0f0;
+  display: flex;
+  flex-direction: column;
+  overflow: hidden;
+  width: 100%;
+  min-height: 0;
+  height: 100%;
+}
+
+.attempt-review__index-toolbar {
+  display: flex;
+  align-items: center;
+  justify-content: flex-end;
+  flex-shrink: 0;
+  padding: 8px 8px 4px;
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.attempt-review__index-filter {
+  flex-shrink: 0;
+  padding: 8px 10px 10px;
+  border-bottom: 1px solid #f0f0f0;
+}
+
+.attempt-review__type-radio {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 6px;
+}
+
+.attempt-review__type-radio .ant-radio-button-wrapper {
+  height: auto;
+  line-height: 1.3;
+  padding: 4px 10px;
+  font-size: 12px;
+}
+
+.attempt-review__index-body {
+  flex: 1;
+  min-height: 0;
+  overflow-y: auto;
+  overflow-x: hidden;
+  overscroll-behavior: contain;
+  padding: 8px 12px 16px;
+}
+
+.attempt-review__section {
+  margin-bottom: 16px;
+}
+
+.attempt-review__section-title {
+  background: #f5f5f5;
+  color: #262626;
+  font-size: 13px;
+  font-weight: 600;
+  padding: 8px 10px;
+  margin: 0 0 10px;
+  border-radius: 4px;
+  line-height: 1.4;
+}
+
+.attempt-review__bubble-grid {
+  display: grid;
+  grid-template-columns: repeat(5, 1fr);
+  gap: 10px 8px;
+}
+
+.attempt-review__bubble {
+  width: 100%;
+  aspect-ratio: 1;
+  max-width: 40px;
+  margin: 0 auto;
+  border: 1px solid #e8e8e8;
+  border-radius: 50%;
+  background: #fafafa;
+  color: #8c8c8c;
+  font-size: 12px;
+  cursor: pointer;
+  padding: 0;
+  box-sizing: border-box;
+  transition:
+    border-color 0.15s,
+    background 0.15s,
+    box-shadow 0.15s;
+}
+
+.attempt-review__bubble--unanswered {
+  background: #f5f5f5;
+  color: #bfbfbf;
+  border-color: #ebebeb;
+}
+
+.attempt-review__bubble--correct {
+  background: #f6ffed;
+  color: #52a82a;
+  border-color: #d9f0c8;
+}
+
+.attempt-review__bubble--wrong {
+  background: #fffafa;
+  color: #c75454;
+  border-color: #f0e0e0;
+}
+
+.attempt-review__bubble--active {
+  border: 2px solid #1677ff;
+  box-shadow:
+    0 0 0 2px rgba(22, 119, 255, 0.28),
+    0 1px 4px rgba(22, 119, 255, 0.22);
+  color: inherit;
+  z-index: 1;
+}
+
+.attempt-review__bubble--active.attempt-review__bubble--correct {
+  background: #f6ffed;
+  color: #389e0d;
+}
+
+.attempt-review__bubble--active.attempt-review__bubble--wrong {
+  background: #fff1f0;
+  color: #cf1322;
+}
+
+.attempt-review__bubble--active.attempt-review__bubble--unanswered {
+  background: #fff;
+  color: #595959;
+}
+
+.attempt-review__bubble:hover:not(.attempt-review__bubble--active) {
+  border-color: #d9d9d9;
+}
+
+.attempt-review__bubble--active:hover {
+  border-color: #0958d9;
+  box-shadow:
+    0 0 0 2px rgba(9, 88, 217, 0.35),
+    0 2px 6px rgba(22, 119, 255, 0.28);
+}
+
+.attempt-review__index--collapsed {
+  width: 44px;
+  min-width: 44px;
+}
+
+.attempt-review__index--collapsed .attempt-review__index-filter,
+.attempt-review__index--collapsed .attempt-review__index-body {
+  display: none;
+}
+
+.attempt-review__index-collapsed-label {
+  writing-mode: vertical-rl;
+  text-orientation: mixed;
+  font-size: 12px;
+  color: #8c8c8c;
+  padding: 12px 0;
+  text-align: center;
+  letter-spacing: 2px;
+  flex: 1;
+}
+
+.attempt-review__index-mobile {
+  max-height: 240px;
+}
+
+.attempt-review__index-mobile .attempt-review__index-body {
+  max-height: 160px;
+}
+
+@media (max-width: 991px) {
+  .attempt-review__split {
+    flex-direction: column;
+  }
+
+  .attempt-review__detail {
+    flex: 1;
+  }
+}

--
Gitblit v1.8.0