<app-employee-detail-panel>症状: employeeDetailForTeamLeader 显示为 undefined
已添加的调试措施: 详细的控制台日志
cd yss-project
npm start
访问:http://localhost:4200/admin/employees
按 F12 打开开发者工具
选择一个角色为"组员"或"组长"的员工,点击查看详情
应该看到的日志顺序:
🚀 [Employees] 开始打开员工信息面板: 张三 (xxx)
🔄 [Employees] 预加载员工 xxx 的完整数据...
✅ [Employees] 项目数据加载完成: { currentProjects: 3, ongoingProjects: 3, ... }
📅 [Employees] 日历数据生成完成: { days: 42, 有项目的天数: 15 }
📝 [Employees] 问卷数据加载完成: { completed: true, answers: 12 }
🎯 [Employees] 完整数据准备完成,打开面板: { currentProjects: 3, projectData: 3, ... }
✅ [Employees] 面板已显示
🔍 [employeeDetailForTeamLeader] 开始转换: { 有employee: true, activeTab: 'basic', visible: true }
✅ [employeeDetailForTeamLeader] 转换完成: { name: '张三', currentProjects: 3, ... }
点击面板顶部的"项目负载"标签
应该看到的日志:
🔍 [employeeDetailForTeamLeader] 开始转换: { 有employee: true, activeTab: 'workload', visible: true }
✅ [employeeDetailForTeamLeader] 转换完成: { name: '张三', currentProjects: 3, ... }
日志显示:
⚠️ [employeeDetailForTeamLeader] employee is null/undefined
原因: selectedEmployeeForPanel 未正确赋值
解决方案: 检查 employees.ts 的 viewEmployee() 方法,确保 this.selectedEmployeeForPanel 被正确赋值
日志显示:
❌ [Employees] 加载员工数据失败: Error: ...
原因: 后端数据查询失败
解决方案:
employeeService.getEmployeeWorkload() 方法日志显示:
Error: NG0304: 'app-employee-detail-panel' is not a known element
原因: EmployeeDetailPanelComponent 未正确导入
解决方案: 检查 employee-info-panel.component.ts 的 imports 数组:
imports: [
CommonModule,
FormsModule,
DesignerCalendarComponent,
EmployeeDetailPanelComponent // ⭐ 确保这一行存在
]
日志显示:
✅ [employeeDetailForTeamLeader] 转换完成: {
name: '张三',
currentProjects: 0, // ⚠️ 应该是 3
hasCalendarData: false, // ⚠️ 应该是 true
hasSurveyData: false
}
原因: employee 对象缺少必要字段
解决方案: 检查 employees.ts 的 viewEmployee() 方法,确保以下字段被赋值:
this.selectedEmployeeForPanel = {
...baseData,
currentProjects: wl.currentProjects || 0, // ⭐ 确保有值
projectData: coreProjects, // ⭐ 确保有值
calendarData: calendarData, // ⭐ 确保有值
surveyCompleted: surveyInfo.completed,
surveyData: surveyInfo.data
};
当一切正常时,你应该看到:
✅ [Employees] 面板已显示
✅ [employeeDetailForTeamLeader] 转换完成: {
name: '张三',
currentProjects: 3,
hasCalendarData: true,
hasSurveyData: true
}
在 employee-info-panel.component.ts 的 ngOnInit 中添加:
ngOnInit(): void {
console.log('📦 [EmployeeInfoPanel] 初始化:', {
有employee: !!this.employee,
visible: this.visible,
employee数据: this.employee
});
}
然后在 ngOnChanges 中添加:
ngOnChanges(changes: SimpleChanges): void {
if (changes['visible'] && !this.visible) {
this.resetPanel();
}
if (changes['employee'] && this.employee) {
console.log('✅ [ngOnChanges] employee 已更新:', {
name: this.employee.name,
realname: this.employee.realname,
currentProjects: this.employee.currentProjects,
hasProjectData: !!this.employee.projectData,
projectDataLength: this.employee.projectData?.length,
hasCalendarData: !!this.employee.calendarData,
hasSurveyData: !!this.employee.surveyData
});
this.resetFormModel();
}
}
这将帮助你看到 employee 输入何时更新,以及更新的内容是什么。
如果问题仍然存在,请提供:
ng version)如果一切正常,恭喜!你已经成功实现了:
下一步: 删除备份文件和旧代码,享受清爽的代码库! 🚀