list-normalize.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { pickAnchorUserNoFromRow, pickIsFollowFromRow } from '@/features/live/follow-state'
  2. /**
  3. * 统一解析直播列表接口 payload(兼容拦截器解包前后多种结构)
  4. */
  5. export function extractBroadcastRows(payload) {
  6. if (Array.isArray(payload)) return payload
  7. if (!payload || typeof payload !== 'object') return []
  8. if (Array.isArray(payload.data)) return payload.data
  9. if (payload.data && Array.isArray(payload.data.data)) return payload.data.data
  10. if (Array.isArray(payload.list)) return payload.list
  11. return []
  12. }
  13. /** 解析直播列表分页(livelist 接口) */
  14. export function extractBroadcastPage(payload) {
  15. const rows = extractBroadcastRows(payload)
  16. let currentPage = 1
  17. let lastPage = 1
  18. if (payload && typeof payload === 'object' && !Array.isArray(payload)) {
  19. const body =
  20. payload.data && typeof payload.data === 'object' && !Array.isArray(payload.data)
  21. ? payload.data
  22. : payload
  23. currentPage = Number(body.current_page || body.page || 1) || 1
  24. lastPage = Number(body.last_page || body.lastPage || currentPage) || currentPage
  25. }
  26. return { rows, currentPage, lastPage }
  27. }
  28. export function mapRowToHallCard(row) {
  29. const id = row.id != null && row.id !== '' ? String(row.id) : ''
  30. return {
  31. id,
  32. title: pickTitle(row),
  33. cover: row.image || row.thumb || row.cover || '',
  34. live: String(row.state) === '1' || String(row.status) === '1' || Number(row.state) === 1,
  35. isFollow: pickIsFollowFromRow(row),
  36. anchorUserNo: pickAnchorUserNoFromRow(row),
  37. raw: row
  38. }
  39. }
  40. function pickTitle(row) {
  41. const text = row.content || row.title || row.shopname || row.name || row.nickname
  42. if (!text) return idLabel(row.id)
  43. const oneLine = String(text).replace(/\s+/g, ' ').trim()
  44. return oneLine.length > 36 ? `${oneLine.slice(0, 36)}…` : oneLine
  45. }
  46. function idLabel(id) {
  47. return id ? `直播间 #${id}` : '直播间'
  48. }