歌单播放数量多语言支持

This commit is contained in:
Folltoshe 2023-04-27 21:47:45 +08:00
parent b5d99ef934
commit 48de940acb
10 changed files with 56 additions and 83 deletions

View File

@ -189,6 +189,9 @@
"pagination__next": "Next page", "pagination__next": "Next page",
"pagination__page": "Page {num}", "pagination__page": "Page {num}",
"pagination__prev": "Previous page", "pagination__prev": "Previous page",
"play_count_million": "{num} Million",
"play_count_billion": "{num} Billion",
"play_count_none": "{num}",
"play_timeout": "Timed pause", "play_timeout": "Timed pause",
"play_timeout_close": "Close", "play_timeout_close": "Close",
"play_timeout_confirm": "Confirm", "play_timeout_confirm": "Confirm",

View File

@ -189,6 +189,9 @@
"pagination__next": "下一页", "pagination__next": "下一页",
"pagination__page": "第 {num} 页", "pagination__page": "第 {num} 页",
"pagination__prev": "上一页", "pagination__prev": "上一页",
"play_count_million": "{num} 万",
"play_count_billion": "{num} 亿",
"play_count_none": "{num}",
"play_timeout": "定时暂停", "play_timeout": "定时暂停",
"play_timeout_close": "关闭", "play_timeout_close": "关闭",
"play_timeout_confirm": "确认", "play_timeout_confirm": "确认",

View File

@ -189,6 +189,9 @@
"pagination__next": "下一頁", "pagination__next": "下一頁",
"pagination__page": "第 {num} 頁", "pagination__page": "第 {num} 頁",
"pagination__prev": "上一頁", "pagination__prev": "上一頁",
"play_count_million": "{num} 萬",
"play_count_billion": "{num} 億",
"play_count_none": "{num}",
"play_timeout": "定時暫停", "play_timeout": "定時暫停",
"play_timeout_close": "關閉", "play_timeout_close": "關閉",
"play_timeout_confirm": "確認", "play_timeout_confirm": "確認",

View File

@ -5,6 +5,18 @@ export * from '@common/utils/nodejs'
export * from '@common/utils/common' export * from '@common/utils/common'
export * from '@common/utils/tools' export * from '@common/utils/tools'
/**
*
* @param {*} num
*/
export const formatPlayCount = (num: number): { count: number, language: string } => {
if (num > 100000000) return {count: parseInt((num / 10000000).toString()) / 10,language: 'play_count_billion'}
if (num > 10000) return {count: parseInt((num / 1000).toString()) / 10,language: 'play_count_million'}
return { count: num, language: 'play_count_none' }
}
/** /**
* *
*/ */

View File

