一个完整的线下零食店管理系统,包含顾客端(C端)和店家端(B端)。
- Vue 3 (Composition API + script setup)
- Vite
- Element Plus
- Pinia
- Vue Router
- Axios
- ECharts
- dayjs
- SCSS
- Spring Boot 3.2
- MyBatis
- MySQL 8.0
- JWT
- Lombok
乐逸零食店/
├── database/ # 数据库脚本
│ └── init.sql # 初始化SQL
├── backend/ # Spring Boot后端
│ ├── pom.xml
│ └── src/
├── frontend-customer/ # 顾客端Vue项目 (端口3000)
│ └── src/
└── frontend-admin/ # 店家端Vue项目 (端口3001)
└── src/
# 登录MySQL,执行初始化脚本
mysql -u root -p < database/init.sql或者在MySQL客户端中执行 database/init.sql 文件内容。
cd backend
# 修改数据库连接配置 (如需要)
# 编辑 src/main/resources/application.yml
# Maven打包运行
mvn spring-boot:run
# 或者打包后运行
mvn clean package
java -jar target/leyi-snack-1.0.0.jar后端服务将在 http://localhost:8080 启动
顾客端:
cd frontend-customer
npm install
npm run dev店家端:
cd frontend-admin
npm install
npm run dev- 手机号:任意11位手机号
- 验证码:点击“获取验证码”后到后端控制台查看
[LOGIN_CODE]
- 店长账号:13800000001 / 123456
- 店员账号:13800000002 / 123456
- 打开顾客端登录页,输入手机号后点击“获取验证码”
- 查看后端控制台输出,格式类似:
[LOGIN_CODE] phone=13645673454 code=919184 - 将控制台中的 6 位验证码输入登录页后提交登录
如果你不是用最新 database/init.sql 重新建库,而是沿用旧数据库,请执行下面的 SQL,把预置店长/店员账号密码重置为 123456:
UPDATE `admin`
SET `password` = '$2a$10$sq0JnxJBhl9HMviT57r7n.QyQ2JdjrHVgZ1pkxE/7CPZ0gXP3A80O'
WHERE `phone` IN ('13800000001', '13800000002');- ✅ 手机号验证码登录(首次登录自动注册)
- ✅ 商品浏览(分类、搜索、详情)
- ✅ 购物车管理
- ✅ 订单提交(生成取货码)
- ✅ 订单管理(查看、取消)
- ✅ 商品评价
- ✅ 个人中心
- ✅ 账号密码登录
- ✅ 数据概览(营业额、订单统计、趋势图)
- ✅ 订单核销(输入取货码核销)
- ✅ 订单管理
- ✅ 商品管理(店长专属)
- ✅ 分类管理(店长专属)
- ✅ 店员管理(店长专属)
- ✅ 库存预警
- ✅ 临期商品预警
- 登录 → 浏览商品 → 加入购物车
- 结算 → 提交订单 → 获取取货码
- 到店报取货码 → 店员核销 → 付款取货
- 完成后可评价商品
- 顾客到店报取货码
- 店员输入取货码查询订单
- 核对商品信息
- 确认核销 → 线下收款
- 确保MySQL服务已启动,数据库配置正确
- 后端需要Java 17+环境
- 前端需要Node.js 16+环境
- 登录前需要先获取验证码,默认不再提供固定万能验证码
- 文件上传目录默认为
./uploads
spring:
datasource:
url: jdbc:mysql://localhost:3306/leyi_snack
username: root
password: 123456
jwt:
secret: your-secret-key
expiration: 604800000 # 7天server: {
proxy: {
'/api': {
target: 'http://localhost:8080',
changeOrigin: true
}
}
}如果你使用的是旧数据库,而不是重新执行最新的 database/init.sql,在升级到当前版本前需要先检查取货码是否重复:
SELECT verify_code, COUNT(*) AS duplicate_count
FROM `order`
GROUP BY verify_code
HAVING COUNT(*) > 1;如果存在重复取货码,请先为重复记录重新生成新的 6 位取货码,再执行唯一索引升级:
ALTER TABLE `order`
ADD UNIQUE KEY `uk_verify_code` (`verify_code`);新初始化的数据库直接使用仓库中的最新版 database/init.sql 即可,无需额外执行上述 SQL。
如果你使用的是旧数据库,在升级到当前版本前需要同步用户资料字段:
ALTER TABLE `user`
MODIFY COLUMN `avatar` MEDIUMTEXT NULL COMMENT '头像URL',
ADD COLUMN `signature` VARCHAR(80) DEFAULT '' COMMENT '个性签名' AFTER `avatar`;升级后,用户资料接口以 name + avatar + signature 作为统一契约,前端不再以本地缓存伪装后端保存成功。