├── .gitignore ├── config ├── prod.env.js ├── dev.env.js └── index.js ├── screenshot ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png ├── 9.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png └── 15.png ├── src ├── assets │ ├── logo.png │ ├── searchtype.js │ └── onepx.css ├── App.vue ├── pages │ ├── play │ │ ├── play.vue │ │ └── fm.vue │ ├── home │ │ ├── home.vue │ │ └── index │ │ │ ├── index.vue │ │ │ ├── sort.vue │ │ │ ├── djlist.vue │ │ │ ├── playlist.vue │ │ │ └── find.vue │ ├── login.vue │ ├── comments.vue │ ├── my │ │ ├── favradio.vue │ │ ├── cloud.vue │ │ └── my.vue │ ├── hqplaylist.vue │ ├── record.vue │ ├── simi.vue │ ├── topicDetail.vue │ ├── mv.vue │ ├── sublist.vue │ ├── album.vue │ ├── video.vue │ ├── playlist.vue │ ├── recsongs.vue │ └── radio.vue ├── components │ ├── loading.vue │ ├── pop.vue │ ├── music.vue │ ├── playlist.vue │ ├── playpercent.vue │ ├── tabs.vue │ ├── playico.vue │ ├── lrc.vue │ ├── comments.vue │ ├── topicontent.vue │ ├── songlist.vue │ ├── topicres.vue │ ├── playaction.vue │ └── slider.vue ├── filter │ └── index.js ├── main.js ├── router │ └── index.js ├── utils.js ├── api.js └── base64.js ├── static └── images │ ├── a4s.png │ ├── a6a.png │ ├── a6l.png │ ├── a82.png │ ├── aag.png │ ├── aah.png │ ├── aal.png │ ├── ajb.png │ ├── ajd.png │ ├── ajf.png │ ├── ajh.png │ ├── l0.png │ ├── p0.png │ ├── wu.png │ ├── xg.png │ ├── xi.png │ ├── xr.png │ ├── xu.png │ ├── xv.png │ ├── xy.png │ ├── logo.ico │ ├── play.png │ ├── video.png │ ├── loading.gif │ ├── arrow-left.png │ ├── pl-playall.png │ ├── arrow-right.png │ ├── icn_vip_sq_39.png │ ├── AppIcon57x57@2x.png │ ├── cm2_icn_list@2x.png │ ├── cm2_icn_loop@2x.png │ ├── cm2_icn_one@2x.png │ ├── cm2_icn_time@2x.png │ ├── icn_vip_pro_36.png │ ├── cm2_act_delete@2x.png │ ├── cm2_act_icn_arr@2x.png │ ├── cm2_act_icn_cmt@2x.png │ ├── cm2_btm_icn_friend.png │ ├── cm2_btm_icn_music.png │ ├── cm2_btm_icn_radio.png │ ├── cm2_icn_order@2x.png │ ├── cm2_icn_shuffle@2x.png │ ├── cm2_pro_icn_boy@2x.png │ ├── cm2_pro_icn_lv@2x.png │ ├── cm4_my_icn_fav@2x.png │ ├── cm2_act_icn_share@2x.png │ ├── cm2_btm_icn_account.png │ ├── cm2_daily_cal_bg@2x.png │ ├── cm2_discover_btn_slt.png │ ├── cm2_icn_userhead@2x.png │ ├── cm2_lay_icn_cloud@2x.png │ ├── cm2_list_btn_more@2x.png │ ├── cm2_list_sup_hot@2x.png │ ├── cm2_play_btn_loop@2x.png │ ├── cm2_play_btn_one@2x.png │ ├── cm2_play_icn_cmt@2x.png │ ├── cm2_play_icn_dld@2x.png │ ├── cm2_play_icn_love@2x.png │ ├── cm2_play_icn_more@2x.png │ ├── cm2_pro_icn_girl@2x.png │ ├── cm2_rdi_icn_list@2x.png │ ├── cm2_rdi_icn_name@2x.png │ ├── cm2_runfm_icn_arr@2x.png │ ├── cm4_act_icn_more@2x.png │ ├── cm4_list_icn_time@2x.png │ ├── cm4_slist_icn_hot@2x.png │ ├── common_icon_arrow@2x.png │ ├── fm │ ├── cm2_fm_btn_cmt@2x.png │ ├── cm2_fm_btn_delete@2x.png │ ├── cm2_fm_btn_love@2x.png │ ├── cm2_fm_btn_loved@2x.png │ ├── cm2_fm_btn_next@2x.png │ ├── cm2_fm_btn_pause@2x.png │ ├── cm2_fm_btn_play@2x.png │ ├── cm2_fm_btn_cmt_number@2x.png │ └── cm2_default_cover_fm-ip6@2x.png │ ├── cm2_act_icn_praise@2x.png │ ├── cm2_act_icn_praised@2x.png │ ├── cm2_btm_icn_account_prs.png │ ├── cm2_btm_icn_discovery.png │ ├── cm2_btm_icn_friend_prs.png │ ├── cm2_btm_icn_music_prs.png │ ├── cm2_btm_icn_radio_prs.png │ ├── cm2_btn_icn_add_thin@2x.png │ ├── cm2_default_act_320@2x.png │ ├── cm2_discover_icn_0@2x.png │ ├── cm2_discover_icn_1@2x.png │ ├── cm2_discover_icn_2@2x.png │ ├── cm2_discover_icn_3@2x.png │ ├── cm2_discover_icn_4@2x.png │ ├── cm2_discover_icn_mv@2x.png │ ├── cm2_discover_slted@2x.png │ ├── cm2_lay_icn_cmt_new@2x.png │ ├── cm2_lay_icn_dlt_new@2x.png │ ├── cm2_lay_icn_fav_new@2x.png │ ├── cm2_lay_icn_mv_new@2x.png │ ├── cm2_list_cover_rank@2x.png │ ├── cm2_list_icn_dld_new@2x.png │ ├── cm2_list_icn_filter@2x.png │ ├── cm2_list_icn_play24@2x.png │ ├── cm2_list_icn_rdi_new@2x.png │ ├── cm2_list_icn_search@2x.png │ ├── cm2_list_search_time@2x.png │ ├── cm2_play_btn_order@2x.png │ ├── cm2_play_btn_shuffle@2x.png │ ├── cm2_play_icn_cmt_num@2x.png │ ├── cm2_play_icn_loved@2x.png │ ├── cm2_play_icn_praise@2x.png │ ├── cm2_play_icn_yizan@2x.png │ ├── cm2_playlist_icn_dlt@2x.png │ ├── cm2_rdi_icn_artist@2x.png │ ├── cm4_disc_cover_new@2x.png │ ├── cm2_btm_icn_discovery_prs.png │ ├── cm2_btmlay_btn_dlt_dis@2x.png │ ├── cm2_btmlay_btn_dlt_prs@2x.png │ ├── cm2_btmlay_btn_fav_dis@2x.png │ ├── cm2_btmlay_btn_fav_prs@2x.png │ ├── cm2_btn_icn_check_thin@2x.png │ ├── cm2_default_cover_100@2x.png │ ├── cm2_default_runfm-ip6@2x.png │ ├── cm2_discover_icn_radio@2x.png │ ├── cm2_discover_icn_recmd@2x.png │ ├── cm2_lay_icn_artist_new@2x.png │ ├── cm2_lay_icn_close_prs@2x.png │ ├── cm2_list_cover_recent@2x.png │ ├── cm2_list_icn_mymv_new@2x.png │ ├── cm2_list_icn_subscribe@2x.png │ ├── cm2_lists_icn_hot_new@2x.png │ ├── cm2_pro_btn_icn_subed@2x.png │ ├── cm2_radio_icn_hot_sml@2x.png │ ├── cm4_list_icn_play_time@2x.png │ ├── cm2_default_artist_banner@2x.jpg │ ├── cm2_default_play_bg-ip6@2x.jpg │ ├── cm2_default_recmd_list-ip@2x.png │ ├── cm2_discover_icn_fm-ip6@2x.png │ ├── cm2_discover_icn_newest@2x.png │ ├── cm2_lay_icn_quality_new@2x.png │ ├── cm2_lay_icn_similar_new@2x.png │ ├── cm2_lay_order_album_new@2x.png │ ├── cm2_lay_order_artist_new@2x.png │ ├── cm2_list_btn_icn_mv_new@2x.png │ ├── cm2_list_detail_icn_arr@2x.png │ ├── cm2_list_detail_icn_cmt@2x.png │ ├── cm2_list_detail_icn_dld@2x.png │ ├── cm2_list_detail_icn_faved@2x.png │ ├── cm2_list_detail_icn_infor@2x.png │ ├── cm2_list_detail_icn_share@2x.png │ ├── cm2_list_icn_artists_new@2x.png │ ├── cm2_list_icn_recent_new@2x.png │ ├── cm2_play_disc_radio-ip6@2x.png │ ├── cm2_vehicle_icn_subscribe@2x.png │ ├── cm4_disc_topbtn_daily-ip6@2x.png │ ├── cm2_discover_banner_cn-ip6@2x.jpg │ ├── cm2_discover_banner_jp-ip6@2x.jpg │ ├── cm2_discover_banner_kr-ip6@2x.jpg │ ├── cm2_discover_banner_us-ip6@2x.jpg │ ├── cm2_discover_icn_start_big@2x.png │ ├── cm2_discover_icn_upbill-ip6@2x.png │ ├── cm2_lay_icn_notinterest_new@2x.png │ ├── cm2_list_detail_icn_fav_new@2x.png │ └── cm2_vehicle_icn_subscribed@2x.png ├── .babelrc ├── LICENSE ├── index.html ├── package.json └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | /.project 2 | /node_modules 3 | /dist 4 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /screenshot/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/1.png -------------------------------------------------------------------------------- /screenshot/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/2.png -------------------------------------------------------------------------------- /screenshot/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/3.png -------------------------------------------------------------------------------- /screenshot/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/4.png -------------------------------------------------------------------------------- /screenshot/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/5.png -------------------------------------------------------------------------------- /screenshot/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/6.png -------------------------------------------------------------------------------- /screenshot/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/7.png -------------------------------------------------------------------------------- /screenshot/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/8.png -------------------------------------------------------------------------------- /screenshot/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/9.png -------------------------------------------------------------------------------- /screenshot/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/10.png -------------------------------------------------------------------------------- /screenshot/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/11.png -------------------------------------------------------------------------------- /screenshot/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/12.png -------------------------------------------------------------------------------- /screenshot/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/13.png -------------------------------------------------------------------------------- /screenshot/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/14.png -------------------------------------------------------------------------------- /screenshot/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/screenshot/15.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /static/images/a4s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/a4s.png -------------------------------------------------------------------------------- /static/images/a6a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/a6a.png -------------------------------------------------------------------------------- /static/images/a6l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/a6l.png -------------------------------------------------------------------------------- /static/images/a82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/a82.png -------------------------------------------------------------------------------- /static/images/aag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/aag.png -------------------------------------------------------------------------------- /static/images/aah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/aah.png -------------------------------------------------------------------------------- /static/images/aal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/aal.png -------------------------------------------------------------------------------- /static/images/ajb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/ajb.png -------------------------------------------------------------------------------- /static/images/ajd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/ajd.png -------------------------------------------------------------------------------- /static/images/ajf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/ajf.png -------------------------------------------------------------------------------- /static/images/ajh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/ajh.png -------------------------------------------------------------------------------- /static/images/l0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/l0.png -------------------------------------------------------------------------------- /static/images/p0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/p0.png -------------------------------------------------------------------------------- /static/images/wu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/wu.png -------------------------------------------------------------------------------- /static/images/xg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xg.png -------------------------------------------------------------------------------- /static/images/xi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xi.png -------------------------------------------------------------------------------- /static/images/xr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xr.png -------------------------------------------------------------------------------- /static/images/xu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xu.png -------------------------------------------------------------------------------- /static/images/xv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xv.png -------------------------------------------------------------------------------- /static/images/xy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/xy.png -------------------------------------------------------------------------------- /static/images/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/logo.ico -------------------------------------------------------------------------------- /static/images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/play.png -------------------------------------------------------------------------------- /static/images/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/video.png -------------------------------------------------------------------------------- /static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/loading.gif -------------------------------------------------------------------------------- /static/images/arrow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/arrow-left.png -------------------------------------------------------------------------------- /static/images/pl-playall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/pl-playall.png -------------------------------------------------------------------------------- /static/images/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/arrow-right.png -------------------------------------------------------------------------------- /static/images/icn_vip_sq_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/icn_vip_sq_39.png -------------------------------------------------------------------------------- /static/images/AppIcon57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/AppIcon57x57@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_list@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_list@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_loop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_loop@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_one@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_one@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_time@2x.png -------------------------------------------------------------------------------- /static/images/icn_vip_pro_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/icn_vip_pro_36.png -------------------------------------------------------------------------------- /static/images/cm2_act_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_delete@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_friend.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_music.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_radio.png -------------------------------------------------------------------------------- /static/images/cm2_icn_order@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_order@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_shuffle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_shuffle@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_boy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_pro_icn_boy@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_lv@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_pro_icn_lv@2x.png -------------------------------------------------------------------------------- /static/images/cm4_my_icn_fav@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_my_icn_fav@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_icn_share@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_account.png -------------------------------------------------------------------------------- /static/images/cm2_daily_cal_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_daily_cal_bg@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_btn_slt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_btn_slt.png -------------------------------------------------------------------------------- /static/images/cm2_icn_userhead@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_icn_userhead@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_cloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_cloud@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_btn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_btn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_sup_hot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_sup_hot@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_loop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_btn_loop@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_one@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_btn_one@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_dld@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_dld@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_love@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_love@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_girl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_pro_icn_girl@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_list@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_rdi_icn_list@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_name@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_rdi_icn_name@2x.png -------------------------------------------------------------------------------- /static/images/cm2_runfm_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_runfm_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm4_act_icn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_act_icn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm4_list_icn_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_list_icn_time@2x.png -------------------------------------------------------------------------------- /static/images/cm4_slist_icn_hot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_slist_icn_hot@2x.png -------------------------------------------------------------------------------- /static/images/common_icon_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/common_icon_arrow@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_praise@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_icn_praise@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_praised@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_act_icn_praised@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_account_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_account_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_discovery.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_friend_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_friend_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_music_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_music_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_radio_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_radio_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btn_icn_add_thin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btn_icn_add_thin@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_act_320@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_act_320@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_0@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_1@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_2@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_3@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_4@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_mv@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_mv@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_slted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_slted@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_cmt_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_cmt_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_dlt_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_dlt_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_fav_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_fav_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_mv_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_mv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_cover_rank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_cover_rank@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_dld_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_dld_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_filter@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_play24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_play24@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_rdi_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_rdi_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_search@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_search_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_search_time@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_order@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_btn_order@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_shuffle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_btn_shuffle@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_cmt_num@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_cmt_num@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_loved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_loved@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_praise@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_praise@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_yizan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_icn_yizan@2x.png -------------------------------------------------------------------------------- /static/images/cm2_playlist_icn_dlt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_playlist_icn_dlt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_artist@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_rdi_icn_artist@2x.png -------------------------------------------------------------------------------- /static/images/cm4_disc_cover_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_disc_cover_new@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_delete@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_love@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_love@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_loved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_loved@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_next@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_pause@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_play@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_discovery_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btm_icn_discovery_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_dlt_dis@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btmlay_btn_dlt_dis@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_dlt_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btmlay_btn_dlt_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_fav_dis@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btmlay_btn_fav_dis@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_fav_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btmlay_btn_fav_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btn_icn_check_thin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_btn_icn_check_thin@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_cover_100@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_cover_100@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_runfm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_runfm-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_radio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_radio@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_recmd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_recmd@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_artist_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_artist_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_close_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_close_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_cover_recent@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_cover_recent@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_mymv_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_mymv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_subscribe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_subscribe@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lists_icn_hot_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lists_icn_hot_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_btn_icn_subed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_pro_btn_icn_subed@2x.png -------------------------------------------------------------------------------- /static/images/cm2_radio_icn_hot_sml@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_radio_icn_hot_sml@2x.png -------------------------------------------------------------------------------- /static/images/cm4_list_icn_play_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_list_icn_play_time@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_artist_banner@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_artist_banner@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_default_play_bg-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_play_bg-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_default_recmd_list-ip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_default_recmd_list-ip@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_fm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_fm-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_newest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_newest@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_quality_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_quality_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_similar_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_similar_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_order_album_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_order_album_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_order_artist_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_order_artist_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_btn_icn_mv_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_btn_icn_mv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_dld@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_dld@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_faved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_faved@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_infor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_infor@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_share@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_artists_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_artists_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_recent_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_icn_recent_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_disc_radio-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_play_disc_radio-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_vehicle_icn_subscribe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_vehicle_icn_subscribe@2x.png -------------------------------------------------------------------------------- /static/images/cm4_disc_topbtn_daily-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm4_disc_topbtn_daily-ip6@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_cmt_number@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_fm_btn_cmt_number@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_cn-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_banner_cn-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_jp-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_banner_jp-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_kr-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_banner_kr-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_us-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_banner_us-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_start_big@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_start_big@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_upbill-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_discover_icn_upbill-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_notinterest_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_lay_icn_notinterest_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_fav_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_list_detail_icn_fav_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_vehicle_icn_subscribed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/cm2_vehicle_icn_subscribed@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_default_cover_fm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/HEAD/static/images/fm/cm2_default_cover_fm-ip6@2x.png -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-2"], 3 | "plugins": ["transform-runtime"], 4 | "comments": false, 5 | "env": { 6 | "test": { 7 | "plugins": [ "istanbul" ] 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | -------------------------------------------------------------------------------- /src/pages/play/play.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /src/components/loading.vue: -------------------------------------------------------------------------------- 1 | 10 | 15 | 16 | 19 | -------------------------------------------------------------------------------- /src/filter/index.js: -------------------------------------------------------------------------------- 1 | function playcount(v){ 2 | if(!v)return ""; 3 | return v < 10e3 ? v : ((v / 10e3).toFixed(0) + '万') 4 | } 5 | function time(date){ 6 | if(!date) return ''; 7 | date = new Date(date); 8 | var m=date.getMonth()+1; 9 | m=m>9?m:`0${m}`; 10 | var d=date.getDate(); 11 | d=d>9?d:`0${d}`; 12 | return date.getFullYear() + '-' + m + '-' + d 13 | } 14 | export default { 15 | playcount:playcount, 16 | time:time 17 | } -------------------------------------------------------------------------------- /src/pages/home/home.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/components/pop.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/music.vue: -------------------------------------------------------------------------------- 1 | 6 | 36 | -------------------------------------------------------------------------------- /src/components/playlist.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | -------------------------------------------------------------------------------- /src/components/playpercent.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 45 | 46 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 泺影 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/components/tabs.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | -------------------------------------------------------------------------------- /src/assets/searchtype.js: -------------------------------------------------------------------------------- 1 | module.exports=[{ 2 | type:1, 3 | name:"单曲", 4 | relist:[], 5 | klass:'song', 6 | offset:0, 7 | limit:20 8 | },{ 9 | type:100, 10 | name:"歌手", 11 | relist:[], 12 | klass:'artis', 13 | offset:0, 14 | limit:20 15 | },{ 16 | type:10, 17 | name:"专辑", 18 | relist:[], 19 | klass:'album', 20 | offset:0, 21 | limit:20 22 | },{ 23 | type:1000, 24 | name:"歌单", 25 | relist:[], 26 | klass:'playlist', 27 | offset:0, 28 | limit:20 29 | },{ 30 | type:1004, 31 | name:"MV", 32 | relist:[], 33 | klass:'mv', 34 | offset:0, 35 | limit:20 36 | },{ 37 | type:1009, 38 | name:"主播电台", 39 | relist:[], 40 | klass:'dj', 41 | offset:0, 42 | limit:20 43 | },{ 44 | type:1002, 45 | name:"用户", 46 | relist:[], 47 | klass:'user', 48 | offset:0, 49 | limit:20 50 | }] 51 | -------------------------------------------------------------------------------- /src/components/playico.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 23 | 24 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: './', 11 | productionSourceMap: false, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 网易云音乐,听见好时光 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 33 |
34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/lrc.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 55 | 56 | -------------------------------------------------------------------------------- /src/assets/onepx.css: -------------------------------------------------------------------------------- 1 | .nm-1px, 2 | .nm-1px-t, 3 | .nm-1px-b, 4 | .nm-1px-tb, 5 | .nm-1px-l, 6 | .nm-1px-r { 7 | position: relative; 8 | } 9 | .nm-1px:before { 10 | content: " "; 11 | position: absolute; 12 | left: 0; 13 | top: 0; 14 | width: 200%; 15 | height: 1px; 16 | border: 1px solid #C7C7C7; 17 | color: #C7C7C7; 18 | height: 200%; 19 | transform-origin: left top; 20 | transform: scale(0.5); 21 | } 22 | .nm-1px-t:before { 23 | content: " "; 24 | position: absolute; 25 | left: 0; 26 | top: 0; 27 | right: 0; 28 | height: 1px; 29 | border-top: 1px solid #C7C7C7; 30 | color: #C7C7C7; 31 | transform-origin: 0 0; 32 | transform: scaleY(0.5); 33 | } 34 | .nm-1px-b:after { 35 | content: " "; 36 | position: absolute; 37 | left: 0; 38 | bottom: 0; 39 | right: 0; 40 | height: 1px; 41 | border-bottom: 1px solid #C7C7C7; 42 | color: #C7C7C7; 43 | transform-origin: 0 100%; 44 | transform: scaleY(0.5); 45 | } 46 | .nm-1px-tb:before { 47 | content: " "; 48 | position: absolute; 49 | left: 0; 50 | top: 0; 51 | right: 0; 52 | height: 1px; 53 | border-top: 1px solid #C7C7C7; 54 | color: #C7C7C7; 55 | transform-origin: 0 0; 56 | transform: scaleY(0.5); 57 | } 58 | .nm-1px-tb:after { 59 | content: " "; 60 | position: absolute; 61 | left: 0; 62 | bottom: 0; 63 | right: 0; 64 | height: 1px; 65 | border-bottom: 1px solid #C7C7C7; 66 | color: #C7C7C7; 67 | transform-origin: 0 100%; 68 | transform: scaleY(0.5); 69 | } 70 | .nm-1px-l:before { 71 | content: " "; 72 | position: absolute; 73 | left: 0; 74 | top: 0; 75 | width: 1px; 76 | bottom: 0; 77 | border-left: 1px solid #C7C7C7; 78 | color: #C7C7C7; 79 | transform-origin: 0 0; 80 | transform: scaleX(0.5); 81 | } 82 | .nm-1px-r:after { 83 | content: " "; 84 | position: absolute; 85 | right: 0; 86 | top: 0; 87 | width: 1px; 88 | bottom: 0; 89 | border-right: 1px solid #C7C7C7; 90 | color: #C7C7C7; 91 | transform-origin: 100% 0; 92 | transform: scaleX(0.5); 93 | } 94 | -------------------------------------------------------------------------------- /src/components/comments.vue: -------------------------------------------------------------------------------- 1 | 39 | 58 | 59 | -------------------------------------------------------------------------------- /src/pages/home/index/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-neteasemusic", 3 | "version": "1.0.0", 4 | "description": "Vue版网易云音乐WebApp", 5 | "author": "sqaiyan", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "build": "node build/build.js" 10 | }, 11 | "dependencies": { 12 | "axios": "^0.18.0", 13 | "logrocket": "^0.6.7", 14 | "mint-ui": "^2.2.13", 15 | "vue": "^2.5.13", 16 | "vue-router": "^3.0.1", 17 | "vuex": "^3.0.1" 18 | }, 19 | "devDependencies": { 20 | "autoprefixer": "^8.0.0", 21 | "babel-core": "^6.26.0", 22 | "babel-loader": "^7.1.3", 23 | "babel-plugin-transform-runtime": "^6.23.0", 24 | "babel-preset-env": "^1.6.1", 25 | "babel-preset-es2015": "^6.24.1", 26 | "babel-preset-stage-2": "^6.24.1", 27 | "babel-register": "^6.26.0", 28 | "babel-runtime": "^6.26.0", 29 | "chalk": "^2.3.1", 30 | "connect-history-api-fallback": "^1.5.0", 31 | "copy-webpack-plugin": "^4.4.2", 32 | "css-loader": "^0.28.10", 33 | "eventsource-polyfill": "^0.9.6", 34 | "express": "^4.16.2", 35 | "extract-text-webpack-plugin": "^3.0.2", 36 | "file-loader": "^1.1.10", 37 | "friendly-errors-webpack-plugin": "^1.6.1", 38 | "function-bind": "^1.1.1", 39 | "html-webpack-plugin": "^2.30.1", 40 | "http-proxy-middleware": "^0.17.4", 41 | "less": "^3.0.1", 42 | "less-loader": "^4.0.5", 43 | "opn": "^5.2.0", 44 | "optimize-css-assets-webpack-plugin": "^3.2.0", 45 | "ora": "^1.4.0", 46 | "rimraf": "^2.6.2", 47 | "semver": "^5.5.0", 48 | "url-loader": "^0.6.2", 49 | "vconsole": "^3", 50 | "vue-loader": "^14.1.1", 51 | "vue-style-loader": "^4.0.2", 52 | "vue-template-compiler": "^2.5.13", 53 | "webpack": "^3.10.0", 54 | "webpack-bundle-analyzer": "^2.11.0", 55 | "webpack-dev-middleware": "^2.0.6", 56 | "webpack-hot-middleware": "^2.21.0", 57 | "webpack-merge": "^4.1.2" 58 | }, 59 | "engines": { 60 | "node": ">= 4.0.0", 61 | "npm": ">= 3.0.0" 62 | }, 63 | "browserslist": [ 64 | "> 1%", 65 | "last 2 versions", 66 | "not ie <= 8" 67 | ] 68 | } 69 | -------------------------------------------------------------------------------- /src/pages/login.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 62 | 63 | -------------------------------------------------------------------------------- /src/pages/comments.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/topicontent.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 89 | -------------------------------------------------------------------------------- /src/pages/my/favradio.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 92 | -------------------------------------------------------------------------------- /src/pages/home/index/sort.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 67 | 68 | 69 | 92 | 93 | -------------------------------------------------------------------------------- /src/pages/my/cloud.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 83 | 84 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vue全家桶高仿网易云音乐 2 | 功能最多,按照ios客户端高仿,还有小程序版嘞 3 | 4 | >网易忠粉,去年小程序刚出来时候开始用小程序写过一版高仿ios版网易云音乐。一直在踩坑,基本完成后开始考虑用vue实现(其实是懒,想脱坑)。vue之前仅限于活动页使用,全家桶没用过,所以这次也是边学边做,很多东西来回重写了好多次。 5 | 6 | ## 技术栈 7 | 1. Vue全家桶(vue,vue-router,vuex) 8 | 2. axios(http) 9 | 3. mint-ui+移植原来小程序版的css 10 | 4. node(接口服务),[地址在这里](https://github.com/sqaiyan/netmusic-node) 11 | 5. 图片资源来自ios端解压缩文件 12 | 13 | ## 项目地址, 欢迎 star,issue 14 | vps ip已经被封 无法在线预览 15 | 1. [Vue版](https://github.com/sqaiyan/neteasemusic) :https://github.com/sqaiyan/neteasemusic 16 | 2. [小程序版](https://github.com/sqaiyan/netmusic-app) :https://github.com/sqaiyan/netmusic-app 17 | 3. [node后端](https://github.com/sqaiyan/netmusic-node) :https://github.com/sqaiyan/netmusic-node 18 | 19 | 20 | ## 部署 21 | 22 | ### 后端项目 23 | 24 | ``` bash 25 | # 克隆node后端代码到本地 26 | git clone git@github.com:sqaiyan/netmusic-node.git 27 | 28 | cd netmusic-node 29 | 30 | # install dependencies 31 | npm install 32 | 33 | # serve at localhost:3000 34 | node app.js 35 | ``` 36 | 37 | ### 前台项目 38 | 39 | ``` bash 40 | # install dependencies 41 | npm install 42 | 43 | # serve with hot reload at localhost:8080 44 | npm run dev 45 | 46 | # build for production with minification 47 | npm run build 48 | 49 | # build for production and view the bundle analyzer report 50 | npm run build --report 51 | ``` 52 | 53 | ## 预览图[gif版比较大](http://7vik7b.com1.z0.glb.clouddn.com/20170612_164110.gif)、 54 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/1.png) 55 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/2.png) 56 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/3.png) 57 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/4.png) 58 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/5.png) 59 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/6.png) 60 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/7.png) 61 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/8.png) 62 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/9.png) 63 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/10.png) 64 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/11.png) 65 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/12.png) 66 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/13.png) 67 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/14.png) 68 | ![2](https://github.com/sqaiyan/neteasemusic/raw/master/screenshot/15.png) 69 | 70 | [小程序版预览图gif](http://7vik7b.com1.z0.glb.clouddn.com/20170308_112339.gif) 71 | 72 | ## 已完成功能 73 | 1. 首页(个性推荐,分类歌单,电台推荐,热门排行 74 | 2. 搜索(hot ,history ,suggest ,multimatch; 单曲,歌单,歌手,mv等。。。 75 | 3. 详情单页类(歌单,歌手,电台,专辑,评论,用户,相似推荐,每日推荐 76 | 4. 播放页(单曲,FM,节目:上下一曲,播放模式[单曲,随机,顺序],单曲喜欢,单曲收藏到歌单,fm trash,快进快退,歌词,播放列表 77 | 5. 我的(登录,云盘,收藏 78 | 79 | ## 待完成功能(根据api破解情况 80 | 1. 评论(操作类 81 | 2. 动态 82 | 3. 音质切换 83 | 4. 歌词翻译 84 | .... 85 | 86 | ## 存在的问题或bug 87 | 1. 单曲播放进入评论等前进页面,单曲播放完自动播放下一曲后页面回退回播放页面 路由自动切换不了,会播放上一曲,逻辑这块没理顺 88 | 89 | 2. 目前的api基本都是根据官网版扒下来的,git上发布的一些也基本都是这样,客户端接口用的是最新版的 没有能力扒出来。存在问题是banner接口请求到的是老接口数据,已经不维护了的数据 90 | 91 | 92 | ### 如果本例对您学习Vue有帮助,欢迎赏杯奶茶喝 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /src/components/songlist.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 93 | 94 | -------------------------------------------------------------------------------- /src/pages/hqplaylist.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 78 | -------------------------------------------------------------------------------- /src/pages/my/my.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 100 | 101 | -------------------------------------------------------------------------------- /src/pages/record.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | -------------------------------------------------------------------------------- /src/pages/simi.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | -------------------------------------------------------------------------------- /src/components/topicres.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 94 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App' 2 | import router from './router' 3 | import 'mint-ui/lib/style.css' 4 | import mint from "mint-ui"; 5 | import '@/assets/layout.css' 6 | import store from '@/store/store' 7 | import api from "@/api"; 8 | //import vconsole from 'vconsole'; 9 | Vue.use(mint); 10 | //let FastClick = require('FastClick') 11 | //if('addEventListener' in document) { 12 | // document.addEventListener('DOMContentLoaded', function() { 13 | // FastClick.attach(document.body); 14 | // }, false); 15 | //}; 16 | Vue.config.devtools = true 17 | axios.defaults.timeout = 5000; // 默认5s超时 18 | axios.defaults.baseURL = 'http://192.168.48.53:3000/v1/'; 19 | //axios.defaults.withCredentials=true;// 请求带上cookie 20 | axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 21 | axios.interceptors.request.use(function(config) { // 这里的config包含每次请求的内容 22 | if(config.params && config.params.auth && !logined) { 23 | // 需要登录验证的url 需带params.auth=true 24 | router.push({ 25 | name: 'login' 26 | }); 27 | return Promise.reject({ 28 | "msg": '需先登录' 29 | }); 30 | } 31 | return config; 32 | }, function(err) { 33 | return Promise.reject(err); 34 | }); 35 | 36 | axios.interceptors.response.use((res) => { 37 | if(res.data.code === 301) { 38 | console.log('未登录') 39 | } else if(res.data.code !== 200) { 40 | console.log('返回数据不正常') 41 | } 42 | return res 43 | }, (error) => { 44 | console.log('promise error:' + error) 45 | return Promise.reject(error) 46 | }) 47 | Vue.prototype.$http = axios 48 | Vue.config.productionTip = false 49 | // common component 50 | 51 | import lrcTpl from "@/components/lrc"; 52 | import pop from "@/components/pop" 53 | import playaction from "@/components/playaction" 54 | import songlist from "@/components/songlist"; 55 | import loading from "@/components/loading"; 56 | import cmt from "@/components/comments"; 57 | import tab from "@/components/tabs"; 58 | import pl from "@/components/playlist"; 59 | import playico from "@/components/playico" 60 | Vue.component("playico", playico); 61 | Vue.component("lrcTpl", lrcTpl) 62 | Vue.component("pop", pop) 63 | Vue.component("playaction", playaction) 64 | Vue.component("songlist", songlist) 65 | Vue.component("loading", loading) 66 | Vue.component("cmt", cmt) 67 | Vue.component("tab", tab) 68 | Vue.component("pl", pl) 69 | let audio = null; 70 | new Vue({ 71 | el: '#app', 72 | router, 73 | store, 74 | template: '', 75 | components: { 76 | App 77 | }, 78 | async mounted() { 79 | audio = document.querySelector("#audio"); 80 | await this.$store.dispatch("localuser"); 81 | await this.$store.dispatch('getlike'); 82 | window.onscroll = () => { 83 | this.$store.commit("scroll", window.pageYOffset) 84 | } 85 | } 86 | }) 87 | Vue.filter('playcount', function(v) { 88 | if(!v) return ""; 89 | return v < 1e5 ? v : ((v / 1e4).toFixed(1) + '万') 90 | }) 91 | Vue.filter('dateM', function(v) { 92 | v = new Date(v); 93 | var y = v.getFullYear() == new Date().getFullYear() ? '' : v.getFullYear() + "-"; 94 | var m = v.getMonth() + 1; 95 | m = m > 9 ? m : `0${m}`; 96 | var d = v.getDate(); 97 | d = d > 9 ? d : `0${d}`; 98 | return y + m + "-" + d 99 | }) 100 | Vue.filter('dateS', function(v) { 101 | v = new Date(v); 102 | var m = v.getMinutes(); 103 | m = m > 9 ? m : `0${m}`; 104 | var s = v.getSeconds(); 105 | s = s > 9 ? s : `0${s}`; 106 | return m + ':' + s 107 | }) 108 | Vue.filter('time', function(date) { 109 | if(!date) return ''; 110 | date = new Date(date); 111 | var m = date.getMonth() + 1; 112 | m = m > 9 ? m : `0${m}`; 113 | var d = date.getDate(); 114 | d = d > 9 ? d : `0${d}`; 115 | return date.getFullYear() + '-' + m + '-' + d 116 | }); 117 | Vue.filter("btdto", function(v) { 118 | v = new Date(v); 119 | var m = v.getMonth() + 1; 120 | var d = v.getDate(); 121 | var xz = "魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯".substr(m * 2 - (d < "102223444433".charAt(m - 1) - 19) * 2, 2); 122 | return xz + '座' 123 | }) -------------------------------------------------------------------------------- /src/pages/topicDetail.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 112 | 113 | -------------------------------------------------------------------------------- /src/pages/home/index/djlist.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Router from 'vue-router'; 2 | Vue.use(Router) 3 | var router = new Router({ 4 | routes: [{ 5 | path: '/search', 6 | name: 'search', 7 | component: resolve => require(['@/pages/search'], resolve) 8 | }, 9 | { 10 | path: '/simi/:id', 11 | name: 'simi', 12 | component: resolve => require(['@/pages/simi'], resolve) 13 | }, 14 | { 15 | path: '/sortmv', 16 | name: 'sortmv' 17 | }, { 18 | path: '/mv/:id', 19 | name: 'mv', 20 | meta: { 21 | isKeepAlive: false 22 | }, 23 | component: resolve => require(['@/pages/mv'], resolve) 24 | }, { 25 | path: '/topic/detail/:id', 26 | name: 'topicDetail', 27 | component: resolve => require(['@/pages/topicDetail'], resolve) 28 | }, { 29 | path: '/comment/:id', 30 | name: 'comment', 31 | meta: { 32 | isKeepAlive: false 33 | }, 34 | component: resolve => require(['@/pages/comments'], resolve) 35 | }, { 36 | path: '/login', 37 | name: 'login', 38 | meta: { 39 | isKeepAlive: false 40 | }, 41 | component: resolve => require(['@/pages/login'], resolve) 42 | }, { 43 | path: '/album/:id', 44 | name: 'album', 45 | component: resolve => require(['@/pages/album'], resolve) 46 | }, { 47 | path: '/artist/:id', 48 | name: 'artist', 49 | component: resolve => require(['@/pages/artist'], resolve) 50 | }, { 51 | path: '/user/:id', 52 | name: 'user', 53 | component: resolve => require(['@/pages/user'], resolve) 54 | }, { 55 | path: '/radio/:id', 56 | name: 'radio', 57 | component: resolve => require(['@/pages/radio'], resolve) 58 | }, 59 | { 60 | path: '/playlist/:id', 61 | name: 'playlist', 62 | component: resolve => require(['@/pages/playlist'], resolve) 63 | }, 64 | { 65 | path: '/video/:id', 66 | name: 'video', 67 | component: resolve => require(['@/pages/video'], resolve) 68 | }, 69 | { 70 | path: '/me', 71 | name: 'me', 72 | meta: { 73 | 'auth': true 74 | }, 75 | component: resolve => require(['@/pages/my/my'], resolve) 76 | }, 77 | { 78 | path: '/favradio', 79 | name: 'favradio', 80 | component: resolve => require(['@/pages/my/favradio'], resolve) 81 | }, 82 | { 83 | path: '/sublist', 84 | name: 'sublist', 85 | component: resolve => require(['@/pages/sublist'], resolve) 86 | }, 87 | { 88 | path: '/hqplaylist', 89 | name: 'hqplaylist', 90 | component: resolve => require(['@/pages/hqplaylist'], resolve) 91 | }, 92 | { 93 | path: '/recsong', 94 | name: 'recsong', 95 | meta: { 96 | 'auth': true 97 | }, 98 | component: resolve => require(['@/pages/recsongs'], resolve) 99 | }, 100 | { 101 | path: '/cloud', 102 | name: 'cloud', 103 | component: resolve => require(['@/pages/my/cloud'], resolve) 104 | }, 105 | { 106 | path: '/record/:uid', 107 | name: 'record', 108 | component: resolve => require(['@/pages/record'], resolve) 109 | }, 110 | { 111 | path: '/play', 112 | component: resolve => require(['@/pages/play/play'], resolve), 113 | children: [{ 114 | path: "/playing/:id", 115 | name: 'playing', 116 | component: resolve => require(['@/pages/play/playing'], resolve), 117 | 118 | }, { 119 | path: 'fm', 120 | name: 'fm', 121 | component: resolve => require(['@/pages/play/fm'], resolve) 122 | }, { 123 | path: '/program/:id', 124 | name: 'program', 125 | component: resolve => require(['@/pages/play/program'], resolve) 126 | }] 127 | }, { 128 | path: '/home', 129 | name: 'home', 130 | component: resolve => require(['@/pages/home/home'], resolve), 131 | children: [{ 132 | path: "index", 133 | name: 'index', 134 | component: resolve => require(['@/pages/home/index/index'], resolve), 135 | children: [{ 136 | path: 'find', 137 | component: resolve => require(['@/pages/home/index/find'], resolve) 138 | }, { 139 | path: 'playlist', 140 | component: resolve => require(['@/pages/home/index/playlist'], resolve) 141 | }, { 142 | path: 'djlist', 143 | component: resolve => require(['@/pages/home/index/djlist'], resolve) 144 | }, { 145 | path: 'sort', 146 | component: resolve => require(['@/pages/home/index/sort'], resolve) 147 | }] 148 | }] 149 | }, 150 | { 151 | path: '*', 152 | redirect: '/home/index/find' 153 | } 154 | ] 155 | }); 156 | 157 | router.beforeEach((to, from, next) => { 158 | let user = JSON.parse(localStorage.getItem("user")) 159 | if(to.meta.auth && !logined && !user.account) { 160 | console.error("需先登录") 161 | next(false); 162 | router.push({ 163 | name: 'login' 164 | }); 165 | } 166 | 167 | else { 168 | next(); 169 | } 170 | 171 | }); 172 | export default router; -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | function time(date) { 2 | var d = new Date(date) 3 | var year = d.getFullYear() 4 | var month = d.getMonth() + 1 5 | var day = d.getDate() 6 | var hour = d.getHours() 7 | var minute = d.getMinutes() 8 | var second = d.getSeconds(); 9 | var jm = new Date, 10 | Fo = jm.getTime() - date; 11 | if(Fo <= 6e4) 12 | return "刚刚"; 13 | var Qq = jm.getHours() * 36e5 + jm.getMinutes() * 6e4 + jm.getSeconds() * 1e3; 14 | if(day == jm.getDate()) { 15 | if(Fo < 36e5) { 16 | var bOh = Math.floor(Fo / 6e4); 17 | return bOh + "分钟前" 18 | } 19 | return [hour, minute].map(n => { 20 | n = n.toString() 21 | return n[1] ? n : '0' + n; 22 | }).join(':'); 23 | } else { 24 | if(Fo < Qq + 864e5) { 25 | return "昨天" + [hour, minute].map(n => { 26 | n = n.toString() 27 | return n[1] ? n : '0' + n; 28 | }).join(':'); 29 | } else { 30 | var hq = jm.getFullYear(), 31 | bOg = new Date(hq, 0, 1); 32 | var Qq = jm.getTime() - bOg.getTime(); 33 | if(Fo < Qq) { 34 | return year + "年" + month + "月" + day + "日" + [hour, minute].map(n => { 35 | n = n.toString() 36 | return n[1] ? n : '0' + n; 37 | }).join(':'); 38 | } 39 | return year + "年" + month + "月" + day + "日" 40 | } 41 | } 42 | } 43 | //对象克隆 44 | function deepclone(obj) { 45 | var str, newobj = obj.constructor === Array ? [] : {}; 46 | if(typeof obj !== 'object') { 47 | return; 48 | } else if(JSON) { 49 | str = JSON.stringify(obj), //系列化对象 50 | newobj = JSON.parse(str); //还原 51 | } else { 52 | for(var i in obj) { 53 | newobj[i] = typeof obj[i] === 'object' ? 54 | deepclone(obj[i]) : obj[i]; 55 | } 56 | } 57 | return newobj; 58 | } 59 | //转换歌词字符串为数组 60 | function parse_lrc(lrc_content) { 61 | let now_lrc = []; 62 | let lrc_row = lrc_content.split("\n"); 63 | let scroll = true; 64 | for(let i in lrc_row) { 65 | if((lrc_row[i].indexOf(']') == -1) && lrc_row[i]) { 66 | now_lrc.push({ 67 | lrc: lrc_row[i] 68 | }); 69 | } else if(lrc_row[i] != "") { 70 | var tmp = lrc_row[i].split("]"); 71 | for(let j in tmp) { 72 | scroll = false 73 | let tmp2 = tmp[j].substr(1, 8); 74 | tmp2 = tmp2.split(":"); 75 | let lrc_sec = parseInt(tmp2[0] * 60 + tmp2[1] * 1); 76 | if(lrc_sec && (lrc_sec > 0)) { 77 | let lrc = (tmp[tmp.length - 1]).replace(/(^\s*)|(\s*$)/g, ""); 78 | lrc && now_lrc.push({ 79 | lrc_sec: lrc_sec, 80 | lrc: lrc 81 | }); 82 | } 83 | } 84 | } 85 | } 86 | if(!scroll) { 87 | now_lrc.sort(function(a, b) { 88 | return a.lrc_sec - b.lrc_sec; 89 | }); 90 | } 91 | return { 92 | now_lrc: now_lrc, 93 | scroll: scroll 94 | }; 95 | }; 96 | 97 | function emoji(str) { 98 | if(!str) return; 99 | var bl = { 100 | "大笑": "86", 101 | "可爱": "85", 102 | "憨笑": "359", 103 | "色": "95", 104 | "亲亲": "363", 105 | "惊恐": "96", 106 | "流泪": "356", 107 | "亲": "362", 108 | "呆": "352", 109 | "哀伤": "342", 110 | "呲牙": "343", 111 | "吐舌": "348", 112 | "撇嘴": "353", 113 | "怒": "361", 114 | "奸笑": "341", 115 | "汗": "97", 116 | "痛苦": "346", 117 | "惶恐": "354", 118 | "生病": "350", 119 | "口罩": "351", 120 | "大哭": "357", 121 | "晕": "355", 122 | "发怒": "115", 123 | "开心": "360", 124 | "鬼脸": "94", 125 | "皱眉": "87", 126 | "流感": "358", 127 | "爱心": "33", 128 | "心碎": "34", 129 | "钟情": "303", 130 | "星星": "309", 131 | "生气": "314", 132 | "便便": "89", 133 | "强": "13", 134 | "弱": "372", 135 | "拜": "14", 136 | "牵手": "379", 137 | "跳舞": "380", 138 | "禁止": "374", 139 | "这边": "262", 140 | "爱意": "106", 141 | "示爱": "376", 142 | "嘴唇": "367", 143 | "狗": "81", 144 | "猫": "78", 145 | "猪": "100", 146 | "兔子": "459", 147 | "小鸡": "450", 148 | "公鸡": "461", 149 | "幽灵": "116", 150 | "圣诞": "411", 151 | "外星": "101", 152 | "钻石": "52", 153 | "礼物": "107", 154 | "男孩": "0", 155 | "女孩": "1", 156 | "蛋糕": "337", 157 | 18: "186", 158 | "圈": "312", 159 | "叉": "313" 160 | } 161 | var emojiObjs = []; 162 | str = str.replace(/\[([^\[\]]+)\]/g, ':$1:') 163 | var eReg = new RegExp("[:]"); 164 | var array = str.split(eReg); 165 | for(var i = 0; i < array.length; i++) { 166 | var ele = array[i]; 167 | var emojiObj = {}; 168 | if(bl[ele]) { 169 | emojiObj.node = "element"; 170 | emojiObj.tag = "emoji"; 171 | emojiObj.text = bl[ele]; 172 | } else { 173 | emojiObj.node = "text"; 174 | emojiObj.text = ele; 175 | } 176 | emojiObjs.push(emojiObj); 177 | } 178 | return emojiObjs; 179 | } 180 | export default { 181 | time: time, 182 | clone: deepclone, 183 | parse_lrc: parse_lrc, 184 | emoji: emoji 185 | } -------------------------------------------------------------------------------- /src/pages/mv.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 123 | 124 | -------------------------------------------------------------------------------- /src/pages/sublist.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 161 | -------------------------------------------------------------------------------- /src/pages/album.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 141 | 142 | -------------------------------------------------------------------------------- /src/pages/video.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 137 | 138 | -------------------------------------------------------------------------------- /src/pages/playlist.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 154 | 155 | -------------------------------------------------------------------------------- /src/components/playaction.vue: -------------------------------------------------------------------------------- 1 | 65 | 143 | 144 | -------------------------------------------------------------------------------- /src/pages/home/index/playlist.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/pages/home/index/find.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 132 | 133 | -------------------------------------------------------------------------------- /src/pages/play/fm.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 161 | 162 | -------------------------------------------------------------------------------- /src/components/slider.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 172 | 173 | -------------------------------------------------------------------------------- /src/pages/recsongs.vue: -------------------------------------------------------------------------------- 1 | 101 | 102 | 190 | 191 | -------------------------------------------------------------------------------- /src/pages/radio.vue: -------------------------------------------------------------------------------- 1 | 102 | 103 | 208 | 209 | -------------------------------------------------------------------------------- /src/api.js: -------------------------------------------------------------------------------- 1 | const limit = 20; 2 | export default { 3 | index_rec() { 4 | // 首页个人推荐内容:歌单,新歌,mv,电台 5 | let banner = axios("banner"); 6 | let pl = axios('personalized'); 7 | let ns = axios('personalized/newsong'); 8 | let mv = axios('personalized/mv'); 9 | let djprogram = axios('personalized/djprogram'); 10 | return axios.all([banner, pl, ns, mv, djprogram]).then(axios.spread(function(a, b, c, d, e) { 11 | return Promise.resolve([a.data.banners, b.data.result, c.data.result, d.data.result, e.data.result]) 12 | })) 13 | }, 14 | index_plcate() { 15 | // 歌单类型分类列表 16 | return axios("playlist/catlist") 17 | }, 18 | index_playlist(type, offset) { 19 | // 根据类型获取歌单列表 20 | return axios("top/playlist?limit=" + limit + '&offset=' + offset + '&type=' + type) 21 | }, 22 | index_dj() { 23 | // 首页电台页内容:电台分类,推荐节目,推荐电台,电台列表 24 | let cate = axios("djradio/catelist"); 25 | let rec_p = axios("program/recommend"); 26 | let rec_dj = axios("djradio/recommend"); 27 | let djlist = this.index_djlist(0); 28 | return axios.all([cate, rec_p, rec_dj, djlist]).then(axios.spread(function(a, b, c, d) { 29 | return Promise.resolve([a, b, c, d]) 30 | })) 31 | }, 32 | index_djlist(offset) { 33 | // 电台列表 34 | return axios("djradio/hot?limit=" + limit + '&offset=' + offset); 35 | }, 36 | index_hqpl(cat, offset) { 37 | //精品歌单 38 | return axios("top/playlist/highquality", { 39 | params: { 40 | type: cat, 41 | offset: offset, 42 | limit: limit 43 | } 44 | }) 45 | }, 46 | likeall() { 47 | return axios("likelist") 48 | }, 49 | index_sort() { 50 | return axios("toplist/detail") 51 | }, 52 | search(name, type, offset) { 53 | // 类型关键词搜索 type:1单曲;10专辑;100歌手;1000歌单;1004mv;1009电台;1002用户 54 | return axios("search?keywords=" + name + '&type=' + type + '&limit=' + limit + '&offset=' + offset); 55 | }, 56 | search_suggest(s, t) { 57 | return axios("search/suggest?keywords=" + s) 58 | }, 59 | search_hot(s, t) { 60 | return axios("search/hot") 61 | }, 62 | search_multimatch(s, t) { 63 | return axios("search/multimatch?type=" + t + '&keywords=' + s) 64 | }, 65 | playlist(id, offset) { 66 | return axios.get("playlist/detail?id=" + id + '&offset=' + offset + '&limit=' + limit); 67 | }, 68 | album(id) { 69 | return axios("album/detail?id=" + id) 70 | }, 71 | artist(id) { 72 | return axios("artist?id=" + id) 73 | }, 74 | artist_album(id, offset) { 75 | return axios("artist/album?id=" + id + '&offset=' + offset + '&limit=' + limit) 76 | }, 77 | artist_mv(id, offset) { 78 | return axios("artist/mv?id=" + id + '&offset=' + offset + '&limit=' + limit) 79 | }, 80 | artist_desc(id) { 81 | return axios("artist/desc?id=" + id) 82 | }, 83 | artist_simi(id) { 84 | return axios("artist/simi?id=" + id) 85 | }, 86 | lyric(id) { 87 | return axios("lyric?id=" + id) 88 | }, 89 | songtrack(id, t, d) { 90 | return axios("song/tracks", { 91 | params: { 92 | id: id, 93 | auth: true, 94 | r: (!d ? '' : 'del'), 95 | op: (!t ? 'like' : 'trash') 96 | } 97 | }) 98 | }, 99 | tracktpl(sid, pid, add = true) { 100 | var op = add ? 'add' : 'del' 101 | return axios("playlist/tracks?pid=" + pid + "&op=" + op + "&tracks=" + sid) 102 | }, 103 | dislike(id, type) { 104 | //每日推荐歌曲中不感兴趣某首歌 105 | return axios("recommend/dislike", { 106 | params: { 107 | id: id, 108 | type: type 109 | } 110 | }) 111 | }, 112 | comments(id, offset, type) { 113 | id = (type == 1 ? '' : (type == 3 ? 'A_DJ_1_' : 'R_SO_4_')) + id 114 | return axios("comments?id=" + id + '&offset=' + offset + '&limit=' + limit) 115 | }, 116 | music_url(id) { 117 | return axios("music/url?id=" + id + '&br=128000') 118 | }, 119 | async music_detail(id) { 120 | return axios("music/detail?id=" + id) 121 | }, 122 | fm() { 123 | return axios("fm") 124 | }, 125 | simi(id) { 126 | let pl = axios("simi/playlist", { 127 | params: { 128 | id: id, 129 | auth: true 130 | } 131 | }); 132 | let song = axios("simi/song?id=" + id); 133 | let user = axios("simi/user?id=" + id) 134 | return axios.all([pl, song, user]).then(axios.spread(function(a, b, c) { 135 | return Promise.resolve([a.data.playlists, b.data.songs, c.data.userprofiles]) 136 | })) 137 | }, 138 | record(uid,t = 0) { 139 | return axios("record",{params:{uid:uid,type:t}}) 140 | }, 141 | login(name, pwd) { 142 | var data = { 143 | email: name, 144 | password: pwd, 145 | phone: name 146 | } 147 | return axios((/^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$/.test(name) ? "login/cellphone" : "login"), { 148 | params: data 149 | }) 150 | }, 151 | mv(id) { 152 | let mv = axios.get('mv?id=' + id); 153 | let simi = axios("mv/simi?id=" + id) 154 | return axios.all([mv, simi]).then(axios.spread(function(a, b) { 155 | return Promise.resolve([a.data.data, b.data.mvs]); 156 | })) 157 | }, 158 | dj_detail(id) { 159 | return axios("dj/detail?id=" + id); 160 | }, 161 | dj_getprogram(id, offset) { 162 | return axios("dj/program", { 163 | params: { 164 | id: id, 165 | offset: offset, 166 | limit: limit 167 | } 168 | }); 169 | }, 170 | dj_sub(id, t) { 171 | return axios("dj/sub", { 172 | params: { 173 | id: id, 174 | t: t 175 | } 176 | }); 177 | }, 178 | program_detail(id) { 179 | return axios("program/detail", { 180 | params: { 181 | id: id 182 | } 183 | }) 184 | }, 185 | program_like(id, t) { 186 | return axios("resource/like", { 187 | params: { 188 | id: id, 189 | t: t 190 | } 191 | }) 192 | }, 193 | user_detail(id) { 194 | return axios("user/detail?uid=" + id) 195 | }, 196 | user_playlist(id, offset) { 197 | return axios("user/playlist?uid=" + id + '&offset=' + offset + '&limit=' + limit) 198 | }, 199 | user_radio(id) { 200 | return axios("user/radio", { 201 | params: { 202 | uid: id 203 | } 204 | }); 205 | }, 206 | user_event(id, offset) { 207 | return axios("event/get", { 208 | params: { 209 | id: id, 210 | offset: offset, 211 | limit: limit 212 | } 213 | }) 214 | }, 215 | user_subcount(id) { 216 | return axios("user/subcount", { 217 | params: { 218 | id: id, 219 | auth: true 220 | } 221 | }, { 222 | params: { 223 | auth: true 224 | } 225 | }) 226 | }, 227 | user_cloud(offset) { 228 | return axios("user/cloud", { 229 | params: { 230 | offset: offset, 231 | limit: limit, 232 | auth: true 233 | } 234 | }); 235 | }, 236 | user_recs() { 237 | return axios("recommend/songs", { 238 | params: { 239 | auth: true 240 | } 241 | }) 242 | }, 243 | user_sublist(t, offset) { 244 | return axios("sublist/" + t, { 245 | params: { 246 | auth: true, 247 | offset: offset, 248 | limit: limit 249 | } 250 | }); 251 | }, 252 | event_list(offset) { 253 | return axios("event/list", { 254 | params: { 255 | auth: true, 256 | offset: offset, 257 | limit: limit 258 | } 259 | }) 260 | }, 261 | video_detail(id){ 262 | return axios("video/detail",{ 263 | params:{ 264 | id:id 265 | } 266 | }) 267 | }, 268 | video_playurl(id,br){ 269 | return axios("video/playurl",{ 270 | params:{ 271 | id:id, 272 | br:br 273 | } 274 | }) 275 | }, 276 | video_rcmd(id){ 277 | return axios("video/rcmd",{ 278 | params:{ 279 | id:id 280 | } 281 | }) 282 | }, 283 | video_statistic(id){ 284 | return axios("video/statistic",{ 285 | params:{ 286 | id:id 287 | } 288 | }) 289 | }, 290 | video_info(id){ 291 | return axios("video/info",{ 292 | params:{ 293 | id:id 294 | } 295 | }) 296 | }, 297 | topic_detail(id){ 298 | return axios("topic/detail",{ 299 | params:{ 300 | id:id 301 | } 302 | }) 303 | }, 304 | async mine() { 305 | return await axios("mine") 306 | } 307 | } -------------------------------------------------------------------------------- /src/base64.js: -------------------------------------------------------------------------------- 1 | var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ 2 | var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ 3 | var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ 4 | 5 | function b64_md5(s) { return binl2b64(core_md5(str2binl(s), s.length * chrsz)); } 6 | /* 7 | * Calculate the MD5 of an array of little-endian words, and a bit length 8 | */ 9 | function core_md5(x, len) { 10 | /* append padding */ 11 | x[len >> 5] |= 0x80 << ((len) % 32); 12 | x[(((len + 64) >>> 9) << 4) + 14] = len; 13 | 14 | var a = 1732584193; 15 | var b = -271733879; 16 | var c = -1732584194; 17 | var d = 271733878; 18 | 19 | for (var i = 0; i < x.length; i += 16) { 20 | var olda = a; 21 | var oldb = b; 22 | var oldc = c; 23 | var oldd = d; 24 | 25 | a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); 26 | d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); 27 | c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); 28 | b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); 29 | a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); 30 | d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); 31 | c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); 32 | b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); 33 | a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); 34 | d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); 35 | c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); 36 | b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); 37 | a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); 38 | d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); 39 | c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); 40 | b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); 41 | 42 | a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); 43 | d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); 44 | c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); 45 | b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); 46 | a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); 47 | d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); 48 | c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); 49 | b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); 50 | a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); 51 | d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); 52 | c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); 53 | b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); 54 | a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); 55 | d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); 56 | c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); 57 | b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); 58 | 59 | a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); 60 | d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); 61 | c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); 62 | b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); 63 | a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); 64 | d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); 65 | c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); 66 | b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); 67 | a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); 68 | d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); 69 | c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); 70 | b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); 71 | a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); 72 | d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); 73 | c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); 74 | b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); 75 | 76 | a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); 77 | d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); 78 | c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); 79 | b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); 80 | a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); 81 | d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); 82 | c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); 83 | b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); 84 | a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); 85 | d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); 86 | c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); 87 | b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); 88 | a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); 89 | d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); 90 | c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); 91 | b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); 92 | 93 | a = safe_add(a, olda); 94 | b = safe_add(b, oldb); 95 | c = safe_add(c, oldc); 96 | d = safe_add(d, oldd); 97 | } 98 | return Array(a, b, c, d); 99 | 100 | } 101 | 102 | /* 103 | * These functions implement the four basic operations the algorithm uses. 104 | */ 105 | function md5_cmn(q, a, b, x, s, t) { 106 | return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); 107 | } 108 | 109 | function md5_ff(a, b, c, d, x, s, t) { 110 | return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); 111 | } 112 | 113 | function md5_gg(a, b, c, d, x, s, t) { 114 | return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); 115 | } 116 | 117 | function md5_hh(a, b, c, d, x, s, t) { 118 | return md5_cmn(b ^ c ^ d, a, b, x, s, t); 119 | } 120 | 121 | function md5_ii(a, b, c, d, x, s, t) { 122 | return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); 123 | } 124 | 125 | 126 | /* 127 | * Add integers, wrapping at 2^32. This uses 16-bit operations internally 128 | * to work around bugs in some JS interpreters. 129 | */ 130 | function safe_add(x, y) { 131 | var lsw = (x & 0xFFFF) + (y & 0xFFFF); 132 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 133 | return (msw << 16) | (lsw & 0xFFFF); 134 | } 135 | 136 | /* 137 | * Bitwise rotate a 32-bit number to the left. 138 | */ 139 | function bit_rol(num, cnt) { 140 | return (num << cnt) | (num >>> (32 - cnt)); 141 | } 142 | 143 | /* 144 | * Convert a string to an array of little-endian words 145 | * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. 146 | */ 147 | function str2binl(str) { 148 | var bin = Array(); 149 | var mask = (1 << chrsz) - 1; 150 | for (var i = 0; i < str.length * chrsz; i += chrsz) 151 | bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32); 152 | return bin; 153 | } 154 | 155 | 156 | /* 157 | * Convert an array of little-endian words to a base-64 string 158 | */ 159 | function binl2b64(binarray) { 160 | var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 161 | var str = ""; 162 | for (var i = 0; i < binarray.length * 4; i += 3) { 163 | var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | 164 | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | 165 | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF); 166 | for (var j = 0; j < 4; j++) { 167 | if (i * 8 + j * 6 > binarray.length * 32) str += b64pad; 168 | else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F); 169 | } 170 | } 171 | return str; 172 | } 173 | 174 | function str2Arr(str) { 175 | var bytes = [] 176 | for (var i = 0; i < str.length; i++) { 177 | bytes.push(str.charAt(i).charCodeAt(0)) 178 | } 179 | return bytes 180 | } 181 | 182 | function arr2Str(bytes) { 183 | var str = '' 184 | for (var i = 0; i < bytes.length; i++) { 185 | str += String.fromCharCode(bytes[i]) 186 | } 187 | return str 188 | } 189 | 190 | function id2Url(pic_str) { 191 | pic_str += ""; 192 | var magic = str2Arr('3go8&$8*3*3h0k(2)2') 193 | var songId = str2Arr(pic_str) 194 | for (var i = 0; i < songId.length; i++) { 195 | songId[i] = songId[i] ^ magic[i % magic.length] 196 | } 197 | songId = arr2Str(songId); 198 | var res = b64_md5(songId); 199 | res = res.replace(/\//g, '_') 200 | res = res.replace(/\+/g, '-'); 201 | res += '=='; 202 | //Math.floor(1 + Math.random() * 4) 203 | return 'http://p4.music.126.net/' + res + '/' + pic_str + '.jpg' 204 | } 205 | 206 | module.exports = { 207 | id2Url: id2Url 208 | } --------------------------------------------------------------------------------