完成客服项目列表页面的布局优化和路由调整,包括:
yss-project/src/app/app.routes.ts修改内容:
// 客服路由
{
  path: 'customer-service',
  loadComponent: () => import('./pages/customer-service/customer-service-layout/customer-service-layout').then(m => m.CustomerServiceLayout),
  // canActivate: [WxworkAuthGuard], // 临时注释,方便本地开发
  children: [
    // ...
  ]
}
效果:
http://localhost:4200/customer-serviceyss-project/src/app/pages/customer-service/project-list/project-list.ts修改内容:
// 详情跳转到客服项目详情页面(如果存在)或设计师项目详情页面
navigateToProject(project: ProjectListItem, columnId: 'order' | 'requirements' | 'delivery' | 'aftercare') {
  // 根据columnId映射到对应的阶段
  const stageMapping = {
    'order': '订单分配',
    'requirements': project.currentStage || '需求沟通',
    'delivery': project.currentStage || '建模',
    'aftercare': '客户评价'
  };
  
  // TODO: 当客服项目详情页开发完成后,跳转到 /customer-service/project-detail/:id
  // 目前临时跳转到设计师项目详情页,传递客服角色标识
  this.router.navigate(['/designer/project-detail', project.id], { 
    queryParams: { 
      role: 'customer-service',
      activeTab: 'progress',
      currentStage: stageMapping[columnId],
      from: 'customer-service-list' // 标识来源
    } 
  });
}
效果:
role: 'customer-service' 标识客服角色from: 'customer-service-list' 标识来源currentStage 自动定位到对应阶段yss-project/src/app/pages/customer-service/project-list/project-list.scss修改前:
.project-content .kanban-header,
.project-content .kanban-body {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 320px; // 固定宽度,导致右侧有空白
  gap: 16px;
}
修改后:
.project-content .kanban-header,
.project-content .kanban-body {
  display: grid;
  grid-template-columns: repeat(4, 1fr); // 四列平均分布
  gap: 16px;
  width: 100%;
  min-width: 0; // 允许列收缩
  
  // 响应式设计
  @media (max-width: 1400px) {
    gap: 12px;
  }
  
  @media (max-width: 1200px) {
    grid-template-columns: repeat(2, 1fr); // 小屏幕显示2列
  }
  
  @media (max-width: 768px) {
    grid-template-columns: 1fr; // 移动端显示1列
  }
}
效果:
添加内容:
.project-content .kanban-body .kanban-column {
  min-height: 420px;
  max-height: calc(100vh - 300px); // 限制最大高度
  padding: 12px;
  background-color: $bg-white;
  border: 1px dashed $border-color;
  border-radius: 8px;
  box-shadow: $box-shadow;
  overflow-y: auto; // 内容超出时滚动
  overflow-x: hidden; // 禁止横向滚动
  min-width: 0; // 允许收缩
  
  // 自定义滚动条样式
  &::-webkit-scrollbar {
    width: 6px;
  }
  
  &::-webkit-scrollbar-track {
    background: transparent;
  }
  
  &::-webkit-scrollbar-thumb {
    background: rgba(0, 0, 0, 0.1);
    border-radius: 3px;
    
    &:hover {
      background: rgba(0, 0, 0, 0.2);
    }
  }
}
效果:
卡片头部:
.project-content .kanban-card-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 12px;
  gap: 8px;
  min-width: 0; // 允许收缩
}
.project-content .kanban-card-header .left {
  display: flex;
  flex-direction: column;
  gap: 4px;
  flex: 1;
  min-width: 0; // 允许收缩
  overflow: hidden;
}
.project-content .kanban-card-header .left .project-name {
  margin: 0;
  font-size: 15px;
  font-weight: 600;
  color: $text-primary;
  line-height: 1.4;
  letter-spacing: -0.01em;
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-line-clamp: 2; // 最多显示2行
  line-clamp: 2; // 标准属性
  -webkit-box-orient: vertical;
  word-break: break-word;
}
.project-content .kanban-card-header .left .project-id {
  font-size: 11px;
  color: $text-light;
  font-weight: 500;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.project-content .kanban-card-header .right {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-shrink: 0; // 不收缩
}
卡片内容:
.project-content .kanban-card-content {
  font-size: 13px;
  color: $text-secondary;
  min-width: 0; // 允许收缩
  overflow: hidden;
  
  // 确保所有子元素不溢出
  > * {
    min-width: 0;
    overflow: hidden;
  }
  
  // 文本内容截断
  p, div {
    overflow: hidden;
    text-overflow: ellipsis;
    word-break: break-word;
  }
}
效果:
┌────────────────────────────────────────────────────────────────┐
│  订单分配    │  确认需求    │  交付执行    │  售后    │ [空白] │
│  (320px)     │  (320px)     │  (320px)     │  (320px) │        │
└────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐
│  订单分配    │  确认需求    │  交付执行    │  售后              │
│  (25%)       │  (25%)       │  (25%)       │  (25%)             │
└────────────────────────────────────────────────────────────────┘
grid-template-columns: repeat(4, 1fr)
min-width: 0
overflow: hidden
text-overflow: ellipsis显示省略号单行截断:
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
多行截断:
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
&::-webkit-scrollbar {
  width: 6px;
}
&::-webkit-scrollbar-track {
  background: transparent;
}
&::-webkit-scrollbar-thumb {
  background: rgba(0, 0, 0, 0.1);
  border-radius: 3px;
  
  &:hover {
    background: rgba(0, 0, 0, 0.2);
  }
}
直接访问客服板块:
http://localhost:4200/customer-service
http://localhost:4200/customer-service/project-list
无需企业微信授权,可以直接查看页面。
点击项目卡片后:
/designer/project-detail/:idrole=customer-service - 客服角色标识activeTab=progress - 默认显示进度标签currentStage=xxx - 当前阶段from=customer-service-list - 来源标识页面会根据屏幕宽度自动调整:
部署到生产环境前,需要恢复路由守卫:
// yss-project/src/app/app.routes.ts
{
  path: 'customer-service',
  loadComponent: () => import('./pages/customer-service/customer-service-layout/customer-service-layout').then(m => m.CustomerServiceLayout),
  canActivate: [WxworkAuthGuard], // 取消注释
  children: [
    // ...
  ]
}
当客服专用的项目详情页开发完成后,需要修改跳转逻辑:
// yss-project/src/app/pages/customer-service/project-list/project-list.ts
navigateToProject(project: ProjectListItem, columnId: string) {
  // 跳转到客服项目详情页
  this.router.navigate(['/customer-service/project-detail', project.id], { 
    queryParams: { 
      currentStage: stageMapping[columnId]
    } 
  });
}
-webkit-line-clamp,需要webkit内核yss-project/src/app/app.routes.ts
WxworkAuthGuardyss-project/src/app/pages/customer-service/project-list/project-list.ts
navigateToProject方法from参数标识来源yss-project/src/app/pages/customer-service/project-list/project-list.scss
完成时间: 2024-10-25
开发者: AI Assistant
状态: ✅ 已完成