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

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


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

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

相关推荐
葫芦和十三13 小时前
图解 MongoDB 07|索引类型:七种索引,七种访问形状
后端·mongodb·agent
朦胧之15 小时前
AI 编程-老项目改造篇
java·前端·后端
爱勇宝17 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
IT_陈寒18 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
SelectDB19 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
SelectDB19 小时前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
程序猿大帅19 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
PinkSun19 小时前
Spring AI ChatMemory踩坑实录:重启丢数据、Agent丢记忆、对话溢出
后端·ai编程
壹方秘境19 小时前
我用Go语言开发了一个跨平台的HTTPS抓包和调试工具
前端·后端·ios
神秘面具男19 小时前
HarmonyOS 6.0跨端远程控制
前端·后端