Procházet zdrojové kódy

✨ feat(order): 添加订单备注功能

- 前端新增订单备注输入区域,包括文本框和字数提示
- 添加备注状态管理和输入处理函数
- 订单提交时包含备注信息(可选字段)

✨ feat(schema): 订单创建接口添加备注字段

- 新增remark字段,最大长度200字符
- 设为可选字段,示例值为"请尽快发货"

✨ feat(service): 订单创建服务支持备注存储

- 从请求数据中获取remark字段
- 将备注信息存入订单记录

📝 docs(management): 更新订单管理界面备注显示

- 将"管理员备注"改为"客户备注"
- 调整备注输入框提示文本
yourname před 1 měsícem
rodič
revize
8e0a075e13

+ 50 - 0
mini/src/pages/order-submit/index.css

@@ -256,4 +256,54 @@
   background-image: url(https://cdn-we-retail.ym.tencent.com/miniapp/order/stripe.png);
   background-repeat: repeat-x;
   display: block;
+}
+
+/* 备注区域样式 */
+.remark-section {
+  background-color: #ffffff;
+  padding: 32rpx;
+  margin-top: 24rpx;
+}
+
+.remark-section .remark-header {
+  display: flex;
+  align-items: center;
+  margin-bottom: 24rpx;
+}
+
+.remark-section .remark-title {
+  font-size: 32rpx;
+  font-weight: bold;
+  color: #333333;
+  margin-right: 16rpx;
+}
+
+.remark-section .remark-tip {
+  font-size: 24rpx;
+  color: #999999;
+}
+
+.remark-section .remark-textarea {
+  width: 100%;
+  min-height: 300rpx;
+  height: 240rpx;
+  padding: 24rpx;
+  background-color: #f8f8f8;
+  border-radius: 16rpx;
+  font-size: 28rpx;
+  line-height: 40rpx;
+  color: #333333;
+  box-sizing: border-box;
+}
+
+.remark-section .remark-counter {
+  display: flex;
+  justify-content: flex-end;
+  margin-top: 16rpx;
+  min-height: 100rpx;
+}
+
+.remark-section .remark-count {
+  font-size: 24rpx;
+  color: #999999;
 }

+ 31 - 2
mini/src/pages/order-submit/index.tsx

@@ -1,4 +1,4 @@
-import { View, ScrollView, Text } from '@tarojs/components'
+import { View, ScrollView, Text, Textarea } from '@tarojs/components'
 import { useQuery, useMutation } from '@tanstack/react-query'
 import { useState, useEffect } from 'react'
 import Taro from '@tarojs/taro'
@@ -28,6 +28,7 @@ export default function OrderSubmitPage() {
   const [selectedAddress, setSelectedAddress] = useState<Address | null>(null)
   const [orderItems, setOrderItems] = useState<CheckoutItem[]>([])
   const [totalAmount, setTotalAmount] = useState(0)
+  const [remark, setRemark] = useState("")
 
   // 获取地址列表
   const { data: addresses } = useQuery({
@@ -62,7 +63,8 @@ export default function OrderSubmitPage() {
         products: orderItems.map(item => ({
           id: item.id,
           num: item.quantity
-        }))
+        })),
+        remark: remark || undefined // 可选字段,如果为空则不传
       }
 
       const response = await orderClient['create-order']['$post']({ json: orderData })
@@ -159,6 +161,11 @@ export default function OrderSubmitPage() {
     })
   }
 
