291 lines
8.4 KiB
Markdown
291 lines
8.4 KiB
Markdown
# 组织架构层级调试实施总结
|
|
|
|
## ✅ 已完成的工作
|
|
|
|
### 1. 前端调试日志增强
|
|
|
|
**文件**: `static/super_admin.html`
|
|
|
|
在以下关键位置添加了详细的调试日志:
|
|
|
|
#### 位置 A - API 响应验证 (第 2602 行之后)
|
|
```javascript
|
|
console.log('=== 组织架构层级调试 ===');
|
|
console.log('API 返回树形结构:', JSON.stringify(response.data.tree || [], null, 2));
|
|
```
|
|
**用途**: 验证后端返回的原始数据结构是否正确
|
|
|
|
#### 位置 B - 扁平化数据验证 (第 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'})`);
|
|
});
|
|
```
|
|
**用途**: 检查 `flattenTree` 函数处理后的 level 值是否正确
|
|
|
|
#### 位置 C - 渲染时实时跟踪 (第 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}`);
|
|
```
|
|
**用途**: 实时跟踪每个节点渲染时的参数,找出 level 计算错误的具体位置
|
|
|
|
#### 位置 D - 渲染完成总结 (第 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`
|
|
|
|
创建了独立的 Python 脚本来验证数据库中的层级关系:
|
|
|
|
**功能**:
|
|
- 构建完整的组织架构树
|
|
- 打印层级树形结构
|
|
- 验证关键部门("佛山交通运输局"、"三水区服务部门")的层级
|
|
- 检查两者是否同级(父节点相同)
|
|
- 导出 JSON 格式的树形结构用于对比
|
|
|
|
**使用方法**:
|
|
```bash
|
|
python verify_org_hierarchy.py
|
|
```
|
|
|
|
**注意**: 当前环境可能无法连接数据库,需要在实际运行环境中使用。
|
|
|
|
### 3. 调试指南文档
|
|
|
|
**文件**:
|
|
- `FRONTEND_DEBUG_GUIDE.md` - 详细的调试步骤指南
|
|
- `HIERARCHY_DEBUG_QUICK_REF.md` - 快速参考卡片
|
|
|
|
## 🔍 如何使用这些调试功能
|
|
|
|
### 测试流程
|
|
|
|
1. **清除浏览器缓存** (重要!)
|
|
- 按 `Ctrl + Shift + Delete`
|
|
- 选择"缓存的图片和文件"
|
|
- 点击"清除数据"
|
|
|
|
2. **强制刷新页面**
|
|
- 按 `Ctrl + F5`
|
|
|
|
3. **打开开发者工具**
|
|
- 按 `F12`
|
|
- 切换到 **Console** 标签
|
|
|
|
4. **查找调试输出**
|
|
- 在控制台中搜索关键词:
|
|
- `"三水区服务部门"`
|
|
- `"佛山交通运输局"`
|
|
- `"交通运输"` (查看所有相关部门)
|
|
|
|
5. **分析结果**
|
|
|
|
**✅ 正确的输出示例**:
|
|
```
|
|
所有节点 level 值:
|
|
[Level 0] 市级服务部门
|
|
[Level 1] 三水区服务部门 ✅
|
|
[Level 1] 佛山交通运输局 ✅
|
|
```
|
|
|
|
```
|
|
🔍 渲染节点: "三水区服务部门"
|
|
- level: 1
|
|
- indent: 30px
|
|
🔍 渲染节点: "佛山交通运输局"
|
|
- level: 1
|
|
- indent: 30px
|
|
```
|
|
|
|
**❌ 错误的输出示例**:
|
|
```
|
|
所有节点 level 值:
|
|
[Level 1] 三水区服务部门 ✅
|
|
[Level 2] 佛山交通运输局 ❌ (应该是 Level 1)
|
|
```
|
|
|
|
### 根据输出结果诊断问题
|
|
|
|
#### 情况 1: API 数据正确,前端显示正确
|
|
```
|
|
✅ 问题已解决!可能是浏览器缓存导致的。
|
|
```
|
|
|
|
#### 情况 2: API 数据错误
|
|
```
|
|
症状: 控制台显示 "佛山交通运输局" 的 level 不是 1
|
|
原因: 数据库中的 parent_id 不正确
|
|
解决: 需要运行 SQL 脚本修复数据库
|
|
```
|
|
|
|
**修复 SQL**:
|
|
```sql
|
|
-- 步骤 1: 查看 "佛山交通运输局" 的当前状态
|
|
SELECT id, name, parent_id, unit_level
|
|
FROM service_departments
|
|
WHERE name LIKE '%交通运输%';
|
|
|
|
-- 步骤 2: 查看 "市级服务部门" 的 ID
|
|
SELECT id, name, code
|
|
FROM service_departments
|
|
WHERE code = 'FSSJSJ';
|
|
|
|
-- 步骤 3: 如果 parent_id 不正确,更新它
|
|
UPDATE service_departments
|
|
SET parent_id = '市级服务部门的ID'
|
|
WHERE name = '佛山交通运输局';
|
|
|
|
-- 步骤 4: 验证更新
|
|
SELECT
|
|
sd.name,
|
|
parent.name as parent_name,
|
|
sd.unit_level
|
|
FROM service_departments sd
|
|
LEFT JOIN service_departments parent ON sd.parent_id = parent.id
|
|
WHERE sd.name LIKE '%交通运输%' OR sd.name LIKE '%三水%'
|
|
ORDER BY sd.name;
|
|
```
|
|
|
|
#### 情况 3: API 数据正确,但前端显示错误
|
|
```
|
|
症状: 控制台显示 level 正确,但页面显示的缩进不一致
|
|
原因: 前端渲染逻辑问题
|
|
解决: 检查 renderOrgListNode 函数的 level 参数传递
|
|
```
|
|
|
|
#### 情况 4: 部门名称不匹配
|
|
```
|
|
症状: 控制台显示 "佛山市交通运输局" (带"市"字)
|
|
原因: 用户看到的部门和数据库中的部门名称不一致
|
|
解决:
|
|
1. 确认用户访问的环境
|
|
2. 检查数据库中实际的部门名称
|
|
3. 如果需要,重命名或创建部门
|
|
```
|
|
|
|
## 📊 问题诊断决策树
|
|
|
|
```
|
|
开始
|
|
│
|
|
├─ 清除缓存并强制刷新
|
|
│ │
|
|
│ ├─ 问题解决? → ✅ 完成 (是浏览器缓存)
|
|
│ │
|
|
│ └─ 问题仍存在 → 继续诊断
|
|
│
|
|
├─ 查看控制台日志
|
|
│ │
|
|
│ ├─ API 数据错误?
|
|
│ │ └─ 是 → 运行 SQL 修复数据库
|
|
│ │
|
|
│ ├─ level 计算正确?
|
|
│ │ └─ 是 → ✅ 完成 (前端显示正确)
|
|
│ │
|
|
│ ├─ indent 计算正确?
|
|
│ │ └─ 是 → ✅ 完成 (前端显示正确)
|
|
│ │
|
|
│ └─ 前端渲染问题 → 检查 renderOrgListNode 函数
|
|
│
|
|
└─ 验证数据库
|
|
│
|
|
└─ 运行 verify_org_hierarchy.py
|
|
│
|
|
├─ 层级正确? → ✅ 完成
|
|
│
|
|
└─ 层级错误 → 修复数据库
|
|
```
|
|
|
|
## 📁 相关文件清单
|
|
|
|
### 前端文件
|
|
- `static/super_admin.html` - 主页面 (已添加调试日志)
|
|
|
|
### 后端文件
|
|
- `lawrisk/api/v2.py` - API 路由 (第 545-556 行)
|
|
- `lawrisk/services/licensing_repo.py` - 数据访问层 (第 2190-2224 行)
|
|
|
|
### 调试工具
|
|
- `verify_org_hierarchy.py` - 数据库验证脚本
|
|
|
|
### 文档
|
|
- `FRONTEND_DEBUG_GUIDE.md` - 详细调试指南
|
|
- `HIERARCHY_DEBUG_QUICK_REF.md` - 快速参考
|
|
- `IMPLEMENTATION_SUMMARY.md` - 本文件
|
|
|
|
## 🎯 预期结果
|
|
|
|
### 正确的层级结构
|
|
|
|
```
|
|
市级服务部门 (Level 0)
|
|
├── 三水区服务部门 (Level 1) ← 缩进 30px
|
|
│ ├── 三水区交通局 (Level 2) ← 缩进 60px
|
|
│ └── 三水区水利局 (Level 2) ← 缩进 60px
|
|
├── 佛山交通运输局 (Level 1) ← 缩进 30px ✅ 与三水区服务部门同级
|
|
├── 佛山人力资源和社会保障局 (Level 1) ← 缩进 30px
|
|
└── 佛山住房城乡规划建设局 (Level 1) ← 缩进 30px
|
|
```
|
|
|
|
### 验证清单
|
|
|
|
- [ ] 清除浏览器缓存
|
|
- [ ] 强制刷新页面 (Ctrl + F5)
|
|
- [ ] 打开开发者工具 (F12)
|
|
- [ ] 查看控制台输出
|
|
- [ ] 确认 API 数据正确
|
|
- [ ] 确认 level 计算正确
|
|
- [ ] 确认 indent 计算正确
|
|
- [ ] 确认页面显示正确
|
|
- [ ] 测试拖拽功能
|
|
- [ ] 测试搜索功能
|
|
- [ ] 测试展开/折叠功能
|
|
|
|
## 💡 提示
|
|
|
|
1. **首次测试必须清除缓存**,否则可能看到旧的代码行为
|
|
2. **控制台输出非常详细**,可以使用搜索功能快速定位
|
|
3. **如果问题仍存在**,请提供完整的控制台输出
|
|
4. **数据库修复需要谨慎**,建议先备份数据库
|
|
|
|
## 🚀 下一步行动
|
|
|
|
1. **立即测试**: 按照"测试流程"步骤操作
|
|
2. **记录结果**: 截图或复制控制台输出
|
|
3. **根据结果诊断**: 参考"根据输出结果诊断问题"部分
|
|
4. **实施修复**: 根据诊断结果选择相应的修复方案
|
|
5. **验证修复**: 重新测试确认问题已解决
|
|
|
|
---
|
|
|
|
**问题?** 请参考:
|
|
- `FRONTEND_DEBUG_GUIDE.md` - 详细的分步指南
|
|
- `HIERARCHY_DEBUG_QUICK_REF.md` - 快速参考表格
|
|
|
|
**需要帮助?** 请提供:
|
|
1. 浏览器控制台的完整输出
|
|
2. Network 标签中 `/admin/service-departments/tree` 的响应
|
|
3. 页面显示的截图
|