diff --git a/apps/web/src/oj/problem/list.vue b/apps/web/src/oj/problem/list.vue index db7d193..9674be7 100644 --- a/apps/web/src/oj/problem/list.vue +++ b/apps/web/src/oj/problem/list.vue @@ -63,12 +63,11 @@ const router = useRouter() const userStore = useUserStore() -const { isDesktop } = useBreakpoints() +const { isDesktop, isMobile } = useBreakpoints() const problems = ref([]) const total = ref(0) const tags = ref([]) -const [showTag, toggleShowTag] = useToggle(isDesktop.value) // 使用分页 composable const { query, clearQuery } = usePagination({ @@ -79,6 +78,10 @@ const { query, clearQuery } = usePagination({ sort: useRouteQuery("sort", "").value, }) +// 标签默认收起:四十多个标签在桌面上要占三行,把题目表格顶到半屏以下。 +// 从带 ?tag= 的链接进来时展开,让人看得见是哪个标签在起作用 +const [showTag, toggleShowTag] = useToggle(!!query.tag) + async function listProblems() { if (query.page < 1) query.page = 1 const offset = (query.page - 1) * query.limit @@ -208,8 +211,21 @@ const baseColumns: DataTableColumn[] = [ }, ] +// 手机上只留判断「做不做这题」要的几列,其余的挤进 390 宽的屏幕只会横向溢出 +const MOBILE_WIDTHS: Record = { + status: { width: 60 }, + _id: { width: 72 }, + title: { minWidth: 120 }, + difficulty: { width: 72 }, +} + const columns = computed(() => - userStore.isAuthed ? baseColumns : baseColumns.filter((c: any) => c.key !== "status"), + baseColumns + .filter((c: any) => { + if (c.key === "status" && !userStore.isAuthed) return false + return !isMobile.value || c.key in MOBILE_WIDTHS + }) + .map((c: any) => (isMobile.value ? { ...c, ...MOBILE_WIDTHS[c.key] } : c)), ) function rowProps(row: ProblemRow) { @@ -263,12 +279,15 @@ function rowProps(row: ProblemRow) { 标签 + + {{ query.tag }} + diff --git a/apps/web/src/oj/problemset/list.vue b/apps/web/src/oj/problemset/list.vue index b93b333..62a4fc5 100644 --- a/apps/web/src/oj/problemset/list.vue +++ b/apps/web/src/oj/problemset/list.vue @@ -1,15 +1,11 @@