parent-message-factory.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. function getCurrentTimeLabel() {
  2. const now = new Date()
  3. const hours = String(now.getHours()).padStart(2, '0')
  4. const minutes = String(now.getMinutes()).padStart(2, '0')
  5. return `${hours}:${minutes}`
  6. }
  7. function createBaseMessage(payload = {}) {
  8. return {
  9. direction: payload.direction || 'right',
  10. department: payload.department || '家长',
  11. name: payload.name || '我',
  12. time: payload.time || getCurrentTimeLabel(),
  13. ...payload
  14. }
  15. }
  16. export function createTextMessage(payload = {}) {
  17. return createBaseMessage({
  18. type: 'text',
  19. content: payload.content || '',
  20. needReceipt: Boolean(payload.needReceipt),
  21. receiptStatus: payload.receiptStatus || 'unread',
  22. showReceiptToggle: payload.showReceiptToggle ?? false,
  23. ...payload
  24. })
  25. }
  26. export function createVoiceMessage(payload = {}) {
  27. return createBaseMessage({
  28. type: 'voice',
  29. duration: payload.duration || '00',
  30. isRecording: Boolean(payload.isRecording),
  31. voicePreview: payload.voicePreview || '',
  32. voiceText: payload.voiceText || '',
  33. needReceipt: Boolean(payload.needReceipt),
  34. receiptStatus: payload.receiptStatus || 'unread',
  35. ...payload
  36. })
  37. }
  38. export function createImageMessage(payload = {}) {
  39. return createBaseMessage({
  40. type: 'image',
  41. imageUrl: payload.imageUrl || '/static/logo.png',
  42. ...payload
  43. })
  44. }
  45. export function createFileMessage(payload = {}) {
  46. return createBaseMessage({
  47. type: 'file',
  48. fileName: payload.fileName || '未命名文件',
  49. fileUrl: payload.fileUrl || '',
  50. ...payload
  51. })
  52. }
  53. export function createVideoMessage(payload = {}) {
  54. return createBaseMessage({
  55. type: 'video',
  56. coverUrl: payload.coverUrl || '/static/logo.png',
  57. videoUrl: payload.videoUrl || '',
  58. duration: payload.duration || '',
  59. ...payload
  60. })
  61. }
  62. export function collectImageUrls(messages = []) {
  63. return messages
  64. .filter((item) => item.type === 'image' && item.imageUrl)
  65. .map((item) => item.imageUrl)
  66. }
  67. export function getInitialParentMessages() {
  68. return [
  69. createTextMessage({
  70. direction: 'left',
  71. department: '一年级A班',
  72. name: '张三',
  73. time: '15:25',
  74. content: '你好啊',
  75. needReceipt: true,
  76. receiptStatus: 'unread'
  77. }),
  78. createBaseMessage({
  79. type: 'call',
  80. direction: 'left',
  81. department: '一年级A班',
  82. name: '张三',
  83. time: '15:26',
  84. duration: '00:25'
  85. }),
  86. createBaseMessage({
  87. type: 'call',
  88. direction: 'right',
  89. department: '家长',
  90. name: '李四',
  91. time: '15:30',
  92. duration: '00:25'
  93. }),
  94. createVoiceMessage({
  95. direction: 'left',
  96. department: '一年级A班',
  97. name: '张珊',
  98. time: '15:23',
  99. duration: '24',
  100. voicePreview: '这段音频前面的字',
  101. voiceText: '这是转写这段音频的所有内容,但转成文字的功能暂时不够,设计图先有,转成文字后,"确认阅读"跟着。',
  102. needReceipt: true,
  103. receiptStatus: 'unread'
  104. }),
  105. createVoiceMessage({
  106. direction: 'right',
  107. department: '家长',
  108. name: '李四',
  109. time: '18:28',
  110. duration: '15',
  111. voicePreview: '这是我发的语音',
  112. voiceText: '这是我发的语音消息的完整转写内容。',
  113. needReceipt: true,
  114. receiptStatus: 'read',
  115. showReceiptToggle: false
  116. }),
  117. createVoiceMessage({
  118. direction: 'left',
  119. department: '一年级A班',
  120. name: '张三',
  121. time: '17:25',
  122. duration: '16',
  123. isRecording: true,
  124. voicePreview: '正在录音中'
  125. }),
  126. createTextMessage({
  127. direction: 'right',
  128. department: '家长',
  129. name: '王五',
  130. time: '19:30',
  131. content: '这是我刚发的消息',
  132. showReceiptToggle: true
  133. }),
  134. createTextMessage({
  135. direction: 'right',
  136. department: '家长',
  137. name: '李四',
  138. time: '19:25',
  139. content: '这是我之前发的消息,已经勾选了带回执',
  140. needReceipt: true,
  141. receiptStatus: 'read',
  142. showReceiptToggle: false
  143. }),
  144. createImageMessage({
  145. direction: 'left',
  146. department: '一年级A班',
  147. name: '班主任',
  148. time: '19:40',
  149. imageUrl: '/static/logo.png'
  150. }),
  151. createImageMessage({
  152. direction: 'right',
  153. department: '家长',
  154. name: '李四',
  155. time: '19:40',
  156. imageUrl: '/static/images/deviceunlogin.png'
  157. }),
  158. createFileMessage({
  159. direction: 'right',
  160. department: '家长',
  161. name: '李四',
  162. time: '19:41',
  163. fileName: '归档.zip',
  164. fileUrl: 'https://www.iconfont.cn/api/project/download.zip?spm=a313x.manage_type_myprojects.i1.d7543c303.6a0d3a81LqAtP4&pid=5081296&ctoken=null'
  165. }),
  166. createVideoMessage({
  167. direction: 'left',
  168. department: '一年级A班',
  169. name: '班主任',
  170. time: '19:42',
  171. coverUrl: '/static/images/deviceunlogin.png',
  172. videoUrl: 'https://v2.cri.cn/c89e53c6-0bc7-45ca-ac11-a385002d7d11/cb5a6d96-d0c4-4fd0-a895-b6135667d84a/video/2df23555-d075-4988-9d06-0f3564517974.mp4'
  173. })
  174. ]
  175. }