本文档记录了组长端(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
审核状态: ✅ 已完成并优化,待用户验收