Add Student Admin and Teacher Admin roles to constants, types, store, permissions, routes, and admin UI. Teacher Admin sees contests and problemsets in sidebar; Student Admin sees only problems. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
283 lines
5.5 KiB
TypeScript
283 lines
5.5 KiB
TypeScript
import type { SUBMISSION_RESULT } from "./types"
|
|
|
|
export enum SubmissionStatus {
|
|
compile_error = -2,
|
|
wrong_answer = -1,
|
|
accepted = 0,
|
|
time_limit_exceeded = 1 | 2,
|
|
memory_limit_exceeded = 3,
|
|
runtime_error = 4,
|
|
system_error = 5,
|
|
pending = 6,
|
|
judging = 7,
|
|
partial_accepted = 8,
|
|
submitting = 9,
|
|
ast_check_failed = 10,
|
|
}
|
|
|
|
export enum ContestStatus {
|
|
initial = "2", // 这里不需要传入到后端,只是为了一开始加载数据的时候,做一个初始位
|
|
not_started = "1",
|
|
underway = "0",
|
|
finished = "-1",
|
|
}
|
|
|
|
export enum ContestType {
|
|
public = "Public",
|
|
private = "Password Protected",
|
|
}
|
|
|
|
export const JUDGE_STATUS: {
|
|
[key in SUBMISSION_RESULT]: {
|
|
name: string
|
|
title: string
|
|
type: "error" | "success" | "warning" | "info"
|
|
}
|
|
} = {
|
|
"-2": {
|
|
name: "编译失败",
|
|
title: "编译失败",
|
|
type: "warning",
|
|
},
|
|
"-1": {
|
|
name: "答案错误",
|
|
title: "答案错误",
|
|
type: "error",
|
|
},
|
|
"0": {
|
|
name: "答案正确",
|
|
title: "答案正确",
|
|
type: "success",
|
|
},
|
|
"1": {
|
|
name: "运行超时",
|
|
title: "运行超时",
|
|
type: "error",
|
|
},
|
|
"2": {
|
|
name: "运行超时",
|
|
title: "运行超时",
|
|
type: "error",
|
|
},
|
|
"3": {
|
|
name: "内存超限",
|
|
title: "内存超限",
|
|
type: "error",
|
|
},
|
|
"4": {
|
|
name: "运行时错误",
|
|
title: "运行时错误",
|
|
type: "warning",
|
|
},
|
|
"5": {
|
|
name: "系统错误",
|
|
title: "系统错误",
|
|
type: "error",
|
|
},
|
|
"6": {
|
|
name: "等待评分",
|
|
title: "等待评分",
|
|
type: "warning",
|
|
},
|
|
"7": {
|
|
name: "正在评分",
|
|
title: "正在评分",
|
|
type: "warning",
|
|
},
|
|
"8": {
|
|
name: "部分正确",
|
|
title: "部分正确",
|
|
type: "warning",
|
|
},
|
|
"9": {
|
|
name: "正在提交",
|
|
title: "正在提交",
|
|
type: "info",
|
|
},
|
|
"10": {
|
|
name: "语法未通过",
|
|
title: "答案正确,但语法未通过",
|
|
type: "success",
|
|
},
|
|
}
|
|
|
|
export const CONTEST_STATUS: {
|
|
[key in ContestStatus]: {
|
|
name: string
|
|
type: "error" | "success" | "warning"
|
|
}
|
|
} = {
|
|
// 这里不需要传入到后端,只是为了一开始加载数据的时候,做一个初始位
|
|
"2": {
|
|
name: "未开始",
|
|
type: "warning",
|
|
},
|
|
"1": {
|
|
name: "未开始",
|
|
type: "warning",
|
|
},
|
|
"0": {
|
|
name: "进行中",
|
|
type: "success",
|
|
},
|
|
"-1": {
|
|
name: "已结束",
|
|
type: "error",
|
|
},
|
|
}
|
|
|
|
export const CONTEST_TYPE = {
|
|
PUBLIC: "Public",
|
|
PRIVATE: "Password Protected",
|
|
}
|
|
|
|
export const USER_TYPE = {
|
|
REGULAR_USER: "Regular User",
|
|
STUDENT_ADMIN: "Student Admin",
|
|
TEACHER_ADMIN: "Teacher Admin",
|
|
SUPER_ADMIN: "Super Admin",
|
|
}
|
|
|
|
export const PROBLEM_PERMISSION = {
|
|
NONE: "None",
|
|
OWN: "Own",
|
|
ALL: "All",
|
|
}
|
|
|
|
export const STORAGE_KEY = {
|
|
AUTHED: "authed",
|
|
LANGUAGE: "problemLanguage",
|
|
LEARN_CURRENT_STEP: "learnStep",
|
|
ADMIN_PROBLEM: "adminProblem",
|
|
ADMIN_PROBLEM_TAGS: "adminProblemTags",
|
|
}
|
|
|
|
export const DIFFICULTY = {
|
|
Low: "简单",
|
|
Mid: "中等",
|
|
High: "困难",
|
|
}
|
|
|
|
const cSource =
|
|
"#include<stdio.h>\r\n\r\nint main()\r\n{\r\n \r\n return 0;\r\n}"
|
|
const cppSource =
|
|
"#include<iostream>\r\n\r\nusing namespace std;\r\n\r\nint main()\r\n{\r\n \r\n return 0;\r\n}"
|
|
const pythonSource = ""
|
|
const javaSource =
|
|
'public class Main {\r\n public static void main(String[] args) {\r\n System.out.println("黄岩一职");\r\n }\r\n}'
|
|
|
|
export const SOURCES = {
|
|
C: cSource,
|
|
"C++": cppSource,
|
|
Java: javaSource,
|
|
Python3: pythonSource,
|
|
Python2: "",
|
|
JavaScript: "",
|
|
Golang: "",
|
|
Flowchart: "",
|
|
} as const
|
|
|
|
export const LANGUAGE_ID = {
|
|
C: 50,
|
|
"C++": 54,
|
|
Java: 62,
|
|
Python3: 71,
|
|
Python2: 0,
|
|
JavaScript: 0,
|
|
Golang: 0,
|
|
Flowchart: 0,
|
|
} as const
|
|
|
|
export const LANGUAGE_FORMAT_VALUE = {
|
|
C: "c",
|
|
"C++": "cpp",
|
|
Java: "java",
|
|
Python2: "python",
|
|
Python3: "python",
|
|
JavaScript: "javascript",
|
|
Golang: "go",
|
|
Flowchart: "flowchart",
|
|
} as const
|
|
|
|
export const LANGUAGE_SHOW_VALUE = {
|
|
Flowchart: "流程图",
|
|
C: "C语言",
|
|
"C++": "C++",
|
|
Java: "Java",
|
|
Python2: "Python",
|
|
Python3: "Python",
|
|
JavaScript: "JS",
|
|
Golang: "Go",
|
|
} as const
|
|
|
|
export const ICON_SET = {
|
|
Flowchart: "vscode-icons:file-type-drawio",
|
|
Python2: "devicon:python",
|
|
Python3: "devicon:python",
|
|
C: "devicon:c",
|
|
"C++": "devicon:cplusplus",
|
|
Java: "devicon:java",
|
|
JavaScript: "devicon:javascript",
|
|
Golang: "devicon:go",
|
|
} as const
|
|
|
|
const cTemplate = `//TEMPLATE BEGIN
|
|
#include <stdio.h>
|
|
|
|
int main() {
|
|
printf("黄岩一职");
|
|
return 0;
|
|
}
|
|
//TEMPLATE END`
|
|
|
|
const cppTemplate = `//TEMPLATE BEGIN
|
|
#include <iostream>
|
|
|
|
int main() {
|
|
return 0;
|
|
}
|
|
//TEMPLATE END`
|
|
|
|
const blankTemplate = `//PREPEND BEGIN
|
|
//PREPEND END
|
|
|
|
//TEMPLATE BEGIN
|
|
//TEMPLATE END
|
|
|
|
//APPEND BEGIN
|
|
//APPEND END`
|
|
|
|
export const CODE_TEMPLATES = {
|
|
C: cTemplate,
|
|
"C++": cppTemplate,
|
|
Python2: blankTemplate,
|
|
Python3: blankTemplate,
|
|
Java: blankTemplate,
|
|
JavaScript: blankTemplate,
|
|
Golang: blankTemplate,
|
|
Flowchart: blankTemplate,
|
|
} as const
|
|
|
|
export enum ScreenMode {
|
|
both = "双栏",
|
|
code = "自测",
|
|
problem = "题目",
|
|
}
|
|
|
|
export enum ChartType {
|
|
Rank,
|
|
Activity,
|
|
}
|
|
|
|
// 时间范围配置
|
|
export const DURATION_OPTIONS = [
|
|
{ label: "本节课内", value: "hours:1" },
|
|
{ label: "两节课内", value: "hours:2" },
|
|
{ label: "一天内", value: "days:1" },
|
|
{ label: "一周内", value: "weeks:1" },
|
|
{ label: "一个月内", value: "months:1" },
|
|
{ label: "两个月内", value: "months:2" },
|
|
{ label: "半年内", value: "months:6" },
|
|
{ label: "一年内", value: "years:1" },
|
|
] as const
|