本文档记录了组长端(Team Leader Dashboard)用户头像显示功能的完整实施过程。该功能在顶部导航栏展示企业微信认证后的用户信息,包括头像、姓名和角色。
dashboard.ts)添加的属性:
// 当前用户信息
currentUser = {
  name: '组长',
  avatar: "data:image/svg+xml,%3Csvg...", // 默认SVG头像
  roleName: '组长'
};
currentDate = new Date();
添加的方法:
loadUserProfile() - 加载用户ProfilelocalStorage 获取公司ID (cid)WxworkAuth 实例化并调用 currentProfile()name、avatar、roleName 字段generateDefaultAvatar() 生成默认头像generateDefaultAvatar() - 生成默认头像data:image/svg+xml URL集成到生命周期:
ngOnInit() 中最先调用 await this.loadUserProfile()导入依赖:
import { WxworkAuth } from 'fmode-ng/core';
dashboard.html)新增顶部导航栏结构:
<nav class="top-navbar">
  <div class="navbar-left">
    <h2 class="navbar-title">设计组长工作台</h2>
  </div>
  <div class="navbar-right">
    <!-- 日期显示 -->
    <div class="date-display">
      {{ currentDate.toLocaleDateString('zh-CN', { 
        year: 'numeric', 
        month: 'long', 
        day: 'numeric', 
        weekday: 'long' 
      }) }}
    </div>
    <!-- 用户信息 -->
    <div class="user-profile">
      <img [src]="currentUser.avatar" 
           [alt]="currentUser.name + '头像'" 
           class="user-avatar">
      <span class="user-name">{{ currentUser.name }}</span>
      <span class="user-role">{{ currentUser.roleName }}</span>
    </div>
  </div>
</nav>
位置: 在 <header class="dashboard-header"> 之前
dashboard.scss)顶部导航栏样式:
position: sticky; top: 0; z-index: 1000 - 固定在顶部linear-gradient(135deg, #667eea 0%, #764ba2 100%)box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1)用户信息区域样式:
backdrop-filter: blur(10px))适配原有布局:
margin: calc(-1 * ios.$ios-spacing-lg) 抵消 :host 的paddingWxworkAuth 获取当前用户ProfilelocalStorage 读取 company IDcid 不存在时使用默认信息| 文件路径 | 修改内容 | 行数变化 | 
|---|---|---|
| src/app/pages/team-leader/dashboard/dashboard.ts | 添加用户信息属性、加载方法、头像生成方法 | +50 | 
| src/app/pages/team-leader/dashboard/dashboard.html | 添加顶部导航栏结构 | +16 | 
| src/app/pages/team-leader/dashboard/dashboard.scss | 添加顶部导航栏样式 | +73 | 
localStorage.getItem("company") 
  ↓
WxworkAuth({ cid })
  ↓
currentProfile()
  ↓
profile.get("name" / "avatar" / "roleName")
  ↓
currentUser { name, avatar, roleName }
  ↓
HTML模板绑定显示
const cid = localStorage.getItem("company");
if (!cid) {
  console.warn('未找到公司ID,使用默认用户信息');
  return;
}
const wwAuth = new WxworkAuth({ cid });
const profile = await wwAuth.currentProfile();
if (profile) {
  const name = profile.get("name") || profile.get("mobile") || '组长';
  const avatar = profile.get("avatar");
  const roleName = profile.get("roleName") || '组长';
  this.currentUser = {
    name,
    avatar: avatar || this.generateDefaultAvatar(name),
    roleName
  };
}
Profile{
  name: "张三",           // 用户姓名
  mobile: "13800138000", // 手机号(备用)
  avatar: "https://...", // 头像URL
  roleName: "组长",       // 角色名称("组员" / "组长" / "管理员")
  // ... 其他字段
}
currentProfile()profile.get("fieldName")#667eea → #764ba2(紫色渐变)#ffffff(白色)rgba(255, 255, 255, 0.15-0.25)(半透明白)white(头像边框)1rem 2rem0.75rem - 2rem40px x 40pxWxworkAuthGuard 路由守卫localStorage 中存在 company 字段/team-leader/dashboardWxworkAuthGuard 验证身份Dashboard.ngOnInit() 触发loadUserProfile() 调用 WxworkAuth.currentProfile()currentUsercid: 显示默认"组长"信息rules/wxwork/auth.mdrules/wxwork/guard-wxwork.mddocs/prd/wxwork-project-management.mdsrc/app/pages/admin/admin-layout/AdminLayout 保持一致的实现方式问题反馈:
解决方案:
dashboard.html<header> 内的 <h1>设计组长工作台</h1>dashboard.scsspadding: 1rem 2rem → 0.625rem 2rem(减少约38%)1.5rem → 1.25rem0.95rem → 0.875rem40px → 36px1rem → 0.9375rem0.875rem → 0.8125rem2rem → 1.5rempadding: 0.5rem 1rem → 0.375rem 0.875remdashboard.scssmargin-top: calc(-1 * ios.$ios-spacing-lg - 1px) 确保完全贴顶:host 的 padding 写法,分别指定各个方向| 项目 | 优化前 | 优化后 | 改善 | 
|---|---|---|---|
| 导航栏padding | 1rem | 0.625rem | ↓ 38% | 
| 标题字体 | 1.5rem | 1.25rem | ↓ 17% | 
| 头像尺寸 | 40px | 36px | ↓ 10% | 
| 顶部空白 | 有灰色区域 | 完全贴顶 | ✅ 修复 | 
| 标题重复 | 2个 | 1个 | ✅ 修复 | 
实施日期: 2025-10-27
实施人员: AI Assistant
审核状态: ✅ 已完成并优化,待用户验收