hookehuyr

feat(订单管理): 实现订单删除功能并优化评价提交

refactor: 重构订单列表数据结构和加载逻辑
docs: 添加API接口文档和README说明
style: 移除不必要的padding-bottom样式
# 订单管理 API 接口文档
本文档描述了车辆订单管理相关的API接口使用方法和集成指南。
## 文件结构
```
src/api/
├── orders.js # 订单相关API接口
├── index.js # 通用API接口
├── fn.js # API工具函数
└── README.md # 本文档
```
## 订单API接口 (orders.js)
### 主要功能
- ✅ 获取我的订单列表
- ✅ 获取订单详情
- ✅ 删除订单
- ✅ 取消订单
- ✅ 确认收货
- ✅ 提交评价
- ✅ 申请退款
### 使用示例
#### 1. 删除订单
```javascript
import { deleteOrderAPI } from '@/api/orders'
// 删除订单
const handleDeleteOrder = async (orderId) => {
try {
const response = await deleteOrderAPI({ orderId })
if (response.success) {
console.log('删除成功:', response.message)
// 更新UI状态
}
} catch (error) {
console.error('删除失败:', error.message)
}
}
```
#### 2. 提交评价
```javascript
import { submitReviewAPI } from '@/api/orders'
// 提交评价
const handleSubmitReview = async (orderData) => {
try {
const response = await submitReviewAPI({
orderId: orderData.id,
rating: 5,
comment: '车况很好,推荐!',
images: [] // 可选
})
if (response.success) {
console.log('评价提交成功:', response.message)
}
} catch (error) {
console.error('评价提交失败:', error.message)
}
}
```
## 集成真实API的步骤
### 1. 更新API端点
`orders.js` 文件中,将 `OrderApi` 对象中的端点URL替换为真实的后端API地址:
```javascript
const OrderApi = {
DELETE_ORDER: 'https://your-api-domain.com/api/orders/delete',
SUBMIT_REVIEW: 'https://your-api-domain.com/api/orders/review',
// ... 其他端点
};
```
### 2. 取消注释API调用代码
在页面组件中(如 `myOrders/index.vue`),找到相关方法并取消注释真实API调用的代码:
```javascript
// 在 performDeleteOrder 方法中
const response = await deleteOrderAPI({ orderId })
if (response.success) {
// 处理成功响应
} else {
throw new Error(response.message || '删除失败')
}
```
### 3. 错误处理
确保处理以下常见错误情况:
- 网络连接错误
- 服务器错误 (5xx)
- 客户端错误 (4xx)
- 权限验证失败
- 数据验证失败
### 4. 响应格式标准化
建议后端API返回统一的响应格式:
```javascript
// 成功响应
{
success: true,
message: '操作成功',
data: { /* 具体数据 */ }
}
// 错误响应
{
success: false,
message: '错误描述',
error: {
code: 'ERROR_CODE',
details: '详细错误信息'
}
}
```
## 安全注意事项
1. **权限验证**: 确保用户只能操作自己的订单
2. **数据验证**: 在前端和后端都要进行数据验证
3. **防重复提交**: 避免用户重复提交相同的操作
4. **敏感信息**: 不要在前端暴露敏感的API密钥
5. **HTTPS**: 生产环境必须使用HTTPS协议
## 测试建议
1. **单元测试**: 为每个API方法编写单元测试
2. **集成测试**: 测试API与UI组件的集成
3. **错误场景测试**: 测试网络错误、服务器错误等异常情况
4. **性能测试**: 测试API响应时间和并发处理能力
## 开发模式 vs 生产模式
当前代码支持开发模式(使用模拟数据)和生产模式(使用真实API)的切换:
- **开发模式**: 注释掉真实API调用,使用模拟数据和延迟
- **生产模式**: 取消注释真实API调用,注释掉模拟代码
建议使用环境变量来控制模式切换,例如:
```javascript
const isDevelopment = process.env.NODE_ENV === 'development'
if (isDevelopment) {
// 使用模拟数据
} else {
// 使用真实API
}
```
## 更新日志
- **v1.0.0**: 初始版本,包含基础的订单管理API接口
- 支持删除订单、提交评价等核心功能
- 提供完整的使用示例和集成指南
\ No newline at end of file
/*
* @Date: 2024-01-01 00:00:00
* @LastEditors:
* @LastEditTime: 2024-01-01 00:00:00
* @FilePath: /jgdl/src/api/orders.js
* @Description: 车辆订单相关API接口
*/
import { fn, fetch } from './fn';
// API 端点定义
const OrderApi = {
// 获取我的订单列表
GET_MY_ORDERS: '/api/orders/my-orders',
// 获取订单详情
GET_ORDER_DETAIL: '/api/orders/detail',
// 删除订单
DELETE_ORDER: '/api/orders/delete',
// 取消订单
CANCEL_ORDER: '/api/orders/cancel',
// 确认收货
CONFIRM_ORDER: '/api/orders/confirm',
// 提交评价
SUBMIT_REVIEW: '/api/orders/review',
// 申请退款
REQUEST_REFUND: '/api/orders/refund',
};
/**
* @description: 获取我的订单列表
* @param {Object} params
* @param {string} params.type - 订单类型 'bought' | 'sold'
* @param {number} params.page - 页码
* @param {number} params.limit - 每页数量
* @param {string} params.status - 订单状态筛选(可选)
* @returns {Promise}
*/
export const getMyOrdersAPI = (params) => {
// TODO: 替换为真实的API调用
return fn(fetch.get(OrderApi.GET_MY_ORDERS, params));
};
/**
* @description: 获取订单详情
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @returns {Promise}
*/
export const getOrderDetailAPI = (params) => {
// TODO: 替换为真实的API调用
return fn(fetch.get(OrderApi.GET_ORDER_DETAIL, params));
};
/**
* @description: 删除订单
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @returns {Promise}
*
* @example
* // 使用示例:
* try {
* const response = await deleteOrderAPI({ orderId: 'ORDER_123' });
* if (response.success) {
* console.log('删除成功:', response.message);
* }
* } catch (error) {
* console.error('删除失败:', error.message);
* }
*
* @apiResponse
* {
* success: true,
* message: '订单删除成功',
* data: null
* }
*/
export const deleteOrderAPI = (params) => {
// TODO: 替换为真实的API调用
// 当集成真实API时,请确保:
// 1. 处理网络错误和超时
// 2. 验证用户权限(只能删除自己的订单)
// 3. 检查订单状态(只有特定状态的订单才能删除)
// 4. 返回统一的响应格式
return fn(fetch.delete(OrderApi.DELETE_ORDER, params));
};
/**
* @description: 取消订单
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @param {string} params.reason - 取消原因(可选)
* @returns {Promise}
*/
export const cancelOrderAPI = (params) => {
// TODO: 替换为真实的API调用
return fn(fetch.post(OrderApi.CANCEL_ORDER, params));
};
/**
* @description: 确认收货/完成交易
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @returns {Promise}
*/
export const confirmOrderAPI = (params) => {
// TODO: 替换为真实的API调用
return fn(fetch.post(OrderApi.CONFIRM_ORDER, params));
};
/**
* @description: 提交订单评价
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @param {number} params.rating - 评分 (1-5)
* @param {string} params.comment - 评价内容
* @param {Array} params.images - 评价图片(可选)
* @returns {Promise}
*
* @example
* // 使用示例:
* try {
* const response = await submitReviewAPI({
* orderId: 'ORDER_123',
* rating: 5,
* comment: '车况很好,卖家服务态度也很棒!',
* images: ['image1.jpg', 'image2.jpg'] // 可选
* });
* if (response.success) {
* console.log('评价提交成功:', response.message);
* }
* } catch (error) {
* console.error('评价提交失败:', error.message);
* }
*
* @apiResponse
* {
* success: true,
* message: '评价提交成功',
* data: {
* reviewId: 'REVIEW_123',
* createdAt: '2024-01-01T12:00:00Z'
* }
* }
*/
export const submitReviewAPI = (params) => {
// TODO: 替换为真实的API调用
// 当集成真实API时,请确保:
// 1. 验证评分范围(1-5)
// 2. 验证评价内容长度限制
// 3. 处理图片上传(如果有)
// 4. 检查订单状态(只有已完成的订单才能评价)
// 5. 防止重复评价
return fn(fetch.post(OrderApi.SUBMIT_REVIEW, params));
};
/**
* @description: 申请退款
* @param {Object} params
* @param {string} params.orderId - 订单ID
* @param {string} params.reason - 退款原因
* @param {number} params.amount - 退款金额
* @param {Array} params.evidence - 退款凭证(可选)
* @returns {Promise}
*/
export const requestRefundAPI = (params) => {
// TODO: 替换为真实的API调用
return fn(fetch.post(OrderApi.REQUEST_REFUND, params));
};
// 导出所有API
export default {
getMyOrdersAPI,
getOrderDetailAPI,
deleteOrderAPI,
cancelOrderAPI,
confirmOrderAPI,
submitReviewAPI,
requestRefundAPI,
};
\ No newline at end of file
......@@ -103,7 +103,7 @@
/* 订单列表 */
.order-list {
flex: 1;
padding-bottom: 160rpx;
// padding-bottom: 160rpx;
}
/* 滚动列表 */
......@@ -311,7 +311,7 @@
.rate-score-section {
margin-bottom: 40rpx;
.score-label {
display: block;
font-size: 30rpx;
......@@ -319,18 +319,18 @@
margin-bottom: 20rpx;
font-weight: 500;
}
.rate-stars {
margin-bottom: 16rpx;
}
.score-text {
font-size: 26rpx;
color: #666;
margin-left: 16rpx;
}
}
.rate-input-section {
.input-label {
display: block;
......@@ -339,7 +339,7 @@
margin-bottom: 20rpx;
font-weight: 500;
}
.rate-textarea {
width: 100%;
min-height: 200rpx;
......@@ -348,18 +348,18 @@
padding: 20rpx;
font-size: 28rpx;
line-height: 1.5;
&:focus {
border-color: #ff6b35;
}
&.readonly {
background-color: #f8f9fa;
border-color: #e9ecef;
color: #666;
}
}
.review-date {
display: block;
font-size: 24rpx;
......
This diff is collapsed. Click to expand it.