完成客服项目列表页面的布局优化和路由调整,包括:
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
状态: ✅ 已完成