fix types.
This commit is contained in:
0
components.d.ts → src/components.d.ts
vendored
0
components.d.ts → src/components.d.ts
vendored
@@ -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>
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
ceshi
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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
1
src/vite-env.d.ts
vendored
@@ -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"
|
||||||
|
|||||||
@@ -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" }]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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(),
|
||||||
|
|||||||
Reference in New Issue
Block a user