- 登录后 / 是个人首页:继续学习、最近提交、进行中/即将开始的比赛、公告; 没登录仍是题目列表,题目列表另有 /problem 地址,顶栏「题目」指向它 - 继续学习按服务端留痕取最近打开的一课,不用 localStorage(机房一机多人) - 题目详情:标题下加难度与时空限制,代码要求提到最前,小节收紧, 样例输入/输出并排;工具栏「提交信息」「更多操作」改为「本题提交」「更多」 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
23 lines
870 B
Vue
23 lines
870 B
Vue
<script setup lang="ts">
|
|
import { STORAGE_KEY } from "utils/constants"
|
|
import storage from "utils/storage"
|
|
import { useUserStore } from "shared/store/user"
|
|
|
|
// 两边都按需加载:没登录的访客只拿题目列表那一份,登录了的学生只拿首页那一份
|
|
const Dashboard = defineAsyncComponent(() => import("./dashboard.vue"))
|
|
const ProblemList = defineAsyncComponent(() => import("oj/problem/list.vue"))
|
|
|
|
const userStore = useUserStore()
|
|
|
|
// profile 回来之前先按上次的登录标记猜一个:干等的话 /profile 一失败首页就是
|
|
// 白的,而先按「没登录」渲染又会让每个学生都先闪一下题目列表
|
|
const showDashboard = computed(() =>
|
|
userStore.isFinished ? userStore.isAuthed : !!storage.get(STORAGE_KEY.AUTHED),
|
|
)
|
|
</script>
|
|
|
|
<template>
|
|
<Dashboard v-if="showDashboard" />
|
|
<ProblemList v-else />
|
|
</template>
|