打开管理员员工管理页面
/admin/employees点击员工的"详细信息"按钮
查看基本信息内容
点击"编辑基本信息"按钮
关闭面板
打开设计师组长大盘页面
/team-leader/dashboard点击设计师的"完整信息"按钮
查看"基本信息"标签页
切换到"项目负载"标签页
查看负载概况
查看负载详细日历
点击日历日期
点击"详细日历"按钮
查看请假明细
查看红色标记说明
查看能力问卷
切换月份
基本信息 → 项目负载
项目负载 → 基本信息
多次快速切换
渐变紫色主题
linear-gradient(135deg, #667eea 0%, #764ba2 100%)现代化卡片
0 2px 8px rgba(0, 0, 0, 0.05)清晰的视觉层次
响应式设计
平滑动画
直观的反馈
友好的交互
当前项目数 < 3:绿色(正常负载)
当前项目数 >= 3:橙色(高负载)
当前项目数 >= 5:红色(过载,不建议)
今天:橙色背景 (#fff3e0)
有项目:蓝色徽章 (#667eea)
高负载(2个以上):红色徽章 (#f44336)
非当月日期:灰色 (#fafafa)
在职:绿色徽章 (#e8f5e9)
已禁用:红色徽章 (#ffebee)
正常:绿色状态点
请假:红色背景
const employee = {
id: 'emp001',
name: '张三',
mobile: '13800138000',
userid: 'zhangsan',
roleName: '客服',
department: '客服部',
// 不提供 projectData、calendarData 等
};
预期:只能看到"基本信息"标签页,"项目负载"标签页内容为空或不显示
const employee = {
// 基本信息...
currentProjects: 4,
projectData: [...],
calendarData: {...},
leaveRecords: [...],
surveyCompleted: true,
surveyData: {...}
};
预期:两个标签页都有完整内容,可以自由切换
const employee = {
// ...
currentProjects: 6,
redMarkExplanation: '该设计师项目负载过高...'
};
预期:
const employee = {
// ...
surveyCompleted: false,
surveyData: null
};
预期:问卷区域显示"尚未完成能力问卷"提示
查看组件状态
// 在控制台输入
ng.probe($0).componentInstance
查看绑定的数据
ng.probe($0).componentInstance.employee
触发事件
ng.probe($0).componentInstance.switchTab('workload')
在组件方法中添加:
switchTab(tab: 'basic' | 'workload'): void {
console.log('🔄 切换标签:', tab);
this.activeTab = tab;
}
| 特性 | 原面板 | 新组件 |
|---|---|---|
| 布局 | 右侧固定宽度 | 右侧固定宽度 |
| 查看模式 | ✅ | ✅ |
| 编辑模式 | ✅ | ✅ |
| 项目负载 | ❌ | ✅ |
| 标签切换 | ❌ | ✅ |
| 样式主题 | 蓝灰色 | 渐变紫色 |
| 特性 | 原面板 | 新组件 |
|---|---|---|
| 负载概况 | ✅ | ✅ |
| 日历视图 | ✅ | ✅ |
| 请假明细 | ✅ | ✅ |
| 能力问卷 | ✅ | ✅ |
| 基本信息 | ❌ | ✅ |
| 编辑功能 | ❌ | ✅ |
| 标签切换 | ❌ | ✅ |
建议异步加载项目负载数据,避免一次性加载过多:
async viewEmployee(emp: Employee) {
// 1. 先显示基本信息
this.selectedEmployee = { ...basicInfo };
this.showPanel = true;
// 2. 异步加载项目负载数据
const projectData = await this.loadProjectData(emp.id);
const calendarData = await this.loadCalendarData(emp.id);
// 3. 更新完整信息
this.selectedEmployee = {
...this.selectedEmployee,
...projectData,
calendarData
};
}
只加载当前月份的日历数据:
handleMonthChange(direction: number) {
const newMonth = this.calculateNewMonth(direction);
this.loadCalendarData(employeeId, newMonth);
}
对于不常变化的数据(如问卷),可以缓存:
private surveyCache = new Map<string, any>();
async loadSurvey(employeeId: string) {
if (this.surveyCache.has(employeeId)) {
return this.surveyCache.get(employeeId);
}
const survey = await this.surveyService.getEmployeeSurvey(employeeId);
this.surveyCache.set(employeeId, survey);
return survey;
}
这个员工信息侧边栏组件提供了: ✅ 完整的员工信息展示(基本信息 + 项目负载) ✅ 灵活的标签切换设计 ✅ 优雅的交互体验 ✅ 不影响原有功能 ✅ 易于集成和使用
你可以根据实际需求逐步集成到项目中,享受更好的用户体验!🚀