Browse Source

✨ feat(order): 重构订单创建功能

- 更新CreateOrderRequest类型定义以匹配新API结构
- 优化订单数据结构,使用products数组替代goodsDetail字符串
- 添加productOwn和consumeFrom字段
- 移除冗余的userId、orderNo等自动生成字段
- 修改订单创建API调用方式为orderClient['create-order']['$post']
- 调整API响应状态码检查为200

♻️ refactor(api): 调整订单API路由结构

- 修改创建订单路由路径从/create改为/
- 调整路由注册顺序,将创建订单路由优先注册
- 移除用户登录状态重复检查

🐛 fix(order): 修复订单创建后跳转链接参数错误

- 将订单详情页跳转参数从id改为orderId
yourname 3 months ago
parent
commit
1171f0c0cf

+ 10 - 25
mini/src/pages/order-submit/index.tsx

@@ -13,7 +13,7 @@ import { Image } from '@/components/ui/image'
 
 type AddressResponse = InferResponseType<typeof deliveryAddressClient.$get, 200>
 type Address = AddressResponse['data'][0]
-type CreateOrderRequest = InferRequestType<typeof orderClient.$post>['json']
+type CreateOrderRequest = InferRequestType<typeof orderClient['create-order']['$post']>['json']
 
 interface CheckoutItem {
   id: number
@@ -56,33 +56,18 @@ export default function OrderSubmitPage() {
         throw new Error('请完善订单信息')
       }
 
-      const goodsDetail = JSON.stringify(
-        orderItems.map(item => ({
-          goodsId: item.id,
-          name: item.name,
-          price: item.price,
-          num: item.quantity
-        }))
-      )
-
       const orderData: CreateOrderRequest = {
-        orderNo: `ORD${Date.now()}`,
-        userId: user!.id,
-        amount: totalAmount,
-        payAmount: totalAmount,
-        goodsDetail,
         addressId: selectedAddress.id,
-        recevierName: selectedAddress.name,
-        receiverMobile: selectedAddress.phone,
-        address: `${selectedAddress.province?.name || ''}${selectedAddress.city?.name || ''}${selectedAddress.district?.name || ''}${selectedAddress.town?.name || ''}${selectedAddress.address}`,
-        orderType: 1,
-        payType: 0,
-        payState: 0,
-        state: 0
+        productOwn: '自营',
+        consumeFrom: '积分兑换',
+        products: orderItems.map(item => ({
+          id: item.id,
+          num: item.quantity
+        }))
       }
 
-      const response = await orderClient.$post({ json: orderData })
-      if (response.status !== 201) {
+      const response = await orderClient['create-order']['$post']({ json: orderData })
+      if (response.status !== 200) {
         throw new Error('创建订单失败')
       }
       return response.json()
@@ -98,7 +83,7 @@ export default function OrderSubmitPage() {
       
       // 跳转到订单详情页
       Taro.redirectTo({
-        url: `/pages/order-detail/index?id=${data.id}`
+        url: `/pages/order-detail/index?id=${data.orderId}`
       })
     },
     onError: (error) => {

+ 1 - 5
src/server/api/orders/create-order.ts

@@ -9,7 +9,7 @@ import { authMiddleware } from '@/server/middleware/auth.middleware';
 
 const routeDef = createRoute({
   method: 'post',
-  path: '/create',
+  path: '/',
   middleware: [authMiddleware],
   request: {
     body: {
@@ -52,10 +52,6 @@ const app = new OpenAPIHono<AuthContext>().openapi(routeDef, async (c) => {
   try {
     const data = await c.req.json();
     const user = c.get('user');
-    
-    if (!user?.id) {
-      return c.json({ code: 401, message: '用户未登录' }, 401);
-    }
 
     const service = new OrderService(AppDataSource);
     const result = await service.createOrder(data, user.id);

+ 2 - 2
src/server/api/orders/index.ts

@@ -25,7 +25,7 @@ import createOrderRoute from './create-order';
 
 // 聚合所有路由
 const app = new OpenAPIHono()
-  .route('/', orderRoutes)  // 基础CRUD路由
-  .route('/create-order', createOrderRoute);  // 创建订单专用路由
+  .route('/create-order', createOrderRoute)  // 创建订单专用路由
+  .route('/', orderRoutes);  // 基础CRUD路由
 
 export default app;