这是 SASTOJ 的前端仓库,包含了 SASTOJ 的前端所有代码和文档。 SASTOJ 是一个原生支持分布式部署的 OJ 系统,以满足机房低带宽的需求,同时也支持单机部署。 通过 SASTOJ 你可以快速开始一个 IOI 比赛,选手可以在线运行代码(不提交,包含输入数据,简称运行)并查看编译结果和运行输出,提交代码并实时看到评测结果(简称判题或提交),查看赛时排行榜,同时支持多语言(提交时勾选编程语言)。
packages 目录下是所有的子项目,每个子项目都是一个独立的 npm 包。
packages
├── competition
├── docs
├── management
其中 competition 是比赛前端,docs 是文档前端,management 是比赛系统管理端
比赛前端,包含了比赛的所有功能,包括运行,提交,排行榜等。 使用 Vite + React + TypeScript 开发。 路由使用 react-router-dom,状态管理使用 zustand,网络请求库采用 SWR。
SASTOJ 文档,包含开发指南和部署指南。 基于 Rspress 开发。
管理前端,包含了比赛系统的管理。 使用 Nuxt + Vue + TypeScript 开发。 状态管理使用 pinia。
克隆本仓库,并开启你自己的分支,分支命名规则为 <FEATURE>-<STATE>
,其中 FEATURE 为功能名称,STATE 为功能状态,包括 dev 和 prod,分别代表开发状态和生产状态。
git clone https://git.sast.fun/sast-f2e/sastoj-frontend.git
git checkout -b <FEATURE>-<STATE>
安装依赖
pnpm install
文档开发的包在 packages/docs 下,使用 Rspress 进行开发。使用以下指令快速打开文档预览。
pnpm docs:dev
比赛系统开发的包在 packages/competition 下,使用 Vite + React + TypeScript 进行开发。使用以下指令快速打开比赛系统预览。
pnpm competition:dev
如果你想直接在分包内执行指令,也可以执行以下命令
pnpm --filter <package name> <command>
比赛系统开发的包在 packages/competition 下,使用 Nuxt + Vue + TypeScript 进行开发。使用以下指令快速打开比赛系统预览。
pnpm management:dev
如果你想直接在分包内执行指令,也可以执行以下命令
pnpm --filter <package name> <command>
本仓库在提交代码之前会自动检查代码格式和执行测试脚本,所以 git commit
会被拦截。
请使用 pnpm commit
提交代码。