Files
ShaFaFanXin/前端/docs/接口对接完成报告.md

369 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前后端接口对接完成报告
## 一、完成概览
本次开发完成了前后端的完整对接,包括:
- ✅ 新增预约Booking模块的完整后端实现
- ✅ 修正所有前端API调用的路径和参数
- ✅ 统一后端响应数据格式
- ✅ 完善预约页面功能
- ✅ 优化案例列表和详情页面的数据适配
## 二、后端完成的工作
### 1. 新增 Booking 模块
#### 文件结构
```
后端/src/booking/
├── booking.controller.ts # 预约控制器
├── booking.service.ts # 预约服务
├── booking.module.ts # 预约模块
└── dto/
└── booking.dto.ts # 预约DTO
```
#### API 接口列表
| 方法 | 路径 | 说明 | 权限 |
|------|------|------|------|
| POST | /api/booking | 创建预约 | 登录用户 |
| GET | /api/booking | 获取所有预约 | 管理员/工人 |
| GET | /api/booking/my | 获取我的预约列表 | 登录用户 |
| GET | /api/booking/:id | 获取预约详情 | 登录用户 |
| PATCH | /api/booking/:id | 更新预约信息 | 本人/管理员 |
| POST | /api/booking/:id/cancel | 取消预约 | 本人/管理员 |
| DELETE | /api/booking/:id | 删除预约 | 管理员 |
#### 预约数据模型
```typescript
{
id: number;
bookingNumber: string; // 预约编号 (自动生成)
serviceId: number; // 服务ID
customerId: number; // 客户ID
contactName: string; // 联系人姓名
contactPhone: string; // 联系电话
address: string; // 服务地址
appointmentTime: Date; // 预约时间
requirements?: string; // 特殊要求
images?: string[]; // 沙发现状图片
status: string; // 状态: pending/confirmed/in_progress/completed/cancelled
quotedPrice?: number; // 报价
finalPrice?: number; // 最终价格
notes?: string; // 备注
assignedWorkerId?: number; // 分配工人ID
}
```
### 2. 统一后端响应格式
所有API返回格式统一为
```typescript
{
code: 0, // 0表示成功
message: string, // 响应消息
data: any // 响应数据
}
```
**修改的服务:**
- `case.service.ts` - 案例服务
- `findAll()` - 返回格式: `{ code, message, data: { list, total, page, pageSize } }`
- `findOne()` - 返回格式: `{ code, message, data: caseEntity }`
- `getMyCases()` - 返回格式: `{ code, message, data: { list, total, page, pageSize } }`
- `service.service.ts` - 服务管理
- `getActiveServices()` - 返回格式: `{ code, message, data: { list, total } }`
- `booking.service.ts` - 预约管理
- 所有方法统一返回上述格式
## 三、前端完成的工作
### 1. 修正 API 调用路径
**文件:** `前端/api/index.uts`
#### 修改的接口:
1. **用户信息接口**
```typescript
// 修改前: /user/info
// 修改后: /users/profile
export const getUserInfo = () => {
return get('/users/profile')
}
```
2. **案例列表接口**
```typescript
export const getCaseList = (params ?: UTSJSONObject) => {
const queryParams : UTSJSONObject = {
page: params ? (params['page'] || 1) : 1,
limit: params ? (params['pageSize'] || params['limit'] || 10) : 10,
status: 'published'
}
// 只在有分类且不为'all'时添加serviceType参数
if (params && params['category'] && params['category'] != 'all') {
queryParams['serviceType'] = params['category']
}
return get('/cases', queryParams)
}
```
3. **公司信息接口**
```typescript
// 改为返回固定数据(临时方案,后续可对接后端)
export const getCompanyInfo = () => {
return Promise.resolve({
code: 0,
message: 'success',
data: {
name: '优艺家沙发翻新',
slogan: '让旧沙发焕发新生',
// ... 其他信息
}
})
}
```
4. **新增预约相关接口**
```typescript
// 提交预约
export const submitBooking = (data : UTSJSONObject) => {
return post('/booking', data)
}
// 获取我的预约列表
export const getMyBookings = (params ?: UTSJSONObject) => {
return get('/booking/my', queryParams)
}
// 获取预约详情
export const getBookingDetail = (id : string) => {
return get(`/booking/${id}`)
}
// 取消预约
export const cancelBooking = (id : string) => {
return post(`/booking/${id}/cancel`, {})
}
```
### 2. 完善预约页面
**文件:** `前端/pages/booking/index.uvue`
#### 主要改进:
1. **动态加载服务列表**
- 从后端 `/api/services/active` 获取可用服务
- 用户可选择具体的服务类型
2. **添加预约时间选择**
- 使用日期选择器选择预约日期
- 最小日期为当天
3. **完善表单验证**
- 必填项:姓名、电话、地址、服务类型、预约时间
- 手机号格式验证
4. **正确的数据提交格式**
```typescript
{
serviceId: number, // 服务ID
contactName: string, // 联系人姓名
contactPhone: string, // 联系电话
address: string, // 服务地址
appointmentTime: string, // 预约时间 (ISO 8601格式)
requirements: string, // 特殊要求
images: string[] // 图片列表
}
```
### 3. 优化案例列表页面
**文件:** `前端/pages/cases/list.uvue`
#### 数据适配改进:
```typescript
// 适应后端返回的字段结构
const newList = list.map((item) : CaseItem => {
return {
id: String(item['id']),
title: item['title'] as string,
category: item['serviceType'] as string, // 后端字段
categoryName: item['serviceName'] as string, // 服务名称
coverImage: item['coverImage'] as string,
material: item['material'] as string || '',
duration: item['duration'] as string || '',
price: String(item['estimatedPrice'] || 0), // 估算价格
views: item['views'] as number || 0,
likes: item['likes'] as number || 0
}
})
```
### 4. 优化案例详情页面
**文件:** `前端/pages/cases/detail.uvue`
#### 数据映射优化:
```typescript
caseDetail.value = {
id: String(data['id']),
title: data['title'] as string,
category: data['serviceType'] as string || '', // 后端使用serviceType
categoryName: data['serviceName'] as string || '',
beforeImages: data['beforeImages'] as string[] || [],
afterImages: data['afterImages'] as string[] || [],
description: data['description'] as string,
material: data['material'] as string || '优质材料',
duration: data['duration'] as string || '5-7天',
price: '¥' + (data['estimatedPrice'] || '面议'),
views: data['views'] as number || 0,
likes: data['likes'] as number || 0,
createTime: createdAt.split('T')[0] || '' // 格式化日期
}
```
## 四、配置更新
### 环境配置
**文件:** `前端/utils/config.uts`
```typescript
export const ENV = {
development: {
baseUrl: 'http://localhost:3000/api',
imageBaseUrl: 'http://localhost:3000'
},
production: {
baseUrl: 'https://api.youyijia.com/api',
imageBaseUrl: 'https://api.youyijia.com'
}
}
// 当前环境
export const currentEnv = 'development'
// 关闭Mock数据
export const useMock = false
```
## 五、接口对应关系总结
### 1. 认证相关
| 前端调用 | 后端路径 | 说明 |
|---------|---------|------|
| - | POST /api/auth/register | 用户注册 |
| - | POST /api/auth/login | 用户登录 |
| - | POST /api/auth/wechat/login | 微信登录 |
### 2. 用户相关
| 前端调用 | 后端路径 | 说明 |
|---------|---------|------|
| getUserInfo() | GET /api/users/profile | 获取当前用户信息 |
### 3. 案例相关
| 前端调用 | 后端路径 | 说明 |
|---------|---------|------|
| getCaseList(params) | GET /api/cases?page&limit&serviceType&status | 获取案例列表 |
| getCaseDetail(id) | GET /api/cases/:id | 获取案例详情 |
| getHotCases() | GET /api/cases?limit=4&status=published | 获取热门案例 |
### 4. 服务相关
| 前端调用 | 后端路径 | 说明 |
|---------|---------|------|
| getActiveServices() | GET /api/services/active | 获取有效服务列表 |
| getServiceProcess() | GET /api/services | 获取服务流程 |
### 5. 预约相关
| 前端调用 | 后端路径 | 说明 |
|---------|---------|------|
| submitBooking(data) | POST /api/booking | 提交预约 |
| getMyBookings(params) | GET /api/booking/my | 获取我的预约 |
| getBookingDetail(id) | GET /api/booking/:id | 获取预约详情 |
| cancelBooking(id) | POST /api/booking/:id/cancel | 取消预约 |
## 六、后端服务状态
### 服务器信息
- **地址:** http://localhost:3000
- **API文档** http://localhost:3000/docs
- **状态:** ✅ 运行中
### 数据库连接
- **类型:** MySQL
- **数据库:** sffx
- **状态:** ✅ 已连接
### 已注册的模块
- ✅ AppModule
- ✅ AuthModule (认证模块)
- ✅ UserModule (用户模块)
- ✅ CaseModule (案例模块)
- ✅ ServiceModule (服务模块)
- ✅ BookingModule (预约模块) **【新增】**
## 七、待完成的工作
### 1. 前端功能待完善
- [ ] 用户登录/注册页面
- [ ] 我的预约列表页面
- [ ] 收藏功能实现
- [ ] 图片上传功能
### 2. 后端功能待完善
- [ ] 用户收藏API
- [ ] 图片上传API
- [ ] 公司信息管理API
- [ ] 轮播图管理API
### 3. 后台管理界面
- [ ] 后台管理系统开发(等前端功能完善后开始)
- 用户管理
- 案例管理
- 服务管理
- 预约管理
- 数据统计
## 八、测试建议
### 1. 接口测试
访问 http://localhost:3000/docs 查看Swagger API文档可以在线测试所有接口。
### 2. 前端测试流程
1. 启动后端服务:`cd 后端 && npm run start:dev`
2. 启动前端使用HBuilderX运行到浏览器或小程序
3. 测试流程:
- 浏览首页,查看案例列表
- 点击案例查看详情
- 进入服务页面查看服务列表
- 填写预约表单并提交
### 3. 需要准备的测试数据
- 创建管理员账号
- 添加服务类型(布艺沙发、皮沙发等)
- 添加几个案例数据
- 测试预约流程
## 九、注意事项
1. **认证机制**:部分接口需要登录后才能访问,需要在请求头中携带 Bearer Token
2. **数据库同步**:后端配置了 `synchronize: true`,会自动同步数据库结构
3. **跨域问题**如需在不同域名访问需配置CORS
4. **图片存储**:当前图片路径为字符串数组,需要配置文件上传服务
---
**报告生成时间:** 2026年1月28日
**完成人员:** GitHub Copilot
**项目状态:** 前后端基础对接完成,可进行功能测试