Browse Source

📝 docs(data): add department data initialization SQL script
- 创建部门数据初始化SQL脚本,包含总经办、财务部等8个部门基础数据
- 包含层级关系设置和负责人设置的注释说明

♻️ refactor(admin): optimize department tree selection component
- 移除Departments.tsx中冗余的部门树构建代码
- 引入LazyDepartmentTreeSelect组件实现懒加载部门选择功能
- 简化部门选择逻辑,提升页面加载性能

yourname 8 months ago
parent
commit
e343799d27
2 changed files with 24 additions and 34 deletions
  1. 19 0
      docs/department_data_init.sql
  2. 5 34
      src/client/admin/pages/Departments.tsx

+ 19 - 0
docs/department_data_init.sql

@@ -0,0 +1,19 @@
+-- 部门数据初始化SQL脚本
+-- 创建日期: 2025-07-20
+
+INSERT INTO department (id, name, code, sort_order, is_active, created_at, updated_at) VALUES
+(1, '总经办', 'GM', 1, 1, NOW(), NOW()),
+(2, '财务部', 'FIN', 2, 1, NOW(), NOW()),
+(3, '人力资源部', 'HR', 3, 1, NOW(), NOW()),
+(4, '营销中心', 'MKT', 4, 1, NOW(), NOW()),
+(5, '合作伙伴', 'PARTNER', 5, 1, NOW(), NOW()),
+(6, '市场部', 'MARKET', 6, 1, NOW(), NOW()),
+(7, '售前支持部', 'PRE_SALES', 7, 1, NOW(), NOW()),
+(8, '销售部', 'SALES', 8, 1, NOW(), NOW());
+
+-- 设置部门层级关系(假设所有部门都是顶级部门)
+-- 如果需要设置父子关系,请修改parent_id字段值
+-- UPDATE department SET parent_id = NULL;
+
+-- 可选:如果需要为部门设置负责人,请取消下面的注释并修改manager_id值
+-- UPDATE department SET manager_id = 1 WHERE id = 1;

+ 5 - 34
src/client/admin/pages/Departments.tsx

@@ -1,8 +1,9 @@
 import React, { useState } from 'react';
-import { Table, Button, Modal, Form, Input, TreeSelect, Switch, message, Space, Popconfirm } from 'antd';
+import { Table, Button, Modal, Form, Input, Switch, message, Space, Popconfirm } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import { departmentsClient } from '@/client/api';
+import LazyDepartmentTreeSelect from '@/client/admin/components/LazyDepartmentTreeSelect';
 
 const Departments: React.FC = () => {
   const [form] = Form.useForm();
@@ -71,35 +72,7 @@ const Departments: React.FC = () => {
     }
   });
 
-  // 构建部门树形数据
-  const buildDepartmentTree = (departments: any[]) => {
-    const tree: any[] = [];
-    const map = new Map<number, any>();
-
-    // 创建节点映射
-    departments.forEach(dept => {
-      map.set(dept.id, {
-        title: dept.name,
-        value: dept.id,
-        key: dept.id.toString(),
-        children: []
-      });
-    });
-
-    // 构建树形结构
-    departments.forEach(dept => {
-      const node = map.get(dept.id)!;
-      if (dept.parentId && map.has(dept.parentId)) {
-        const parent = map.get(dept.parentId)!;
-        if (!parent.children) parent.children = [];
-        parent.children.push(node);
-      } else {
-        tree.push(node);
-      }
-    });
-
-    return tree;
-  };
+  // 无需再构建完整的部门树,使用懒加载组件
 
   // 表格列配置
   const columns = [
@@ -203,7 +176,7 @@ const Departments: React.FC = () => {
     }
   };
 
-  const departmentTree = departmentsData ? buildDepartmentTree(departmentsData.data) : [];
+  // 使用懒加载部门选择组件,无需预先构建树形数据
 
   return (
     <div className="p-6">
@@ -265,11 +238,9 @@ const Departments: React.FC = () => {
             label="上级部门"
             name="parentId"
           >
-            <TreeSelect
-              treeData={departmentTree}
+            <LazyDepartmentTreeSelect
               placeholder="请选择上级部门"
               allowClear
-              treeDefaultExpandAll
             />
           </Form.Item>