Files
ojnext/src/utils/constants.ts
yuetsh 2fbcbd07c5 feat: update frontend for four-tier role system
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>
2026-06-02 18:13:39 -06:00

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