2025-10-29
在wxwork项目模块的客户画像组件中,跟进记录显示企微userid乱码:
<div class="timeline-dot">
  <svg>...</svg>
  <span>woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ</span>
  <p>woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ 添加客户</p>
</div>
<div class="timeline-content">
  <div class="timeline-time">4/18</div>
  <div class="timeline-text">
    <strong>woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ</strong>
    <p>woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ 添加客户</p>
  </div>
</div>
发现两个问题:
.timeline-dot 内部错误地包含了 <span> 和 <p> 标签,导致:
contact.component.ts 第351-352行直接使用企微 userid:
content: `${fu.userid} 添加客户`,  // ❌ 直接显示userid
operator: fu.userid                 // ❌ 直接显示userid
文件: contact.component.html
修复前:
<div class="timeline-dot">
  <svg>...</svg>
  <span>{{ record.operator }}</span>      ❌ 错误位置
  <p>{{ record.content }}</p>             ❌ 错误位置
</div>
<div class="timeline-content">
  <div class="timeline-time">{{ formatDate(record.time) }}</div>
  <div class="timeline-text">
    <strong>{{ record.operator }}</strong>
    <p>{{ record.content }}</p>
  </div>
</div>
修复后:
<div class="timeline-dot">
  <svg>...</svg>                          ✅ 只保留SVG图标
</div>
<div class="timeline-content">
  <div class="timeline-time">{{ formatDate(record.time) }}</div>
  <div class="timeline-text">
    <strong>{{ record.operator }}</strong> ✅ 正确位置
    <p>{{ record.content }}</p>            ✅ 正确位置
  </div>
</div>
文件: contact.component.ts
修复前:
this.profile.followUpRecords = followUsers.map((fu: any) => ({
  time: fu.createtime ? new Date(fu.createtime * 1000) : new Date(),
  type: 'follow',
  content: `${fu.userid} 添加客户`,  // ❌ userid乱码
  operator: fu.userid                 // ❌ userid乱码
}));
修复后:
this.profile.followUpRecords = followUsers.map((fu: any) => {
  // 处理操作员名称,避免显示企微userid
  let operatorName = '企微用户';
  if (fu.remark && fu.remark.length < 50) {
    operatorName = fu.remark;
  } else if (fu.name && fu.name.length < 50 && !fu.name.startsWith('woAs2q')) {
    operatorName = fu.name;
  }
  
  return {
    time: fu.createtime ? new Date(fu.createtime * 1000) : new Date(),
    type: 'follow',
    content: '添加客户',           // ✅ 简洁内容
    operator: operatorName          // ✅ 智能识别名称
  };
});
1. fu.remark        // 优先级1: 备注名(如果存在)
2. fu.name          // 优先级2: 名称(需验证不是userid)
3. '企微用户'        // 优先级3: 默认显示
// 验证条件
✅ 名称长度 < 50 字符
✅ 不以 'woAs2q' 开头(企微userid特征)
// 如果不满足条件
❌ 显示为 "企微用户"
显示内容:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[●] woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ
    woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ 添加客户
    
    4/18
    woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ
    woAs2qCQAA5dJhPfQ5soUVqPgcAHHzmQ 添加客户
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
问题:
❌ 乱码重复显示4次
❌ 布局混乱
❌ 内容在圆点内部
显示内容:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[●] 
    4/18
    企微用户
    添加客户
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
效果:
✅ 无乱码显示
✅ 布局正确
✅ 内容清晰简洁
.timeline-dot 内的内容?.timeline-dot 应该只是视觉标记(圆点 + 图标).timeline-content 中contact.component.html (第246-261行)
.timeline-dot 内的 <span> 和 <p>.timeline-content 结构不变contact.component.ts (第344-368行)
http://localhost:4200/wxwork/:cid/customer/:contactId
观察以下内容:
| 数据情况 | 预期显示 | 
|---|---|
| 有 fu.remark | 显示备注名 ✅ | 
| 有 fu.name(非userid) | 显示名称 ✅ | 
| 只有 fu.userid | 显示"企微用户" ✅ | 
| 无任何名称 | 显示"企微用户" ✅ | 
此次修复仅涉及HTML结构和数据处理,不修改CSS样式。
现有的 .timeline-dot 和 .timeline-content 样式继续生效,布局会自动正确显示。
所有原有功能均保持不变:
一致性: 两个组件的数据处理逻辑保持一致,确保用户体验统一。
现在访问wxwork客户画像页面,跟进记录将:
文档版本: 1.0
最后更新: 2025-10-29
修复组件: src/modules/project/pages/contact/
影响页面: /wxwork/:cid/customer/:contactId