Selaa lähdekoodia

✨ feat(goods): 新增商品排序功能

- 商品管理页面添加排序字段输入框,支持创建和编辑商品时设置排序值
- 首页商品列表接口添加排序参数,按sort字段倒序排列商品
- 优化排序字段类型转换,使用z.coerce.number确保数值类型正确解析
yourname 1 kuukausi sitten
vanhempi
sitoutus
9f8e84ef24

+ 3 - 1
mini/src/pages/index/index.tsx

@@ -63,7 +63,9 @@ const HomePage: React.FC = () => {
         query: {
           page: pageParam,
           pageSize: 10,
-          filters: JSON.stringify({ state: 1 }) // 只显示可用的商品
+          filters: JSON.stringify({ state: 1 }), // 只显示可用的商品
+          sortBy: 'sort', // 按sort字段排序
+          sortOrder: 'DESC' // 倒序排列
         }
       })
       if (response.status !== 200) {

+ 29 - 1
packages/goods-management-ui-mt/src/components/GoodsManagement.tsx

@@ -1,6 +1,6 @@
 import React, { useState } from 'react';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
-import { format } from 'date-fns';
+import { format } from 'date-fns'; 
 import { zhCN } from 'date-fns/locale';
 import { toast } from 'sonner';
 import { zodResolver } from '@hookform/resolvers/zod';
@@ -488,6 +488,20 @@ export const GoodsManagement: React.FC = () => {
                   />
                 </div>
 
+                <FormField
+                  control={createForm.control}
+                  name="sort"
+                  render={({ field }) => (
+                    <FormItem>
+                      <FormLabel>排序</FormLabel>
+                      <FormControl>
+                        <Input type="number" {...field} />
+                      </FormControl>
+                      <FormMessage />
+                    </FormItem>
+                  )}
+                />
+
                 <FormField
                   control={createForm.control}
                   name="imageFileId"
@@ -695,6 +709,20 @@ export const GoodsManagement: React.FC = () => {
                   />
                 </div>
 
+                <FormField
+                  control={updateForm.control}
+                  name="sort"
+                  render={({ field }) => (
+                    <FormItem>
+                      <FormLabel>排序</FormLabel>
+                      <FormControl>
+                        <Input type="number" {...field} />
+                      </FormControl>
+                      <FormMessage />
+                    </FormItem>
+                  )}
+                />
+
                 <FormField
                   control={updateForm.control}
                   name="imageFileId"

+ 4 - 3
packages/goods-module-mt/src/schemas/admin-goods.schema.mt.ts

@@ -187,7 +187,7 @@ export const AdminCreateGoodsDto = z.object({
     description: '简介',
     example: '高品质智能手机'
   }),
-  sort: z.number().int().nonnegative('排序值必须为非负数').default(0).openapi({
+  sort: z.coerce.number<number>().int().nonnegative('排序值必须为非负数').default(0).openapi({
     description: '排序',
     example: 0
   }),
@@ -223,7 +223,8 @@ export const AdminCreateGoodsDto = z.object({
 });
 
 // 管理员更新商品DTO - 保留完整权限字段
-export const AdminUpdateGoodsDto = z.object({
+export const 
+AdminUpdateGoodsDto = z.object({
   name: z.string().min(1, '商品名称不能为空').max(255, '商品名称最多255个字符').optional().openapi({
     description: '商品名称',
     example: 'iPhone 15'
@@ -276,7 +277,7 @@ export const AdminUpdateGoodsDto = z.object({
     description: '简介',
     example: '高品质智能手机'
   }),
-  sort: z.number().int().nonnegative('排序值必须为非负数').optional().openapi({
+  sort: z.coerce.number<number>().int().nonnegative('排序值必须为非负数').optional().openapi({
     description: '排序',
     example: 0
   }),