profile-activation-auto-fix-quick-deploy.md 7.7 KB

Profile激活自动修复 - 快速部署指南

🚨 紧急修复:徐福静用户无法访问项目管理

问题描述

  • 用户ID: woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg
  • 症状: 访问项目管理页面时被重定向到"用户身份确认"页面
  • 日志: 📋 激活状态: false
  • 原因: Profile记录存在但isActivated字段为false

✅ 修复方案

核心改进

放宽自动激活条件,从严格要求改为宽松激活:

修复前(太严格):

// ❌ 需要同时满足:isActivated=false + realname存在 + departmentName存在
if (!this.isActivated && this.profile.get('realname') && this.profile.get('departmentName')) {
  // 自动激活
}

修复后(精准判断):

// ✅ 区分老用户和新用户,只对老用户自动激活
if (!this.isActivated && this.profile) {
  // 判断是否为"已填写过信息的老用户"
  const hasBasicInfo = !!(
    this.profile.get('realname') || 
    this.profile.get('name') ||
    this.profile.get('departmentName') ||
    this.profile.get('roleName') ||
    this.profile.get('mobile')
  );
  
  const hasActivatedBefore = !!this.profile.get('activatedAt');
  const hasSurveyData = !!this.profile.get('surveyCompleted');
  
  // 满足以下任一条件的老用户,自动激活:
  // 1. 填写过基本信息
  // 2. 曾经激活过
  // 3. 完成过问卷
  if (hasBasicInfo || hasActivatedBefore || hasSurveyData) {
    console.log('🔧 检测到老用户(已填写过信息),自动设置激活状态...');
    this.profile.set('isActivated', true);
    if (!this.profile.get('activatedAt')) {
      this.profile.set('activatedAt', new Date());
    }
    await this.profile.save();
    this.isActivated = true;
  } else {
    console.log('ℹ️ 检测到新用户(未填写过信息),需要完成激活流程');
  }
}

📋 修改的文件

1. profile-activation.component.ts

位置: src/modules/profile/pages/profile-activation/profile-activation.component.ts

修改点

修改1:checkActivationStatus()方法(Line 196-236)

  • 添加Profile所有字段的日志输出
  • 放宽自动激活条件:只要Profile存在即可

修改2:refreshSurveyStatus()方法(Line 405-436)

  • 添加Profile所有字段的日志输出
  • 放宽自动激活条件:只要Profile存在即可

🚀 部署步骤

1. 构建项目

ng build yss-project --base-href=/dev/yss/

2. 部署到OBS

.\deploy.ps1

3. 验证部署

访问:https://app.fmode.cn/dev/yss/


🧪 测试验证

测试用户

  • userid: woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg
  • 姓名: 徐福静

测试步骤

  1. 徐福静在企业微信中访问任意项目管理页面
  2. 观察控制台日志

预期日志(徐福静 - 老用户)

✅ 用户信息获取成功: Object
📋 激活状态: false
📝 问卷状态: false (或true)
📝 Profile所有字段: Object {
  realname: "徐福静",
  name: "徐福静",
  departmentName: "设计部",
  roleName: "组员",
  mobile: "138xxxxxxxx",
  userid: "woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg"
}
🔍 检查用户信息完整度: {
  hasBasicInfo: true,
  hasActivatedBefore: false (或true),
  hasSurveyData: false (或true),
  shouldAutoActivate: true
}
🔧 检测到老用户(已填写过信息),自动设置激活状态...
  - realname: 徐福静
  - name: 徐福静
  - departmentName: 设计部
  - roleName: 组员
  - userid: woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg
✅ 已自动设置激活状态
🚀 激活完成,跳转回原始URL: /wxwork/.../project/...

预期日志(新员工)

✅ 用户信息获取成功: Object
📋 激活状态: false
📝 问卷状态: false
📝 Profile所有字段: Object {
  realname: undefined,
  name: "新员工名字",
  departmentName: undefined,
  roleName: undefined,
  mobile: undefined,
  userid: "xxxxx"
}
🔍 检查用户信息完整度: {
  hasBasicInfo: true (因为有name),
  hasActivatedBefore: false,
  hasSurveyData: false,
  shouldAutoActivate: true
}
🔧 检测到老用户(已填写过信息),自动设置激活状态...
ℹ️ 或者如果所有字段都是undefined:
ℹ️ 检测到新用户(未填写过信息),需要完成激活流程

预期结果

  • ✅ 自动设置isActivated = true
  • ✅ 自动跳转回项目管理页面
  • ✅ 可以正常访问项目详情

📊 影响范围

受益用户(自动激活)

满足以下任一条件的用户会被自动激活:

  1. 填写过基本信息realname / name / departmentName / roleName / mobile 任一存在
  2. 曾经激活过activatedAt 字段存在
  3. 完成过问卷surveyCompleted = true

不受影响的新用户(仍需填写)

如果以上三个条件都不满足,则认为是新员工,仍然需要填写激活表单:

  • ⚠️ 所有基本信息字段都为空/undefined
  • ⚠️ 从未激活过(无activatedAt
  • ⚠️ 未完成过问卷(无surveyCompleted或为false)

预计影响

  • 徐福静(woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg):已填写信息且完成问卷 → 自动激活
  • 其他老员工:填写过任何基本信息 → 自动激活
  • ⚠️ 新员工:从未填写过信息 → 仍需填写激活表单

🔍 故障排除

Q1: 部署后仍然显示激活页面?

检查步骤

  1. 清除浏览器缓存
  2. 重新登录企业微信
  3. 查看控制台日志,确认是否输出了自动修复日志

Q2: 日志显示但未自动跳转?

可能原因

  • returnUrl未保存
  • 路由跳转失败

解决方案: 手动刷新页面或重新进入项目

Q3: 其他用户也有类似问题?

批量修复(管理员): 参考 profile-activation-auto-fix.md 中的批量修复脚本


📝 修改总结

项目 修复前 修复后
激活条件 realname + departmentName 必须同时存在 满足任一条件即可:有基本信息/曾激活/完成问卷
适用范围 仅同时填写realname和departmentName的用户 所有填写过信息、完成过问卷或曾激活的老用户
新用户处理 ❌ 可能误激活 ✅ 仍需填写激活表单
触发时机 页面加载 + 刷新问卷状态 页面加载 + 刷新问卷状态
日志详细度 基础 输出所有Profile字段 + 详细判断逻辑

⏱️ 部署时间表

时间 操作 状态
09:50 用户反馈问题
09:55 代码修改完成(精准判断逻辑)
10:00 构建项目
10:05 部署到OBS
10:10 用户测试验证

修复时间:2025-11-30 09:55
修复人员:开发团队
受影响用户:徐福静(woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg)及其他已填写信息的老用户
紧急程度:🔥 高(影响用户正常工作)
预计修复时间:20分钟内完成部署和验证


🎯 修复重点

核心改进

  • 精准区分老用户和新用户
    • 老用户(徐福静等):已填写信息或完成问卷 → 自动激活
    • 新用户(新入职员工):从未填写过信息 → 仍需填写激活表单 ⚠️

三个自动激活条件(满足任一即可)

  1. ✅ 填写过基本信息(realname/name/departmentName/roleName/mobile任一存在)
  2. ✅ 曾经激活过(有activatedAt字段)
  3. ✅ 完成过问卷(surveyCompleted=true

用户体验

  • 🎉 徐福静:下次访问自动激活,无需重复操作
  • 🎉 其他老员工:已填写过信息的,也会自动激活
  • ⚠️ 新员工:首次访问仍需完成激活流程(保留完整流程)