已成功在管理员端的员工管理页面 (/admin/employees) 中集成了新的可复用员工信息面板组件 EmployeeInfoPanelComponent。
employees.ts)import { EmployeeInfoPanelComponent, EmployeeFullInfo } from '../../../shared/components/employee-info-panel';
@Component({
selector: 'app-employees',
standalone: true,
imports: [CommonModule, FormsModule, EmployeeInfoPanelComponent],
templateUrl: './employees.html',
styleUrls: ['./employees.scss']
})
// 新的员工信息面板
showEmployeeInfoPanel = false;
selectedEmployeeForPanel: EmployeeFullInfo | null = null;
viewEmployee 方法// 查看详情(使用新的员工信息面板)
viewEmployee(emp: Employee) {
// 将 Employee 转换为 EmployeeFullInfo 格式
this.selectedEmployeeForPanel = {
id: emp.id,
name: emp.name,
realname: emp.realname,
mobile: emp.mobile,
userid: emp.userid,
roleName: emp.roleName,
department: emp.department,
departmentId: emp.departmentId,
isDisabled: emp.isDisabled,
createdAt: emp.createdAt,
avatar: emp.avatar,
email: emp.email,
position: emp.position,
gender: emp.gender,
level: emp.level,
skills: emp.skills,
joinDate: emp.joinDate,
workload: emp.workload
};
this.showEmployeeInfoPanel = true;
}
关闭面板
closeEmployeeInfoPanel() {
this.showEmployeeInfoPanel = false;
this.selectedEmployeeForPanel = null;
}
更新员工信息
async updateEmployeeInfo(updates: Partial<EmployeeFullInfo>) {
try {
await this.employeeService.updateEmployee(updates.id!, {
name: updates.name,
mobile: updates.mobile,
roleName: updates.roleName,
departmentId: updates.departmentId,
isDisabled: updates.isDisabled,
data: {
realname: updates.realname
}
});
console.log('✅ 员工信息已更新(从新面板)', updates);
await this.loadEmployees();
this.closeEmployeeInfoPanel();
alert('员工信息更新成功!');
} catch (error) {
console.error('更新员工失败:', error);
alert('更新员工失败,请重试');
}
}
启用/禁用员工
async toggleEmployeeFromPanel(emp: EmployeeFullInfo) {
const action = emp.isDisabled ? '启用' : '禁用';
if (!confirm(`确定要${action}员工 "${emp.name}" 吗?`)) {
return;
}
try {
await this.employeeService.toggleEmployee(emp.id, !emp.isDisabled);
await this.loadEmployees();
// 更新面板中的员工信息
if (this.selectedEmployeeForPanel?.id === emp.id) {
this.selectedEmployeeForPanel = {
...this.selectedEmployeeForPanel,
isDisabled: !emp.isDisabled
};
}
alert(`${action}成功!`);
} catch (error) {
console.error(`${action}员工失败:`, error);
alert(`${action}员工失败,请重试`);
}
}
employees.html)<!-- 新的员工信息面板 -->
<app-employee-info-panel
[visible]="showEmployeeInfoPanel"
[employeeInfo]="selectedEmployeeForPanel"
[panelMode]="'admin'"
(close)="closeEmployeeInfoPanel()"
(updateEmployee)="updateEmployeeInfo($event)"
(toggleEmployee)="toggleEmployeeFromPanel($event)"
></app-employee-info-panel>
<!-- 侧边面板(旧版本,保留用于向后兼容) -->
<div class="side-panel" [class.open]="showPanel" style="display: none;">
<!-- 旧面板内容被隐藏,保留代码以防需要回退 -->
</div>
visible: boolean - 控制面板显示/隐藏employeeInfo: EmployeeFullInfo | null - 员工完整信息panelMode: 'admin' | 'leader' - 面板模式(管理员或组长)close: EventEmitter<void> - 关闭面板事件updateEmployee: EventEmitter<Partial<EmployeeFullInfo>> - 更新员工信息事件toggleEmployee: EventEmitter<EmployeeFullInfo> - 启用/禁用员工事件查看员工详情
编辑员工信息
顶部标签导航
display: none)# 启动开发服务器
cd yss-project
npm start
访问 http://localhost:4200/admin/employees,测试以下功能:
| 功能 | 旧版本侧边面板 | 新版本 EmployeeInfoPanel |
|---|---|---|
| 查看详情 | ✅ | ✅ |
| 编辑信息 | ✅ | ✅ |
| 标签导航 | ❌ | ✅ 顶部标签切换 |
| 可复用性 | ❌ 耦合在页面中 | ✅ 独立组件,可在多处使用 |
| 项目负载视图 | ❌ | ✅ 支持(组长模式) |
| 能力问卷 | ❌ | ✅ 支持(组长模式) |
| 代码维护 | 🔶 分散在多个页面 | ✅ 集中在一个组件 |
组件源文件:
yss-project/src/app/shared/components/employee-info-panel/employee-info-panel.component.tsyss-project/src/app/shared/components/employee-info-panel/employee-info-panel.component.htmlyss-project/src/app/shared/components/employee-info-panel/employee-info-panel.component.scssyss-project/src/app/shared/components/employee-info-panel/index.ts集成文件:
yss-project/src/app/pages/admin/employees/employees.tsyss-project/src/app/pages/admin/employees/employees.html文档:
yss-project/src/app/shared/components/employee-info-panel/README.mdyss-project/src/app/shared/components/employee-info-panel/USAGE_EXAMPLE.mdyss-project/src/app/shared/components/employee-info-panel/DEMO_GUIDE.mdEmployee 接口和 EmployeeFullInfo 接口的字段匹配panelMode 属性区分管理员和组长视图✅ 完成:管理员端员工信息面板集成
✅ 保留:旧代码向后兼容
✅ 文档:完整的集成和测试文档
📝 待办:在组长端也集成这个组件(可选)
📝 待办:完整测试后移除旧代码(可选)
更新时间:2025年11月7日
更新人:Claude AI Assistant
版本:v1.0