日期: 2025-10-24
需求: 组长端点击项目卡片时,能够跳转到管理员端的真实项目详情页
组长端 (/team-leader/dashboard) 的项目看板中:
/admin/project-detail/{projectId}/order/admin/project-detail/iKvYck89zE/order/admin/project-detail/7EFEsEd0ht/order/admin/project-detail/abc123xyz/order文件: src/app/pages/team-leader/dashboard/dashboard.html
位置: 第227-258行(项目卡片区域)
修改内容:
<!-- ❌ 旧代码 -->
<h4 [routerLink]="['/team-leader/project-detail', project.id]"
(click)="$event.stopPropagation()">
{{ project.name }}
</h4>
<!-- ✅ 新代码 -->
<h4 [routerLink]="['/admin/project-detail', project.id, 'order']"
(click)="$event.stopPropagation()">
{{ project.name }}
</h4>
说明:
/team-leader/project-detail/:id 改为管理员端路由order(订单分配阶段)$event.stopPropagation() 防止触发卡片的点击事件<div class="project-card"
(click)="viewProjectDetails(project.id)"
[class.overdue]="project.isOverdue"
[class.high-urgency]="project.urgency === 'high'"
[class.due-soon]="project.dueSoon && !project.isOverdue">
<!-- ... 卡片内容 ... -->
</div>
说明:
viewProjectDetails()project.id<button (click)="viewProjectDetails(project.id); $event.stopPropagation()"
class="btn-view">
查看详情
</button>
文件: src/app/pages/team-leader/dashboard/dashboard.ts
位置: 第2471-2514行(文件末尾)
新增方法:
/**
* 查看项目详情 - 跳转到管理员端真实项目详情页
*/
viewProjectDetails(projectId: string): void {
if (!projectId) {
console.warn('项目ID为空,无法跳转');
return;
}
// 跳转到管理员端的项目详情页,使用真实的项目ID
// 路由格式:/admin/project-detail/:projectId/order
this.router.navigate(['/admin/project-detail', projectId, 'order']);
console.log('✅ 跳转到项目详情页:', projectId);
}
功能:
projectId 是否为空Router.navigate() 跳转到管理员端项目详情页/**
* 快速分配项目
*/
quickAssignProject(projectId: string): void {
console.log('快速分配项目:', projectId);
// TODO: 实现快速分配逻辑
alert('快速分配功能待实现');
}
用途:
/**
* 打开智能推荐弹窗
*/
openSmartMatch(project: any): void {
console.log('打开智能推荐:', project);
// TODO: 实现智能推荐逻辑
alert('智能推荐功能待实现');
}
用途:
/**
* 质量评审
*/
reviewProjectQuality(projectId: string, quality: 'excellent' | 'qualified' | 'unqualified'): void {
console.log('质量评审:', projectId, quality);
// TODO: 实现质量评审逻辑
const qualityText = quality === 'excellent' ? '优秀' : quality === 'qualified' ? '合格' : '不合格';
alert(`已将项目评为${qualityText}`);
}
用途:
✅ src/app/pages/team-leader/dashboard/dashboard.html
routerLink/team-leader/project-detail/:id 改为 /admin/project-detail/:id/order✅ src/app/pages/team-leader/dashboard/dashboard.ts
viewProjectDetails() 方法(第2471-2485行)quickAssignProject() 方法(第2487-2494行)openSmartMatch() 方法(第2496-2503行)reviewProjectQuality() 方法(第2505-2513行)src/app/app.routes.ts - 管理员端项目详情页路由配置src/modules/project/pages/project-detail/project-detail.component.ts - 项目详情页组件组长可以通过以下方式进入项目详情页:
| 入口 | 触发方式 | HTML元素 |
|---|---|---|
| ✅ 项目标题 | 点击标题文字 | <h4 [routerLink]="..."> |
| ✅ 卡片整体 | 点击卡片任意空白处 | <div class="project-card" (click)="..."> |
| ✅ 查看详情按钮 | 点击"查看详情"按钮 | <button (click)="viewProjectDetails(...)"> |
<!-- 标题点击:阻止冒泡,只触发routerLink -->
<h4 [routerLink]="[...]" (click)="$event.stopPropagation()">
<!-- 按钮点击:阻止冒泡,只触发按钮的事件 -->
<button (click)="viewProjectDetails(project.id); $event.stopPropagation()">
原理:
$event.stopPropagation() 阻止事件向上冒泡// ✅ 使用真实的项目ID
this.router.navigate(['/admin/project-detail', projectId, 'order']);
// 生成的URL示例:
// /admin/project-detail/iKvYck89zE/order
// /admin/project-detail/7EFEsEd0ht/order
// /admin/project-detail/abc123xyz/order
优势:
启动开发服务器
npm start
访问组长端Dashboard
http://localhost:4200/team-leader/dashboard
测试项目卡片点击
测试1: 点击项目标题
/admin/project-detail/{projectId}/orderprojectId 是真实的项目ID测试2: 点击"查看详情"按钮
测试3: 点击卡片空白处
测试4: 点击不同项目
projectId验证项目详情页加载
| 操作 | 预期结果 |
|---|---|
| 点击项目1 | 跳转到 /admin/project-detail/iKvYck89zE/order |
| 点击项目2 | 跳转到 /admin/project-detail/7EFEsEd0ht/order |
| 点击项目3 | 跳转到 /admin/project-detail/abc123/order |
| 刷新页面 | 项目详情页保持显示,数据不丢失 |
| 点击浏览器"后退" | 返回组长端Dashboard |
项目卡片已有的样式:
.project-card {
cursor: pointer; // 鼠标悬停显示手型
transition: all 0.3s ease;
&:hover {
transform: translateY(-4px); // 悬停时上移
box-shadow: 0 8px 16px rgba(0,0,0,0.1); // 增强阴影
}
}
项目详情页会显示加载动画:
loading: boolean = true; // 初始加载状态
if (!projectId) {
console.warn('项目ID为空,无法跳转');
return;
}
/admin/project-detail/:projectId/order/admin/project-detail/:projectId/order/designer/project-detail/:id好处:
src/app/app.routes.ts - 路由配置文件docs/task/2025102217-wxwork-sdk-init-fix.md - 企微SDK初始化修复文档docs/task/2025102216-team-leader-database-integration.md - Parse数据库集成文档viewProjectDetails() 等方法功能实现完成! ✨