日期: 2025-10-24
需求: 从组长端点击项目后,进入纯净的项目详情页,不显示管理员端的侧边栏导航等UI元素
从组长端点击项目后,跳转到 /admin/project-detail/:projectId/order:
使用 wxwork 路由而非 admin 路由:
| 路由类型 | 路径格式 | 特点 |
|---|---|---|
| ❌ 管理员端路由 | /admin/project-detail/:projectId/order |
包含AdminLayout(侧边栏+顶部栏) |
| ✅ wxwork路由 | /wxwork/:cid/project/:projectId/order |
纯净页面,无任何布局包裹 |
// src/app/app.routes.ts 第184-235行
{
path: 'admin',
loadComponent: () => import('./pages/admin/admin-layout/admin-layout').then(m => m.AdminLayout),
children: [
// ... 其他路由
{
path: 'project-detail/:projectId',
loadComponent: () => import('../modules/project/pages/project-detail/project-detail.component').then(m => m.ProjectDetailComponent),
children: [
{ path: 'order', ... },
{ path: 'requirements', ... },
// ...
]
}
]
}
特点:
// src/app/app.routes.ts 第312-377行
{
path: 'wxwork/:cid',
children: [
{
path: 'project/:projectId',
loadComponent: () => import('../modules/project/pages/project-detail/project-detail.component').then(m => m.ProjectDetailComponent),
children: [
{ path: 'order', ... },
{ path: 'requirements', ... },
// ...
]
}
]
}
特点:
文件: src/app/pages/team-leader/dashboard/dashboard.ts
位置: 第2204-2219行
修改内容:
// 查看项目详情 - 跳转到纯净的项目详情页(无管理端UI)
viewProjectDetails(projectId: string): void {
if (!projectId) {
console.warn('⚠️ 项目ID为空,无法跳转');
return;
}
// 获取公司ID
const cid = localStorage.getItem('company') || 'cDL6R1hgSi';
// 跳转到wxwork路由的项目详情页(纯净页面,无管理端侧边栏)
// 路由格式:/wxwork/:cid/project/:projectId/order
this.router.navigate(['/wxwork', cid, 'project', projectId, 'order']);
console.log('✅ 组长端跳转到纯净项目详情页:', projectId);
}
关键点:
localStorage.getItem('company') 获取cDL6R1hgSi['/wxwork', cid, 'project', projectId, 'order']/wxwork/cDL6R1hgSi/project/iKvYck89zE/order文件: src/app/pages/team-leader/dashboard/dashboard.html
位置: 第233行
修改内容:
<!-- ❌ 旧代码:使用routerLink -->
<h4 [routerLink]="['/admin/project-detail', project.id, 'order']"
(click)="$event.stopPropagation()">
{{ project.name }}
</h4>
<!-- ✅ 新代码:使用click事件 -->
<h4 (click)="viewProjectDetails(project.id); $event.stopPropagation()"
style="cursor: pointer;">
{{ project.name }}
</h4>
改进点:
routerLink,统一使用 viewProjectDetails() 方法cursor: pointer 样式,鼠标悬停显示手型$event.stopPropagation() 防止事件冒泡┌─────────────────────────────────────────┐
│ 系统管理后台 [管理员顶部栏] │
├──────┬──────────────────────────────────┤
│ 侧 │ 项目详情页内容 │
│ 边 │ ├─ 订单分配 │
│ 栏 │ ├─ 确认需求 │
│ │ ├─ 交付执行 │
│ 导 │ └─ 售后归档 │
│ 航 │ │
│ │ │
└──────┴──────────────────────────────────┘
缺点:
┌─────────────────────────────────────────┐
│ 项目详情页内容(全屏) │
│ ├─ 订单分配 │
│ ├─ 确认需求 │
│ ├─ 交付执行 │
│ └─ 售后归档 │
│ │
│ │
│ │
│ │
└─────────────────────────────────────────┘
优点:
清除或设置cid
// 在浏览器控制台执行
// 方式1: 使用真实的公司ID
localStorage.setItem("company", "cDL6R1hgSi");
// 方式2: 清除cid,测试默认值
localStorage.removeItem("company");
刷新浏览器
Ctrl+Shift+R (Windows/Linux)
Cmd+Shift+R (Mac)
访问组长端Dashboard
http://localhost:4200/team-leader/dashboard
点击任意项目卡片
验证URL和页面
预期URL:
http://localhost:4200/wxwork/cDL6R1hgSi/project/iKvYck89zE/order
预期页面表现:
| 测试项 | 操作 | 预期结果 |
|---|---|---|
| 有cid | localStorage.setItem("company", "abc123") | 跳转到 /wxwork/abc123/project/... |
| 无cid | localStorage.removeItem("company") | 跳转到 /wxwork/cDL6R1hgSi/project/... (默认值) |
| 点击标题 | 点击项目名称 | 跳转到纯净项目详情页 |
| 点击按钮 | 点击"查看详情" | 跳转到纯净项目详情页 |
| 点击卡片 | 点击卡片空白处 | 跳转到纯净项目详情页 |
| 不同项目 | 点击3个不同项目 | 每次跳转到不同的projectId |
| 刷新页面 | F5刷新 | 页面保持,数据不丢失 |
| 后退按钮 | 点击浏览器后退 | 返回组长端Dashboard |
格式: /admin/project-detail/:projectId/order
示例: /admin/project-detail/iKvYck89zE/order
访问者: 管理员
特点: 有侧边栏、顶部栏
适用: 后台管理操作
格式: /wxwork/:cid/project/:projectId/order
示例: /wxwork/cDL6R1hgSi/project/iKvYck89zE/order
访问者: 组长、设计师、客服
特点: 无任何布局,全屏显示
适用: 项目协作查看
格式: /designer/project-detail/:id
示例: /designer/project-detail/iKvYck89zE
访问者: 设计师
特点: 设计师专用界面
适用: 设计师工作视图
✅ src/app/pages/team-leader/dashboard/dashboard.ts
viewProjectDetails() 方法✅ src/app/pages/team-leader/dashboard/dashboard.html
routerLink 改为 (click) 事件src/app/app.routes.ts - 路由配置(已有wxwork路由)src/modules/project/pages/project-detail/project-detail.component.ts - 项目详情组件src/pages/admin/admin-layout/admin-layout.ts - 管理员布局(不使用)const cid = localStorage.getItem('company') || 'cDL6R1hgSi';
用途:
存储位置: localStorage['company']
默认值: cDL6R1hgSi
this.router.navigate(['/wxwork', cid, 'project', projectId, 'order']);
| 参数位置 | 参数名 | 说明 | 示例 |
|---|---|---|---|
| 参数1 | 'wxwork' | 路由前缀 | 固定值 |
| 参数2 | cid | 公司ID | 'cDL6R1hgSi' |
| 参数3 | 'project' | 项目路由 | 固定值 |
| 参数4 | projectId | 项目ID | 'iKvYck89zE' |
| 参数5 | 'order' | 当前阶段 | 'order'/'requirements'/'delivery'/'aftercare' |
用户可以在项目详情页切换阶段:
/wxwork/:cid/project/:projectId/order ← 订单分配
/wxwork/:cid/project/:projectId/requirements ← 确认需求
/wxwork/:cid/project/:projectId/delivery ← 交付执行
/wxwork/:cid/project/:projectId/aftercare ← 售后归档
src/app/app.routes.ts - 完整路由配置docs/task/2025102218-team-leader-project-detail-navigation.md - 组长端项目跳转功能docs/task/2025102217-wxwork-sdk-init-fix.md - 企微SDK初始化修复rules/wxwork/guard-wxwork.md - 企微路由守卫文档/admin/project-detail/:projectId/order/wxwork/:cid/project/:projectId/order功能实现完成! ✨
现在从组长端点击项目,会进入纯净的项目详情页,不再显示管理员端的侧边栏和顶部导航栏!