style(前台): 列表页去掉表头 emoji、已结束的比赛改成灰色;比赛列表置顶进行中的比赛,排名页先看榜单

- 前台 53 处表头改成纯文字,删掉只剩这一个用途的 utils/renders.ts
- 「已结束」从红色改灰色(比赛列表 / 详情 / 后台 / 首页一起)
- 比赛列表第一页、无筛选时顶部列出进行中和即将开始的比赛
- 内容少的页面页脚贴底,不再悬在半屏
- 排名页两张柱状图挪到最后,第一屏是 Top100、本周进步榜和我的排名

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-27 20:13:29 +08:00
1 parent 31aa5f6e74
commit 6bf8c6e1d9
12 files changed
+183 -107

No files matched your search

@@ -7,7 +7,6 @@ import SubmissionResultTag from "shared/components/SubmissionResultTag.vue"
import { useUserStore } from "shared/store/user"
import { JUDGE_STATUS, LANGUAGE_SHOW_VALUE } from "utils/constants"
import { parseTime } from "utils/functions"
import { renderTableTitle } from "utils/renders"
import type { SubmissionListItem } from "utils/types"
import SubmissionDetail from "oj/submission/detail.vue"
import { useBreakpoints } from "shared/composables/breakpoints"
@@ -31,13 +30,13 @@ function showCodePanel(id: string, problem: string) {
const columns: DataTableColumn<SubmissionListItem>[] = [
{
title: renderTableTitle("提交时间", "fluent-emoji:seven-oclock"),
title: "提交时间",
key: "create_time",
width: 200,
render: (row) => parseTime(row.createTime, "YYYY-MM-DD HH:mm:ss"),
},
{
title: renderTableTitle("编号", "fluent-emoji-flat:input-numbers"),
title: "编号",
key: "id",
minWidth: 160,
render: (row) => {
@@ -68,13 +67,13 @@ const columns: DataTableColumn<SubmissionListItem>[] = [
},
},
{
title: renderTableTitle("状态", "streamline-emojis:panda-face"),
title: "状态",
key: "status",
width: 140,
render: (row) => h(SubmissionResultTag, { result: row.result }),
},
{
title: renderTableTitle("语言", "streamline-ultimate-color:earth-pin-2"),
title: "语言",
key: "language",
width: 100,
render: (row) => LANGUAGE_SHOW_VALUE[row.language],
+8 -9
View File
@@ -13,7 +13,6 @@ import Pagination from "shared/components/Pagination.vue"
import { useBreakpoints } from "shared/composables/breakpoints"
import { usePagination } from "shared/composables/pagination"
import { useUserStore } from "shared/store/user"
import { renderTableTitle } from "utils/renders"
import ProblemStatus from "./components/ProblemStatus.vue"
import AuthorSelect from "shared/components/AuthorSelect.vue"
import ProblemListTitle from "./components/ProblemListTitle.vue"
@@ -160,49 +159,49 @@ onMounted(() => {
const baseColumns: DataTableColumn<ProblemRow>[] = [
{
title: renderTableTitle("状态", "streamline-emojis:high-voltage"),
title: "状态",
key: "status",
width: 80,
align: "center",
render: (row) => h(ProblemStatus, { status: row.status }),
},
{
title: renderTableTitle("编号", "streamline-ultimate-color:board-game-dice-1"),
title: "编号",
key: "_id",
width: 100,
},
{
title: renderTableTitle("题目", "streamline-ultimate-color:fruit-watermelon"),
title: "题目",
key: "title",
minWidth: 200,
render: (row) => h(ProblemListTitle, { problem: row }),
},
{
title: renderTableTitle("难度", "streamline-emojis:lady-beetle"),
title: "难度",
key: "difficulty",
width: 100,
render: (row) =>
row.difficulty ? h(NTag, { type: getTagColor(row.difficulty) }, () => row.difficulty) : null,
},
{
title: renderTableTitle("标签", "streamline-ultimate-color:attachment"),
title: "标签",
key: "tags",
width: 260,
render: (row) => h(NFlex, () => row.tags.map((t) => h(NTag, { key: t }, () => t))),
},
{
title: renderTableTitle("出题者", "streamline-emojis:man-raising-hand-2"),
title: "出题者",
key: "author",
width: 130,
},
{
title: renderTableTitle("提交数", "streamline-ultimate-color:paper-write"),
title: "提交数",
key: "submissionCount",
align: "center",
width: 100,
},
{
title: renderTableTitle("通过率", "streamline-emojis:victory-hand-2"),
title: "通过率",
key: "acRate",
width: 100,
align: "center",