实现“js 公司组织架构图”的步骤

概述

在这篇文章中,我们将介绍如何使用 JavaScript 实现一个公司组织架构图。我们将使用 HTML、CSS 和 JavaScript 来创建一个交互式的组织架构图,以展示公司的不同部门、职位和人员关系。

1. 准备工作

在开始之前,我们需要创建一个基本的 HTML 页面,并引入必要的 CSS 和 JavaScript 文件。以下是一个简单的 HTML 模板:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>公司组织架构图</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div id="orgChart"></div>

  <script src="script.js"></script>
</body>
</html>

2. 创建组织架构图容器

首先,我们需要创建一个容器来放置我们的组织架构图。我们可以使用一个带有特定 ID 的 <div> 元素来实现这一点。将以下代码添加到 HTML 文件的 <body> 中:

<div id="orgChart"></div>

3. 绘制组织架构图

接下来,我们将使用 JavaScript 来动态创建和绘制组织架构图。我们可以使用一个数组来表示公司的不同部门、职位和人员关系。以下是一个示例数组,您可以根据自己的需求进行修改和扩展:

const orgData = [
  { id: 1, name: 'CEO', parentId: null },
  { id: 2, name: 'CTO', parentId: 1 },
  { id: 3, name: 'CFO', parentId: 1 },
  { id: 4, name: 'Manager', parentId: 2 },
  { id: 5, name: 'Engineer', parentId: 4 },
  { id: 6, name: 'Accountant', parentId: 3 }
];

4. 使用递归构建组织架构图

我们可以使用递归函数来构建组织架构图。递归函数将遍历组织数据,并在每个节点上创建相应的 HTML 元素。以下是递归函数的示例代码:

function buildOrgChart(data, parentId, container) {
  const children = data.filter(item => item.parentId === parentId);

  if (children.length === 0) {
    return;
  }

  const ul = document.createElement('ul');

  children.forEach(child => {
    const li = document.createElement('li');
    li.textContent = child.name;
    ul.appendChild(li);

    buildOrgChart(data, child.id, li);
  });

  container.appendChild(ul);
}

const orgChartContainer = document.getElementById('orgChart');
buildOrgChart(orgData, null, orgChartContainer);

5. 样式化组织架构图

最后,我们可以使用 CSS 来样式化组织架构图。以下是一个简单的 CSS 样式表示例,您可以根据自己的喜好进行修改和扩展:

ul {
  list-style: none;
  padding-left: 20px;
}

li {
  margin-bottom: 10px;
}

完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>公司组织架构图</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div id="orgChart"></div>

  <script>
    const orgData = [
      { id: 1, name: 'CEO', parentId: null },
      { id: 2, name: 'CTO', parentId: 1 },
      { id: 3, name: 'CFO', parentId: 1 },
      { id: 4, name: 'Manager', parentId: 2 },
      { id: 5, name: 'Engineer', parentId: 4 },
      { id: 6, name: 'Accountant', parentId: 3 }
    ];

    function buildOrgChart(data, parentId, container) {
      const children = data.filter(item => item.parentId === parentId);

      if (children.length === 0) {
        return;
      }

      const ul = document.createElement('