Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
node_modules/
.DS_Store
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# 后端
backend/.env
backend/uploads/
backend/logs/

# 前端
frontend/dist/
frontend/node_modules/

# IDE
.idea/
.vscode/
*.swp
*.swo
331 changes: 330 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,330 @@
# NullRepo
# 本地小众商户引流平台

一个前后端一体的本地小众商户引流平台,支持商户入驻、优惠券发布、用户预约、评价等功能。

## 功能特性

### 商户功能
- ✅ 商户入驻申请与资质审核
- ✅ 店铺信息编辑与管理
- ✅ 优惠券发布与管理(支持设置金额、限量、有效期)
- ✅ 优惠券核销
- ✅ 预约管理(确认、完成)
- ✅ 评价查看与回复

### 用户功能
- ✅ 用户注册与登录
- ✅ 浏览与筛选商户/店铺
- ✅ 领取优惠券
- ✅ 预约到店
- ✅ 发布图文评分评价
- ✅ 商户收藏
- ✅ 浏览记录查询

### 管理员功能
- ✅ 商户资质审核
- ✅ 用户管理
- ✅ 店铺管理
- ✅ 评价管理
- ✅ 数据统计

## 技术栈

### 后端
- Node.js + Express
- MySQL 数据库
- JWT 认证
- bcryptjs 密码加密
- express-validator 数据验证

### 前端
- Vue.js 3
- Vue Router 路由
- Pinia 状态管理
- Axios HTTP 客户端
- Vite 构建工具

## 项目结构

```
NullRepo/
├── backend/ # 后端项目
│ ├── config/ # 配置文件
│ │ └── database.js # 数据库连接配置
│ ├── controllers/ # 控制器
│ │ ├── adminController.js
│ │ ├── authController.js
│ │ ├── couponController.js
│ │ ├── favoriteController.js
│ │ ├── historyController.js
│ │ ├── merchantController.js
│ │ ├── reservationController.js
│ │ ├── reviewController.js
│ │ └── shopController.js
│ ├── middleware/ # 中间件
│ │ └── auth.js # 认证中间件
│ ├── routes/ # 路由
│ │ ├── admin.js
│ │ ├── auth.js
│ │ ├── coupon.js
│ │ ├── favorite.js
│ │ ├── history.js
│ │ ├── merchant.js
│ │ ├── reservation.js
│ │ ├── review.js
│ │ └── shop.js
│ ├── app.js # 应用入口
│ ├── package.json
│ └── .env.example # 环境变量示例
├── frontend/ # 前端项目
│ ├── src/
│ │ ├── api/ # API 接口
│ │ │ ├── admin.js
│ │ │ ├── auth.js
│ │ │ ├── coupon.js
│ │ │ ├── favorite.js
│ │ │ ├── history.js
│ │ │ ├── merchant.js
│ │ │ ├── reservation.js
│ │ │ ├── review.js
│ │ │ └── shop.js
│ │ ├── router/ # 路由配置
│ │ │ └── index.js
│ │ ├── stores/ # 状态管理
│ │ │ └── user.js
│ │ ├── utils/ # 工具函数
│ │ │ └── request.js # Axios 封装
│ │ ├── views/ # 页面组件
│ │ │ ├── merchant/ # 商户端页面
│ │ │ │ ├── Apply.vue
│ │ │ │ └── Dashboard.vue
│ │ │ ├── Home.vue
│ │ │ ├── Login.vue
│ │ │ ├── Profile.vue
│ │ │ ├── Register.vue
│ │ │ ├── ShopDetail.vue
│ │ │ └── Shops.vue
│ │ ├── App.vue
│ │ ├── main.js
│ │ └── style.css
│ ├── index.html
│ ├── package.json
│ └── vite.config.js
├── database/ # 数据库
│ └── schema.sql # 数据库模型
└── README.md
```

## 安装与运行

### 前置要求
- Node.js (>= 14.0.0)
- MySQL (>= 5.7)

### 数据库配置

1. 创建数据库并导入数据模型:
```bash
mysql -u root -p < database/schema.sql
```

或者手动执行 `database/schema.sql` 中的 SQL 语句。

### 后端配置

1. 进入后端目录:
```bash
cd backend
```

2. 安装依赖:
```bash
npm install
```

3. 复制环境变量配置:
```bash
cp .env.example .env
```

4. 编辑 `.env` 文件,配置数据库连接和 JWT 密钥:
```env
PORT=3000
NODE_ENV=development

# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=merchant_platform

# JWT 配置
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRES_IN=7d

# 上传配置
UPLOAD_PATH=./uploads
MAX_FILE_SIZE=5242880
```

5. 启动后端服务:
```bash
# 开发模式(使用 nodemon 自动重启)
npm run dev

# 生产模式
npm start
```

后端服务将运行在 http://localhost:3000

### 前端配置

1. 进入前端目录:
```bash
cd frontend
```

2. 安装依赖:
```bash
npm install
```

3. 启动开发服务器:
```bash
npm run dev
```

前端服务将运行在 http://localhost:5173

4. 构建生产版本:
```bash
npm run build
```

## API 文档

### 认证接口
- `POST /api/auth/register` - 用户注册
- `POST /api/auth/login` - 用户登录
- `GET /api/auth/me` - 获取当前用户信息
- `PUT /api/auth/profile` - 更新用户信息
- `PUT /api/auth/password` - 修改密码

