☰
基于 Spring Boot + Vue3 的家居生活商城网站设计与实现
2026/10/14 18:42:56 网站建设 项目流程

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 项目背景与意义

随着互联网技术的快速发展和人们生活水平的不断提高,线上购物已经成为日常生活中不可或缺的一部分。家居生活用品作为高频刚需品类,其线上商城需求日益增长。本项目基于 Spring Boot 和 Vue3 技术栈,设计并实现一个功能完善、体验友好的家居生活商城网站,旨在为用户提供便捷的在线选购体验,同时为商家提供高效的商品管理与订单处理能力。

本系统采用前后端分离的架构模式,后端基于 Spring Boot 提供稳定可靠的 RESTful API 服务,前端基于 Vue3 结合 Element Plus 组件库构建响应式用户界面,整体技术选型成熟、生态完善,具备良好的扩展性和维护性。

2. 技术栈选型

本项目的技术选型遵循主流、稳定、易维护的原则,具体如下:

层次技术说明
后端框架Spring Boot 2.7.x快速构建独立运行的微服务应用
持久层框架MyBatis-Plus简化数据库操作,内置分页与代码生成
数据库MySQL 8.0存储商品、订单、用户等核心业务数据
前端框架Vue3 + Vite组合式 API 开发,构建高效
UI 组件库Element Plus提供丰富的后台管理端组件
状态管理PiniaVue3 官方推荐的状态管理方案
路由管理Vue Router 4支持前端路由与权限控制
接口调用Axios统一封装 HTTP 请求与响应拦截
鉴权方案JWT + Spring Security无状态认证,保障接口安全

3. 系统功能模块设计

本系统面向普通用户和管理员两类角色,主要功能模块划分如下:

3.1 用户端功能

  • 用户注册与登录:支持手机号或邮箱注册,登录后获取 JWT 令牌。
  • 商品浏览与搜索:按分类浏览家居商品,支持关键字搜索与多条件筛选。
  • 商品详情:展示商品图片、价格、库存、规格参数及用户评价。
  • 购物车管理:支持添加、修改数量、删除商品及批量结算。
  • 订单管理:提交订单、在线支付模拟、查看订单状态与物流信息。
  • 个人中心:管理收货地址、修改个人信息、查看历史订单。

3.2 管理端功能

  • 商品管理:商品分类维护、商品上下架、库存管理与图片上传。
  • 订单管理:查看订单列表、处理发货、退款与售后。
  • 用户管理:查看注册用户列表、禁用或启用账号。
  • 数据统计:展示销售额、订单量、热门商品等可视化图表。

4. 数据库设计

根据业务需求,系统核心数据表设计如下:

表名说明关键字段
user用户表id、username、password、phone、avatar、status
category商品分类表id、name、parent_id、sort
product商品表id、category_id、name、price、stock、cover、status
cart_item购物车表id、user_id、product_id、quantity
orders订单表id、order_no、user_id、total_amount、status、create_time
order_item订单明细表id、order_id、product_id、product_name、price、quantity
address收货地址表id、user_id、receiver、phone、province、city、detail

5. 后端核心实现

后端采用分层架构,分为 Controller、Service、Mapper 三层,职责清晰。以下给出商品查询接口的核心代码示例:

@RestController @RequestMapping("/api/product") public class ProductController { @Resource private ProductService productService; @GetMapping("/page") public Result<Page<ProductVO>> page(@RequestParam(defaultValue = "1") Integer pageNum, @RequestParam(defaultValue = "10") Integer pageSize, @RequestParam(required = false) Long categoryId, @RequestParam(required = false) String keyword) { Page<ProductVO> page = productService.queryPage(pageNum, pageSize, categoryId, keyword); return Result.success(page); } @GetMapping("/{id}") public Result<ProductVO> detail(@PathVariable Long id) { return Result.success(productService.getDetail(id)); } }

订单提交是核心业务逻辑,涉及库存扣减与订单生成,使用事务保证数据一致性:

@Service public class OrderServiceImpl implements OrderService { @Resource private OrderMapper orderMapper; @Resource private ProductMapper productMapper; @Override @Transactional(rollbackFor = Exception.class) public OrderVO createOrder(OrderCreateDTO dto, Long userId) { // 1. 校验库存并扣减 for (OrderItemDTO item : dto.getItems()) { Product product = productMapper.selectById(item.getProductId()); if (product.getStock() < item.getQuantity()) { throw new BusinessException("商品库存不足:" + product.getName()); } product.setStock(product.getStock() - item.getQuantity()); productMapper.updateById(product); } // 2. 生成订单主表与明细 Order order = new Order(); order.setOrderNo(generateOrderNo()); order.setUserId(userId); order.setTotalAmount(calculateTotal(dto.getItems())); order.setStatus(0); orderMapper.insert(order); // 3. 返回订单信息 return buildOrderVO(order); } }

6. 前端核心实现

前端基于 Vue3 组合式 API 开发,使用 Pinia 管理用户登录状态与购物车数据。以下给出商品列表页的核心代码:

<script setup> import { ref, onMounted } from 'vue' import { getProductPage } from '@/api/product' import { useCartStore } from '@/store/cart' const productList = ref([]) const total = ref(0) const loading = ref(false) const queryParams = ref({ pageNum: 1, pageSize: 12, categoryId: null, keyword: '' }) const cartStore = useCartStore() const loadProducts = async () => { loading.value = true const res = await getProductPage(queryParams.value) productList.value = res.data.records total.value = res.data.total loading.value = false } const addToCart = (product) => { cartStore.addItem({ productId: product.id, quantity: 1 }) ElMessage.success('已加入购物车') } onMounted(loadProducts) </script>

购物车状态使用 Pinia 统一管理,实现跨页面共享:

import { defineStore } from 'pinia' export const useCartStore = defineStore('cart', { state: () => ({ items: [], totalCount: 0 }), actions: { addItem(item) { const exist = this.items.find(i => i.productId === item.productId) if (exist) { exist.quantity += item.quantity } else { this.items.push(item) } this.totalCount = this.items.reduce((sum, i) => sum + i.quantity, 0) }, removeItem(productId) { this.items = this.items.filter(i => i.productId !== productId) this.totalCount = this.items.reduce((sum, i) => sum + i.quantity, 0) } } })

7. 系统部署与运行

项目采用前后端分离部署方式,后端打包为可执行 Jar 包,前端构建为静态资源文件。具体步骤如下:

  1. 后端执行mvn clean package生成 Jar 包,通过java -jar启动服务。
  2. 前端执行npm install安装依赖,再执行npm run build生成 dist 目录。
  3. 将 dist 目录部署到 Nginx,并配置反向代理将/api请求转发到后端服务。
  4. 初始化 MySQL 数据库,执行项目提供的 SQL 脚本创建数据表与基础数据。

8. 总结与展望

本项目基于 Spring Boot 和 Vue3 实现了家居生活商城网站,覆盖商品展示、购物车、订单管理等核心电商流程,前后端职责清晰、接口规范,具备良好的可扩展性。后续可在以下方向继续优化:引入 Redis 缓存热点商品数据、接入真实支付网关、增加商品推荐算法以及完善后台数据可视化大屏,进一步提升系统的性能与用户体验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询