diff --git a/src/api/mv.ts b/src/api/mv.ts new file mode 100644 index 0000000..76d854c --- /dev/null +++ b/src/api/mv.ts @@ -0,0 +1,30 @@ +import { IData } from '@/type' +import { IMvItem, IMvUrlData } from '@/type/mv' +import request from '@/utils/request' + +// 获取 mv 排行 +export const getTopMv = (limit: number) => { + return request.get>>('/top/mv', { + params: { + limit, + }, + }) +} + +// 获取 mv 数据 +export const getMvDetail = (mvid: string) => { + return request.get('/mv/detail', { + params: { + mvid, + }, + }) +} + +// 获取 mv 地址 +export const getMvUrl = (id: Number) => { + return request.get>('/mv/url', { + params: { + id, + }, + }) +} diff --git a/src/router/home.ts b/src/router/home.ts index fe07358..4b2d164 100644 --- a/src/router/home.ts +++ b/src/router/home.ts @@ -29,6 +29,16 @@ const layoutRouter = [ }, component: () => import('@/views/list/index.vue'), }, + { + path: '/mv', + name: 'mv', + mate: { + title: 'MV', + keepAlive: true, + icon: 'icon-recordfill', + }, + component: () => import('@/views/mv/index.vue'), + }, { path: '/user', name: 'user', diff --git a/src/type/index.ts b/src/type/index.ts new file mode 100644 index 0000000..9978877 --- /dev/null +++ b/src/type/index.ts @@ -0,0 +1,4 @@ +export interface IData { + code: number + data: T +} diff --git a/src/type/mv.ts b/src/type/mv.ts new file mode 100644 index 0000000..0e0989e --- /dev/null +++ b/src/type/mv.ts @@ -0,0 +1,112 @@ +export interface IMvItem { + id: number + cover: string + name: string + playCount: number + briefDesc?: any + desc?: any + artistName: string + artistId: number + duration: number + mark: number + mv: IMvData + lastRank: number + score: number + subed: boolean + artists: Artist[] + transNames?: string[] + alias?: string[] +} + +export interface IMvData { + authId: number + status: number + id: number + title: string + subTitle: string + appTitle: string + aliaName: string + transName: string + pic4v3: number + pic16v9: number + caption: number + captionLanguage: string + style?: any + mottos: string + oneword?: any + appword: string + stars?: any + desc: string + area: string + type: string + subType: string + neteaseonly: number + upban: number + topWeeks: string + publishTime: string + online: number + score: number + plays: number + monthplays: number + weekplays: number + dayplays: number + fee: number + artists: Artist[] + videos: Video[] +} + +interface Video { + tagSign: TagSign + tag: string + url: string + duration: number + size: number + width: number + height: number + container: string + md5: string + check: boolean +} + +interface TagSign { + br: number + type: string + tagSign: string + resolution: number + mvtype: string +} + +interface Artist { + id: number + name: string +} + +// { +// "id": 14686812, +// "url": "http://vodkgeyttp8.vod.126.net/cloudmusic/e18b/core/aa57/6f56150a35613ef77fc70b253bea4977.mp4?wsSecret=84a301277e05143de1dd912d2a4dbb0d&wsTime=1703668700", +// "r": 1080, +// "size": 215391070, +// "md5": "", +// "code": 200, +// "expi": 3600, +// "fee": 0, +// "mvFee": 0, +// "st": 0, +// "promotionVo": null, +// "msg": "" +// } + +export interface IMvUrlData { + id: number + url: string + r: number + size: number + md5: string + code: number + expi: number + fee: number + mvFee: number + st: number + promotionVo: null | any + msg: string +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 67af5e1..181a72b 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -25,6 +25,18 @@ export const secondToMinute = (s: number) => { return minuteStr + ':' + secondStr } +// 格式化数字 千,万, 百万, 千万,亿 +export const formatNumber = (num: any) => { + num = num * 1 + if (num < 10000) { + return num + } + if (num < 100000000) { + return (num / 10000).toFixed(1) + '万' + } + return (num / 100000000).toFixed(1) + '亿' +} + export const getIsMc = () => { return true } diff --git a/src/views/list/index.vue b/src/views/list/index.vue index aa23989..1916f57 100644 --- a/src/views/list/index.vue +++ b/src/views/list/index.vue @@ -2,7 +2,7 @@ import { getRecommendList, getListDetail, getListByCat } from '@/api/list' import type { IRecommendItem } from "@/type/list"; import type { IListDetail } from "@/type/listDetail"; -import { setAnimationClass, setAnimationDelay, getImgUrl } from "@/utils"; +import { setAnimationClass, setAnimationDelay, getImgUrl, formatNumber } from "@/utils"; import { useRoute } from 'vue-router'; import MusicList from "@/components/MusicList.vue"; import PlayBottom from '@/components/common/PlayBottom.vue'; @@ -52,17 +52,8 @@ watch( } ) -// 格式化数字 千,万, 百万, 千万,亿 -const formatNumber = (num: any) => { - num = num * 1 - if (num < 10000) { - return num - } - if (num < 100000000) { - return (num / 10000).toFixed(1) + '万' - } - return (num / 100000000).toFixed(1) + '亿' -} + +