+  // 处理备注输入
+  const handleRemarkChange = (e: any) => {
+    setRemark(e.detail.value)
+  }
+
   // 提交订单
   const handleSubmitOrder = () => {
     if (!selectedAddress) {
@@ -258,6 +265,28 @@ export default function OrderSubmitPage() {
             <Text className="total-price">¥{totalAmount.toFixed(2)}</Text>
           </View>
         </View>
+
+
+        {/* 备注区域 */}
+        <View className="remark-section">
+          <View className="remark-header">
+            <Text className="remark-title">订单备注</Text>
+            <Text className="remark-tip">(选填,请填写与订单相关的备注信息)</Text>
+          </View>
+          <Textarea
+            className="remark-textarea"
+            placeholder="请输入订单备注信息..."
+            value={remark}
+            onInput={handleRemarkChange}
+            maxlength={255}
+            showConfirmBar={true}
+          />
+          <View className="remark-counter">
+            <Text className="remark-count">{remark.length}/255</Text>
+          </View>
+        </View>
+
+
       </ScrollView>
 
       {/* 底部提交栏 */}

+ 3 - 3
packages/order-management-ui-mt/src/components/OrderManagement.tsx

@@ -554,10 +554,10 @@ export const OrderManagement = () => {
                 name="remark"
                 render={({ field }) => (
                   <FormItem>
-                    <FormLabel>管理员备注</FormLabel>
+                    <FormLabel>客户备注</FormLabel>
                     <FormControl>
                       <Textarea
-                        placeholder="输入管理员备注信息..."
+                        placeholder="输入客户备注信息..."
                         className="resize-none"
                         data-testid="edit-remark-textarea"
                         {...field}
@@ -730,7 +730,7 @@ export const OrderManagement = () => {
 
               {selectedOrder.remark && (
                 <div>
-                  <h4 className="font-medium mb-2">管理员备注</h4>
+                  <h4 className="font-medium mb-2">客户备注</h4>
                   <p className="text-sm bg-muted p-3 rounded-md">{selectedOrder.remark}</p>
                 </div>
               )}

+ 4 - 0
packages/orders-module-mt/src/schemas/create-order.schema.ts

@@ -29,6 +29,10 @@ export const CreateOrderRequestDto = z.object({
   products: z.array(OrderItemDto).min(1, '商品列表不能为空').openapi({
     description: '商品列表',
     example: [{ id: 1, num: 2 }, { id: 3, num: 1 }]
+  }),
+  remark: z.string().max(200, '备注最多200个字符').optional().openapi({
+    description: '订单备注',
+    example: '请尽快发货'
   })
 });
 

+ 2 - 1
packages/orders-module-mt/src/services/order.mt.service.ts

@@ -46,7 +46,7 @@ export class OrderMtService extends GenericCrudService<OrderMt> {
     await queryRunner.startTransaction();
 
     try {
-      const { addressId, productOwn, consumeFrom, products } = data;
+      const { addressId, productOwn, consumeFrom, products, remark } = data;
 
       // 验证商品信息并计算总价
       let totalAmount = 0;
@@ -110,6 +110,7 @@ export class OrderMtService extends GenericCrudService<OrderMt> {
         addressId: addressId || 0,
         merchantId: goodsInfo[0]?.goods.merchantId || 0,
         supplierId: goodsInfo[0]?.goods.supplierId || 0,
+        remark: remark || '',
         createdBy: userId,
         updatedBy: userId,
         // 设置收货地址信息(如果提供)

+ 4 - 0
packages/orders-module/src/schemas/create-order.schema.ts

@@ -29,6 +29,10 @@ export const CreateOrderRequestDto = z.object({
   products: z.array(OrderItemDto).min(1, '商品列表不能为空').openapi({
     description: '商品列表',
     example: [{ id: 1, num: 2 }, { id: 3, num: 1 }]
+  }),
+  remark: z.string().max(200, '备注最多200个字符').optional().openapi({
+    description: '订单备注',
+    example: '请尽快发货'
   })
 });
 

+ 2 - 1
packages/orders-module/src/services/order.service.ts

@@ -35,7 +35,7 @@ export class OrderService extends GenericCrudService<Order> {
     await queryRunner.startTransaction();
 
     try {
-      const { addressId, productOwn, consumeFrom, products } = data;
+      const { addressId, productOwn, consumeFrom, products, remark } = data;
 
       // 验证商品信息并计算总价
       let totalAmount = 0;
@@ -98,6 +98,7 @@ export class OrderService extends GenericCrudService<Order> {
         addressId: addressId || 0,
         merchantId: goodsInfo[0]?.goods.merchantId || 0,
         supplierId: goodsInfo[0]?.goods.supplierId || 0,
+        remark: remark || '',
         createdBy: userId,
         updatedBy: userId,
         // 设置收货地址信息(如果提供)