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等主流技术栈的实际应用。无论是用于学习提升还是毕业设计,都能提供很好的参考价值。

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


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

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

相关推荐
Python私教几秒前
软件开发报价为什么能差 3 倍:需求范围、验收标准和变更成本怎么算
后端·python·架构
苏三说技术1 分钟前
为什么越来越多人用gRPC?
后端
MacroZheng2 分钟前
程序员看文档神器,装上它,看Spring官方文档就一目了然了!
java·人工智能·后端
想风3 分钟前
Claude Code 实用技巧工作坊 —— Boris Cherny
前端·后端·github
长栎5 分钟前
Java 17 的模式匹配,正在杀死访问者模式
后端
骇客野人7 分钟前
SpringBoot 接入 Kafka 完整实操步骤
spring boot·kafka·linq
风曳丷10 分钟前
# 03|恶意文本如何一路摸到工具按钮
后端
2501_9159184110 分钟前
Rust 程序抓包解密,rustls 不认系统证书的几种办法
开发语言·后端·网络协议·ios·adb·https·rust
深漂的华哥12 分钟前
Ruoyi-Vue-Plus(V5.6.2) 开发环境搭建
java·前端·spring boot·后端·spring·ruoyi
wanger6115 分钟前
AI应用开发知识点总结
java