From 6aa722c64acce9924492cbfd4e7b8894b4a174aa Mon Sep 17 00:00:00 2001
From: yuetsh <517252939@qq.com>
Date: Tue, 31 Jan 2023 11:11:42 +0800
Subject: [PATCH] add access.
---
package-lock.json | 94 +++++++-------
package.json | 6 +-
src/components.d.ts | 1 +
src/oj/api.ts | 10 +-
src/oj/contest/components/ContestType.vue | 20 +++
src/oj/contest/detail.vue | 148 ++++++++++++++++++----
src/oj/submission/list.vue | 4 +-
src/utils/types.ts | 1 +
8 files changed, 207 insertions(+), 77 deletions(-)
create mode 100644 src/oj/contest/components/ContestType.vue
diff --git a/package-lock.json b/package-lock.json
index cb713b6..0af6231 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"@element-plus/icons-vue": "^2.0.10",
"@monaco-editor/loader": "^1.3.2",
"@vueuse/core": "^9.11.1",
- "axios": "1.2.3",
+ "axios": "1.2.5",
"chart.js": "^4.2.0",
"copy-text-to-clipboard": "^3.0.1",
"date-fns": "^2.29.3",
@@ -31,8 +31,8 @@
"monaco-editor": "^0.34.1",
"prettier": "^2.8.3",
"typescript": "^4.9.4",
- "unplugin-auto-import": "^0.12.1",
- "unplugin-icons": "^0.15.1",
+ "unplugin-auto-import": "^0.12.2",
+ "unplugin-icons": "^0.15.2",
"unplugin-vue-components": "^0.22.12",
"vite": "^4.0.4",
"vite-plugin-vue-markdown": "^0.22.2",
@@ -463,9 +463,9 @@
"dev": true
},
"node_modules/@iconify/utils": {
- "version": "2.0.12",
- "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.0.12.tgz",
- "integrity": "sha512-hhUyt1/k5RRhfcW/PRRdBw8e1ACehJT5QEZJRm7HnkCiUx11/0ccLr7K0OMlPSwjnfYcBS2gAUD3EpmL0iJCkQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.0.tgz",
+ "integrity": "sha512-ouXv1hQfOKq4k3wxQ2OJBYQ2gXBMeFoUCIiORmuUVUNlSq9oOTzQBF3jpFRb0+/P0bnV+RIoHcbZKufZTlJ16g==",
"dev": true,
"dependencies": {
"@antfu/install-pkg": "^0.1.1",
@@ -970,9 +970,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"node_modules/axios": {
- "version": "1.2.3",
- "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz",
- "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.5.tgz",
+ "integrity": "sha512-9pU/8mmjSSOb4CXVsvGIevN+MlO/t9OWtKadTaLuN85Gge3HGorUckgp8A/2FH4V4hJ7JuQ3LIeI7KAV9ITZrQ==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -1902,9 +1902,9 @@
"dev": true
},
"node_modules/pathe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.0.0.tgz",
- "integrity": "sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.0.tgz",
+ "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==",
"dev": true
},
"node_modules/picocolors": {
@@ -2276,9 +2276,9 @@
"dev": true
},
"node_modules/unimport": {
- "version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz",
- "integrity": "sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/unimport/-/unimport-2.0.1.tgz",
+ "integrity": "sha512-hMeDspGrEcocahicTr0AQYUGes24FvJtOxk9QEjeEOGv+n1EdpsDiT6z8t209PWhemPg0T5w/ooTVhup2GdrFA==",
"dev": true,
"dependencies": {
"@rollup/pluginutils": "^5.0.2",
@@ -2287,7 +2287,7 @@
"local-pkg": "^0.4.3",
"magic-string": "^0.27.0",
"mlly": "^1.1.0",
- "pathe": "^1.0.0",
+ "pathe": "^1.1.0",
"pkg-types": "^1.0.1",
"scule": "^1.0.0",
"strip-literal": "^1.0.0",
@@ -2307,16 +2307,16 @@
}
},
"node_modules/unplugin-auto-import": {
- "version": "0.12.1",
- "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.12.1.tgz",
- "integrity": "sha512-J/3ZORq5YGKG+8D5vLLOgqaHNK77izlVN07mQ752yRLqBNDbJiwPRSnUwwYqH5N6rDay1SqnJCHaUdbJ9QMI2w==",
+ "version": "0.12.2",
+ "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.12.2.tgz",
+ "integrity": "sha512-hC4w0GZjPjmLtrxV0u10XO350V9eCtQyEyifXr7B9UGD7SvbbIvKuOcHt58Zd4FAqZJXKWoXkpr9mdhBp85Usw==",
"dev": true,
"dependencies": {
"@antfu/utils": "^0.7.2",
"@rollup/pluginutils": "^5.0.2",
- "local-pkg": "^0.4.2",
+ "local-pkg": "^0.4.3",
"magic-string": "^0.27.0",
- "unimport": "^1.0.2",
+ "unimport": "^2.0.1",
"unplugin": "^1.0.1"
},
"engines": {
@@ -2332,14 +2332,14 @@
}
},
"node_modules/unplugin-icons": {
- "version": "0.15.1",
- "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.15.1.tgz",
- "integrity": "sha512-d4Gc8A4qIJYIXKueltTwoHfR3Cxsdfnmz8lSN5dsITEyai5tdb0uWpbQkn3j9HUlLDSB1ybdQIf5CItxJT3UDw==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.15.2.tgz",
+ "integrity": "sha512-oWTTdLMuqfEYfZcko+KZHDEOIsqT4OeyJB1e4U7luCOo9gto/JLyHkqfbqjmjkjdQqA3DNHS18WOKh5esqQM5g==",
"dev": true,
"dependencies": {
"@antfu/install-pkg": "^0.1.1",
"@antfu/utils": "^0.7.2",
- "@iconify/utils": "^2.0.9",
+ "@iconify/utils": "^2.1.0",
"debug": "^4.3.4",
"kolorist": "^1.6.0",
"local-pkg": "^0.4.2",
@@ -2827,9 +2827,9 @@
"dev": true
},
"@iconify/utils": {
- "version": "2.0.12",
- "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.0.12.tgz",
- "integrity": "sha512-hhUyt1/k5RRhfcW/PRRdBw8e1ACehJT5QEZJRm7HnkCiUx11/0ccLr7K0OMlPSwjnfYcBS2gAUD3EpmL0iJCkQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmmirror.com/@iconify/utils/-/utils-2.1.0.tgz",
+ "integrity": "sha512-ouXv1hQfOKq4k3wxQ2OJBYQ2gXBMeFoUCIiORmuUVUNlSq9oOTzQBF3jpFRb0+/P0bnV+RIoHcbZKufZTlJ16g==",
"dev": true,
"requires": {
"@antfu/install-pkg": "^0.1.1",
@@ -3268,9 +3268,9 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
},
"axios": {
- "version": "1.2.3",
- "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.3.tgz",
- "integrity": "sha512-pdDkMYJeuXLZ6Xj/Q5J3Phpe+jbGdsSzlQaFVkMQzRUL05+6+tetX8TV3p4HrU4kzuO9bt+io/yGQxuyxA/xcw==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmmirror.com/axios/-/axios-1.2.5.tgz",
+ "integrity": "sha512-9pU/8mmjSSOb4CXVsvGIevN+MlO/t9OWtKadTaLuN85Gge3HGorUckgp8A/2FH4V4hJ7JuQ3LIeI7KAV9ITZrQ==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -3990,9 +3990,9 @@
"dev": true
},
"pathe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.0.0.tgz",
- "integrity": "sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.0.tgz",
+ "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==",
"dev": true
},
"picocolors": {
@@ -4270,9 +4270,9 @@
"dev": true
},
"unimport": {
- "version": "1.3.0",
- "resolved": "https://registry.npmmirror.com/unimport/-/unimport-1.3.0.tgz",
- "integrity": "sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/unimport/-/unimport-2.0.1.tgz",
+ "integrity": "sha512-hMeDspGrEcocahicTr0AQYUGes24FvJtOxk9QEjeEOGv+n1EdpsDiT6z8t209PWhemPg0T5w/ooTVhup2GdrFA==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^5.0.2",
@@ -4281,7 +4281,7 @@
"local-pkg": "^0.4.3",
"magic-string": "^0.27.0",
"mlly": "^1.1.0",
- "pathe": "^1.0.0",
+ "pathe": "^1.1.0",
"pkg-types": "^1.0.1",
"scule": "^1.0.0",
"strip-literal": "^1.0.0",
@@ -4301,28 +4301,28 @@
}
},
"unplugin-auto-import": {
- "version": "0.12.1",
- "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.12.1.tgz",
- "integrity": "sha512-J/3ZORq5YGKG+8D5vLLOgqaHNK77izlVN07mQ752yRLqBNDbJiwPRSnUwwYqH5N6rDay1SqnJCHaUdbJ9QMI2w==",
+ "version": "0.12.2",
+ "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.12.2.tgz",
+ "integrity": "sha512-hC4w0GZjPjmLtrxV0u10XO350V9eCtQyEyifXr7B9UGD7SvbbIvKuOcHt58Zd4FAqZJXKWoXkpr9mdhBp85Usw==",
"dev": true,
"requires": {
"@antfu/utils": "^0.7.2",
"@rollup/pluginutils": "^5.0.2",
- "local-pkg": "^0.4.2",
+ "local-pkg": "^0.4.3",
"magic-string": "^0.27.0",
- "unimport": "^1.0.2",
+ "unimport": "^2.0.1",
"unplugin": "^1.0.1"
}
},
"unplugin-icons": {
- "version": "0.15.1",
- "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.15.1.tgz",
- "integrity": "sha512-d4Gc8A4qIJYIXKueltTwoHfR3Cxsdfnmz8lSN5dsITEyai5tdb0uWpbQkn3j9HUlLDSB1ybdQIf5CItxJT3UDw==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmmirror.com/unplugin-icons/-/unplugin-icons-0.15.2.tgz",
+ "integrity": "sha512-oWTTdLMuqfEYfZcko+KZHDEOIsqT4OeyJB1e4U7luCOo9gto/JLyHkqfbqjmjkjdQqA3DNHS18WOKh5esqQM5g==",
"dev": true,
"requires": {
"@antfu/install-pkg": "^0.1.1",
"@antfu/utils": "^0.7.2",
- "@iconify/utils": "^2.0.9",
+ "@iconify/utils": "^2.1.0",
"debug": "^4.3.4",
"kolorist": "^1.6.0",
"local-pkg": "^0.4.2",
diff --git a/package.json b/package.json
index a49332b..64cfb78 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
"@element-plus/icons-vue": "^2.0.10",
"@monaco-editor/loader": "^1.3.2",
"@vueuse/core": "^9.11.1",
- "axios": "1.2.3",
+ "axios": "1.2.5",
"chart.js": "^4.2.0",
"copy-text-to-clipboard": "^3.0.1",
"date-fns": "^2.29.3",
@@ -33,8 +33,8 @@
"monaco-editor": "^0.34.1",
"prettier": "^2.8.3",
"typescript": "^4.9.4",
- "unplugin-auto-import": "^0.12.1",
- "unplugin-icons": "^0.15.1",
+ "unplugin-auto-import": "^0.12.2",
+ "unplugin-icons": "^0.15.2",
"unplugin-vue-components": "^0.22.12",
"vite": "^4.0.4",
"vite-plugin-vue-markdown": "^0.22.2",
diff --git a/src/components.d.ts b/src/components.d.ts
index fa14842..d49b76c 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -13,6 +13,7 @@ declare module '@vue/runtime-core' {
IEpLock: typeof import('~icons/ep/lock')['default']
NAlert: typeof import('naive-ui')['NAlert']
NButton: typeof import('naive-ui')['NButton']
+ NButtonGroup: typeof import('naive-ui')['NButtonGroup']
NCard: typeof import('naive-ui')['NCard']
NCode: typeof import('naive-ui')['NCode']
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
diff --git a/src/oj/api.ts b/src/oj/api.ts
index 2e06be7..69f3602 100644
--- a/src/oj/api.ts
+++ b/src/oj/api.ts
@@ -112,9 +112,11 @@ export function getContestAccess(id: string) {
export function checkContestPassword(contestID: string, password: string) {
return http.post("contest/password", {
- data: {
- contest_id: contestID,
- password,
- },
+ contest_id: contestID,
+ password,
})
}
+
+export function getContestProblem(contestID: string) {
+ return http.get("contest/problem", { params: { contest_id: contestID } })
+}
diff --git a/src/oj/contest/components/ContestType.vue b/src/oj/contest/components/ContestType.vue
new file mode 100644
index 0000000..6951415
--- /dev/null
+++ b/src/oj/contest/components/ContestType.vue
@@ -0,0 +1,20 @@
+
+
+
+
+ {{ isPrivate ? "需要密码" : "公开" }}
+
+
diff --git a/src/oj/contest/detail.vue b/src/oj/contest/detail.vue
index b087b2a..f642c83 100644
--- a/src/oj/contest/detail.vue
+++ b/src/oj/contest/detail.vue
@@ -1,42 +1,129 @@
-
-
-
-
- {{ CONTEST_STATUS[contest.status]["name"] }}
-
- {{ contest.title }}
-
-
-
-
-
+
+
+
+ {{ CONTEST_STATUS[contest.status]["name"] }}
+
+ {{ contest.title }}
+
+
+
+
+
+
+
+
+
+ 确认
+
+
+
+ 比赛题目
+ 提交信息
+ 比赛排名
+ 管理员助手
+
+
+
- {{ contest.contest_type === ContestType.private ? "需要密码" : "公开" }}
+
{{ contest.created_by.username }}
-
+
+
diff --git a/src/oj/submission/list.vue b/src/oj/submission/list.vue
index c597b0b..f05dd0a 100644
--- a/src/oj/submission/list.vue
+++ b/src/oj/submission/list.vue
@@ -132,7 +132,9 @@ const columns = computed(() => {
{
text: true,
type: "info",
- onClick: () => router.push("/submission/" + row.id),
+ onClick: () => {
+ if (row.show_link) router.push("/submission/" + row.id)
+ },
},
() => row.id.slice(0, 12)
),
diff --git a/src/utils/types.ts b/src/utils/types.ts
index 84375e8..749f8e3 100644
--- a/src/utils/types.ts
+++ b/src/utils/types.ts
@@ -140,6 +140,7 @@ export interface Submission {
info: Info
language: LANGUAGE
shared: boolean
+ show_link: boolean
statistic_info: {
score?: number
err_info?: string