fix-employee-activation.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. /**
  2. * 员工激活状态快速修复脚本
  3. *
  4. * 使用方法:
  5. * 1. 打开浏览器控制台(F12)
  6. * 2. 复制整个脚本并粘贴到控制台
  7. * 3. 按回车执行
  8. * 4. 等待修复完成
  9. * 5. 让员工重新登录
  10. */
  11. (async function fixEmployeeActivation() {
  12. console.log('🔧 开始修复员工激活状态...');
  13. // 目标员工ID
  14. const targetUserid = 'woAs2qCQAAGQckyg7AQBxhMEoSwnlTvg';
  15. try {
  16. // 获取Parse实例
  17. const Parse = window.Parse || (await import('https://unpkg.com/parse@latest/dist/parse.min.js')).default;
  18. // 检查Parse是否已初始化
  19. if (!Parse.applicationId) {
  20. console.error('❌ Parse未初始化,请在应用页面中运行此脚本');
  21. return;
  22. }
  23. console.log('✅ Parse已初始化');
  24. console.log('🔍 查询员工:', targetUserid);
  25. // 查询Profile
  26. const query = new Parse.Query('Profile');
  27. query.equalTo('userid', targetUserid);
  28. const profile = await query.first();
  29. if (!profile) {
  30. console.error('❌ 未找到员工记录');
  31. console.log('💡 提示:请确认userid是否正确');
  32. return;
  33. }
  34. console.log('✅ 找到员工记录:', {
  35. objectId: profile.id,
  36. name: profile.get('name'),
  37. realname: profile.get('realname'),
  38. userid: profile.get('userid'),
  39. isActivated: profile.get('isActivated'),
  40. activatedAt: profile.get('activatedAt'),
  41. isDeleted: profile.get('isDeleted'),
  42. isDisabled: profile.get('isDisabled')
  43. });
  44. // 检查当前状态
  45. const currentActivated = profile.get('isActivated');
  46. console.log('📊 当前激活状态:', currentActivated);
  47. console.log('📊 激活状态类型:', typeof currentActivated);
  48. if (currentActivated === true) {
  49. console.log('✅ 员工已激活,无需修复');
  50. console.log('💡 如果仍然无法访问,请检查:');
  51. console.log(' 1. 清除浏览器缓存');
  52. console.log(' 2. 退出并重新进入企业微信应用');
  53. console.log(' 3. 检查isDeleted和isDisabled字段');
  54. return;
  55. }
  56. // 修复激活状态
  57. console.log('🔧 开始修复...');
  58. profile.set('isActivated', true);
  59. if (!profile.get('activatedAt')) {
  60. profile.set('activatedAt', new Date());
  61. }
  62. // 清除可能的禁用标记
  63. if (profile.get('isDeleted')) {
  64. profile.unset('isDeleted');
  65. console.log('✅ 已清除isDeleted标记');
  66. }
  67. if (profile.get('isDisabled')) {
  68. profile.unset('isDisabled');
  69. console.log('✅ 已清除isDisabled标记');
  70. }
  71. // 保存
  72. await profile.save();
  73. console.log('✅ 修复完成!');
  74. // 验证修复结果
  75. await profile.fetch();
  76. console.log('✅ 验证修复结果:', {
  77. objectId: profile.id,
  78. name: profile.get('name'),
  79. isActivated: profile.get('isActivated'),
  80. activatedAt: profile.get('activatedAt'),
  81. isDeleted: profile.get('isDeleted'),
  82. isDisabled: profile.get('isDisabled')
  83. });
  84. if (profile.get('isActivated') === true) {
  85. console.log('🎉 修复成功!');
  86. console.log('📝 下一步操作:');
  87. console.log(' 1. 让员工清除浏览器缓存');
  88. console.log(' 2. 退出企业微信应用');
  89. console.log(' 3. 重新进入应用');
  90. console.log(' 4. 尝试访问项目管理页面');
  91. } else {
  92. console.error('❌ 修复失败,请联系技术支持');
  93. }
  94. } catch (error) {
  95. console.error('❌ 修复过程出错:', error);
  96. console.log('💡 可能的原因:');
  97. console.log(' 1. 没有足够的权限修改Profile');
  98. console.log(' 2. 网络连接问题');
  99. console.log(' 3. Parse服务异常');
  100. console.log('📝 请尝试以下方法:');
  101. console.log(' 1. 使用管理员账号登录');
  102. console.log(' 2. 在Parse Dashboard中手动修改');
  103. console.log(' 3. 联系技术支持');
  104. }
  105. })();
  106. // 批量修复所有未激活员工的脚本
  107. async function batchFixAllEmployees() {
  108. console.log('🔧 开始批量修复所有未激活员工...');
  109. try {
  110. const Parse = window.Parse;
  111. if (!Parse || !Parse.applicationId) {
  112. console.error('❌ Parse未初始化');
  113. return;
  114. }
  115. // 查询所有未激活的员工
  116. const query = new Parse.Query('Profile');
  117. // 条件1: isActivated不为true
  118. query.notEqualTo('isActivated', true);
  119. // 条件2: 未删除
  120. query.notEqualTo('isDeleted', true);
  121. // 条件3: 未禁用
  122. query.notEqualTo('isDisabled', true);
  123. query.limit(1000);
  124. const profiles = await query.find();
  125. console.log(`📊 找到 ${profiles.length} 个未激活的员工`);
  126. if (profiles.length === 0) {
  127. console.log('✅ 所有员工都已激活');
  128. return;
  129. }
  130. let successCount = 0;
  131. let failCount = 0;
  132. for (const profile of profiles) {
  133. try {
  134. const userid = profile.get('userid');
  135. const name = profile.get('name') || profile.get('realname');
  136. console.log(`🔧 修复员工: ${name} (${userid})`);
  137. profile.set('isActivated', true);
  138. if (!profile.get('activatedAt')) {
  139. profile.set('activatedAt', new Date());
  140. }
  141. await profile.save();
  142. successCount++;
  143. console.log(`✅ 修复成功: ${name}`);
  144. } catch (error) {
  145. failCount++;
  146. console.error(`❌ 修复失败: ${profile.get('name')}`, error);
  147. }
  148. }
  149. console.log('📊 批量修复完成:');
  150. console.log(` ✅ 成功: ${successCount}`);
  151. console.log(` ❌ 失败: ${failCount}`);
  152. console.log(` 📊 总计: ${profiles.length}`);
  153. } catch (error) {
  154. console.error('❌ 批量修复出错:', error);
  155. }
  156. }
  157. // 导出批量修复函数(可选)
  158. console.log('💡 提示:如需批量修复所有员工,请运行: batchFixAllEmployees()');