From ab5cb8610bf48cca861be5998d7388a5a523bec5 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 12 Jan 2023 09:36:13 +0800 Subject: [PATCH] fix monaco. --- src/learn/index.vue | 21 +++- src/main.ts | 2 +- src/oj/problem/components/editor-exec.vue | 37 ------ src/oj/problem/components/editor.vue | 113 ++++++++----------- src/oj/problem/components/problem-info.vue | 2 - src/oj/problem/components/submit-panel.vue | 2 +- src/oj/problem/components/testcase-panel.vue | 4 +- src/oj/problem/list.vue | 4 +- src/oj/stores/code.ts | 10 +- src/routes.ts | 2 +- src/shared/layout/header.vue | 6 +- src/shared/monaco/index.vue | 107 ++++++++++++++++++ src/shared/{stores => store}/login.ts | 0 src/shared/{stores => store}/user.ts | 0 src/shared/user/login.vue | 4 +- src/shims.d.ts | 7 ++ src/utils/constants.ts | 21 ++++ src/utils/functions.ts | 10 ++ src/utils/judge.ts | 59 ++++++++++ src/vite-env.d.ts | 2 - 20 files changed, 281 insertions(+), 132 deletions(-) delete mode 100644 src/oj/problem/components/editor-exec.vue create mode 100644 src/shared/monaco/index.vue rename src/shared/{stores => store}/login.ts (100%) rename src/shared/{stores => store}/user.ts (100%) create mode 100644 src/shims.d.ts create mode 100644 src/utils/judge.ts diff --git a/src/learn/index.vue b/src/learn/index.vue index 5785af9..5d51dae 100644 --- a/src/learn/index.vue +++ b/src/learn/index.vue @@ -1,9 +1,28 @@ diff --git a/src/main.ts b/src/main.ts index f9f6cab..9c83634 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,7 +8,7 @@ import App from "./App.vue" import storage from "./utils/storage" import routes from "./routes" import { STORAGE_KEY } from "./utils/constants" -import { useLoginStore } from "./shared/stores/login" +import { useLoginStore } from "./shared/store/login" const router = createRouter({ history: createWebHistory(), diff --git a/src/oj/problem/components/editor-exec.vue b/src/oj/problem/components/editor-exec.vue deleted file mode 100644 index bceb99d..0000000 --- a/src/oj/problem/components/editor-exec.vue +++ /dev/null @@ -1,37 +0,0 @@ - - - - - diff --git a/src/oj/problem/components/editor.vue b/src/oj/problem/components/editor.vue index 9573ed7..0468e21 100644 --- a/src/oj/problem/components/editor.vue +++ b/src/oj/problem/components/editor.vue @@ -1,14 +1,13 @@ @@ -93,11 +67,17 @@ async function init() { 重置 -
- + + + + + diff --git a/src/oj/problem/components/problem-info.vue b/src/oj/problem/components/problem-info.vue index 838999d..3da3200 100644 --- a/src/oj/problem/components/problem-info.vue +++ b/src/oj/problem/components/problem-info.vue @@ -61,5 +61,3 @@ defineProps() - - diff --git a/src/oj/problem/components/submit-panel.vue b/src/oj/problem/components/submit-panel.vue index 829b41a..ca807e1 100644 --- a/src/oj/problem/components/submit-panel.vue +++ b/src/oj/problem/components/submit-panel.vue @@ -230,7 +230,7 @@ defineExpose({ submit }) diff --git a/src/oj/problem/list.vue b/src/oj/problem/list.vue index 1f8b973..cfcf349 100644 --- a/src/oj/problem/list.vue +++ b/src/oj/problem/list.vue @@ -1,5 +1,5 @@ + + diff --git a/src/shared/stores/login.ts b/src/shared/store/login.ts similarity index 100% rename from src/shared/stores/login.ts rename to src/shared/store/login.ts diff --git a/src/shared/stores/user.ts b/src/shared/store/user.ts similarity index 100% rename from src/shared/stores/user.ts rename to src/shared/store/user.ts diff --git a/src/shared/user/login.vue b/src/shared/user/login.vue index 96eeb0a..3d9d5da 100644 --- a/src/shared/user/login.vue +++ b/src/shared/user/login.vue @@ -2,8 +2,8 @@ import { FormInstance } from "element-plus" import { useSignupStore } from "../../oj/stores/signup" import { login } from "../../shared/api" -import { useLoginStore } from "../stores/login" -import { useUserStore } from "../stores/user" +import { useLoginStore } from "../store/login" +import { useUserStore } from "../store/user" const loginStore = useLoginStore() const signupStore = useSignupStore() diff --git a/src/shims.d.ts b/src/shims.d.ts new file mode 100644 index 0000000..1e1017e --- /dev/null +++ b/src/shims.d.ts @@ -0,0 +1,7 @@ +declare module "element-plus/dist/locale/zh-cn.mjs" + +declare module "*.md" { + import type { ComponentOptions } from "vue" + const Component: ComponentOptions + export default Component +} diff --git a/src/utils/constants.ts b/src/utils/constants.ts index d2d8f84..a022b36 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -189,6 +189,27 @@ export const DEAD_RESULTS = { output: "黄岩一职", }, }, + Python2: { + encoded: "", + result: { + status: 3, + output: "黄岩一职", + }, + }, + Golang: { + encoded: "", + result: { + status: 3, + output: "黄岩一职", + }, + }, + JavaScript: { + encoded: "", + result: { + status: 3, + output: "黄岩一职", + }, + }, } export const LANGUAGE_LABEL = { diff --git a/src/utils/functions.ts b/src/utils/functions.ts index b2d8653..f94ce3b 100644 --- a/src/utils/functions.ts +++ b/src/utils/functions.ts @@ -49,3 +49,13 @@ export function submissionTimeFormat(time: number) { if (time === undefined) return "--" return time + "ms" } + +export function debounce(fn: Function, n = 100) { + let handle: any + return (...args: any[]) => { + if (handle) clearTimeout(handle) + handle = setTimeout(() => { + fn(...args) + }, n) + } +} diff --git a/src/utils/judge.ts b/src/utils/judge.ts new file mode 100644 index 0000000..78fc432 --- /dev/null +++ b/src/utils/judge.ts @@ -0,0 +1,59 @@ +import axios from "axios" +import { DEAD_RESULTS } from "./constants" +import { Code } from "./types" + +const http = axios.create({ baseURL: "https://judge0api.hyyz.izhai.net" }) + +function encode(str: string) { + return btoa(unescape(encodeURIComponent(str || ""))) +} + +function decode(bytes: string) { + let escaped = escape(atob(bytes || "")) + try { + return decodeURIComponent(escaped) + } catch (e) { + return unescape(escaped) + } +} + +export async function createTestSubmission(code: Code, input: string) { + const encodedCode = encode(code.value) + + if (encodedCode === DEAD_RESULTS[code.language].encoded) { + return DEAD_RESULTS[code.language].result + } else { + const id = { + C: 50, + "C++": 54, + Java: 62, + Golang: 60, + JavaScript: 63, + Python2: 70, + Python3: 71, + }[code.language] + let compilerOptions = "" + if (id === 50) compilerOptions = "-lm" // 解决 GCC 的链接问题 + const payload = { + source_code: encodedCode, + language_id: id, + stdin: encode(input), + redirect_stderr_to_stdout: true, + compiler_options: compilerOptions, + } + try { + const response = await http.post("/submissions", payload, { + params: { base64_encoded: true, wait: true }, + }) + const data = response.data + return { + status: data.status && data.status.id, + output: [decode(data.compile_output), decode(data.stdout)] + .join("\n") + .trim(), + } + } catch (e) { + console.error(e) + } + } +} diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts index 2579ef3..11f02fe 100644 --- a/src/vite-env.d.ts +++ b/src/vite-env.d.ts @@ -1,3 +1 @@ /// -declare module "element-plus/dist/locale/zh-cn.mjs" -declare module "*.md"