# 组织架构层级调试指南

## 已完成的修改

### 1. 前端调试日志 (static/super_admin.html)

已在以下位置添加调试日志：

#### 位置 1: API 响应检查 (第 2602 行之后)
```javascript
console.log('=== 组织架构层级调试 ===');
console.log('API 返回树形结构:', JSON.stringify(response.data.tree || [], null, 2));
```

#### 位置 2: 扁平化节点检查 (第 2608 行之后)
```javascript
console.log('扁平化节点数量:', orgChartData.allNodes.length);
console.log('所有节点 level 值:');
orgChartData.allNodes.forEach(n => {
    console.log(`  [Level ${n.level}] ${n.name} (ID: ${n.id}, Parent: ${n.node.parent_id || 'root'})`);
});
```

#### 位置 3: 渲染时的 level 和缩进检查 (第 2703 行之后)
```javascript
console.log(`🔍 渲染节点: "${node.name}"`);
console.log(`   - level: ${level}`);
console.log(`   - indent: ${level * 30}px`);
console.log(`   - node.parent_id: ${node.parent_id || 'null'}`);
console.log(`   - node.unit_level: ${node.unit_level || 'undefined'}`);
console.log(`   - children 数量: ${node.children ? node.children.length : 0}`);
```

#### 位置 4: 渲染完成后的总结 (第 2622 行之后)
```javascript
console.log('=== 渲染完成 ===');
console.log('根节点数量:', tree.length);
console.log('总节点数量:', orgChartData.allNodes.length);
console.log('部门名称中包含"交通运输"的节点:');
orgChartData.allNodes
    .filter(n => n.name.includes('交通运输'))
    .forEach(n => console.log(`  - ${n.name} (Level: ${n.level})`));
console.log('部门名称中包含"三水"的节点:');
orgChartData.allNodes
    .filter(n => n.name.includes('三水'))
    .forEach(n => console.log(`  - ${n.name} (Level: ${n.level})`));
```

### 2. 数据库验证脚本 (verify_org_hierarchy.py)

创建了独立的验证脚本，可以检查数据库中的层级关系。

**注意**: 该脚本需要数据库连接，当前环境可能无法连接。

## 测试步骤

### 步骤 1: 清除浏览器缓存（重要！）

1. 在浏览器中按 `Ctrl + Shift + Delete` 打开清除缓存对话框
2. 选择"缓存的图片和文件"
3. 点击"清除数据"
4. 按 `Ctrl + F5` 强制刷新页面

### 步骤 2: 打开浏览器开发者工具

1. 访问 `/fs-ai-asistant/api/workflow/lawrisk/admin/super` 页面
2. 按 `F12` 打开开发者工具
3. 切换到 **Console（控制台）** 标签

### 步骤 3: 查看调试输出

在控制台中查找以下关键信息：

#### 3.1 API 返回的树形结构
```
=== 组织架构层级调试 ===
API 返回树形结构: [...]
```

检查：
- "三水区服务部门" 的父节点是否是 "市级服务部门"
- "佛山交通运输局" 的父节点是否是 "市级服务部门"
- 两者是否在同一层级（都是市级服务部门的直接子节点）

#### 3.2 扁平化节点列表
```
扁平化节点数量: XX
所有节点 level 值:
  [Level 0] 市级服务部门
  [Level 1] 三水区服务部门
  [Level 1] 佛山交通运输局
  ...
```

检查：
- "三水区服务部门" 的 level 是否为 1
- "佛山交通运输局" 的 level 是否为 1

#### 3.3 渲染时的缩进计算
```
🔍 渲染节点: "三水区服务部门"
   - level: 1
   - indent: 30px
🔍 渲染节点: "佛山交通运输局"
   - level: 1
   - indent: 30px
```

检查：
- 两者的 level 是否相同
- 两者的 indent 是否相同 (都是 30px)

#### 3.4 渲染完成后的总结
```
=== 渲染完成 ===
部门名称中包含"交通运输"的节点:
  - 佛山交通运输局 (Level: 1)
部门名称中包含"三水"的节点:
  - 三水区服务部门 (Level: 1)
  - 三水区交通局 (Level: 2)
  ...
```

### 步骤 4: 检查 Network 标签

1. 切换到 **Network（网络）** 标签
2. 刷新页面
3. 找到 `/admin/service-departments/tree` 请求
4. 点击查看响应数据

验证 JSON 结构：
```json
{
  "success": true,
  "data": {
    "tree": [
      {
        "name": "市级服务部门",
        "children": [
          {
            "name": "三水区服务部门",
            "parent_id": "市级服务部门的ID"
          },
          {
            "name": "佛山交通运输局",
            "parent_id": "市级服务部门的ID"
          }
        ]
      }
    ]
  }
}
```

## 预期结果

### 正确的情况

```
[Level 0] 市级服务部门
  [Level 1] 三水区服务部门          ← indent: 30px
  [Level 1] 佛山交通运输局          ← indent: 30px (与三水区服务部门同级)
```

### 错误的情况（如果问题存在）

```
[Level 0] 市级服务部门
  [Level 1] 三水区服务部门          ← indent: 30px
    [Level 2] 佛山交通运输局        ← indent: 60px (错误！多了一层缩进)
```

## 可能的问题诊断

### 问题 1: API 数据本身错误

**症状**: 控制台显示 "佛山交通运输局" 的 level 不是 1

**原因**: 数据库中的 parent_id 不正确

**解决方案**: 需要修复数据库数据

### 问题 2: 前端显示逻辑错误

**症状**: API 数据正确，但渲染时的 level 参数错误

**原因**: `renderOrgListNode` 函数的 level 传递有问题

**解决方案**: 检查递归调用逻辑

### 问题 3: 浏览器缓存

**症状**: 修改代码后问题仍然存在，但控制台显示的日志是正确的

**原因**: 浏览器缓存了旧的 JavaScript 代码

**解决方案**: 清除缓存并强制刷新（Ctrl + F5）

### 问题 4: 部门名称不匹配

**症状**: 数据库中没有 "佛山交通运输局"，只有 "佛山市交通运输局"（带"市"字）

**原因**: 用户看到的部门和数据库中的部门不是同一个

**解决方案**:
1. 确认用户访问的环境
2. 检查数据库中的实际部门名称
3. 如果需要，创建部门或重命名

## 下一步行动

根据调试结果，可能需要：

1. **如果 API 数据错误**: 运行 SQL 脚本修复数据库
2. **如果前端逻辑错误**: 修改 `static/super_admin.html` 中的渲染逻辑
3. **如果是缓存问题**: 清除浏览器缓存
4. **如果是数据不一致**: 检查环境配置，确认使用的是正确的数据库

## 相关文件

- `static/super_admin.html`: 前端页面（已添加调试日志）
- `lawrisk/api/v2.py`: API 路由 (`/admin/service-departments/tree`)
- `lawrisk/services/licensing_repo.py`: 树形结构构建逻辑
- `verify_org_hierarchy.py`: 数据库验证脚本

## 联系方式

如果问题持续存在，请提供：
1. 浏览器控制台的完整输出（截图或复制文本）
2. Network 标签中 `/admin/service-departments/tree` 的响应数据
3. 数据库中相关部门的信息（使用 SQL 查询）
