错误信息:createWithoutData is not a function
位置:src/app/services/designer-task.service.ts:82
原因:Parse SDK 使用方式不正确
修复:
// 修复前
productQuery.equalTo('profile', this.Parse.Object.extend('Profile').createWithoutData(designerId));
// 修复后
const ProfileClass = this.Parse.Object.extend('Profile');
const profilePointer = new ProfileClass();
profilePointer.id = designerId;
productQuery.equalTo('profile', profilePointer);
问题:导航条显示"未知用户",Profile 表中所有用户字段都是 undefined
原因:
修复措施:
// 新增方法:syncWxworkUserInfo()
private async syncWxworkUserInfo(profile: FmodeObject): Promise<void> {
// 检查 Profile 是否已有用户名
const existingName = profile.get('name') || profile.get('realname');
if (existingName) return;
// 从企微获取用户信息
const userInfo = await this.wxAuth?.getUserInfo();
if (userInfo) {
// 更新并保存 Profile
if (userInfo.name) profile.set('name', userInfo.name);
if (userInfo.avatar) profile.set('avatar', userInfo.avatar);
// ... 更多字段
await profile.save();
}
}
private async mapProfileToUser(profile: FmodeObject): Promise<CurrentUser> {
// 1. 尝试从 Profile 获取
let name = profile.get('name') || profile.get('realname') || ...;
let avatar = profile.get('avatar') || profile.get('avatarUrl') || ...;
// 2. 如果没有,从 wxAuth 获取
if (!name || !avatar) {
const wxUserInfo = await this.wxAuth?.getUserInfo();
if (wxUserInfo) {
name = name || wxUserInfo.name;
avatar = avatar || wxUserInfo.avatar;
}
}
// 3. 最终降级到默认值
name = name || '未知用户';
avatar = avatar || this.getDefaultAvatar();
return { userid, name, avatar, roleName, ... };
}
console.log('📋 完整 Profile 对象:', profile);
console.log('📋 完整 User 对象:', user);
console.log('📋 从 wxAuth 获取用户信息:', wxUserInfo);
console.log('📋 Profile 字段调试:', {
name, realname, username, avatar, ...
'最终使用的name': name,
'最终使用的avatar': avatar
});
错误信息:Error: [object Object]
修复:增强错误日志输出
catch (error: any) {
console.error('❌ 获取设计师任务失败:', error);
console.error('❌ 错误详情:', error.message || error.toString());
console.error('❌ 错误堆栈:', error.stack);
return [];
}
# 按 Ctrl+Shift+R 或 Cmd+Shift+R 强制刷新
打开浏览器开发者工具(F12),查找以下日志:
✅ 设计师端企微认证初始化成功,CID: cDL6R1hgSi
✅ 设计师登录成功: xxx
✅ Profile ID: m9xAo3sPLu
📋 完整 Profile 对象: Parse.Object {_objCount: ...}
📋 完整 User 对象: Parse.User {_objCount: ...}
🔄 开始同步企微用户信息...
📋 企微用户信息: { name: '王刚', avatar: '...', ... }
✅ 用户信息已同步到 Profile
📋 从 wxAuth 获取用户信息: { name: '王刚', ... }
📋 Profile 字段调试: {
name: '王刚',
realname: '王刚',
avatar: 'http://...',
最终使用的name: '王刚',
最终使用的avatar: 'http://...'
}
✅ 用户信息映射完成: {userid: '...', name: '王刚', ...}
刷新页面后,请在控制台中查找并截图:
📋 企微用户信息: { ... }
📋 Profile 字段调试: {
name: ...,
realname: ...,
最终使用的name: ...,
最终使用的avatar: ...
}
❌ 获取设计师任务失败: ...
❌ 错误详情: ...
❌ 错误堆栈: ...
wxAuth.getUserInfo() 返回 null
Profile 表权限问题
企微 API 未提供用户名
可以考虑以下方案:
在首次登录时,弹出模态框让用户输入姓名
name = name || `用户_${profile.get('userid')?.slice(-6)}`;
不要清除 localStorage
查看完整的控制台日志
如果头像无法显示
现在请刷新页面,并将控制台的日志截图发给我!🔍