| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /** 将发现页视频列表接口数据规整为播放器可用结构 */
- function ensureArray(value) {
- if (Array.isArray(value)) return value
- if (typeof value === 'string' && value.trim()) {
- try {
- const parsed = JSON.parse(value)
- if (Array.isArray(parsed)) return parsed
- if (parsed && typeof parsed === 'object') {
- return Object.keys(parsed)
- .filter((k) => /^\d+$/.test(k))
- .sort((a, b) => Number(a) - Number(b))
- .map((k) => parsed[k])
- .filter(Boolean)
- }
- } catch (_) {}
- return value.split(',').map((s) => s.trim()).filter(Boolean)
- }
- if (value && typeof value === 'object') {
- return Object.keys(value)
- .filter((k) => /^\d+$/.test(k))
- .sort((a, b) => Number(a) - Number(b))
- .map((k) => value[k])
- .filter(Boolean)
- }
- return []
- }
- /** 兼容 wanlshop 分页接口多种 envelope */
- function unwrapFeedRows(payload) {
- if (!payload) return []
- if (Array.isArray(payload)) return payload
- if (typeof payload !== 'object') return []
- if (Array.isArray(payload.data)) return payload.data
- if (Array.isArray(payload.list)) return payload.list
- const inner = payload.data
- if (inner && typeof inner === 'object') {
- if (Array.isArray(inner.data)) return inner.data
- if (Array.isArray(inner.list)) return inner.list
- }
- return []
- }
- function unwrapFeedMeta(payload) {
- if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
- return { current_page: 1, last_page: 1 }
- }
- const inner = payload.data && typeof payload.data === 'object' && !Array.isArray(payload.data)
- ? payload.data
- : payload
- return {
- current_page: inner.current_page || payload.current_page || 1,
- last_page: inner.last_page || payload.last_page || inner.current_page || payload.current_page || 1
- }
- }
- export function extractFeedPage(payload) {
- const rows = unwrapFeedRows(payload)
- const meta = unwrapFeedMeta(payload)
- return {
- rows: rows.map(normalizeClip),
- currentPage: Number(meta.current_page || 1),
- lastPage: Number(meta.last_page || meta.current_page || 1)
- }
- }
- export function normalizeClip(raw = {}) {
- const video = raw.video || {}
- const seriesList = ensureArray(raw.series_list)
- return {
- ...raw,
- images: ensureArray(raw.images),
- goods: ensureArray(raw.goods),
- series_list: seriesList,
- series_id: raw.series_id != null ? raw.series_id : (raw.seriesId != null ? raw.seriesId : ''),
- play: false,
- initialTime: raw.initialTime ?? 0,
- video: {
- id: video.id || '',
- video_id: video.video_id || raw.video_id || '',
- url: video.url || '',
- cover_url: video.cover_url || '',
- width: video.width || 0,
- height: video.height || 0,
- fit: video.fit || 'cover',
- duration: video.duration,
- // 合辑付费:video.paid_money 或顶层 paid_money
- paid_money: video.paid_money != null ? video.paid_money : (raw.paid_money != null ? raw.paid_money : 0)
- }
- }
- }
- export function stripHtml(content) {
- if (!content) return ''
- return String(content)
- .replace(/<[^>]+>/g, '')
- .replace(/ /g, ' ')
- .trim()
- }
|