将客服项目列表的项目详情页跳转逻辑统一为wxwork路由模式,与组长和管理员保持一致。
// 跳转到设计师项目详情页,传递查询参数
this.router.navigate(['/designer/project-detail', project.id], { 
  queryParams: { 
    role: 'customer-service',
    activeTab: 'progress',
    currentStage: stageMapping[columnId],
    from: 'customer-service-list'
  } 
});
问题:
// 跳转到wxwork项目详情页(与组长、管理员保持一致)
const cid = localStorage.getItem('company') || '';
const stagePath = stagePathMapping[columnId];
this.router.navigate(['/wxwork', cid, 'project', project.id, stagePath]);
优势:
| 看板列ID | 看板列名称 | wxwork阶段路径 | 说明 | 
|---|---|---|---|
| order | 订单分配 | order | 订单分配阶段 | 
| requirements | 确认需求 | requirements | 确认需求阶段 | 
| delivery | 交付执行 | delivery | 交付执行阶段 | 
| aftercare | 售后 | aftercare | 售后归档阶段 | 
根据 yss-project/src/app/app.routes.ts 的配置:
{
  path: 'project/:projectId',
  loadComponent: () => import('../modules/project/pages/project-detail/project-detail.component').then(m => m.ProjectDetailComponent),
  children: [
    { path: '', redirectTo: 'order', pathMatch: 'full' },
    { path: 'order', ... },           // 订单分配
    { path: 'requirements', ... },    // 确认需求
    { path: 'delivery', ... },        // 交付执行
    { path: 'aftercare', ... },       // 售后归档
    { path: 'issues', ... }           // 问题追踪
  ]
}
/wxwork/:cid/project/:projectId/:stage
:cid - 公司ID(从localStorage获取):projectId - 项目ID:stage - 阶段路径(order/requirements/delivery/aftercare/issues)/wxwork/cDL6R1hgSi/project/abc123/order
/wxwork/cDL6R1hgSi/project/abc123/requirements
/wxwork/cDL6R1hgSi/project/abc123/delivery
/wxwork/cDL6R1hgSi/project/abc123/aftercare
yss-project/src/app/pages/customer-service/project-list/project-list.tsnavigateToProject()修改前:
navigateToProject(project: ProjectListItem, columnId: 'order' | 'requirements' | 'delivery' | 'aftercare') {
  const stageMapping = {
    'order': '订单分配',
    'requirements': project.currentStage || '需求沟通',
    'delivery': project.currentStage || '建模',
    'aftercare': '客户评价'
  };
  
  this.router.navigate(['/designer/project-detail', project.id], { 
    queryParams: { 
      role: 'customer-service',
      activeTab: 'progress',
      currentStage: stageMapping[columnId],
      from: 'customer-service-list'
    } 
  });
}
修改后:
navigateToProject(project: ProjectListItem, columnId: 'order' | 'requirements' | 'delivery' | 'aftercare') {
  // 获取公司ID
  const cid = localStorage.getItem('company') || '';
  if (!cid) {
    console.error('未找到公司ID,无法跳转到项目详情页');
    return;
  }
  
  // 根据columnId映射到wxwork路由的阶段路径
  const stagePathMapping = {
    'order': 'order',           // 订单分配
    'requirements': 'requirements', // 确认需求
    'delivery': 'delivery',     // 交付执行
    'aftercare': 'aftercare'    // 售后归档
  };
  
  const stagePath = stagePathMapping[columnId];
  
  // 跳转到wxwork路由的项目详情页(纯净页面,无管理端侧边栏)
  this.router.navigate(['/wxwork', cid, 'project', project.id, stagePath]);
}
// yss-project/src/app/pages/team-leader/dashboard/dashboard.ts
viewProjectDetails(projectId: string): void {
  const cid = localStorage.getItem('company') || 'cDL6R1hgSi';
  this.router.navigate(['/wxwork', cid, 'project', projectId, 'order']);
}
<!-- yss-project/src/app/pages/admin/project-management/project-management.html -->
<a [routerLink]="['/admin/project-detail', project.id]">{{ project.title }}</a>
注意:管理员使用的是 /admin/project-detail/:projectId,这是管理员专用的项目详情页,包含管理端侧边栏和更多管理功能。
// yss-project/src/app/pages/customer-service/project-list/project-list.ts
navigateToProject(project: ProjectListItem, columnId: string) {
  const cid = localStorage.getItem('company') || '';
  this.router.navigate(['/wxwork', cid, 'project', project.id, stagePath]);
}
统一性:客服和组长现在使用相同的wxwork路由模式。
/wxwork/:cid
  ├── /project/:projectId
  │   ├── /order          (订单分配)
  │   ├── /requirements   (确认需求)
  │   ├── /delivery       (交付执行)
  │   ├── /aftercare      (售后归档)
  │   └── /issues         (问题追踪)
  ├── /contact/:contactId (客户画像)
  └── /survey/project/:projectId (项目问卷)
| 板块 | 路由模式 | 说明 | 
|---|---|---|
| 客服 | /wxwork/:cid/project/:projectId/:stage | 纯净页面 | 
| 组长 | /wxwork/:cid/project/:projectId/:stage | 纯净页面 | 
| 设计师 | /designer/project-detail/:id | 设计师专用页面 | 
| 管理员 | /admin/project-detail/:projectId | 管理端页面 | 
点击"订单分配"列的项目
跳转到: /wxwork/cDL6R1hgSi/project/abc123/order
显示: 订单分配阶段的内容
点击"确认需求"列的项目
跳转到: /wxwork/cDL6R1hgSi/project/abc123/requirements
显示: 确认需求阶段的内容
点击"交付执行"列的项目
跳转到: /wxwork/cDL6R1hgSi/project/abc123/delivery
显示: 交付执行阶段的内容
点击"售后"列的项目
跳转到: /wxwork/cDL6R1hgSi/project/abc123/aftercare
显示: 售后归档阶段的内容
跳转前会检查localStorage中的company字段:
const cid = localStorage.getItem('company') || '';
if (!cid) {
  console.error('未找到公司ID,无法跳转到项目详情页');
  return;
}
如果没有公司ID,需要先设置:
localStorage.setItem('company', 'your-company-id');
确保 yss-project/src/app/app.routes.ts 中的wxwork路由已正确配置。
确保传递的项目ID在Parse Server中存在,否则会显示404或错误页面。
在浏览器控制台查看路由变化:
// 当前路由
console.log(window.location.pathname);
// 应该显示类似:
// /wxwork/cDL6R1hgSi/project/abc123/order
console.log('公司ID:', localStorage.getItem('company'));
直接在浏览器地址栏输入:
http://localhost:4200/wxwork/cDL6R1hgSi/project/your-project-id/order
| 日期 | 修改内容 | 修改人 | 
|---|---|---|
| 2024-10-25 | 统一客服项目列表跳转为wxwork路由 | AI Assistant | 
完成时间: 2024-10-25
开发者: AI Assistant
状态: ✅ 已完成
影响范围: 客服项目列表导航