Jelajahi Sumber

✨ feat(goods-management): 新增商品创建表单供应商与商户默认值功能并隐藏相关字段

- 新增 useEffect 钩子,在创建表单打开时自动选择第一个供应商和商户作为默认值
- 新增供应商和商户查询,用于获取列表数据
- 隐藏创建表单中的供应商和商户选择字段(通过设置 display: 'none')

🔧 chore(admin-menu): 临时注释部分管理菜单项

- 注释供应商管理、商户管理、区域管理和收货地址管理菜单项
- 为后续功能调整或重构做准备
yourname 3 minggu lalu
induk
melakukan
49ecc155ba

+ 55 - 2
packages/goods-management-ui-mt/src/components/GoodsManagement.tsx

@@ -1,4 +1,4 @@
-import React, { useState, useCallback } from 'react';
+import React, { useState, useCallback, useEffect } from 'react';
 import { useQuery, useMutation } from '@tanstack/react-query';
 import { format } from 'date-fns'; 
 import { zhCN } from 'date-fns/locale';
@@ -21,6 +21,8 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@
 
 import { goodsClient, goodsClientManager } from '../api/goodsClient';
 import { AdminCreateGoodsDto, AdminUpdateGoodsDto } from '@d8d/goods-module-mt/schemas';
+import { supplierClientManager } from '@d8d/supplier-management-ui-mt/api';
+import { merchantClientManager } from '@d8d/merchant-management-ui-mt/api';
 import { DataTablePagination } from '@d8d/shared-ui-components/components/admin/DataTablePagination';
 import { FileSelector } from '@d8d/file-management-ui-mt';
 import { GoodsCategoryCascadeSelector } from '@d8d/goods-category-management-ui-mt/components';
@@ -98,6 +100,57 @@ export const GoodsManagement: React.FC = () => {
     }
   });
 
+  // 获取供应商列表(用于默认选择第一个)
+  const { data: suppliersData, isLoading: isLoadingSuppliers } = useQuery({
+    queryKey: ['suppliers-for-goods'],
+    queryFn: async () => {
+      const res = await supplierClientManager.get().index.$get({
+        query: {
+          page: 1,
+          pageSize: 100
+        }
+      });
+      if (res.status !== 200) throw new Error('获取供应商列表失败');
+      const result = await res.json();
+      return result.data || [];
+    }
+  });
+
+  // 获取商户列表(用于默认选择第一个)
+  const { data: merchantsData, isLoading: isLoadingMerchants } = useQuery({
+    queryKey: ['merchants-for-goods'],
+    queryFn: async () => {
+      const res = await merchantClientManager.get().index.$get({
+        query: {
+          page: 1,
+          pageSize: 100
+        }
+      });
+      if (res.status !== 200) throw new Error('获取商户列表失败');
+      const result = await res.json();
+      return result.data || [];
+    }
+  });
+
+  // 默认选择第一个供应商和商户(仅创建表单且值为空时)
+  useEffect(() => {
+    if (isCreateForm && isModalOpen) {
+      // 检查是否需要设置默认供应商
+      const currentSupplierId = createForm.getValues('supplierId');
+      if (!currentSupplierId && suppliersData && suppliersData.length > 0) {
+        const firstSupplier = suppliersData[0];
+        createForm.setValue('supplierId', firstSupplier.id, { shouldValidate: true });
+      }
+
+      // 检查是否需要设置默认商户
+      const currentMerchantId = createForm.getValues('merchantId');
+      if (!currentMerchantId && merchantsData && merchantsData.length > 0) {
+        const firstMerchant = merchantsData[0];
+        createForm.setValue('merchantId', firstMerchant.id, { shouldValidate: true });
+      }
+    }
+  }, [isCreateForm, isModalOpen, suppliersData, merchantsData, createForm]);
+
   // 创建商品
   const createMutation = useMutation({
     mutationFn: async (data: CreateRequest) => {
@@ -513,7 +566,7 @@ export const GoodsManagement: React.FC = () => {
 
                 <GoodsCategoryCascadeSelector required={true} />
 
-                <div className="grid grid-cols-2 gap-4">
+                <div className="grid grid-cols-2 gap-4" style={{ display: 'none' }}>
                   <FormField
                     control={createForm.control}
                     name="supplierId"

+ 28 - 28
web/src/client/admin/menu.tsx

@@ -171,20 +171,20 @@ export const useMenu = () => {
         }
       ]
     },
-    {
-      key: 'suppliers',
-      label: '供应商管理',
-      icon: <Building className="h-4 w-4" />,
-      path: '/admin/suppliers',
-      permission: 'supplier:manage'
-    },
-    {
-      key: 'merchants',
-      label: '商户管理',
-      icon: <Building className="h-4 w-4" />,
-      path: '/admin/merchants',
-      permission: 'merchant:manage'
-    },
+    // {
+    //   key: 'suppliers',
+    //   label: '供应商管理',
+    //   icon: <Building className="h-4 w-4" />,
+    //   path: '/admin/suppliers',
+    //   permission: 'supplier:manage'
+    // },
+    // {
+    //   key: 'merchants',
+    //   label: '商户管理',
+    //   icon: <Building className="h-4 w-4" />,
+    //   path: '/admin/merchants',
+    //   permission: 'merchant:manage'
+    // },
     // {
     //   key: 'agents',
     //   label: '代理商管理',
@@ -192,20 +192,20 @@ export const useMenu = () => {
     //   path: '/admin/agents',
     //   permission: 'agent:manage'
     // },
-    {
-      key: 'areas',
-      label: '区域管理',
-      icon: <MapPin className="h-4 w-4" />,
-      path: '/admin/areas',
-      permission: 'area:manage'
-    },
-    {
-      key: 'delivery-addresses',
-      label: '收货地址',
-      icon: <MapPin className="h-4 w-4" />,
-      path: '/admin/delivery-addresses',
-      permission: 'user:manage'
-    },
+    // {
+    //   key: 'areas',
+    //   label: '区域管理',
+    //   icon: <MapPin className="h-4 w-4" />,
+    //   path: '/admin/areas',
+    //   permission: 'area:manage'
+    // },
+    // {
+    //   key: 'delivery-addresses',
+    //   label: '收货地址',
+    //   icon: <MapPin className="h-4 w-4" />,
+    //   path: '/admin/delivery-addresses',
+    //   permission: 'user:manage'
+    // },
     // {
     //   key: 'cards',
     //   label: '卡券管理',