Files
KF-OnlineJudge/frontend/README.md
T

44 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Vue 前端工程
Vue 3 + TypeScript + Vite + Element Plus,使用 Vue Router 与 Pinia。
登录、已发布题库、题面、提交与个人成绩页面使用真实 API。训练、比赛、社区等
本轮以外页面仍为明确的开发预览,不提供这些尚未实现的业务能力。
```bash
pnpm install --frozen-lockfile
pnpm dev
pnpm typecheck
pnpm test
pnpm build
```
开发服务在 `http://127.0.0.1:5173`,`/api` 代理到 `http://127.0.0.1:8000`。
复制 `.env.example` 为 `.env` 可调整代理和 API 地址。
生产部署须配置 SPA 路由回退及 `/api` 反向代理;开发代理不进入生产产物。
- `views/`:路由页面;`layouts/`:页面框架;`components/`:可复用界面组件。
- `api/`:HTTP 客户端和业务 API 封装;`api/generated/`:从 OpenAPI 生成的类型。
- `composables/`:带生命周期的交互逻辑;`stores/`:跨页面共享状态。
- `router/`:路由;`styles/`:全局样式。
已有代码按实际需要落位;`components/` 和 `stores/` 是后续扩展位置,不放空状态实现。
API 类型更新执行根目录 `make contracts`;前端通过 `pnpm check:api` 拒绝过期类型。
登录凭据、模型密钥和数据库连接不能进入 `VITE_` 环境变量。
已有账号登录使用 HttpOnly/Strict cookie 与单独 CSRF cookie;401清除内存身份,
保护页面重新登录后继续。自助注册暂不开放。密码/会话不存入 localStorage。
浏览器与 API 使用同一 origin 的 `/api`,明确配置 `KF_OJ_BROWSER_ORIGINS`;
生产必须使用 HTTPS、安全 cookie 与独立部署的反向代理。
编辑器保留每题/每语言本地草稿,新增 C17 并保留原 C++/Python/Rust 草稿;
仅题目声明支持的 C17/C++20 可提交。提交凭据按账号/版本/内容 SHA-256 绑定,
POST前先保存 UUID,双击共用请求,网络超时/刷新重试复用原键;内容变化产生新键。
草稿和已保存凭据不因失败/退出而清除,本地存储不可用时拒绝发起无法稳定重试的提交。
详情和列表查询每2秒一次,每轮最多240次/10分钟;终态、错误或离页停止,隐藏页面
取消当前查询,恢复可见时继续原预算。路由变化/会话变化后的旧响应不能覆盖当前视图。
耗尽后可手动刷新;不会用预览成绩填补错误。取消受理与最终停止分别展示。
运行指标仅来自完整持久化报告,null显示“—”;诊断和源码按纯文本显示。
`pnpm test` 覆盖草稿、幂等重试、轮询期限/隐藏/终态/失效响应和401处理,
已纳入 `make check-frontend`;真实浏览器编译/判题另在受限独立 VM 验收。