@ -1,6 +1,6 @@
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
import { formatSingerName } from '../utils' import { formatSingerName } from '../utils'
import { decodeName, formatPlayTime, sizeFormate, dateFormat } from '../../index' import { decodeName, formatPlayTime, sizeFormate, dateFormat, formatPlayCount } from '../../index'
import { signatureParams, createHttpFetch } from './util' import { signatureParams, createHttpFetch } from './util'
import { getMusicInfosByList } from './musicInfo' import { getMusicInfosByList } from './musicInfo'
import album from './album' import album from './album'
@ -122,7 +122,7 @@ export default {
img: pic, img: pic,
desc, desc,
// author: body.result.info.userinfo.username, // author: body.result.info.userinfo.username,
// play_count: this.formatPlayCount(body.result.listen_num), // playCountInfo: formatPlayCount(body.result.listen_num),
}, },
} }
}, },
@ -171,15 +171,6 @@ export default {
return `http://www2.kugou.kugou.com/yueku/v9/special/single/${id}-5-9999.html` return `http://www2.kugou.kugou.com/yueku/v9/special/single/${id}-5-9999.html`
}, },
/**
* 格式化播放数量
* @param {*} num
*/
formatPlayCount(num) {
if (num > 100000000) return parseInt(num / 10000000) / 10 + '亿'
if (num > 10000) return parseInt(num / 1000) / 10 + '万'
return num
},
filterInfoHotTag(rawData) { filterInfoHotTag(rawData) {
const result = [] const result = []
if (rawData.status !== 1) return result if (rawData.status !== 1) return result
@ -212,7 +203,7 @@ export default {
}, },
filterSongList(rawData) { filterSongList(rawData) {
return rawData.map(item => ({ return rawData.map(item => ({
play_count: item.total_play_count || this.formatPlayCount(item.play_count), playCountInfo: item.total_playCountInfo || formatPlayCount(item.playCountInfo),
id: 'id_' + item.specialid, id: 'id_' + item.specialid,
author: item.nickname, author: item.nickname,
name: item.specialname, name: item.specialname,
@ -327,7 +318,7 @@ export default {
// img: listInfo.image, // img: listInfo.image,
// desc: listInfo.desc, // desc: listInfo.desc,
// // author: listInfo.userName, // // author: listInfo.userName,
// // play_count: this.formatPlayCount(listInfo.playCount), // // playCountInfo: formatPlayCount(listInfo.playCount),
// }, // },
// } // }
// }) // })
@ -360,7 +351,7 @@ export default {
img: listInfo.imageUrl && listInfo.imageUrl.replace('{size}', 240), img: listInfo.imageUrl && listInfo.imageUrl.replace('{size}', 240),
desc: listInfo.desc, desc: listInfo.desc,
author: listInfo.userName, author: listInfo.userName,
play_count: this.formatPlayCount(listInfo.playCount), playCountInfo: formatPlayCount(listInfo.playCount),
}, },
} }
}) })
@ -483,7 +474,7 @@ export default {
img: (codeInfo.img_size && codeInfo.img_size.replace('{size}', 240)) || codeInfo.img, img: (codeInfo.img_size && codeInfo.img_size.replace('{size}', 240)) || codeInfo.img,
// desc: body.result.info.list_desc, // desc: body.result.info.list_desc,
author: codeInfo.username, author: codeInfo.username,
// play_count: this.formatPlayCount(info.count), // playCountInfo: formatPlayCount(info.count),
}, },
} }
} }
@ -512,7 +503,7 @@ export default {
img: songInfo.info.img, img: songInfo.info.img,
// desc: body.result.info.list_desc, // desc: body.result.info.list_desc,
author: songInfo.info.username, author: songInfo.info.username,
// play_count: this.formatPlayCount(info.count), // playCountInfo: formatPlayCount(info.count),
}, },
} }
}, },
@ -547,7 +538,7 @@ export default {
img: listInfo.pic && listInfo.pic.replace('{size}', 240), img: listInfo.pic && listInfo.pic.replace('{size}', 240),
// desc: body.result.info.list_desc, // desc: body.result.info.list_desc,
author: listInfo.list_create_username, author: listInfo.list_create_username,
// play_count: this.formatPlayCount(listInfo.count), // playCountInfo: formatPlayCount(listInfo.count),
}, },
} }
}, },
@ -598,7 +589,7 @@ export default {
img: info.imgurl && info.imgurl.replace('{size}', 240), img: info.imgurl && info.imgurl.replace('{size}', 240),
desc: info.intro, desc: info.intro,
author: info.nickname, author: info.nickname,
play_count: this.formatPlayCount(info.playcount), playCountInfo: formatPlayCount(info.playcount),
}, },
} }
}, },
@ -650,7 +641,7 @@ export default {
img: listInfo.imgurl && listInfo.imgurl.replace('{size}', 240), img: listInfo.imgurl && listInfo.imgurl.replace('{size}', 240),
// desc: body.result.info.list_desc, // desc: body.result.info.list_desc,
author: listInfo.nickname, author: listInfo.nickname,
// play_count: this.formatPlayCount(info.count), // playCountInfo: formatPlayCount(info.count),
}, },
} }
}, },
@ -671,7 +662,7 @@ export default {
img: listInfo.imgurl && listInfo.imgurl.replace('{size}', 240), img: listInfo.imgurl && listInfo.imgurl.replace('{size}', 240),
// desc: body.result.info.list_desc, // desc: body.result.info.list_desc,
author: listInfo.nickname, author: listInfo.nickname,
// play_count: this.formatPlayCount(info.count), // playCountInfo: formatPlayCount(info.count),
}, },
} }
}, },
@ -786,7 +777,7 @@ export default {
return { return {
list: body.lists.map(item => { list: body.lists.map(item => {
return { return {
play_count: this.formatPlayCount(item.total_play_count), playCountInfo: formatPlayCount(item.total_playCountInfo),
id: item.gid ? `gid_${item.gid}` : `id_${item.specialid}`, id: item.gid ? `gid_${item.gid}` : `id_${item.specialid}`,
author: item.nickname, author: item.nickname,
name: item.specialname, name: item.specialname,

View File

@ -1,5 +1,5 @@
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
import { formatPlayTime, decodeName } from '../../index' import { formatPlayTime, decodeName, formatPlayCount } from '../../index'
import { formatSinger, objStr2JSON } from './util' import { formatSinger, objStr2JSON } from './util'
import album from './album' import album from './album'
@ -120,19 +120,9 @@ export default {
}) })
}, },
/**
* 格式化播放数量
* @param {*} num
*/
formatPlayCount(num) {
if (num > 100000000) return parseInt(num / 10000000) / 10 + '亿'
if (num > 10000) return parseInt(num / 1000) / 10 + '万'
return num
},
filterList(rawData) { filterList(rawData) {
return rawData.map(item => ({ return rawData.map(item => ({
play_count: this.formatPlayCount(item.listencnt), playCountInfo: formatPlayCount(item.listencnt),
id: `digest-${item.digest}__${item.id}`, id: `digest-${item.digest}__${item.id}`,
author: item.uname, author: item.uname,
name: item.name, name: item.name,
@ -150,7 +140,7 @@ export default {
rawData.forEach(item => { rawData.forEach(item => {
if (!item.label) return if (!item.label) return
list.push(...item.list.map(item => ({ list.push(...item.list.map(item => ({
play_count: item.play_count && this.formatPlayCount(item.listencnt), playCountInfo: item.playCountInfo && formatPlayCount(item.listencnt),
id: `digest-${item.digest}__${item.id}`, id: `digest-${item.digest}__${item.id}`,
author: item.uname, author: item.uname,
name: item.name, name: item.name,
@ -182,7 +172,7 @@ export default {
img: body.pic, img: body.pic,
desc: body.info, desc: body.info,
author: body.uname, author: body.uname,
play_count: this.formatPlayCount(body.playnum), playCountInfo: formatPlayCount(body.playnum),
}, },
} }
}) })
@ -213,7 +203,7 @@ export default {
img: body.pic, img: body.pic,
desc: body.info, desc: body.info,
author: body.uname, author: body.uname,
play_count: this.formatPlayCount(body.playnum), playCountInfo: formatPlayCount(body.playnum),
}, },
} }
}) })
@ -298,7 +288,7 @@ export default {
img: infoData.data.pic, img: infoData.data.pic,
desc: infoData.data.description, desc: infoData.data.description,
author: infoData.data.creatorName, author: infoData.data.creatorName,
play_count: infoData.data.playNum, playCountInfo: infoData.data.playNum,
} }
}, },
async getListDetailMusicListByBDUserPub(id) { async getListDetailMusicListByBDUserPub(id) {
@ -317,7 +307,7 @@ export default {
img: infoData.data.userInfo.headImg, img: infoData.data.userInfo.headImg,
desc: '', desc: '',
author: infoData.data.userInfo.nickname, author: infoData.data.userInfo.nickname,
play_count: '', playCountInfo: '',
} }
}, },
async getListDetailMusicListByBDList(id, source, page, tryNum = 0) { async getListDetailMusicListByBDList(id, source, page, tryNum = 0) {
@ -362,7 +352,7 @@ export default {
img: '', img: '',
desc: '', desc: '',
author: '', author: '',
play_count: '', playCountInfo: '',
} }
// console.log(listData) // console.log(listData)
return listData return listData
@ -466,7 +456,7 @@ export default {
return { return {
list: body.abslist.map(item => { list: body.abslist.map(item => {
return { return {
play_count: this.formatPlayCount(item.playcnt), playCountInfo: formatPlayCount(item.playcnt),
id: item.playlistid, id: item.playlistid,
author: decodeName(item.nickname), author: decodeName(item.nickname),
name: decodeName(item.name), name: decodeName(item.name),

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,5 @@
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
import { decodeName, formatPlayTime, sizeFormate, dateFormat } from '../../index' import { decodeName, formatPlayTime, sizeFormate, dateFormat, formatPlayCount } from '../../index'
import { formatSingerName } from '../utils' import { formatSingerName } from '../utils'
export default { export default {
@ -126,20 +126,10 @@ export default {
}) })
}, },
/**
* 格式化播放数量
* @param {*} num
*/
formatPlayCount(num) {
if (num > 100000000) return parseInt(num / 10000000) / 10 + '亿'
if (num > 10000) return parseInt(num / 1000) / 10 + '万'
return num
},
filterList(data, page) { filterList(data, page) {
return { return {
list: data.v_playlist.map(item => ({ list: data.v_playlist.map(item => ({
play_count: this.formatPlayCount(item.access_num), playCountInfo: formatPlayCount(item.access_num),
id: item.tid, id: item.tid,
author: item.creator_info.nick, author: item.creator_info.nick,
name: item.title, name: item.title,
@ -160,7 +150,7 @@ export default {
// console.log(content.v_item) // console.log(content.v_item)
return { return {
list: content.v_item.map(({ basic }) => ({ list: content.v_item.map(({ basic }) => ({
play_count: this.formatPlayCount(basic.play_cnt), playCountInfo: formatPlayCount(basic.play_cnt),
id: basic.tid, id: basic.tid,
author: basic.creator.nick, author: basic.creator.nick,
name: basic.title, name: basic.title,
@ -229,7 +219,7 @@ export default {
img: cdlist.logo, img: cdlist.logo,
desc: decodeName(cdlist.desc).replace(/<br>/g, '\n'), desc: decodeName(cdlist.desc).replace(/<br>/g, '\n'),
author: cdlist.nickname, author: cdlist.nickname,
play_count: this.formatPlayCount(cdlist.visitnum), playCountInfo: formatPlayCount(cdlist.visitnum),
}, },
} }
}, },
@ -313,7 +303,7 @@ export default {
return { return {
list: body.data.list.map(item => { list: body.data.list.map(item => {
return { return {
play_count: this.formatPlayCount(item.listennum), playCountInfo: formatPlayCount(item.listennum),
id: item.dissid, id: item.dissid,
author: item.creator.name, author: item.creator.name,
name: item.dissname, name: item.dissname,

View File

@ -5,7 +5,7 @@
import { weapi, linuxapi } from './utils/crypto' import { weapi, linuxapi } from './utils/crypto'
import { httpFetch } from '../../request' import { httpFetch } from '../../request'
import { formatPlayTime, sizeFormate, dateFormat } from '../../index' import { formatPlayTime, sizeFormate, dateFormat, formatPlayCount } from '../../index'
import musicDetailApi from './musicDetail' import musicDetailApi from './musicDetail'
import { eapiRequest } from './utils/index' import { eapiRequest } from './utils/index'
import { formatSingerName } from '../utils' import { formatSingerName } from '../utils'
@ -32,15 +32,6 @@ export default {
listDetailLink: /^.+(?:\?|&)id=(\d+)(?:&.*$|#.*$|$)/, listDetailLink: /^.+(?:\?|&)id=(\d+)(?:&.*$|#.*$|$)/,
listDetailLink2: /^.+\/playlist\/(\d+)\/\d+\/.+$/, listDetailLink2: /^.+\/playlist\/(\d+)\/\d+\/.+$/,
}, },
/**
* 格式化播放数量
* @param {*} num
*/
formatPlayCount(num) {
if (num > 100000000) return parseInt(num / 10000000) / 10 + '亿'
if (num > 10000) return parseInt(num / 1000) / 10 + '万'
return num
},
async handleParseId(link, retryNum = 0) { async handleParseId(link, retryNum = 0) {
if (retryNum > 2) throw new Error('link try max num') if (retryNum > 2) throw new Error('link try max num')
@ -124,7 +115,7 @@ export default {
total: body.playlist.trackIds.length, total: body.playlist.trackIds.length,
source: 'wy', source: 'wy',
info: { info: {
play_count: this.formatPlayCount(body.playlist.playCount), playCountInfo: formatPlayCount(body.playlist.playCount),
name: body.playlist.name, name: body.playlist.name,
img: body.playlist.coverImgUrl, img: body.playlist.coverImgUrl,
desc: body.playlist.description, desc: body.playlist.description,
@ -240,7 +231,7 @@ export default {
filterList(rawData) { filterList(rawData) {
// console.log(rawData) // console.log(rawData)
return rawData.map(item => ({ return rawData.map(item => ({
play_count: this.formatPlayCount(item.playCount), playCountInfo: formatPlayCount(item.playCount),
id: item.id, id: item.id,
author: item.creator.nickname, author: item.creator.nickname,
name: item.name, name: item.name,

View File

@ -13,7 +13,7 @@
<p v-if="item.time" :class="$style.time">{{ item.time }}</p> <p v-if="item.time" :class="$style.time">{{ item.time }}</p>
<div :class="$style.songlist_info"> <div :class="$style.songlist_info">
<span v-if="item.total != null"><svg-icon name="music" />{{ item.total }}</span> <span v-if="item.total != null"><svg-icon name="music" />{{ item.total }}</span>
<span v-if="item.play_count != null"><svg-icon name="headphones" />{{ item.play_count }}</span> <span v-if="item.playCountInfo != null"><svg-icon name="headphones" />{{ $t(item.playCountInfo.language, { num: item.playCountInfo.count }) }}</span>
<span v-if="visibleSource">{{ item.source }}</span> <span v-if="visibleSource">{{ item.source }}</span>
</div> </div>
</div> </div>