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 @@
-
+
+
+
+
+ {{ code }}
+
+
+
+
+
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"