add cache.

This commit is contained in:
2023-04-17 13:50:11 +08:00
parent 3358082213
commit 9274326ac5
5 changed files with 47 additions and 6 deletions

View File

@@ -1,6 +1,8 @@
import { STORAGE_KEY } from "~/utils/constants"
import storage from "~/utils/storage"
import { Code } from "~/utils/types"
export const code = reactive<Code>({
value: "",
language: "C",
language: storage.get(STORAGE_KEY.LANGUAGE) || "C",
})

View File

@@ -3,23 +3,47 @@ import { SOURCES } from "utils/constants"
import { code } from "oj/composables/code"
import { isDesktop } from "~/shared/composables/breakpoints"
import { problem } from "oj/composables/problem"
import storage from "~/utils/storage"
import { LANGUAGE } from "~/utils/types"
const Form = defineAsyncComponent(() => import("./Form.vue"))
const CodeEditor = defineAsyncComponent(() => import("~/shared/CodeEditor.vue"))
code.language = problem.value!.languages[0] || "C"
code.value = problem.value!.template[code.language] || SOURCES[code.language]
const route = useRoute()
const contestID = !!route.params.contestID ? route.params.contestID : null
const storageKey = computed(
() => `problem_${problem.value!._id}_contest_${contestID}`
)
onMounted(() => {
if (storage.get(storageKey.value)) {
code.value = storage.get(storageKey.value)
} else {
code.value =
problem.value!.template[code.language] || SOURCES[code.language]
}
})
const editorHeight = computed(() =>
isDesktop.value ? "calc(100vh - 133px)" : "calc(100vh - 172px)"
)
function reset() {
storage.remove(storageKey.value)
}
function changeCode(v: string) {
storage.set(storageKey.value, v)
}
</script>
<template>
<n-space vertical>
<Form />
<Form @reset="reset" />
<CodeEditor
v-model="code.value"
@update:model-value="changeCode"
:language="code.language"
:height="editorHeight"
/>

View File

@@ -5,15 +5,21 @@ import { problem } from "oj/composables/problem"
import { isDesktop, isMobile } from "~/shared/composables/breakpoints"
import { useUserStore } from "~/shared/store/user"
import Submit from "./Submit.vue"
import storage from "~/utils/storage"
import { STORAGE_KEY } from "utils/constants"
import { LANGUAGE } from "~/utils/types"
const route = useRoute()
const router = useRouter()
const userStore = useUserStore()
const emit = defineEmits(["reset"])
watch(() => code.language, reset)
function reset() {
code.value = problem.value!.template[code.language] || SOURCES[code.language]
emit("reset")
}
function goSubmissions() {
@@ -62,14 +68,19 @@ function select(key: string) {
break
}
}
function changeLanguage(v: LANGUAGE) {
storage.set(STORAGE_KEY.LANGUAGE, v)
}
</script>
<template>
<n-space>
<n-select
class="language"
:size="isDesktop ? 'medium' : 'small'"
v-model:value="code.language"
@update:value="changeLanguage"
:size="isDesktop ? 'medium' : 'small'"
:options="options"
/>
<Submit />

View File

@@ -34,6 +34,10 @@ async function init() {
}
}
onMounted(init)
onBeforeUnmount(() => {
problem.value = null
errMsg.value = "无数据"
})
</script>
<template>

View File

@@ -120,7 +120,7 @@ export const PROBLEM_PERMISSION = {
export const STORAGE_KEY = {
AUTHED: "authed",
PROBLEM_CODE: "problemCode",
LANGUAGE: "problemLanguage",
}
export const DIFFICULTY = {