From e92be973934cbeae1e70b8c7d960248c8eb6b758 Mon Sep 17 00:00:00 2001 From: peng Date: Tue, 4 Nov 2025 20:09:05 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=AE=A1=E7=90=86=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=20=E9=83=A8=E9=97=A8=E5=85=A8=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=BC=80=E5=8F=91=E5=AE=8C=E6=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/DepartmentDeleteDialog.tsx | 60 ++-------- .../components/DepartmentFormDialog.tsx | 113 ++++++++---------- .../department/components/DepartmentTree.tsx | 19 ++- .../components/departmentCreateApi.ts | 83 ++++++++++++- .../central-config/user/department/page.tsx | 60 ++++------ 5 files changed, 174 insertions(+), 161 deletions(-) diff --git a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentDeleteDialog.tsx b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentDeleteDialog.tsx index 3d8eb26..88abf32 100644 --- a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentDeleteDialog.tsx +++ b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentDeleteDialog.tsx @@ -35,57 +35,21 @@ export function DepartmentDeleteDialog({ -
-
- -
-
- 确认删除 -
-
+ 确认删除部门
- {deletingDepartment && ( -
- {/* 部门信息 */} -
- 🏢 -
-
{deletingDepartment.name}
-
部门编码:{deletingDepartment.code}
- {deletingDepartment.manager && ( -
- 负责人:{deletingDepartment.manager} -
- )} -
-
- - {/* 删除影响说明 */} -
-
- -
-
- 删除影响: -
-
    -
  • • 部门将永久删除,此操作不可恢复
  • -
  • • 部门下的所有相关信息将被清除
  • -
  • • 如有员工归属于此部门,需要重新分配
  • -
-
-
-
- - {/* 确认提示 */} -
-

- 确定要删除部门 {deletingDepartment.name} 吗? -

-
+ {deletingDepartment ? ( +
+

+ 确定要删除部门 {deletingDepartment.name} 吗? +

+

+ 此操作不可撤销,请谨慎操作。 +

+ ) : ( +

确定要删除选中的部门吗?

)} @@ -97,7 +61,7 @@ export function DepartmentDeleteDialog({ variant="destructive" onClick={handleConfirm} > - 确认删除 + 删除 diff --git a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentFormDialog.tsx b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentFormDialog.tsx index 6ba62dd..9f84e7f 100644 --- a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentFormDialog.tsx +++ b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentFormDialog.tsx @@ -7,7 +7,7 @@ 'use client'; -import { useState, useCallback } from 'react'; +import { useState, useCallback, useEffect } from 'react'; import { toast } from 'sonner'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; @@ -17,9 +17,10 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ import { Department, CreateDepartmentForm } from '../types'; import { createDepartment, + updateDepartment, transformCreateDepartmentData, debounce, - generateRandomOrderIndex, + getDefaultOrderIndex, } from './departmentCreateApi'; interface DepartmentFormDialogProps { @@ -47,43 +48,48 @@ export function DepartmentFormDialog({ email: '', description: '', status: 'active', - sort: generateRandomOrderIndex(), + sort: 0, parentId: parentDepartment?.id || '', level: parentDepartment ? (parentDepartment.level || 1) + 1 : 1, }); const [loading, setLoading] = useState(false); - // 当编辑部门或父部门变化时,重置表单数据 - useState(() => { - if (editingDepartment) { - setFormData({ - name: editingDepartment.name, - code: editingDepartment.code, - manager: editingDepartment.manager || '', - phone: editingDepartment.phone || '', - email: editingDepartment.email || '', - description: editingDepartment.description || '', - status: editingDepartment.status, - sort: editingDepartment.sort, - parentId: editingDepartment.parentId || '', - level: editingDepartment.level, - }); - } else { - setFormData({ - name: '', - code: '', - manager: '', - phone: '', - email: '', - description: '', - status: 'active', - sort: generateRandomOrderIndex(), - parentId: parentDepartment?.id || '', - level: parentDepartment ? (parentDepartment.level || 1) + 1 : 1, - }); + // 当弹窗打开状态变化时,处理表单数据 + useEffect(() => { + if (open) { + // 弹窗打开时,根据编辑状态初始化表单 + if (editingDepartment) { + // 编辑模式:带入所有部门数据 + setFormData({ + name: editingDepartment.name || '', + code: editingDepartment.code || '', + manager: editingDepartment.manager || '', + phone: editingDepartment.phone || '', + email: editingDepartment.email || '', + description: editingDepartment.description || '', + status: editingDepartment.status || 'active', + sort: editingDepartment.sort || 0, + parentId: editingDepartment.parentId || '', + level: editingDepartment.level || 1, + }); + } else { + // 新增模式:清空表单,使用默认值 + setFormData({ + name: '', + code: '', + manager: '', + phone: '', + email: '', + description: '', + status: 'active', + sort: 0, + parentId: parentDepartment?.id || '', + level: parentDepartment ? (parentDepartment.level || 1) + 1 : 1, + }); + } } - }); + }, [open, editingDepartment, parentDepartment]); const handleInputChange = (field: keyof CreateDepartmentForm, value: string | number) => { setFormData(prev => ({ ...prev, [field]: value })); @@ -126,20 +132,6 @@ export function DepartmentFormDialog({ refreshDepartmentTree(); } - // 重置表单 - setFormData({ - name: '', - code: '', - manager: '', - phone: '', - email: '', - description: '', - status: 'active', - sort: generateRandomOrderIndex(), - parentId: parentDepartment?.id || '', - level: parentDepartment ? (parentDepartment.level || 1) + 1 : 1, - }); - } catch (error) { // 失败处理 - 不关闭页面 console.error('创建部门失败:', error); @@ -158,19 +150,27 @@ export function DepartmentFormDialog({ return; } - // 如果是编辑模式,使用原有的onSave逻辑 + // 如果是编辑模式,使用API调用 if (editingDepartment) { setLoading(true); try { - await onSave(formData); + // 调用更新部门API + await updateDepartment(editingDepartment.id, formData); + + // 成功处理 toast.success('部门更新成功'); onOpenChange(false); + + // 刷新部门树 if (refreshDepartmentTree) { refreshDepartmentTree(); } + } catch (error) { - console.error('Failed to update department:', error); - toast.error('部门更新失败'); + // 失败处理 - 不关闭页面 + console.error('更新部门失败:', error); + const errorMessage = error instanceof Error ? error.message : '部门更新失败'; + toast.error(errorMessage); } finally { setLoading(false); } @@ -183,19 +183,6 @@ export function DepartmentFormDialog({ const handleClose = () => { if (!loading) { onOpenChange(false); - // 重置表单 - setFormData({ - name: '', - code: '', - manager: '', - phone: '', - email: '', - description: '', - status: 'active', - sort: generateRandomOrderIndex(), - parentId: parentDepartment?.id || '', - level: parentDepartment ? (parentDepartment.level || 1) + 1 : 1, - }); } }; diff --git a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentTree.tsx b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentTree.tsx index cf15d18..c7507c8 100644 --- a/crop-x/src/app/(app)/central-config/user/department/components/DepartmentTree.tsx +++ b/crop-x/src/app/(app)/central-config/user/department/components/DepartmentTree.tsx @@ -149,16 +149,15 @@ export function DepartmentTree({ {/* 操作按钮 */}
- {level < 1 && ( - - )} + {/* 所有节点都可以添加子部门 */} +