# 员工激活问题诊断与修复指南 ## 📋 问题描述 员工在企业微信端已确认身份激活,但访问项目管理页面时仍显示"身份验证激活"页面,无法正常加载项目管理功能。 ## 🔍 问题原因 1. **Profile表中isActivated字段未正确设置** - 员工首次激活时,`isActivated`字段可能未被设置或设置为`false` - 数据迁移或导入时,`isActivated`字段缺失 2. **缓存问题** - WxworkAuth的Profile缓存未及时更新 - 浏览器本地缓存存储了旧的激活状态 3. **userid不匹配** - Profile表中的`userid`与企业微信返回的`userid`不一致 - 员工信息从其他系统同步时,`userid`字段未正确填写 ## 🛠️ 解决方案 ### 方案1:使用管理员修复工具(推荐) 1. **访问修复工具** ``` https://your-domain/admin/employee-activation-fix ``` 2. **扫描所有员工** - 点击 "🔍 扫描所有员工" 按钮 - 工具会自动扫描所有员工的激活状态 - 显示统计信息:总数、已激活、未激活、字段缺失 3. **批量修复** - 查看未激活员工列表 - 点击 "✅ 修复所有未激活员工" 按钮 - 工具会自动将所有未激活员工的`isActivated`字段设置为`true` 4. **单个修复** - 在员工列表中找到特定员工 - 点击该员工对应的 "修复" 按钮 - 仅修复该员工的激活状态 ### 方案2:手动数据库修复 如果无法访问管理员工具,可以直接在Parse Dashboard中修复: 1. **登录Parse Dashboard** ``` https://your-parse-dashboard-url ``` 2. **查找员工记录** - 进入 `Profile` 表 - 根据姓名或userid搜索员工记录 3. **修复字段** - 找到目标员工记录 - 设置 `isActivated` 字段为 `true` - 设置 `activatedAt` 字段为当前时间(如果为空) - 点击保存 4. **验证修复** - 员工重新登录企业微信 - 访问项目管理页面 - 应该能正常显示 ### 方案3:强制重新激活 如果以上方法都不行,让员工进行强制重新激活: 1. **清除浏览器缓存** ```javascript // 在浏览器控制台执行 localStorage.clear(); sessionStorage.clear(); ``` 2. **重新访问激活页面** ``` https://your-domain/wxwork/{cid}/activation ``` 3. **完成激活流程** - 填写真实姓名 - 选择部门和角色 - 点击 "确认激活" ## 📊 调试步骤 ### 1. 检查控制台日志 在浏览器开发者工具的Console中查看详细日志: ``` 🔐 CustomWxworkAuthGuard 执行,当前路由: /admin/project-management ✅ 获取用户信息成功: { name: "徐福静", userid: "..." } 🔎 currentProfile 查询结果: { id: "...", isActivated: false } 🔎 回退 Profile 查询结果: { userid查询: "...", 找到Profile: true, isActivated: false } ❌ Profile存在但未激活: { profileId: "...", isActivated: false } ⚠️ 用户未激活,跳转到激活页面 ``` ### 2. 关键字段检查清单 在Parse Dashboard中检查以下字段: - [x] `Profile.userid` - 必须与企业微信的userid完全一致 - [x] `Profile.isActivated` - 必须为`true` - [x] `Profile.isDeleted` - 必须为`false`或不存在 - [x] `Profile.isDisabled` - 必须为`false`或不存在 - [x] `Profile.name` 或 `Profile.realname` - 姓名不为空 ### 3. 测试访问 修复后,测试以下路径: 1. **项目管理页** ``` /admin/project-management ``` 2. **项目详情页** ``` /admin/project-detail/{projectId} ``` 3. **企微项目页** ``` /wxwork/{cid}/project/{projectId} ``` ## 🚀 预防措施 ### 1. 员工入职流程 确保新员工通过以下流程激活: 1. 添加到企业微信 2. 访问激活页面并完成激活 3. 在管理后台验证激活状态 ### 2. 数据同步规范 从其他系统同步员工数据时: - 确保`userid`字段正确填写 - 自动设置`isActivated = true` - 设置`activatedAt`为当前时间 ### 3. 定期检查 使用修复工具定期扫描: - 每周扫描一次 - 发现未激活员工及时处理 - 记录异常情况 ## 📞 技术支持 如果以上方法都无法解决问题,请联系技术支持并提供以下信息: 1. 员工姓名和企业微信userid 2. 浏览器控制台完整日志 3. Profile表中该员工的完整记录截图 4. 问题发生的时间和频率 --- ## 🔧 代码修改说明 本次修复包含以下代码改动: ### 1. CustomWxworkAuthGuard 增强 **文件**: `src/app/custom-wxwork-auth-guard.ts` **改动**: - 增强Profile查询日志,输出更详细的字段信息 - 添加Profile存在但未激活的详细错误信息 - 区分"字段缺失"和"字段为false"两种情况 ### 2. 员工激活修复工具 **文件**: `src/app/pages/admin/employee-activation-fix/employee-activation-fix.ts` **功能**: - 扫描所有员工的激活状态 - 统计已激活、未激活、字段缺失的员工数量 - 提供批量修复和单个修复功能 - 实时显示修复日志 ### 3. 路由配置 **文件**: `src/app/app.routes.ts` **改动**: - 添加`/admin/employee-activation-fix`路由 - 管理员可直接访问修复工具 ## 📝 使用示例 ### 示例1:批量修复所有员工 ```typescript // 访问修复工具页面 访问: https://your-domain/admin/employee-activation-fix // 步骤: 1. 点击 "扫描所有员工" 2. 查看统计结果 3. 点击 "修复所有未激活员工" 4. 等待修复完成 5. 验证:所有员工应该都已激活 ``` ### 示例2:修复特定员工(徐福静) ```typescript // 方法1:使用修复工具 1. 访问: https://your-domain/admin/employee-activation-fix 2. 点击 "扫描所有员工" 3. 在列表中找到 "徐福静" 4. 点击对应的 "修复" 按钮 5. 员工可以立即重新登录使用 // 方法2:直接修改数据库 1. 登录Parse Dashboard 2. 进入Profile表 3. 搜索 realname = "徐福静" 或 name = "徐福静" 4. 编辑记录: - isActivated = true - activatedAt = 当前时间 5. 保存 6. 员工清除缓存后重新登录 ``` ### 示例3:查看详细调试信息 ```javascript // 在浏览器控制台查看日志 // 当员工访问项目管理页面时,会自动输出: 🔐 CustomWxworkAuthGuard 执行 ✅ 获取用户信息成功: { name: "徐福静", userid: "XuFuJing", cid: "cDL6R1hgSi" } 🔎 currentProfile 查询结果: { id: "abc123", name: "徐福静", userid: "XuFuJing", isActivated: false, // ⚠️ 问题:这里应该是true activatedAt: null } ❌ Profile存在但未激活: { profileId: "abc123", isActivated: false, 所有字段: { name: "徐福静", userid: "XuFuJing", roleName: "设计师", isActivated: false, // ⚠️ 需要修复 isDisabled: false, isDeleted: false } } ⚠️ 用户未激活,跳转到激活页面 ``` ## ✅ 验证清单 修复完成后,请验证以下项目: - [ ] 员工可以正常访问项目管理页面 - [ ] Profile表中`isActivated`字段为`true` - [ ] 控制台没有激活相关的错误日志 - [ ] 员工可以正常查看和操作项目 - [ ] 其他页面功能正常(设计师工作台、组长看板等) --- **最后更新**: 2025-11-27 **维护者**: 开发团队