题单
@@ -195,7 +195,7 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
.page {
display: flex;
flex-direction: column;
- gap: 14px;
+ gap: var(--oj-gap);
}
.top {
@@ -206,7 +206,7 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
.top h2 {
margin: 0;
- font-size: 20px;
+ font-size: var(--oj-fs-title);
}
.search {
@@ -221,12 +221,14 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
display: flex;
align-items: center;
gap: 8px;
- font-size: 13px;
+ margin-bottom: -6px;
+ font-size: var(--oj-fs-h2);
font-weight: 700;
- color: v-bind("theme.textColor2");
+ color: v-bind("theme.textColor1");
}
.sect .muted {
+ font-size: var(--oj-fs-sec);
font-weight: 400;
}
@@ -239,11 +241,13 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
}
.small {
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
+ white-space: nowrap;
}
.tiny {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
+ white-space: nowrap;
}
.num {
@@ -268,23 +272,25 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
align-items: baseline;
}
+/* 1200 限宽下布置中是一行三张、其他题单一行四张;原来一行四张的大卡只有 280 宽,
+ 「还没加入 · 9 道」和「另有 1 道选做」都被挤成两行 */
.big-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
- gap: 12px;
+ grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
+ gap: 16px;
}
.small-grid {
display: grid;
- grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
- gap: 10px;
+ grid-template-columns: repeat(auto-fill, minmax(270px, 1fr));
+ gap: 14px;
}
.card {
box-sizing: border-box;
min-width: 0;
border: 1px solid v-bind("theme.borderColor");
- border-radius: 6px;
+ border-radius: var(--oj-radius);
background: v-bind("theme.cardColor");
color: v-bind("theme.textColor1");
text-decoration: none;
@@ -303,32 +309,32 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
}
.big {
- padding: 14px 16px;
+ padding: 20px 22px;
display: flex;
flex-direction: column;
- gap: 8px;
+ gap: 10px;
}
.title {
flex-grow: 1;
- font-size: 16px;
+ font-size: 18px;
}
.desc {
- height: 17px;
- font-size: 12px;
+ height: 20px;
+ font-size: var(--oj-fs-meta);
}
.count {
- font-size: 22px;
+ font-size: 26px;
font-weight: 700;
}
.pill {
- height: 22px;
- padding: 0 8px;
- border-radius: 3px;
- font-size: 12px;
+ height: 24px;
+ padding: 0 9px;
+ border-radius: 4px;
+ font-size: var(--oj-fs-meta);
display: inline-flex;
align-items: center;
white-space: nowrap;
@@ -359,8 +365,8 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
}
.hint {
- height: 20px;
- font-size: 12px;
+ height: 22px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor2");
}
@@ -391,14 +397,14 @@ const doneBackground = computed(() => rgba(theme.value.successColor, 0.05))
}
.small-card {
- height: 74px;
- padding: 10px 14px;
+ height: 88px;
+ padding: 14px 18px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.small-card b {
- font-size: 14px;
+ font-size: var(--oj-fs-body);
}
diff --git a/apps/web/src/oj/rank/components/ChampionList.vue b/apps/web/src/oj/rank/components/ChampionList.vue
index 5ee2c91..1b4be8c 100644
--- a/apps/web/src/oj/rank/components/ChampionList.vue
+++ b/apps/web/src/oj/rank/components/ChampionList.vue
@@ -73,20 +73,20 @@ function weekLabel(start: string) {
}
.row {
- height: 26px;
+ height: 32px;
display: flex;
align-items: center;
gap: 8px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
}
.muted {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
}
.week {
- width: 78px;
+ width: 86px;
flex-shrink: 0;
}
@@ -113,13 +113,13 @@ function weekLabel(start: string) {
}
.hot-tag {
- font-size: 11px;
+ font-size: 12px;
font-weight: 600;
color: #ffffff;
background: #c76a12;
border-radius: 3px;
- padding: 0 5px;
- line-height: 16px;
+ padding: 0 6px;
+ line-height: 18px;
white-space: nowrap;
}
diff --git a/apps/web/src/oj/rank/components/ClassBattle.vue b/apps/web/src/oj/rank/components/ClassBattle.vue
index c877733..f893fd7 100644
--- a/apps/web/src/oj/rank/components/ClassBattle.vue
+++ b/apps/web/src/oj/rank/components/ClassBattle.vue
@@ -92,12 +92,12 @@ function shortLabel(className: string) {
diff --git a/apps/web/src/oj/rank/components/RankMe.vue b/apps/web/src/oj/rank/components/RankMe.vue
index 9a7267f..354b874 100644
--- a/apps/web/src/oj/rank/components/RankMe.vue
+++ b/apps/web/src/oj/rank/components/RankMe.vue
@@ -260,12 +260,12 @@ function threatNote(me: RankRow, behind: RankRow) {
diff --git a/apps/web/src/oj/rank/components/RankTrack.vue b/apps/web/src/oj/rank/components/RankTrack.vue
index ac7ac8a..2936c26 100644
--- a/apps/web/src/oj/rank/components/RankTrack.vue
+++ b/apps/web/src/oj/rank/components/RankTrack.vue
@@ -291,8 +291,8 @@ function onMenu(key: string, row: RankRow) {
.track {
display: grid;
grid-template-columns: 1fr 1fr;
- gap: 0 36px;
- padding: 10px 24px 14px;
+ gap: 0 40px;
+ padding: 12px 24px 20px;
}
.track.single {
@@ -308,11 +308,11 @@ function onMenu(key: string, row: RankRow) {
}
.lane {
- height: 28px;
+ height: 34px;
display: flex;
align-items: center;
gap: 8px;
- font-size: 14px;
+ font-size: var(--oj-fs-body);
}
.single .column {
@@ -321,14 +321,14 @@ function onMenu(key: string, row: RankRow) {
.prow {
position: relative;
- height: 32px;
+ height: 38px;
display: flex;
align-items: center;
gap: 8px;
padding: 0 8px 0 4px;
border-radius: 6px;
overflow: hidden;
- font-size: 14px;
+ font-size: var(--oj-fs-body);
}
.prow > :not(.fill) {
@@ -360,7 +360,7 @@ function onMenu(key: string, row: RankRow) {
.mood {
flex: 1;
min-width: 0;
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
white-space: nowrap;
overflow: hidden;
@@ -376,11 +376,11 @@ function onMenu(key: string, row: RankRow) {
}
.single .gap {
- height: 34px;
+ height: 38px;
margin: 2px 0 0;
border: 1px dashed v-bind("theme.borderColor");
border-radius: 6px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: #0c7a43;
}
@@ -398,7 +398,7 @@ function onMenu(key: string, row: RankRow) {
.rank {
width: 28px;
text-align: right;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("theme.textColor3");
font-variant-numeric: tabular-nums;
flex-shrink: 0;
@@ -410,7 +410,7 @@ function onMenu(key: string, row: RankRow) {
}
.who {
- width: 116px;
+ width: 126px;
flex-shrink: 0;
padding: 0;
border: 0;
@@ -431,7 +431,7 @@ function onMenu(key: string, row: RankRow) {
.bar-box {
flex-grow: 1;
- height: 14px;
+ height: 16px;
position: relative;
min-width: 40px;
}
@@ -445,7 +445,7 @@ function onMenu(key: string, row: RankRow) {
}
.solved {
- width: 30px;
+ width: 34px;
text-align: right;
font-weight: 700;
font-variant-numeric: tabular-nums;
@@ -453,8 +453,8 @@ function onMenu(key: string, row: RankRow) {
}
.change {
- width: 34px;
- font-size: 12px;
+ width: 36px;
+ font-size: var(--oj-fs-meta);
font-variant-numeric: tabular-nums;
flex-shrink: 0;
}
@@ -479,11 +479,11 @@ function onMenu(key: string, row: RankRow) {
}
.tag {
- font-size: 11px;
+ font-size: 12px;
font-weight: 600;
border-radius: 3px;
- padding: 0 5px;
- line-height: 16px;
+ padding: 0 6px;
+ line-height: 18px;
white-space: nowrap;
}
@@ -513,14 +513,14 @@ function onMenu(key: string, row: RankRow) {
}
.gap {
- height: 30px;
- margin: 4px 0;
+ height: 36px;
+ margin: 6px 0;
border: 0;
border-top: 1px dashed v-bind("theme.borderColor");
border-bottom: 1px dashed v-bind("theme.borderColor");
background: none;
font: inherit;
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
cursor: pointer;
}
diff --git a/apps/web/src/oj/rank/components/WeekTop.vue b/apps/web/src/oj/rank/components/WeekTop.vue
index 0386847..a9cf660 100644
--- a/apps/web/src/oj/rank/components/WeekTop.vue
+++ b/apps/web/src/oj/rank/components/WeekTop.vue
@@ -64,11 +64,11 @@ const scale = computed(() => top.value[0]?.solved || 1)
}
.row {
- height: 26px;
+ height: 32px;
display: flex;
align-items: center;
gap: 8px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
}
.row.me {
@@ -79,8 +79,8 @@ const scale = computed(() => top.value[0]?.solved || 1)
}
.medal {
- width: 22px;
- height: 22px;
+ width: 24px;
+ height: 24px;
border-radius: 11px;
display: inline-flex;
align-items: center;
@@ -92,7 +92,7 @@ const scale = computed(() => top.value[0]?.solved || 1)
}
.who {
- width: 110px;
+ width: 120px;
flex-shrink: 0;
padding: 0;
border: 0;
@@ -105,7 +105,7 @@ const scale = computed(() => top.value[0]?.solved || 1)
.bar-box {
flex-grow: 1;
- height: 9px;
+ height: 10px;
position: relative;
}
@@ -122,7 +122,7 @@ const scale = computed(() => top.value[0]?.solved || 1)
}
.muted {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
}
diff --git a/apps/web/src/oj/rank/list.vue b/apps/web/src/oj/rank/list.vue
index d2f0ff5..b7881aa 100644
--- a/apps/web/src/oj/rank/list.vue
+++ b/apps/web/src/oj/rank/list.vue
@@ -387,7 +387,7 @@ async function restore(userId: number) {
-
+
-
+
班级详情 · AI 分析
- 恢复
+ 恢复
还没有。怀疑抄代码的,在名单上点「⋯」拿掉。
@@ -644,10 +636,12 @@ async function restore(userId: number) {
diff --git a/apps/web/src/oj/statistics/components/StatisticsView.vue b/apps/web/src/oj/statistics/components/StatisticsView.vue
index b6c51e8..817f1a5 100644
--- a/apps/web/src/oj/statistics/components/StatisticsView.vue
+++ b/apps/web/src/oj/statistics/components/StatisticsView.vue
@@ -524,10 +524,10 @@ function resultWidth(value: number) {
}
.filters {
- height: 52px;
+ height: 60px;
flex: none;
box-sizing: border-box;
- padding: 0 20px;
+ padding: 0 var(--oj-pad-x);
display: flex;
align-items: center;
gap: 8px;
@@ -536,18 +536,18 @@ function resultWidth(value: number) {
}
.title {
- font-size: 17px;
+ font-size: 20px;
font-weight: 700;
- margin-right: 6px;
+ margin-right: 8px;
}
.back {
- height: 28px;
+ height: 32px;
padding: 0 10px 0 6px;
border: 0;
border-radius: 4px;
font: inherit;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
display: inline-flex;
align-items: center;
gap: 2px;
@@ -578,7 +578,7 @@ function resultWidth(value: number) {
.result-legend {
display: flex;
gap: 10px;
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
white-space: nowrap;
color: v-bind("theme.textColor2");
}
@@ -622,7 +622,7 @@ function resultWidth(value: number) {
}
.range {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
}
@@ -649,13 +649,13 @@ function resultWidth(value: number) {
}
.summary {
- height: 72px;
+ height: 84px;
flex: none;
box-sizing: border-box;
- padding: 0 20px;
+ padding: 0 var(--oj-pad-x);
display: flex;
align-items: center;
- gap: 36px;
+ gap: 40px;
border-bottom: 1px solid v-bind("theme.dividerColor");
background: v-bind("theme.actionColor");
}
@@ -667,7 +667,7 @@ function resultWidth(value: number) {
}
.ring-label {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
line-height: 1.5;
color: v-bind("theme.textColor3");
}
diff --git a/apps/web/src/oj/submission/components/FlowchartPane.vue b/apps/web/src/oj/submission/components/FlowchartPane.vue
index fc17224..d1e0969 100644
--- a/apps/web/src/oj/submission/components/FlowchartPane.vue
+++ b/apps/web/src/oj/submission/components/FlowchartPane.vue
@@ -278,10 +278,10 @@ const canRetry = computed(
min-width: 0;
min-height: 0;
box-sizing: border-box;
- padding: 14px 20px 12px;
+ padding: 18px var(--oj-pad-x) 14px;
display: flex;
flex-direction: column;
- gap: 10px;
+ gap: 12px;
background: v-bind("theme.bodyColor");
}
@@ -290,7 +290,7 @@ const canRetry = computed(
align-items: center;
gap: 8px;
white-space: nowrap;
- font-size: 15px;
+ font-size: 16px;
min-width: 0;
}
@@ -398,7 +398,7 @@ const canRetry = computed(
display: flex;
align-items: center;
gap: 12px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("theme.textColor3");
}
diff --git a/apps/web/src/oj/submission/components/SubmissionPane.vue b/apps/web/src/oj/submission/components/SubmissionPane.vue
index 73adc56..a0ad0b5 100644
--- a/apps/web/src/oj/submission/components/SubmissionPane.vue
+++ b/apps/web/src/oj/submission/components/SubmissionPane.vue
@@ -451,10 +451,10 @@ function openStandalone() {
min-width: 0;
min-height: 0;
box-sizing: border-box;
- padding: 14px 20px 12px;
+ padding: 18px var(--oj-pad-x) 14px;
display: flex;
flex-direction: column;
- gap: 10px;
+ gap: 12px;
background: v-bind("theme.bodyColor");
}
@@ -463,7 +463,7 @@ function openStandalone() {
align-items: center;
gap: 8px;
white-space: nowrap;
- font-size: 15px;
+ font-size: 16px;
min-width: 0;
}
@@ -588,7 +588,7 @@ function openStandalone() {
display: flex;
align-items: center;
gap: 12px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("theme.textColor3");
white-space: nowrap;
flex-wrap: wrap;
diff --git a/apps/web/src/oj/submission/detail.vue b/apps/web/src/oj/submission/detail.vue
index 38e0af0..bf9cfa1 100644
--- a/apps/web/src/oj/submission/detail.vue
+++ b/apps/web/src/oj/submission/detail.vue
@@ -77,7 +77,7 @@ onMounted(init)
-
+
-
+
代码
流程图
-
+
全部
我的
@@ -741,7 +741,6 @@ function dayBreak(index: number) {
v-if="!lessonActive"
:value="query.className || null"
class="w-class"
- size="small"
:options="classOptions"
placeholder="全部班级"
clearable
@@ -766,7 +765,6 @@ function dayBreak(index: number) {
v-else-if="!mine"
v-model:value="query.username"
class="w-user"
- size="small"
clearable
:placeholder="teacher ? '学生' : '用户'"
>
@@ -776,14 +774,12 @@ function dayBreak(index: number) {
v-if="inContest"
v-model:value="query.problem"
class="w-problem-select"
- size="small"
:options="contestProblemOptions"
/>
- 清空
+ 清空
.filters,
+.page:not(.contest):not(.mobile) > .split {
+ width: 100%;
+ max-width: 1600px;
+ margin: 0 auto;
+}
+
/* 列表比代码区窄一点(46 : 54,用户看过定的):原来列表固定 560、代码占满,右边空一大片;
改成 56% 又嫌列表太宽。46% 在 1280 的屏上题目列约 215px,九成题目名放得下,长的看 title。
大屏上列表最宽 900 */
@@ -1313,13 +1321,13 @@ function dayBreak(index: number) {
}
.new-bar {
- height: 32px;
+ height: 36px;
flex: none;
border: 0;
border-bottom: 1px solid v-bind("theme.dividerColor");
background: v-bind("tone('success').background");
font: inherit;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("tone('success').color");
display: flex;
align-items: center;
@@ -1329,14 +1337,14 @@ function dayBreak(index: number) {
}
.unknown-bar {
- height: 32px;
+ height: 36px;
flex: none;
box-sizing: border-box;
- padding: 0 20px;
+ padding: 0 var(--oj-pad-x);
display: flex;
align-items: center;
gap: 6px;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("tone('warning').color");
background: v-bind("tone('warning').background");
border-bottom: 1px solid v-bind("theme.dividerColor");
@@ -1360,20 +1368,20 @@ function dayBreak(index: number) {
}
.row {
- height: 40px;
+ height: var(--oj-row-h);
box-sizing: border-box;
- padding: 0 16px 0 20px;
+ padding: 0 16px 0 var(--oj-pad-x);
display: flex;
align-items: center;
gap: 10px;
border-bottom: 1px solid v-bind("theme.dividerColor");
cursor: pointer;
- font-size: 14px;
+ font-size: var(--oj-fs-body);
}
/* 往上翻时选中那一行别被吸顶的日期行挡住 */
.row {
- scroll-margin-top: 28px;
+ scroll-margin-top: 34px;
}
.row:hover {
@@ -1401,7 +1409,7 @@ function dayBreak(index: number) {
}
.m-line.sub {
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
color: v-bind("theme.textColor3");
}
@@ -1413,9 +1421,9 @@ function dayBreak(index: number) {
/* 「23:59:59」8 个等宽数字 */
.c-time {
- width: 60px;
+ width: 64px;
flex: none;
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("theme.textColor3");
font-variant-numeric: tabular-nums;
white-space: nowrap;
@@ -1426,12 +1434,12 @@ function dayBreak(index: number) {
position: sticky;
top: 0;
z-index: 1;
- height: 26px;
+ height: 32px;
box-sizing: border-box;
- padding: 0 20px;
+ padding: 0 var(--oj-pad-x);
display: flex;
align-items: center;
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
font-weight: 600;
color: v-bind("theme.textColor3");
background: v-bind("theme.actionColor");
@@ -1477,10 +1485,10 @@ function dayBreak(index: number) {
}
.c-lang {
- width: 48px;
+ width: 50px;
flex: none;
text-align: right;
- font-size: 12px;
+ font-size: var(--oj-fs-meta);
white-space: nowrap;
color: v-bind("theme.textColor3");
}
@@ -1514,16 +1522,16 @@ function dayBreak(index: number) {
}
.empty-title {
- font-size: 15px;
+ font-size: 16px;
font-weight: 600;
color: v-bind("theme.textColor2");
}
.list-foot {
- height: 44px;
+ height: 52px;
flex: none;
box-sizing: border-box;
- padding: 0 16px 0 20px;
+ padding: 0 16px 0 var(--oj-pad-x);
display: flex;
align-items: center;
gap: 8px;
@@ -1531,7 +1539,7 @@ function dayBreak(index: number) {
}
.total {
- font-size: 13px;
+ font-size: var(--oj-fs-sec);
color: v-bind("theme.textColor3");
white-space: nowrap;
}
diff --git a/apps/web/src/oj/user/components/KnowledgeMap.vue b/apps/web/src/oj/user/components/KnowledgeMap.vue
index e58618f..28717a6 100644
--- a/apps/web/src/oj/user/components/KnowledgeMap.vue
+++ b/apps/web/src/oj/user/components/KnowledgeMap.vue
@@ -85,8 +85,8 @@ function hint(tag: KnowledgeLevel) {
diff --git a/apps/web/src/oj/user/index.vue b/apps/web/src/oj/user/index.vue
index 63bc7fb..b3a4e73 100644
--- a/apps/web/src/oj/user/index.vue
+++ b/apps/web/src/oj/user/index.vue
@@ -151,8 +151,8 @@ onMounted(() => {
{
diff --git a/apps/web/src/oj/user/setting.vue b/apps/web/src/oj/user/setting.vue
index f0fcdeb..a05a97b 100644
--- a/apps/web/src/oj/user/setting.vue
+++ b/apps/web/src/oj/user/setting.vue
@@ -45,7 +45,7 @@ async function saveProfile() {
- 个人信息设置
+ 个人信息设置
@@ -75,11 +75,14 @@ async function saveProfile() {