test-project-list-data.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /**
  2. * 项目列表数据测试脚本
  3. *
  4. * 用途:在浏览器控制台中运行,测试Parse Server项目数据查询
  5. *
  6. * 使用方法:
  7. * 1. 打开浏览器开发者工具(F12)
  8. * 2. 切换到Console标签
  9. * 3. 复制并粘贴此脚本
  10. * 4. 按回车运行
  11. */
  12. (async function testProjectListData() {
  13. console.log('🔍 开始测试项目列表数据加载...\n');
  14. // 1. 检查localStorage中的公司ID
  15. const companyId = localStorage.getItem('company');
  16. console.log('📊 步骤1: 检查公司ID');
  17. console.log(' 公司ID:', companyId || '❌ 未找到');
  18. if (!companyId) {
  19. console.error('❌ 错误: localStorage中没有company字段');
  20. console.log('💡 解决方法: 请先登录或手动设置公司ID');
  21. console.log(' 示例: localStorage.setItem("company", "your-company-id")');
  22. return;
  23. }
  24. // 2. 检查Parse是否可用
  25. console.log('\n📊 步骤2: 检查Parse SDK');
  26. if (typeof Parse === 'undefined') {
  27. console.error('❌ 错误: Parse SDK未加载');
  28. console.log('💡 解决方法: 请确保在项目页面中运行此脚本');
  29. return;
  30. }
  31. console.log(' ✅ Parse SDK已加载');
  32. // 3. 查询项目数据
  33. console.log('\n📊 步骤3: 查询项目数据');
  34. try {
  35. const ProjectQuery = new Parse.Query('Project');
  36. // 设置查询条件
  37. ProjectQuery.equalTo('company', {
  38. __type: 'Pointer',
  39. className: 'Company',
  40. objectId: companyId
  41. });
  42. ProjectQuery.notEqualTo('isDeleted', true);
  43. ProjectQuery.include('contact', 'assignee', 'owner');
  44. ProjectQuery.descending('updatedAt');
  45. ProjectQuery.limit(100);
  46. console.log(' 查询条件:');
  47. console.log(' - company:', companyId);
  48. console.log(' - isDeleted: != true');
  49. console.log(' - include: contact, assignee, owner');
  50. console.log(' - limit: 100');
  51. console.log(' 正在查询...');
  52. const projects = await ProjectQuery.find();
  53. console.log(`\n✅ 查询成功! 找到 ${projects.length} 个项目\n`);
  54. if (projects.length === 0) {
  55. console.warn('⚠️ 数据库中没有符合条件的项目');
  56. console.log('💡 可能的原因:');
  57. console.log(' 1. Project表中没有数据');
  58. console.log(' 2. 项目的company字段不匹配当前公司ID');
  59. console.log(' 3. 所有项目的isDeleted字段都为true');
  60. return;
  61. }
  62. // 4. 分析项目数据
  63. console.log('📊 步骤4: 分析项目数据\n');
  64. const statusCount = {};
  65. const stageCount = {};
  66. const assignedCount = { assigned: 0, unassigned: 0 };
  67. projects.forEach(project => {
  68. // 统计状态
  69. const status = project.get('status') || '未知';
  70. statusCount[status] = (statusCount[status] || 0) + 1;
  71. // 统计阶段
  72. const stage = project.get('currentStage') || '未知';
  73. stageCount[stage] = (stageCount[stage] || 0) + 1;
  74. // 统计分配情况
  75. const assignee = project.get('assignee');
  76. if (assignee && assignee.id) {
  77. assignedCount.assigned++;
  78. } else {
  79. assignedCount.unassigned++;
  80. }
  81. });
  82. console.log('📈 项目状态分布:');
  83. Object.entries(statusCount).forEach(([status, count]) => {
  84. console.log(` ${status}: ${count}个`);
  85. });
  86. console.log('\n📈 项目阶段分布:');
  87. Object.entries(stageCount).forEach(([stage, count]) => {
  88. console.log(` ${stage}: ${count}个`);
  89. });
  90. console.log('\n📈 分配情况:');
  91. console.log(` 已分配: ${assignedCount.assigned}个`);
  92. console.log(` 未分配: ${assignedCount.unassigned}个`);
  93. // 5. 显示前3个项目的详细信息
  94. console.log('\n📋 前3个项目详情:\n');
  95. projects.slice(0, 3).forEach((project, index) => {
  96. const contact = project.get('contact');
  97. const assignee = project.get('assignee');
  98. console.log(`${index + 1}. ${project.get('title') || '未命名项目'}`);
  99. console.log(` ID: ${project.id}`);
  100. console.log(` 客户: ${contact?.get('name') || '未知'}`);
  101. console.log(` 负责人: ${assignee?.get('name') || '未分配'}`);
  102. console.log(` 状态: ${project.get('status') || '未知'}`);
  103. console.log(` 阶段: ${project.get('currentStage') || '未知'}`);
  104. console.log(` 更新时间: ${project.get('updatedAt')?.toLocaleString() || '未知'}`);
  105. console.log('');
  106. });
  107. // 6. 看板分组预览
  108. console.log('📊 看板分组预览:\n');
  109. const orderAssignment = projects.filter(p => {
  110. const assignee = p.get('assignee');
  111. return !assignee || !assignee.id || p.get('currentStage') === '订单分配';
  112. });
  113. const requirements = projects.filter(p => {
  114. const stage = p.get('currentStage');
  115. const status = p.get('status');
  116. const assignee = p.get('assignee');
  117. const isAftercare = status === '已完成' || ['投诉处理', '客户评价'].includes(stage);
  118. const isOrder = !assignee || !assignee.id || stage === '订单分配';
  119. return !isAftercare && !isOrder && ['需求沟通', '方案确认'].includes(stage);
  120. });
  121. const delivery = projects.filter(p => {
  122. const stage = p.get('currentStage');
  123. const status = p.get('status');
  124. const assignee = p.get('assignee');
  125. const isAftercare = status === '已完成' || ['投诉处理', '客户评价'].includes(stage);
  126. const isOrder = !assignee || !assignee.id || stage === '订单分配';
  127. return !isAftercare && !isOrder && ['建模', '软装', '渲染', '后期', '尾款结算'].includes(stage);
  128. });
  129. const aftercare = projects.filter(p => {
  130. const stage = p.get('currentStage');
  131. const status = p.get('status');
  132. return status === '已完成' || ['投诉处理', '客户评价'].includes(stage);
  133. });
  134. console.log(` 订单分配: ${orderAssignment.length}个项目`);
  135. console.log(` 确认需求: ${requirements.length}个项目`);
  136. console.log(` 交付执行: ${delivery.length}个项目`);
  137. console.log(` 售后: ${aftercare.length}个项目`);
  138. console.log('\n✅ 测试完成! 数据加载正常\n');
  139. console.log('💡 提示: 如果页面上没有显示数据,请检查:');
  140. console.log(' 1. 浏览器控制台是否有错误信息');
  141. console.log(' 2. 网络请求是否成功(Network标签)');
  142. console.log(' 3. 页面是否正确初始化(刷新页面试试)');
  143. } catch (error) {
  144. console.error('❌ 查询失败:', error);
  145. console.log('\n💡 可能的原因:');
  146. console.log(' 1. Parse Server连接失败');
  147. console.log(' 2. 权限不足');
  148. console.log(' 3. 查询语法错误');
  149. console.log('\n详细错误信息:', error.message);
  150. }
  151. })();