fix types.

This commit is contained in:
2023-01-11 18:53:30 +08:00
parent 77378f80a0
commit e04b429fc5
13 changed files with 56 additions and 31 deletions

View File

@@ -1,5 +1,9 @@
<script setup lang="ts"></script> <script setup lang="ts">
import Md from "./step-1/index.md"
</script>
<template>learn</template> <template>
<Md />
</template>
<style scoped></style> <style scoped></style>

View File

@@ -0,0 +1 @@
ceshi

View File

@@ -9,7 +9,9 @@ import Header from "../shared/layout/header.vue"
<el-header class="header"> <el-header class="header">
<Header /> <Header />
</el-header> </el-header>
<el-main><router-view></router-view></el-main> <el-main>
<router-view></router-view>
</el-main>
<Login /> <Login />
<Signup /> <Signup />
</el-container> </el-container>

View File

@@ -1,13 +1,14 @@
<script setup lang="ts"> <script setup lang="ts">
import { TabsPaneContext } from "element-plus" import { TabsPaneContext } from "element-plus"
import { Ref } from "vue"
import { Problem } from "../../../utils/types" import { Problem } from "../../../utils/types"
import { submissionExists } from "../../api" import { submissionExists } from "../../api"
import SubmitPanel from "./submit-panel.vue" import SubmitPanel from "./submit-panel.vue"
import TestcasePanel from "./testcase-panel.vue"
const tab = ref("testcase") const tab = ref("testcase")
const submitPanelRef = ref<{ submit: Function }>() const submitPanelRef = ref<{ submit: Function }>()
const problem = inject("problem") as Problem const problem = inject<Ref<Problem>>("problem")
const id = ref(problem.id)
const [tried] = useToggle() const [tried] = useToggle()
onMounted(() => { onMounted(() => {
@@ -15,7 +16,7 @@ onMounted(() => {
}) })
async function checkIfTried() { async function checkIfTried() {
const res = await submissionExists(id.value) const res = await submissionExists(problem!.value.id)
tried.value = res.data tried.value = res.data
} }
@@ -28,11 +29,7 @@ function onTab(pane: TabsPaneContext) {
<template> <template>
<el-tabs type="border-card" @tab-click="onTab" v-model="tab"> <el-tabs type="border-card" @tab-click="onTab" v-model="tab">
<el-tab-pane label="测试用例" name="testcase"> <TestcasePanel />
<div class="panel">
<el-table height="320"></el-table>
</div>
</el-tab-pane>
<SubmitPanel ref="submitPanelRef" /> <SubmitPanel ref="submitPanelRef" />
</el-tabs> </el-tabs>
</template> </template>

View File

@@ -18,7 +18,7 @@ const code = reactive({
value: SOURCES[props.problem.languages[0] || "C"], value: SOURCES[props.problem.languages[0] || "C"],
language: props.problem.languages[0] || "C", language: props.problem.languages[0] || "C",
}) })
provide("code", code) provide("code", readonly(code))
const monacoEditorRef = ref() const monacoEditorRef = ref()
@@ -32,18 +32,15 @@ onBeforeUnmount(() => {
monaco.editor.getModels().forEach((model) => model.dispose()) monaco.editor.getModels().forEach((model) => model.dispose())
}) })
watch( watchEffect(() => {
() => code.language, if (monaco && monaco.editor) {
() => { monaco.editor.setModelLanguage(
if (monaco && monaco.editor) { monaco.editor.getModels()[0],
monaco.editor.setModelLanguage( LANGUAGE_VALUE[code.language]
monaco.editor.getModels()[0], )
LANGUAGE_VALUE[code.language] reset()
)
reset()
}
} }
) })
function reset() { function reset() {
code.value = props.problem.template[code.language] || SOURCES[code.language] code.value = props.problem.template[code.language] || SOURCES[code.language]

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import party from "party-js" import party from "party-js"
import { Ref } from "vue"
import { import {
SOURCES, SOURCES,
JUDGE_STATUS, JUDGE_STATUS,
@@ -10,7 +11,7 @@ import {
submissionTimeFormat, submissionTimeFormat,
} from "../../../utils/functions" } from "../../../utils/functions"
import { import {
LANGUAGE, Code,
Problem, Problem,
Submission, Submission,
SubmitCodePayload, SubmitCodePayload,
@@ -19,13 +20,11 @@ import { getSubmission, submitCode } from "../../api"
import SubmissionResultTag from "../../components/submission-result-tag.vue" import SubmissionResultTag from "../../components/submission-result-tag.vue"
const code = inject<{ value: string; language: LANGUAGE }>("code", { const code = inject<Code>("code", {
value: "", value: "",
language: "C", language: "C",
}) })
const problem = inject("problem") as Problem const problem = inject<Ref<Problem>>("problem")
const template = ref(problem.template)
const id = ref(problem.id)
const route = useRoute() const route = useRoute()
const contestID = <string>route.params.contestID || "" const contestID = <string>route.params.contestID || ""
@@ -80,7 +79,7 @@ const submitDisabled = computed(() => {
const value = code.value const value = code.value
if ( if (
value.trim() === "" || value.trim() === "" ||
value === template.value[code.language] || value === problem!.value.template[code.language] ||
value === SOURCES[code.language] value === SOURCES[code.language]
) { ) {
return true return true
@@ -152,7 +151,7 @@ const infoTable = computed(() => {
async function submit() { async function submit() {
const data: SubmitCodePayload = { const data: SubmitCodePayload = {
problem_id: id.value, problem_id: problem!.value.id,
language: code.language, language: code.language,
code: code.value, code: code.value,
} }

View File

@@ -0,0 +1,17 @@
<script setup lang="ts">
import { Ref } from "vue"
import { Code, Problem } from "../../../utils/types"
const problem = inject<Ref<Problem>>("problem")
const code = inject<Code>("code")
</script>
<template>
<el-tab-pane label="测试用例" name="testcase">
<div class="panel">
<el-table height="320"></el-table>
</div>
</el-tab-pane>
</template>
<style scoped></style>

View File

@@ -52,6 +52,11 @@ export interface Problem {
my_status: number my_status: number
} }
export interface Code {
language: LANGUAGE
value: string
}
export interface SubmitCodePayload { export interface SubmitCodePayload {
problem_id: number problem_id: number
language: LANGUAGE language: LANGUAGE

1
src/vite-env.d.ts vendored
View File

@@ -1,2 +1,3 @@
/// <reference types="vite/client" /> /// <reference types="vite/client" />
declare module "element-plus/dist/locale/zh-cn.mjs" declare module "element-plus/dist/locale/zh-cn.mjs"
declare module "*.md"

View File

@@ -13,6 +13,6 @@
"skipLibCheck": true, "skipLibCheck": true,
"noEmit": true "noEmit": true
}, },
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "*.d.ts"], "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"references": [{ "path": "./tsconfig.node.json" }] "references": [{ "path": "./tsconfig.node.json" }]
} }

View File

@@ -21,12 +21,14 @@ export default defineConfig({
AutoImport({ AutoImport({
imports: ["vue", "vue-router", "@vueuse/core", "pinia"], imports: ["vue", "vue-router", "@vueuse/core", "pinia"],
resolvers: [ElementPlusResolver(), IconsResolver()], resolvers: [ElementPlusResolver(), IconsResolver()],
dts: "./src/auto-imports.d.ts",
}), }),
Components({ Components({
resolvers: [ resolvers: [
ElementPlusResolver(), ElementPlusResolver(),
IconsResolver({ enabledCollections: ["ep"] }), IconsResolver({ enabledCollections: ["ep"] }),
], ],
dts: "./src/components.d.ts",
}), }),
Icons({ autoInstall: true }), Icons({ autoInstall: true }),
Markdown(), Markdown(),