diff --git a/src/oj/problem/detail.vue b/src/oj/problem/detail.vue index 364d07b..f12b2f4 100644 --- a/src/oj/problem/detail.vue +++ b/src/oj/problem/detail.vue @@ -2,7 +2,11 @@ import { getProblem } from "oj/api" import { ScreenMode } from "utils/constants" import { isDesktop, isMobile } from "~/shared/composables/breakpoints" -import { screenMode } from "~/shared/composables/switchScreen" +import { + bothAndProblem, + resetScreenMode, + screenMode, +} from "~/shared/composables/switchScreen" import { problem } from "../composables/problem" const Editor = defineAsyncComponent(() => import("./components/Editor.vue")) @@ -33,14 +37,8 @@ const props = withDefaults(defineProps(), { const errMsg = ref("无数据") -const bothAndProblem = computed( - () => - screenMode.value === ScreenMode.both || - screenMode.value === ScreenMode.problem, -) - async function init() { - screenMode.value = ScreenMode.both + resetScreenMode() try { const res = await getProblem(props.problemID, props.contestID) problem.value = res.data @@ -55,13 +53,11 @@ onMounted(init) onBeforeUnmount(() => { problem.value = null errMsg.value = "无数据" - screenMode.value = ScreenMode.both + resetScreenMode() }) watch(isMobile, (value) => { - if (value) { - screenMode.value = ScreenMode.both - } + if (value) resetScreenMode() }) diff --git a/src/shared/components/Header.vue b/src/shared/components/Header.vue index e88e15f..74817c1 100644 --- a/src/shared/components/Header.vue +++ b/src/shared/components/Header.vue @@ -3,10 +3,8 @@ import { Icon } from "@iconify/vue" import { RouterLink } from "vue-router" import { isDesktop, isMobile } from "~/shared/composables/breakpoints" import { toggleLogin, toggleSignup } from "~/shared/composables/modal" -import { - screenSwitchLabel, - switchScreenMode, -} from "~/shared/composables/switchScreen" +import { screenMode, switchScreenMode } from "~/shared/composables/switchScreen" +import { avatar, getRandomAvatar } from "~/utils/constants" import { logout } from "../api" import { useConfigStore } from "../store/config" import { useUserStore } from "../store/user" @@ -32,35 +30,6 @@ function renderIcon(icon: string) { return () => h(Icon, { icon, width: 24, height: 24 }) } -const avatars = [ - "streamline-emojis:man-with-chinese-cap-1", - "streamline-emojis:cat-face", - "streamline-emojis:china", - "streamline-emojis:chicken", - "streamline-emojis:eyes", - "streamline-emojis:elephant", - "streamline-emojis:hear-no-evil-monkey", - "streamline-emojis:panda-face", - "streamline-emojis:penguin-1", - "streamline-emojis:rooster", - "streamline-emojis:star-struck-1", - "streamline-emojis:tomato", - "streamline-emojis:rocket", - "streamline-emojis:sparkles", - "streamline-emojis:money-bag", - "streamline-emojis:ghost", - "streamline-emojis:game-dice", - "streamline-emojis:ewe-1", - "streamline-emojis:artist-palette", - "streamline-emojis:baby-bottle", -] - -const avatar = ref(avatars[Math.floor(Math.random() * avatars.length)]) - -function getRandomAvatar() { - avatar.value = avatars[Math.floor(Math.random() * avatars.length)] -} - onMounted(() => { userStore.getMyProfile() configStore.getConfig() @@ -102,7 +71,7 @@ const menus = computed(() => [ }, ]) -const options: Array = [ +const options = computed>(() => [ { label: "我的主页", key: "home", @@ -135,6 +104,18 @@ const options: Array = [ onClick: () => router.push("/setting"), }, }, + { + label: isDark.value ? "浅色主题" : "深色主题", + key: "theme", + icon: renderIcon( + isDark.value + ? "twemoji:sun-behind-small-cloud" + : "twemoji:cloud-with-lightning-and-rain", + ), + props: { + onClick: () => toggleDark(), + }, + }, { type: "divider" }, { label: "退出", @@ -142,7 +123,7 @@ const options: Array = [ icon: renderIcon("streamline-emojis:hot-beverage-2"), props: { onClick: handleLogout }, }, -] +]) function goHome() { router.push("/") @@ -150,20 +131,22 @@ function goHome() {