Ver código fonte

♻️ refactor(areas): 重构区域管理页面数据处理逻辑

- 移除未使用的handleSearchChange函数和convertToAreaNode函数
- 修改handleEdit、handleDelete和handleToggleStatusDialog方法,支持AreaNode类型参数
- 实现AreaNode到AreaResponse的类型转换逻辑
- 优化AreaForm组件的area属性传递,明确指定所需字段

🐛 fix(areas): 修复编辑对话框数据转换问题

- 确保在编辑、删除和状态切换操作中正确转换数据类型
- 为转换后的AreaResponse对象提供默认值,避免空值问题
yourname 4 meses atrás
pai
commit
204a5118d9
1 arquivos alterados com 41 adições e 22 exclusões
  1. 41 22
      src/client/admin/pages/Areas.tsx

+ 41 - 22
src/client/admin/pages/Areas.tsx

@@ -186,10 +186,6 @@ export const AreasPage: React.FC = () => {
     []
   );
 
-  // 处理搜索输入变化
-  const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {
-    debouncedSearch(e.target.value);
-  };
 
   // 处理筛选变化
   const handleFilterChange = (filterType: string, value: string) => {
@@ -231,34 +227,50 @@ export const AreasPage: React.FC = () => {
   };
 
   // 打开编辑对话框
-  const handleEdit = (area: AreaResponse) => {
-    setSelectedArea(area);
+  const handleEdit = (area: AreaNode) => {
+    // 将 AreaNode 转换为 AreaResponse
+    const areaResponse: AreaResponse = {
+      ...area,
+      isDeleted: 0,
+      createdAt: new Date().toISOString(),
+      updatedAt: new Date().toISOString(),
+      createdBy: null,
+      updatedBy: null
+    };
+    setSelectedArea(areaResponse);
     setIsEditDialogOpen(true);
   };
 
   // 打开删除对话框
-  const handleDelete = (area: AreaResponse) => {
-    setSelectedArea(area);
+  const handleDelete = (area: AreaNode) => {
+    // 将 AreaNode 转换为 AreaResponse
+    const areaResponse: AreaResponse = {
+      ...area,
+      isDeleted: 0,
+      createdAt: new Date().toISOString(),
+      updatedAt: new Date().toISOString(),
+      createdBy: null,
+      updatedBy: null
+    };
+    setSelectedArea(areaResponse);
     setIsDeleteDialogOpen(true);
   };
 
   // 打开状态切换对话框
-  const handleToggleStatusDialog = (area: AreaResponse) => {
-    setSelectedArea(area);
+  const handleToggleStatusDialog = (area: AreaNode) => {
+    // 将 AreaNode 转换为 AreaResponse
+    const areaResponse: AreaResponse = {
+      ...area,
+      isDeleted: 0,
+      createdAt: new Date().toISOString(),
+      updatedAt: new Date().toISOString(),
+      createdBy: null,
+      updatedBy: null
+    };
+    setSelectedArea(areaResponse);
     setIsStatusDialogOpen(true);
   };
 
-  // 转换 AreaResponse 为 AreaNode
-  const convertToAreaNode = (area: AreaResponse): AreaNode => {
-    return {
-      id: area.id,
-      name: area.name,
-      code: area.code,
-      level: area.level,
-      parentId: area.parentId,
-      isDisabled: area.isDisabled
-    };
-  };
 
   // 切换节点展开状态
   const handleToggleNode = (nodeId: number) => {
@@ -557,7 +569,14 @@ export const AreasPage: React.FC = () => {
           </DialogHeader>
           {selectedArea && (
             <AreaForm
-              area={selectedArea}
+              area={{
+                id: selectedArea.id,
+                parentId: selectedArea.parentId || 0,
+                name: selectedArea.name,
+                level: selectedArea.level,
+                code: selectedArea.code,
+                isDisabled: selectedArea.isDisabled
+              }}
               onSubmit={handleUpdateArea}
               isLoading={updateMutation.isPending}
               onCancel={() => {