### 商户接口
- `POST /api/merchant/apply` - 提交商户资质申请
- `GET /api/merchant/application` - 获取申请状态
- `GET /api/merchant/applications` - 获取所有申请(管理员)
- `PUT /api/merchant/applications/:id/review` - 审核申请(管理员)

### 店铺接口
- `GET /api/shops` - 获取所有店铺
- `GET /api/shops/:id` - 获取店铺详情
- `GET /api/shops/search` - 搜索店铺
- `POST /api/shops` - 创建店铺(商户)
- `GET /api/shops/my/shop` - 获取当前商户的店铺
- `PUT /api/shops/my/shop` - 更新店铺信息(商户)

### 优惠券接口
- `GET /api/coupons/available` - 获取可用优惠券
- `GET /api/coupons/:id` - 获取优惠券详情
- `POST /api/coupons/:id/claim` - 领取优惠券
- `GET /api/coupons/my/list` - 获取我的优惠券
- `POST /api/coupons/my/:id/use` - 使用优惠券
- `POST /api/coupons/verify` - 商户核销优惠券
- `POST /api/coupons` - 发布优惠券(商户)
- `GET /api/coupons/my/merchant` - 获取商户的优惠券列表

### 预约接口
- `POST /api/reservations` - 创建预约
- `GET /api/reservations/my/list` - 获取我的预约
- `GET /api/reservations/:id` - 获取预约详情
- `PUT /api/reservations/:id/cancel` - 取消预约
- `GET /api/reservations/shop/list` - 获取店铺的预约(商户)
- `PUT /api/reservations/:id/confirm` - 确认预约(商户)
- `PUT /api/reservations/:id/complete` - 完成预约(商户)

### 评价接口
- `POST /api/reviews` - 创建评价
- `GET /api/reviews/my/list` - 获取我的评价
- `GET /api/reviews/:id` - 获取评价详情
- `PUT /api/reviews/:id` - 更新评价
- `PUT /api/reviews/:id/reply` - 回复评价(商户)
- `GET /api/reviews/shop/list` - 获取店铺的评价(商户)

### 收藏接口
- `POST /api/favorites` - 添加收藏
- `DELETE /api/favorites/:shopId` - 移除收藏
- `GET /api/favorites/my/list` - 获取我的收藏
- `GET /api/favorites/check/:shopId` - 检查是否已收藏

### 浏览记录接口
- `GET /api/history/my/list` - 获取浏览记录
- `DELETE /api/history/clear` - 清空浏览记录

### 管理员接口
- `GET /api/admin/dashboard` - 获取统计数据
- `GET /api/admin/users` - 获取用户列表
- `PUT /api/admin/users/:id/status` - 更新用户状态
- `GET /api/admin/shops` - 获取店铺列表
- `PUT /api/admin/shops/:id/status` - 更新店铺状态
- `GET /api/admin/coupons` - 获取优惠券列表
- `GET /api/admin/reviews` - 获取评价列表
- `DELETE /api/admin/reviews/:id` - 删除评价

## 数据库表结构

### users(用户表)
- id, username, password, email, phone, avatar, role, status, created_at, updated_at

### merchant_applications(商户资质审核表)
- id, user_id, business_name, business_license, legal_person, id_card, id_card_front, id_card_back, contact_phone, contact_email, business_type, business_description, status, rejection_reason, submitted_at, reviewed_at, reviewed_by

### shops(店铺表)
- id, merchant_id, shop_name, shop_logo, shop_photos, shop_type, business_hours, address, latitude, longitude, contact_phone, description, average_rating, rating_count, status, created_at, updated_at

### coupons(优惠券表)
- id, shop_id, coupon_name, coupon_type, discount_value, min_spend, total_quantity, used_quantity, claimed_quantity, start_date, end_date, usage_type, description, terms_and_conditions, status, created_at, updated_at

### user_coupons(用户优惠券表)
- id, user_id, coupon_id, claimed_at, used_at, status

### reservations(预约表)
- id, user_id, shop_id, reservation_date, reservation_time, people_count, contact_name, contact_phone, special_requests, status, created_at, updated_at

### reviews(评价表)
- id, user_id, shop_id, reservation_id, rating, content, images, is_anonymous, reply, reply_at, status, created_at, updated_at

### favorites(收藏表)
- id, user_id, shop_id, created_at

### browsing_history(浏览记录表)
- id, user_id, shop_id, viewed_at

## 开发说明

### 用户角色
- `user` - 普通用户
- `merchant` - 商户用户
- `admin` - 管理员

### 优惠券类型
- `fixed` - 固定金额减免
- `percentage` - 折扣
- `free` - 免费

### 预约状态
- `pending` - 待确认
- `confirmed` - 已确认
- `cancelled` - 已取消
- `completed` - 已完成

### 商户申请状态
- `pending` - 待审核
- `approved` - 已通过
- `rejected` - 已拒绝

## 许可证

ISC
18 changes: 18 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# 服务器配置
PORT=3000
NODE_ENV=development

# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=merchant_platform

# JWT 配置
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRES_IN=7d

# 上传配置
UPLOAD_PATH=./uploads
MAX_FILE_SIZE=5242880
9 changes: 9 additions & 0 deletions backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
node_modules/
.env
uploads/
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.DS_Store
Loading