Vue3 + Spring Boot 全栈实战:从零搭建在线彩票模拟系统

Vue3 + Spring Boot 全栈实战:从零搭建在线彩票模拟系统

📢 本文分享一个完整的全栈项目------在线彩票模拟系统,涵盖前端Vue3、后端Spring Boot、数据库MySQL等技术栈,适合全栈学习者参考。

一、项目简介

这是一个在线彩票模拟系统,采用前后端分离架构,支持多种彩票玩法的模拟投注。项目功能完整,界面美观,已做移动端适配,可以作为全栈学习项目或毕业设计参考。

功能特性

  • 多种彩种支持(双色球、大乐透、七乐采、七星彩)
  • 普通选号 + 胆拖投注两种模式
  • 智能机选功能(一键选号、批量机选)
  • 实时开奖 + 历史开奖查询
  • 用户注册登录、JWT鉴权
  • 投注记录、中奖查询、余额管理
  • 响应式设计,支持PC端和移动端

技术栈

前端: Vue 3 + Vite + Element Plus + Vue Router + Axios

后端: Spring Boot 3.2 + MyBatis-Plus + MySQL + JWT

开发工具: JDK 21 + Node.js 18+


二、项目架构

前端结构

复制代码
frontend/
├── src/
│   ├── api/                    # API接口封装
│   │   └── index.js            # Axios配置、拦截器
│   ├── views/                  # 页面组件
│   │   ├── Home.vue            # 首页
│   │   ├── Login.vue           # 登录注册
│   │   ├── Bet.vue             # 投注页
│   │   ├── Results.vue         # 开奖结果
│   │   ├── MyBets.vue          # 投注记录
│   │   └── Profile.vue         # 个人中心
│   ├── App.vue                 # 根组件
│   ├── main.js                 # 入口文件
│   └── router.js               # 路由配置
├── vite.config.js
└── package.json

后端结构

复制代码
backend/
└── src/main/java/com/lottery/
    ├── config/                 # 配置类
    ├── controller/             # 控制器
    ├── service/                # 业务逻辑
    ├── entity/                 # 实体类
    ├── mapper/                 # 数据访问
    ├── dto/                    # 数据传输对象
    └── util/                   # 工具类(JWT)

三、核心功能实现

3.1 投注页面(核心)

投注页面是系统的核心,实现了选号、胆拖、投注单管理等功能。

普通选号模式:

vue 复制代码
<template>
  <div class="ball-picker">
    <span v-for="n in zone.max - zone.min + 1" :key="n"
      :class="['ball-btn', isSelected(n) && 'selected']"
      @click="toggleBall(n)">
      {{ String(n + zone.min - 1).padStart(2, '0') }}
    </span>
  </div>
</template>

胆拖投注逻辑:

javascript 复制代码
// 胆拖组合数计算 C(tuo, need)
const dantuoCombos = computed(() => {
  const need = dantuoConfig.value.totalCount - danSelection.value.length;
  const tuoCount = tuoSelection.value.length;
  if (danSelection.value.length === 0 || tuoCount < need) return 0;
  return combination(tuoCount, need);
});

3.2 JWT认证

使用JWT实现无状态认证,前端通过Axios拦截器自动携带Token:

