test-setup.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. /**
  2. * 会话激活功能 - 一键测试数据设置脚本
  3. *
  4. * 使用方法:
  5. * 1. 在浏览器控制台中复制粘贴此脚本
  6. * 2. 或者在 HTML 中引入: <script src="/test-setup.js"></script>
  7. * 3. 调用 setupTestData() 函数
  8. */
  9. function setupTestData() {
  10. console.log('🚀 开始设置测试数据...\n');
  11. // ========== 1. 设置公司ID ==========
  12. localStorage.setItem('company', 'test-company-001');
  13. console.log('✅ 1/7 公司ID设置完成');
  14. // ========== 2. 设置当前用户 ==========
  15. const mockUser = {
  16. objectId: 'user-001',
  17. id: 'user-001',
  18. userid: 'wxwork-user-001',
  19. name: '测试技术员',
  20. realName: '张三',
  21. roleName: '技术',
  22. department: {
  23. __type: 'Pointer',
  24. className: 'Department',
  25. objectId: 'dept-001'
  26. },
  27. company: {
  28. __type: 'Pointer',
  29. className: 'Company',
  30. objectId: 'test-company-001'
  31. }
  32. };
  33. localStorage.setItem('currentUser', JSON.stringify(mockUser));
  34. console.log('✅ 2/7 当前用户设置完成:', mockUser.name);
  35. // ========== 3. 设置项目数据 ==========
  36. const mockProject = {
  37. objectId: 'project-001',
  38. id: 'project-001',
  39. title: '测试项目 - 现代简约风格装修',
  40. description: '客厅、卧室、厨房三室一厅装修,预算15-20万',
  41. status: '进行中',
  42. contact: {
  43. __type: 'Pointer',
  44. className: 'ContactInfo',
  45. objectId: 'contact-001'
  46. },
  47. assignee: {
  48. __type: 'Pointer',
  49. className: 'Profile',
  50. objectId: 'user-001'
  51. },
  52. department: {
  53. __type: 'Pointer',
  54. className: 'Department',
  55. objectId: 'dept-001'
  56. }
  57. };
  58. localStorage.setItem('mockProject', JSON.stringify(mockProject));
  59. console.log('✅ 3/7 项目数据设置完成:', mockProject.title);
  60. // ========== 4. 设置客户数据 ==========
  61. const mockContact = {
  62. objectId: 'contact-001',
  63. id: 'contact-001',
  64. name: '李女士',
  65. external_userid: 'external-user-001',
  66. mobile: '138****8888',
  67. company: 'test-company-001',
  68. data: {
  69. avatar: 'https://via.placeholder.com/100',
  70. wechat: 'lixiaojie123',
  71. tags: {
  72. preference: '现代简约',
  73. budget: { min: 150000, max: 200000 },
  74. colorAtmosphere: '暖色调'
  75. }
  76. }
  77. };
  78. localStorage.setItem('mockContact', JSON.stringify(mockContact));
  79. console.log('✅ 4/7 客户数据设置完成:', mockContact.name);
  80. // ========== 5. 设置群聊数据 ==========
  81. const now = Math.floor(Date.now() / 1000);
  82. const mockGroupChat = {
  83. objectId: 'groupchat-001',
  84. id: 'groupchat-001',
  85. chat_id: 'wrkSFfCgAAXXXXXXXXXXXXXXXXXXXX',
  86. name: '【李女士】现代简约装修项目群',
  87. company: 'test-company-001',
  88. project: {
  89. __type: 'Pointer',
  90. className: 'Project',
  91. objectId: 'project-001'
  92. },
  93. introSent: false,
  94. introSentAt: null,
  95. joinQrcode: {
  96. qr_code: 'https://via.placeholder.com/300?text=QR+Code'
  97. },
  98. joinUrl: {
  99. join_url: 'https://work.weixin.qq.com/ca/cawcde123456'
  100. },
  101. member_list: [
  102. {
  103. userid: 'wxwork-user-001',
  104. type: 1,
  105. name: '张三',
  106. invitor: {
  107. userid: 'admin-001'
  108. }
  109. },
  110. {
  111. userid: 'external-user-001',
  112. type: 2,
  113. name: '李女士',
  114. invitor: {
  115. userid: 'wxwork-user-001'
  116. }
  117. },
  118. {
  119. userid: 'wxwork-user-002',
  120. type: 1,
  121. name: '王组长',
  122. invitor: {
  123. userid: 'admin-001'
  124. }
  125. }
  126. ],
  127. messages: [
  128. {
  129. msgid: 'msg-001',
  130. from: 'external-user-001',
  131. msgtime: now - 3600, // 1小时前
  132. msgtype: 'text',
  133. text: {
  134. content: '你好,我想了解一下项目的进度'
  135. }
  136. },
  137. {
  138. msgid: 'msg-002',
  139. from: 'wxwork-user-001',
  140. msgtime: now - 3500,
  141. msgtype: 'text',
  142. text: {
  143. content: '您好李女士,目前我们正在进行方案设计,预计明天可以给您看初稿'
  144. }
  145. },
  146. {
  147. msgid: 'msg-003',
  148. from: 'external-user-001',
  149. msgtime: now - 3400,
  150. msgtype: 'text',
  151. text: {
  152. content: '好的,那我等你们的消息'
  153. }
  154. },
  155. {
  156. msgid: 'msg-004',
  157. from: 'external-user-001',
  158. msgtime: now - 700, // 11分钟前(超过10分钟)
  159. msgtype: 'text',
  160. text: {
  161. content: '对了,我想把客厅的颜色改成浅灰色,可以吗?'
  162. }
  163. },
  164. {
  165. msgid: 'msg-005',
  166. from: 'external-user-001',
  167. msgtime: now - 650, // 10分钟前(刚好10分钟)
  168. msgtype: 'text',
  169. text: {
  170. content: '还有厨房的橱柜我想换个品牌'
  171. }
  172. }
  173. ]
  174. };
  175. localStorage.setItem('mockGroupChat', JSON.stringify(mockGroupChat));
  176. console.log('✅ 5/7 群聊数据设置完成:', mockGroupChat.name);
  177. console.log(' - 消息数量:', mockGroupChat.messages.length);
  178. console.log(' - 成员数量:', mockGroupChat.member_list.length);
  179. // ========== 6. 设置部门数据 ==========
  180. const mockDepartment = {
  181. objectId: 'dept-001',
  182. id: 'dept-001',
  183. name: '设计部',
  184. leader: {
  185. __type: 'Pointer',
  186. className: 'Profile',
  187. objectId: 'leader-001'
  188. }
  189. };
  190. localStorage.setItem('mockDepartment', JSON.stringify(mockDepartment));
  191. console.log('✅ 6/7 部门数据设置完成:', mockDepartment.name);
  192. // ========== 7. 设置组长数据 ==========
  193. const mockLeader = {
  194. objectId: 'leader-001',
  195. id: 'leader-001',
  196. name: '王组长',
  197. userid: 'wxwork-user-002',
  198. roleName: '组长'
  199. };
  200. localStorage.setItem('mockLeader', JSON.stringify(mockLeader));
  201. console.log('✅ 7/7 组长数据设置完成:', mockLeader.name);
  202. console.log('\n🎉 所有测试数据设置完成!\n');
  203. console.log('📊 数据摘要:');
  204. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  205. console.log('公司ID:', localStorage.getItem('company'));
  206. console.log('当前用户:', mockUser.name, '(' + mockUser.roleName + ')');
  207. console.log('项目:', mockProject.title);
  208. console.log('客户:', mockContact.name);
  209. console.log('群聊:', mockGroupChat.name);
  210. console.log('消息数:', mockGroupChat.messages.length, '条');
  211. console.log('客户消息:', mockGroupChat.messages.filter(m => m.from === 'external-user-001').length, '条');
  212. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
  213. console.log('🔗 测试链接:');
  214. console.log('http://localhost:4200/wxwork/test-company-001/project/project-001/chat-activation\n');
  215. console.log('💡 提示:');
  216. console.log('- 直接访问上面的链接即可开始测试');
  217. console.log('- 如需清除数据,执行: clearTestData()');
  218. console.log('- 如需查看数据,执行: viewTestData()');
  219. return {
  220. success: true,
  221. message: '测试数据设置完成',
  222. testUrl: 'http://localhost:4200/wxwork/test-company-001/project/project-001/chat-activation'
  223. };
  224. }
  225. /**
  226. * 清除所有测试数据
  227. */
  228. function clearTestData() {
  229. console.log('🗑️ 开始清除测试数据...\n');
  230. const keys = [
  231. 'company',
  232. 'currentUser',
  233. 'mockProject',
  234. 'mockContact',
  235. 'mockGroupChat',
  236. 'mockDepartment',
  237. 'mockLeader'
  238. ];
  239. keys.forEach((key, index) => {
  240. localStorage.removeItem(key);
  241. console.log(`✅ ${index + 1}/${keys.length} ${key} 已清除`);
  242. });
  243. console.log('\n🎉 所有测试数据已清除!\n');
  244. return {
  245. success: true,
  246. message: '测试数据已清除'
  247. };
  248. }
  249. /**
  250. * 查看当前测试数据
  251. */
  252. function viewTestData() {
  253. console.log('📊 当前测试数据:\n');
  254. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  255. const company = localStorage.getItem('company');
  256. const user = localStorage.getItem('currentUser');
  257. const project = localStorage.getItem('mockProject');
  258. const contact = localStorage.getItem('mockContact');
  259. const groupChat = localStorage.getItem('mockGroupChat');
  260. const department = localStorage.getItem('mockDepartment');
  261. const leader = localStorage.getItem('mockLeader');
  262. if (company) {
  263. console.log('✅ 公司ID:', company);
  264. } else {
  265. console.log('❌ 公司ID: 未设置');
  266. }
  267. if (user) {
  268. const userData = JSON.parse(user);
  269. console.log('✅ 当前用户:', userData.name, '(' + userData.roleName + ')');
  270. } else {
  271. console.log('❌ 当前用户: 未设置');
  272. }
  273. if (project) {
  274. const projectData = JSON.parse(project);
  275. console.log('✅ 项目:', projectData.title);
  276. } else {
  277. console.log('❌ 项目: 未设置');
  278. }
  279. if (contact) {
  280. const contactData = JSON.parse(contact);
  281. console.log('✅ 客户:', contactData.name);
  282. } else {
  283. console.log('❌ 客户: 未设置');
  284. }
  285. if (groupChat) {
  286. const groupChatData = JSON.parse(groupChat);
  287. console.log('✅ 群聊:', groupChatData.name);
  288. console.log(' - 消息数:', groupChatData.messages.length);
  289. console.log(' - 成员数:', groupChatData.member_list.length);
  290. console.log(' - 群介绍已发送:', groupChatData.introSent ? '是' : '否');
  291. } else {
  292. console.log('❌ 群聊: 未设置');
  293. }
  294. if (department) {
  295. const deptData = JSON.parse(department);
  296. console.log('✅ 部门:', deptData.name);
  297. } else {
  298. console.log('❌ 部门: 未设置');
  299. }
  300. if (leader) {
  301. const leaderData = JSON.parse(leader);
  302. console.log('✅ 组长:', leaderData.name);
  303. } else {
  304. console.log('❌ 组长: 未设置');
  305. }
  306. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n');
  307. const allSet = company && user && project && contact && groupChat && department && leader;
  308. if (allSet) {
  309. console.log('✅ 所有数据已设置,可以开始测试!');
  310. console.log('🔗 测试链接: http://localhost:4200/wxwork/test-company-001/project/project-001/chat-activation\n');
  311. } else {
  312. console.log('⚠️ 部分数据未设置,请执行: setupTestData()\n');
  313. }
  314. return {
  315. allSet,
  316. data: {
  317. company: !!company,
  318. user: !!user,
  319. project: !!project,
  320. contact: !!contact,
  321. groupChat: !!groupChat,
  322. department: !!department,
  323. leader: !!leader
  324. }
  325. };
  326. }
  327. /**
  328. * 添加超时未回复的消息(用于测试超时提醒功能)
  329. */
  330. function addOverdueMessages() {
  331. console.log('⏰ 添加超时未回复消息...\n');
  332. const groupChatStr = localStorage.getItem('mockGroupChat');
  333. if (!groupChatStr) {
  334. console.error('❌ 群聊数据不存在,请先执行 setupTestData()');
  335. return;
  336. }
  337. const groupChat = JSON.parse(groupChatStr);
  338. const now = Math.floor(Date.now() / 1000);
  339. // 添加15分钟前的客户消息(未回复)
  340. groupChat.messages.push({
  341. msgid: 'msg-overdue-1',
  342. from: 'external-user-001',
  343. msgtime: now - 900, // 15分钟前
  344. msgtype: 'text',
  345. text: {
  346. content: '请问什么时候可以开始施工?'
  347. }
  348. });
  349. // 添加20分钟前的客户消息(未回复)
  350. groupChat.messages.push({
  351. msgid: 'msg-overdue-2',
  352. from: 'external-user-001',
  353. msgtime: now - 1200, // 20分钟前
  354. msgtype: 'text',
  355. text: {
  356. content: '预算能不能再优化一下?'
  357. }
  358. });
  359. localStorage.setItem('mockGroupChat', JSON.stringify(groupChat));
  360. console.log('✅ 已添加2条超时未回复消息');
  361. console.log(' - 15分钟前: "请问什么时候可以开始施工?"');
  362. console.log(' - 20分钟前: "预算能不能再优化一下?"');
  363. console.log('\n💡 刷新页面查看效果\n');
  364. return {
  365. success: true,
  366. message: '超时消息已添加'
  367. };
  368. }
  369. /**
  370. * 模拟发送群介绍
  371. */
  372. function simulateSendIntro() {
  373. console.log('📤 模拟发送群介绍...\n');
  374. const groupChatStr = localStorage.getItem('mockGroupChat');
  375. if (!groupChatStr) {
  376. console.error('❌ 群聊数据不存在,请先执行 setupTestData()');
  377. return;
  378. }
  379. const groupChat = JSON.parse(groupChatStr);
  380. groupChat.introSent = true;
  381. groupChat.introSentAt = new Date().toISOString();
  382. localStorage.setItem('mockGroupChat', JSON.stringify(groupChat));
  383. console.log('✅ 群介绍已标记为已发送');
  384. console.log(' 发送时间:', groupChat.introSentAt);
  385. console.log('\n💡 刷新页面查看效果\n');
  386. return {
  387. success: true,
  388. message: '群介绍已标记为已发送'
  389. };
  390. }
  391. // 自动执行提示
  392. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  393. console.log('🧪 会话激活功能 - 测试工具已加载');
  394. console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
  395. console.log('\n可用命令:');
  396. console.log(' setupTestData() - 一键设置所有测试数据');
  397. console.log(' clearTestData() - 清除所有测试数据');
  398. console.log(' viewTestData() - 查看当前测试数据');
  399. console.log(' addOverdueMessages() - 添加超时未回复消息');
  400. console.log(' simulateSendIntro() - 模拟发送群介绍');
  401. console.log('\n💡 快速开始: 执行 setupTestData() 即可开始测试\n');
  402. // 导出函数(如果在模块环境中)
  403. if (typeof module !== 'undefined' && module.exports) {
  404. module.exports = {
  405. setupTestData,
  406. clearTestData,
  407. viewTestData,
  408. addOverdueMessages,
  409. simulateSendIntro
  410. };
  411. }