Просмотр исходного кода

♻️ refactor(departments): 优化部门管理功能实现

- 移除冗余的用户列表查询,减少不必要的数据加载
- 修改部门负责人显示逻辑,直接使用manager对象而非ID查找
- 更新部门表格负责人列渲染方式,简化代码

🐛 fix(departments): 修复部门描述字段处理问题

- 将部门描述字段改为可空类型,支持提交空描述
- 在创建/编辑部门时将空描述转换为null,与后端类型匹配
yourname 7 месяцев назад
Родитель
Сommit
0ba3f2cd42

+ 7 - 16
src/client/admin/pages/Departments.tsx

@@ -22,15 +22,6 @@ const Departments: React.FC = () => {
     }
   });
 
-  // 查询用户列表
-  const { data: usersData } = useQuery({
-    queryKey: ['users-for-departments'],
-    queryFn: async () => {
-      const response = await userClient.$get({ query: { page: 1, pageSize: 1000 } });
-      if (response.status !== 200) throw new Error('获取用户列表失败');
-      return response.json();
-    }
-  });
 
   // 创建部门
   const createMutation = useMutation({
@@ -110,13 +101,12 @@ const Departments: React.FC = () => {
     },
     {
       title: '负责人',
-      dataIndex: 'managerId',
-      key: 'managerId',
+      dataIndex: 'manager',
+      key: 'manager',
       width: 120,
-      render: (managerId: number) => {
-        if (!managerId) return '-';
-        const manager = usersData?.data.find((u: any) => u.id === managerId);
-        return manager?.name || manager?.username || '-';
+      render: (manager: any) => {
+        if (!manager) return '-';
+        return manager.name || manager.username || '-';
       },
     },
     {
@@ -188,7 +178,8 @@ const Departments: React.FC = () => {
   const handleSubmit = async (values: any) => {
     const data = {
       ...values,
-      isActive: values.isActive ? 1 : 0
+      isActive: values.isActive ? 1 : 0,
+      description: values.description || null
     };
 
     if (editingRecord) {

+ 1 - 1
src/server/modules/departments/department.entity.ts

@@ -105,7 +105,7 @@ export const CreateDepartmentDto = z.object({
 export const UpdateDepartmentDto = z.object({
   name: z.string().max(100).optional().openapi({ description: '部门名称', example: '销售部' }),
   code: z.string().max(50).optional().openapi({ description: '部门编码', example: 'SALES' }),
-  description: z.string().max(500).optional().openapi({ description: '部门描述', example: '负责销售业务' }),
+  description: z.string().max(500).nullable().optional().openapi({ description: '部门描述', example: '负责销售业务' }),
   sortOrder: z.number().int().optional().openapi({ description: '排序', example: 0 }),
   isActive: z.number().int().min(0).max(1).optional().openapi({ description: '是否启用', example: 1 }),
   managerId: z.number().int().positive().optional().openapi({ description: '部门负责人ID', example: 1 }),