javascript 复制代码
// 请求拦截器
instance.interceptors.request.use(config => {
  const token = localStorage.getItem('token');
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

// 响应拦截器
instance.interceptors.response.use(
  response => response,
  error => {
    if (error.response?.status === 401) {
      localStorage.removeItem('token');
      router.push('/login');
    }
    return Promise.reject(error);
  }
);

3.3 移动端适配

项目针对移动端做了多项优化:

css 复制代码
/* 底部安全区域适配(刘海屏) */
.bottom-nav {
  position: fixed;
  bottom: 0;
  padding-bottom: env(safe-area-inset-bottom, 0px);
}

/* 响应式统计栏 */
@media (max-width: 375px) {
  .stats-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* 触摸目标优化(≥44px) */
.ball-btn {
  width: 44px;
  height: 44px;
  -webkit-tap-highlight-color: transparent;
}

四、数据库设计

核心表结构

sql 复制代码
-- 用户表
CREATE TABLE `user` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `username` VARCHAR(50) NOT NULL UNIQUE,
  `password` VARCHAR(100) NOT NULL,
  `nickname` VARCHAR(50),
  `balance` DECIMAL(12,2) DEFAULT 10000.00,
  `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- 彩种表
CREATE TABLE `lottery_type` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `code` VARCHAR(20) NOT NULL UNIQUE,
  `rule_json` TEXT,
  `bet_price` DECIMAL(10,2) DEFAULT 2.00
);

-- 投注记录表
CREATE TABLE `bet` (
  `id` BIGINT PRIMARY KEY AUTO_INCREMENT,
  `user_id` BIGINT NOT NULL,
  `lottery_type_id` BIGINT NOT NULL,
  `draw_id` BIGINT NOT NULL,
  `numbers_json` TEXT NOT NULL,
  `amount` DECIMAL(10,2) NOT NULL,
  `status` TINYINT DEFAULT 0,
  `prize_amount` DECIMAL(12,2) DEFAULT 0
);

五、部署指南

环境要求

  • JDK 21+
  • Node.js 18+
  • MySQL 8.0+

部署步骤

1. 数据库初始化

bash 复制代码
mysql -u root -p < init.sql

2. 后端打包运行

bash 复制代码
cd backend
mvn clean package -DskipTests
java -jar target/lottery-0.0.1-SNAPSHOT.jar

3. 前端构建部署

bash 复制代码
cd frontend
npm install
npm run build

4. Nginx配置

nginx 复制代码
server {
    listen 80;
    server_name your-domain.com;

    location / {
        root /path/to/frontend/dist;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://localhost:8020/api/;
    }
}

六、项目亮点总结

  1. 完整功能 --- 涵盖用户系统、投注系统、开奖系统、记录查询等完整业务流程
  2. 代码规范 --- 组件化开发、统一的API封装、规范的异常处理
  3. 移动端适配 --- 响应式布局、安全区域适配、触摸优化
  4. 安全设计 --- JWT认证、API拦截、CORS配置
  5. 易于扩展 --- 清晰的代码结构,支持二次开发

七、写在最后

这个项目是一个很好的全栈学习案例,涵盖了Vue3、Spring Boot、MySQL等主流技术栈的实际应用。无论是用于学习提升还是毕业设计,都能提供很好的参考价值。

如果文章对你有帮助,欢迎点赞、收藏、关注,后续会分享更多全栈项目实战内容。


版权声明: 本文为原创文章,转载请注明出处。

免责声明: 本项目为模拟系统,仅供技术学习使用,不涉及真实资金交易。

相关推荐
夜白宋1 小时前
【Redis深入】二、高性能
java·前端·redis
devpotato1 小时前
ArrayList 扩容机制:从源码细节到工程实践
java·list
小马爱打代码1 小时前
SpringBoot + 分布式锁 + 事务日志:跨服务操作原子性兜底方案
spring boot·分布式·后端
Rust研习社1 小时前
从 LaunchBadge 到 transact-rs:SQLx 社区迈出可持续治理的第一步
开发语言·后端·rust
运维瓦工1 小时前
DevOps 生态介绍(八):docker &dockerfile 命令介绍及构建项目的第一个镜像
java·docker·devops
真实的菜1 小时前
Spring Boot 2.2.x 优雅停机实践指南
spring boot·后端
yurenpai(27届找实习中)1 小时前
Spring AI 实战:从零实现 AI 对话的记忆与历史记录管理(附源码级解析)
java·spring·ai·prompt·word
nnsix1 小时前
Unity 自定义包的 package.json 简单写法
java·服务器·前端
宸津-代码粉碎机1 小时前
Spring AI企业级RAG进阶|文档智能分片调优、ES深度整合、接口限流熔断监控生产实战
java·开发语言·人工智能·后端·spring·elasticsearch·oracle