员工: 王刚 现象: 显示"员工 王刚 问卷状态: 未完成" 预期: 后端已完成问卷,应该显示"已完成问卷"
# 在项目根目录执行
grep -r "loadEmployeeSurvey" src/app/pages/team-leader/employee-detail-panel/
结果: 没有找到任何匹配
结论: ✅ @employee-detail-panel 组件完全没有被修改
组长端:
dashboard.ts (组长的父组件)
→ loadEmployeeSurvey() [在 dashboard.ts 中]
→ generateEmployeeDetail() [准备数据]
→ <app-employee-detail-panel [employeeDetail]="..."> [显示数据]
管理端:
employees.ts (管理端的父组件)
→ loadEmployeeSurvey() [在 employees.ts 中] ← ⭐ 我们修改的地方
→ selectedEmployeeForPanel [准备数据]
→ <app-employee-info-panel [employee]="...">
→ <app-employee-detail-panel [employeeDetail]="..."> [显示数据]
重要: employee-detail-panel 只负责显示,不负责加载数据!
F12 打开开发者工具Console 标签在员工列表中点击"王刚",打开员工信息面板。
应该看到的日志顺序:
🔄 [Employees] 预加载员工 employeeId 的完整数据...
✅ [Employees] 项目数据加载完成: {
currentProjects: X,
ongoingProjects: X,
项目列表: [...]
}
📅 [Employees] 日历数据生成完成: {
days: 42,
有项目的天数: X
}
🔍 查找员工 王刚,找到 X 个结果
🔴 关键检查点 A:
realname 或 name 与 Profile 表不匹配如果 X = 0,请检查:
realname 字段是什么?name 字段是什么?📋 Profile ID: xxx, surveyCompleted: true/false
🔴 关键检查点 B:
surveyCompleted: true → 继续下一步surveyCompleted: false → 问题原因:Profile 表中的 surveyCompleted 字段未设置为 true如果 surveyCompleted: false,请检查:
Profilerealname 或 name 字段)surveyCompleted 字段值false 或不存在,需要更新为 true📝 找到 X 条问卷记录
🔴 关键检查点 C:
type 不是 'survey-profile'如果 X = 0,请检查:
SurveyLogprofile 字段指向"王刚"的 Profile 记录type 字段是否为 'survey-profile'answers 数组是否有数据✅ 加载问卷数据成功,共 X 道题
🔴 关键检查点 D:
📋 员工 王刚 问卷状态: 已完成/未完成
这条日志总结了问卷状态。
📝 [Employees] 问卷数据加载完成: {
completed: true/false,
answers: X
}
🎯 [Employees] 完整数据准备完成,打开面板: {
surveyData: '✅'/'❌'
}
原因: Employee 表和 Profile 表的姓名字段不匹配
解决方案 A: 检查数据库中的姓名
// 在控制台运行(管理端页面)
// 查看 Employee 表中的数据
console.log('Employee.realname:', '王刚的realname值');
console.log('Employee.name:', '王刚的name值');
解决方案 B: 临时调试代码(添加更多查询条件)
// 在 employees.ts 的 loadEmployeeSurvey 方法中添加(第 508 行附近)
// 额外尝试查询 userid
const useridQuery = new Parse.Query('Profile');
useridQuery.equalTo('userid', emp.userid); // 使用企微 userid
const profileQuery = Parse.Query.or(realnameQuery, nameQuery, useridQuery);
原因: Profile 表中的 surveyCompleted 字段未正确设置
解决方案:
https://your-parse-server.com/dashboardnova 应用Profile 表surveyCompleted 字段,设置为 true或者使用 Cloud Code 批量更新:
// 在 Parse Dashboard 的 Cloud Code 中执行
Parse.Cloud.define('fixSurveyCompleted', async (request) => {
const Parse = require('parse/node');
const query = new Parse.Query('Profile');
query.equalTo('realname', '王刚');
const profile = await query.first({ useMasterKey: true });
if (profile) {
// 检查是否有问卷记录
const surveyQuery = new Parse.Query('SurveyLog');
surveyQuery.equalTo('profile', profile.toPointer());
surveyQuery.equalTo('type', 'survey-profile');
const survey = await surveyQuery.first({ useMasterKey: true });
if (survey && survey.get('answers')?.length > 0) {
profile.set('surveyCompleted', true);
await profile.save(null, { useMasterKey: true });
return { success: true, message: '已更新 surveyCompleted 为 true' };
}
}
return { success: false, message: '未找到记录' };
});
原因 A: type 字段不是 'survey-profile'
检查方法:
SurveyLog 表profile 指向"王刚"的记录type 字段值如果 type 不是 'survey-profile',有两个选择:
选择 1: 更新 SurveyLog 的 type
// 在 Parse Dashboard 中手动修改
type: 'survey-profile'
选择 2: 修改查询代码(移除 type 限制)
// 在 employees.ts 的第 533 行修改
const surveyQuery = new Parse.Query('SurveyLog');
surveyQuery.equalTo('profile', profile.toPointer());
// surveyQuery.equalTo('type', 'survey-profile'); // ← 注释掉这行
surveyQuery.descending('createdAt');
surveyQuery.limit(1);
原因 B: profile Pointer 不匹配
解决方案: 检查 SurveyLog 中的 profile 字段是否正确指向 Profile 表的记录
检查点: 确认数据是否正确传递到 employee-detail-panel
在控制台查找:
✅ [employeeDetailForTeamLeader] 转换完成: {
surveyCompleted: true,
hasSurveyData: true
}
如果这两个值都是 true,但页面仍未显示问卷,请检查:
ChangeDetectionStrategy.OnPush 导致的问题)当一切正常时,应该看到:
🔄 [Employees] 预加载员工 xxx 的完整数据...
✅ [Employees] 项目数据加载完成: { currentProjects: 7, ... }
📅 [Employees] 日历数据生成完成: { days: 42, 有项目的天数: 15 }
🔍 查找员工 王刚,找到 1 个结果 // ✅ 找到 Profile
📋 Profile ID: abc123, surveyCompleted: true // ✅ 已完成标记
📝 找到 1 条问卷记录 // ✅ 找到 SurveyLog
✅ 加载问卷数据成功,共 25 道题 // ✅ 答案数据完整
📋 员工 王刚 问卷状态: 已完成 // ✅ 最终状态
📝 [Employees] 问卷数据加载完成: { completed: true, answers: 25 }
🎯 [Employees] 完整数据准备完成,打开面板: { surveyData: '✅' }
✅ [Employees] 面板已显示
✅ [employeeDetailForTeamLeader] 转换完成: {
surveyCompleted: true,
hasSurveyData: true
}
然后在页面上能看到:
| 日志内容 | 说明 | 下一步 |
|---|---|---|
找到 0 个结果 |
Profile 查询失败 | 检查姓名匹配 |
surveyCompleted: false |
Profile 标记错误 | 更新 Profile 表 |
找到 0 条问卷记录 |
SurveyLog 查询失败 | 检查 type 字段 |
加载问卷数据成功 |
数据加载成功 | 检查组件显示 |
如果按照上述步骤仍无法解决,请提供:
有了这些信息,我可以精确定位问题所在!
版本: v1.0
创建时间: 2025-11-10
适用于: 管理端员工信息面板问卷显示问题