logo
0
0
WeChat Login
build: 更新 Docker 构建配置和端口设置

打字练习系统

一个基于 Vue 3 + TypeScript + Tailwind CSS 的在线打字练习平台,支持用户管理、文章管理、成绩统计和排行榜功能。

功能特性

前端功能

  • 打字练习:实时字符匹配,逐字判断正确/错误,显示正确率和速度
  • 成绩统计:记录正确率、耗时、打字速度(字/分钟)
  • 排行榜:按正确率优先、用时次之排序
  • 防作弊:禁止复制范文、粘贴内容
  • 用户登录:持久化登录状态

后台管理

  • 用户管理:添加/编辑/删除用户,关联班级
  • 文章管理:添加/编辑/删除/启停练习文章
  • 成绩管理:查看/删除成绩记录
  • 班级管理:管理年级和班级

技术栈

  • 前端:Vue 3 + TypeScript + Vite + Tailwind CSS + Pinia
  • 后端:Node.js + Express
  • 数据库:SQLite (better-sqlite3)

项目结构

dazi/ ├── src/ # 前端源码 │ ├── views/ # 页面组件 │ │ ├── HomeView.vue # 首页 │ │ ├── PracticeView.vue# 练习页 │ │ ├── ResultView.vue # 结果页 │ │ ├── LeaderboardView.vue # 排行榜 │ │ └── admin/ # 后台管理页面 │ ├── stores/ # Pinia 状态管理 │ ├── router/ # 路由配置 │ └── types/ # TypeScript 类型定义 ├── server/ # 后端源码 │ ├── routes/ # API 路由 │ ├── database.ts # 数据库配置 │ └── index.ts # 服务入口 └── package.json

快速开始

安装依赖

npm install

开发模式

npm run dev:all

启动后访问:

生产构建

npm run build

Docker 部署

# 构建并启动 docker-compose up -d --build # 查看日志 docker logs dazi # 停止服务 docker-compose down

启动后访问:

端口配置:

  • 外部访问端口 8080,容器内部端口 3200
  • 数据持久化到 ./data 目录

默认账号

  • 管理员:admin / a123456
  • 用户:通过后台管理添加

API 接口

认证

  • POST /api/auth/admin-login - 管理员登录
  • POST /api/auth/user-login - 用户登录

用户

  • GET /api/users - 获取用户列表
  • POST /api/users - 添加用户
  • PUT /api/users/:id - 更新用户
  • DELETE /api/users/:id - 删除用户

文章

  • GET /api/articles - 获取文章列表
  • GET /api/articles/random - 获取随机文章
  • POST /api/articles - 添加文章
  • PUT /api/articles/:id - 更新文章
  • DELETE /api/articles/:id - 删除文章

成绩

  • GET /api/scores/leaderboard - 获取排行榜
  • POST /api/scores - 提交成绩
  • GET /api/scores - 获取成绩列表
  • DELETE /api/scores/:id - 删除成绩

班级

  • GET /api/classes/grades - 获取年级列表
  • POST /api/classes/grades - 添加年级
  • GET /api/classes - 获取班级列表
  • POST /api/classes - 添加班级

数据库

数据库文件位于 server/data/dazi.db,首次运行会自动初始化:

  • 创建数据表
  • 插入默认管理员账号
  • 插入默认练习文章

许可证

MIT