├── .babelrc ├── .gitignore ├── LICENSE ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js └── webpack.prod.conf.js ├── config ├── dev.env.js ├── index.js └── prod.env.js ├── index.html ├── package.json ├── screenshot ├── 1.png ├── 10.png ├── 11.png ├── 12.png ├── 13.png ├── 14.png ├── 15.png ├── 2.png ├── 3.png ├── 4.png ├── 5.png ├── 6.png ├── 7.png ├── 8.png └── 9.png ├── src ├── App.vue ├── api.js ├── assets │ ├── layout.css │ ├── logo.png │ ├── onepx.css │ └── searchtype.js ├── base64.js ├── components │ ├── comments.vue │ ├── loading.vue │ ├── lrc.vue │ ├── music.vue │ ├── playaction.vue │ ├── playico.vue │ ├── playlist.vue │ ├── playpercent.vue │ ├── pop.vue │ ├── slider.vue │ ├── songlist.vue │ ├── tabs.vue │ ├── topicontent.vue │ └── topicres.vue ├── filter │ └── index.js ├── main.js ├── pages │ ├── album.vue │ ├── artist.vue │ ├── comments.vue │ ├── home │ │ ├── home.vue │ │ └── index │ │ │ ├── djlist.vue │ │ │ ├── find.vue │ │ │ ├── index.vue │ │ │ ├── playlist.vue │ │ │ └── sort.vue │ ├── hqplaylist.vue │ ├── login.vue │ ├── mv.vue │ ├── my │ │ ├── cloud.vue │ │ ├── favradio.vue │ │ └── my.vue │ ├── play │ │ ├── fm.vue │ │ ├── play.vue │ │ ├── playing.vue │ │ └── program.vue │ ├── playlist.vue │ ├── radio.vue │ ├── record.vue │ ├── recsongs.vue │ ├── search.vue │ ├── simi.vue │ ├── sublist.vue │ ├── topicDetail.vue │ ├── user.vue │ └── video.vue ├── router │ └── index.js ├── store │ └── store.js └── utils.js └── static └── images ├── AppIcon57x57@2x.png ├── a4s.png ├── a6a.png ├── a6l.png ├── a82.png ├── aag.png ├── aah.png ├── aal.png ├── ajb.png ├── ajd.png ├── ajf.png ├── ajh.png ├── arrow-left.png ├── arrow-right.png ├── cm2_act_delete@2x.png ├── cm2_act_icn_arr@2x.png ├── cm2_act_icn_cmt@2x.png ├── cm2_act_icn_praise@2x.png ├── cm2_act_icn_praised@2x.png ├── cm2_act_icn_share@2x.png ├── cm2_btm_icn_account.png ├── cm2_btm_icn_account_prs.png ├── cm2_btm_icn_discovery.png ├── cm2_btm_icn_discovery_prs.png ├── cm2_btm_icn_friend.png ├── cm2_btm_icn_friend_prs.png ├── cm2_btm_icn_music.png ├── cm2_btm_icn_music_prs.png ├── cm2_btm_icn_radio.png ├── cm2_btm_icn_radio_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_add_thin@2x.png ├── cm2_btn_icn_check_thin@2x.png ├── cm2_daily_cal_bg@2x.png ├── cm2_default_act_320@2x.png ├── cm2_default_artist_banner@2x.jpg ├── cm2_default_cover_100@2x.png ├── cm2_default_play_bg-ip6@2x.jpg ├── cm2_default_recmd_list-ip@2x.png ├── cm2_default_runfm-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_btn_slt.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_fm-ip6@2x.png ├── cm2_discover_icn_mv@2x.png ├── cm2_discover_icn_newest@2x.png ├── cm2_discover_icn_radio@2x.png ├── cm2_discover_icn_recmd@2x.png ├── cm2_discover_icn_start_big@2x.png ├── cm2_discover_icn_upbill-ip6@2x.png ├── cm2_discover_slted@2x.png ├── cm2_icn_list@2x.png ├── cm2_icn_loop@2x.png ├── cm2_icn_one@2x.png ├── cm2_icn_order@2x.png ├── cm2_icn_shuffle@2x.png ├── cm2_icn_time@2x.png ├── cm2_icn_userhead@2x.png ├── cm2_lay_icn_artist_new@2x.png ├── cm2_lay_icn_close_prs@2x.png ├── cm2_lay_icn_cloud@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_lay_icn_notinterest_new@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_btn_more@2x.png ├── cm2_list_cover_rank@2x.png ├── cm2_list_cover_recent@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_fav_new@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_dld_new@2x.png ├── cm2_list_icn_filter@2x.png ├── cm2_list_icn_mymv_new@2x.png ├── cm2_list_icn_play24@2x.png ├── cm2_list_icn_rdi_new@2x.png ├── cm2_list_icn_recent_new@2x.png ├── cm2_list_icn_search@2x.png ├── cm2_list_icn_subscribe@2x.png ├── cm2_list_search_time@2x.png ├── cm2_list_sup_hot@2x.png ├── cm2_lists_icn_hot_new@2x.png ├── cm2_play_btn_loop@2x.png ├── cm2_play_btn_one@2x.png ├── cm2_play_btn_order@2x.png ├── cm2_play_btn_shuffle@2x.png ├── cm2_play_disc_radio-ip6@2x.png ├── cm2_play_icn_cmt@2x.png ├── cm2_play_icn_cmt_num@2x.png ├── cm2_play_icn_dld@2x.png ├── cm2_play_icn_love@2x.png ├── cm2_play_icn_loved@2x.png ├── cm2_play_icn_more@2x.png ├── cm2_play_icn_praise@2x.png ├── cm2_play_icn_yizan@2x.png ├── cm2_playlist_icn_dlt@2x.png ├── cm2_pro_btn_icn_subed@2x.png ├── cm2_pro_icn_boy@2x.png ├── cm2_pro_icn_girl@2x.png ├── cm2_pro_icn_lv@2x.png ├── cm2_radio_icn_hot_sml@2x.png ├── cm2_rdi_icn_artist@2x.png ├── cm2_rdi_icn_list@2x.png ├── cm2_rdi_icn_name@2x.png ├── cm2_runfm_icn_arr@2x.png ├── cm2_vehicle_icn_subscribe@2x.png ├── cm2_vehicle_icn_subscribed@2x.png ├── cm4_act_icn_more@2x.png ├── cm4_disc_cover_new@2x.png ├── cm4_disc_topbtn_daily-ip6@2x.png ├── cm4_list_icn_play_time@2x.png ├── cm4_list_icn_time@2x.png ├── cm4_my_icn_fav@2x.png ├── cm4_slist_icn_hot@2x.png ├── common_icon_arrow@2x.png ├── fm ├── cm2_default_cover_fm-ip6@2x.png ├── cm2_fm_btn_cmt@2x.png ├── cm2_fm_btn_cmt_number@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 ├── icn_vip_pro_36.png ├── icn_vip_sq_39.png ├── l0.png ├── loading.gif ├── logo.ico ├── p0.png ├── pl-playall.png ├── play.png ├── video.png ├── wu.png ├── xg.png ├── xi.png ├── xr.png ├── xu.png ├── xv.png └── xy.png /.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 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.project 2 | /node_modules 3 | /dist 4 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /build/build.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | process.env.NODE_ENV = 'production' 4 | 5 | var ora = require('ora') 6 | var rm = require('rimraf') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var webpack = require('webpack') 10 | var config = require('../config') 11 | var webpackConfig = require('./webpack.prod.conf') 12 | 13 | var spinner = ora('building for production...') 14 | spinner.start() 15 | 16 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => { 17 | if (err) throw err 18 | webpack(webpackConfig, function (err, stats) { 19 | spinner.stop() 20 | if (err) throw err 21 | process.stdout.write(stats.toString({ 22 | colors: true, 23 | modules: false, 24 | children: false, 25 | chunks: false, 26 | chunkModules: false 27 | }) + '\n\n') 28 | 29 | console.log(chalk.cyan(' Build complete.\n')) 30 | console.log(chalk.yellow( 31 | ' Tip: built files are meant to be served over an HTTP server.\n' + 32 | ' Opening index.html over file:// won\'t work.\n' 33 | )) 34 | }) 35 | }) 36 | -------------------------------------------------------------------------------- /build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = require('./webpack.dev.conf') 14 | 15 | // default port where dev server listens for incoming traffic 16 | var port = process.env.PORT || config.dev.port 17 | // automatically open browser, if not set will be false 18 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 19 | // Define HTTP proxies to your custom API backend 20 | // https://github.com/chimurai/http-proxy-middleware 21 | var proxyTable = config.dev.proxyTable 22 | 23 | var app = express() 24 | var compiler = webpack(webpackConfig) 25 | 26 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 27 | publicPath: webpackConfig.output.publicPath, 28 | quiet: true 29 | }) 30 | 31 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 32 | log: () => {} 33 | }) 34 | // force page reload when html-webpack-plugin template changes 35 | compiler.plugin('compilation', function (compilation) { 36 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 37 | hotMiddleware.publish({ action: 'reload' }) 38 | cb() 39 | }) 40 | }) 41 | 42 | // proxy api requests 43 | Object.keys(proxyTable).forEach(function (context) { 44 | var options = proxyTable[context] 45 | if (typeof options === 'string') { 46 | options = { target: options } 47 | } 48 | app.use(proxyMiddleware(options.filter || context, options)) 49 | }) 50 | 51 | // handle fallback for HTML5 history API 52 | app.use(require('connect-history-api-fallback')()) 53 | 54 | // serve webpack bundle output 55 | app.use(devMiddleware) 56 | 57 | // enable hot-reload and state-preserving 58 | // compilation error display 59 | app.use(hotMiddleware) 60 | 61 | // serve pure static assets 62 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 63 | app.use(staticPath, express.static('./static')) 64 | 65 | var uri = 'http://localhost:' + port 66 | 67 | var _resolve 68 | var readyPromise = new Promise(resolve => { 69 | _resolve = resolve 70 | }) 71 | 72 | console.log('> Starting dev server...') 73 | devMiddleware.waitUntilValid(() => { 74 | console.log('> Listening at ' + uri + '\n') 75 | // when env is testing, don't need open it 76 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 77 | opn(uri) 78 | } 79 | _resolve() 80 | }) 81 | 82 | var server = app.listen(port) 83 | 84 | module.exports = { 85 | ready: readyPromise, 86 | close: () => { 87 | server.close() 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | 15 | var cssLoader = { 16 | loader: 'css-loader', 17 | options: { 18 | minimize: process.env.NODE_ENV === 'production', 19 | sourceMap: options.sourceMap 20 | } 21 | } 22 | 23 | // generate loader string to be used with extract text plugin 24 | function generateLoaders (loader, loaderOptions) { 25 | var loaders = [cssLoader] 26 | if (loader) { 27 | loaders.push({ 28 | loader: loader + '-loader', 29 | options: Object.assign({}, loaderOptions, { 30 | sourceMap: options.sourceMap 31 | }) 32 | }) 33 | } 34 | 35 | // Extract CSS when that option is specified 36 | // (which is the case during production build) 37 | if (options.extract) { 38 | return ExtractTextPlugin.extract({ 39 | use: loaders, 40 | fallback: 'vue-style-loader' 41 | }) 42 | } else { 43 | return ['vue-style-loader'].concat(loaders) 44 | } 45 | } 46 | 47 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html 48 | return { 49 | css: generateLoaders(), 50 | postcss: generateLoaders(), 51 | less: generateLoaders('less'), 52 | sass: generateLoaders('sass', { indentedSyntax: true }), 53 | scss: generateLoaders('sass'), 54 | stylus: generateLoaders('stylus'), 55 | styl: generateLoaders('stylus') 56 | } 57 | } 58 | 59 | // Generate loaders for standalone style files (outside of .vue) 60 | exports.styleLoaders = function (options) { 61 | var output = [] 62 | var loaders = exports.cssLoaders(options) 63 | for (var extension in loaders) { 64 | var loader = loaders[extension] 65 | output.push({ 66 | test: new RegExp('\\.' + extension + '$'), 67 | use: loader 68 | }) 69 | } 70 | return output 71 | } 72 | -------------------------------------------------------------------------------- /build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }) 12 | } 13 | -------------------------------------------------------------------------------- /build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | 6 | function resolve (dir) { 7 | return path.join(__dirname, '..', dir) 8 | } 9 | 10 | module.exports = { 11 | entry: { 12 | app: './src/main.js' 13 | }, 14 | output: { 15 | path: config.build.assetsRoot, 16 | filename: '[name].js', 17 | publicPath: process.env.NODE_ENV === 'production' 18 | ? config.build.assetsPublicPath 19 | : config.dev.assetsPublicPath 20 | }, 21 | externals: { 22 | 'vue': 'Vue', 23 | 'vue-router': 'VueRouter', 24 | 'vuex': 'Vuex', 25 | 'axios': 'axios' 26 | }, 27 | resolve: { 28 | extensions: ['.js', '.vue', '.json'], 29 | alias: { 30 | 'vue$': 'vue/dist/vue.esm.js', 31 | '@': resolve('src'), 32 | } 33 | }, 34 | module: { 35 | rules: [ 36 | { 37 | test: /\.vue$/, 38 | loader: 'vue-loader', 39 | options: vueLoaderConfig 40 | }, 41 | { 42 | test: /\.js$/, 43 | loader: 'babel-loader', 44 | include: [resolve('src'), resolve('test')] 45 | }, 46 | { 47 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 48 | loader: 'url-loader', 49 | query: { 50 | limit: 10000, 51 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 52 | } 53 | }, 54 | { 55 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 56 | loader: 'url-loader', 57 | query: { 58 | limit: 10000, 59 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 60 | } 61 | } 62 | ] 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var CopyWebpackPlugin = require('copy-webpack-plugin') 8 | var HtmlWebpackPlugin = require('html-webpack-plugin') 9 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 10 | var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') 11 | 12 | var env = config.build.env 13 | 14 | var webpackConfig = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ 17 | sourceMap: config.build.productionSourceMap, 18 | extract: true 19 | }) 20 | }, 21 | devtool: config.build.productionSourceMap ? '#source-map' : false, 22 | output: { 23 | path: config.build.assetsRoot, 24 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 25 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 26 | }, 27 | plugins: [ 28 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 29 | new webpack.DefinePlugin({ 30 | 'process.env': env 31 | }), 32 | new webpack.optimize.UglifyJsPlugin({ 33 | compress: { 34 | warnings: false 35 | }, 36 | sourceMap: true 37 | }), 38 | // extract css into its own file 39 | new ExtractTextPlugin({ 40 | filename: utils.assetsPath('css/[name].[contenthash].css') 41 | }), 42 | // Compress extracted CSS. We are using this plugin so that possible 43 | // duplicated CSS from different components can be deduped. 44 | new OptimizeCSSPlugin({ 45 | cssProcessorOptions: { 46 | safe: true 47 | } 48 | }), 49 | // generate dist index.html with correct asset hash for caching. 50 | // you can customize output by editing /index.html 51 | // see https://github.com/ampedandwired/html-webpack-plugin 52 | new HtmlWebpackPlugin({ 53 | filename: config.build.index, 54 | template: 'index.html', 55 | inject: true, 56 | minify: { 57 | removeComments: true, 58 | collapseWhitespace: true, 59 | removeAttributeQuotes: true 60 | // more options: 61 | // https://github.com/kangax/html-minifier#options-quick-reference 62 | }, 63 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 64 | chunksSortMode: 'dependency' 65 | }), 66 | // split vendor js into its own file 67 | new webpack.optimize.CommonsChunkPlugin({ 68 | name: 'vendor', 69 | minChunks: function (module, count) { 70 | // any required modules inside node_modules are extracted to vendor 71 | return ( 72 | module.resource && 73 | /\.js$/.test(module.resource) && 74 | module.resource.indexOf( 75 | path.join(__dirname, '../node_modules') 76 | ) === 0 77 | ) 78 | } 79 | }), 80 | // extract webpack runtime and module manifest to its own file in order to 81 | // prevent vendor hash from being updated whenever app bundle is updated 82 | new webpack.optimize.CommonsChunkPlugin({ 83 | name: 'manifest', 84 | chunks: ['vendor'] 85 | }), 86 | // copy custom static assets 87 | new CopyWebpackPlugin([ 88 | { 89 | from: path.resolve(__dirname, '../static'), 90 | to: config.build.assetsSubDirectory, 91 | ignore: ['.*'] 92 | } 93 | ]) 94 | ] 95 | }) 96 | 97 | if (config.build.productionGzip) { 98 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 99 | 100 | webpackConfig.plugins.push( 101 | new CompressionWebpackPlugin({ 102 | asset: '[path].gz[query]', 103 | algorithm: 'gzip', 104 | test: new RegExp( 105 | '\\.(' + 106 | config.build.productionGzipExtensions.join('|') + 107 | ')$' 108 | ), 109 | threshold: 10240, 110 | minRatio: 0.8 111 | }) 112 | ) 113 | } 114 | 115 | if (config.build.bundleAnalyzerReport) { 116 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 117 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 118 | } 119 | 120 | module.exports = webpackConfig 121 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /screenshot/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/1.png -------------------------------------------------------------------------------- /screenshot/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/10.png -------------------------------------------------------------------------------- /screenshot/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/11.png -------------------------------------------------------------------------------- /screenshot/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/12.png -------------------------------------------------------------------------------- /screenshot/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/13.png -------------------------------------------------------------------------------- /screenshot/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/14.png -------------------------------------------------------------------------------- /screenshot/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/15.png -------------------------------------------------------------------------------- /screenshot/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/2.png -------------------------------------------------------------------------------- /screenshot/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/3.png -------------------------------------------------------------------------------- /screenshot/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/4.png -------------------------------------------------------------------------------- /screenshot/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/5.png -------------------------------------------------------------------------------- /screenshot/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/6.png -------------------------------------------------------------------------------- /screenshot/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/7.png -------------------------------------------------------------------------------- /screenshot/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/8.png -------------------------------------------------------------------------------- /screenshot/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/screenshot/9.png -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 19 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/src/assets/logo.png -------------------------------------------------------------------------------- /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/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/comments.vue: -------------------------------------------------------------------------------- 1 | 39 | 58 | 59 | -------------------------------------------------------------------------------- /src/components/loading.vue: -------------------------------------------------------------------------------- 1 | 10 | 15 | 16 | 19 | -------------------------------------------------------------------------------- /src/components/lrc.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 55 | 56 | -------------------------------------------------------------------------------- /src/components/music.vue: -------------------------------------------------------------------------------- 1 | 6 | 36 | -------------------------------------------------------------------------------- /src/components/playaction.vue: -------------------------------------------------------------------------------- 1 | 65 | 143 | 144 | -------------------------------------------------------------------------------- /src/components/playico.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 23 | 24 | -------------------------------------------------------------------------------- /src/components/playlist.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | -------------------------------------------------------------------------------- /src/components/playpercent.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 45 | 46 | -------------------------------------------------------------------------------- /src/components/pop.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 31 | 32 | -------------------------------------------------------------------------------- /src/components/slider.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 172 | 173 | -------------------------------------------------------------------------------- /src/components/songlist.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 93 | 94 | -------------------------------------------------------------------------------- /src/components/tabs.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 41 | 42 | -------------------------------------------------------------------------------- /src/components/topicontent.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 89 | -------------------------------------------------------------------------------- /src/components/topicres.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 94 | -------------------------------------------------------------------------------- /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/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/album.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 141 | 142 | -------------------------------------------------------------------------------- /src/pages/comments.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | -------------------------------------------------------------------------------- /src/pages/home/home.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /src/pages/home/index/djlist.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /src/pages/home/index/find.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 132 | 133 | -------------------------------------------------------------------------------- /src/pages/home/index/index.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /src/pages/home/index/playlist.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /src/pages/home/index/sort.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 67 | 68 | 69 | 92 | 93 | -------------------------------------------------------------------------------- /src/pages/hqplaylist.vue: -------------------------------------------------------------------------------- 1 | 36 | 37 | 78 | -------------------------------------------------------------------------------- /src/pages/login.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 62 | 63 | -------------------------------------------------------------------------------- /src/pages/mv.vue: -------------------------------------------------------------------------------- 1 | 50 | 51 | 123 | 124 | -------------------------------------------------------------------------------- /src/pages/my/cloud.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 83 | 84 | -------------------------------------------------------------------------------- /src/pages/my/favradio.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 92 | -------------------------------------------------------------------------------- /src/pages/my/my.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 100 | 101 | -------------------------------------------------------------------------------- /src/pages/play/fm.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 161 | 162 | -------------------------------------------------------------------------------- /src/pages/play/play.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /src/pages/playlist.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 154 | 155 | -------------------------------------------------------------------------------- /src/pages/record.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | -------------------------------------------------------------------------------- /src/pages/recsongs.vue: -------------------------------------------------------------------------------- 1 | 101 | 102 | 190 | 191 | -------------------------------------------------------------------------------- /src/pages/simi.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | -------------------------------------------------------------------------------- /src/pages/sublist.vue: -------------------------------------------------------------------------------- 1 | 73 | 74 | 161 | -------------------------------------------------------------------------------- /src/pages/topicDetail.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 112 | 113 | -------------------------------------------------------------------------------- /src/pages/video.vue: -------------------------------------------------------------------------------- 1 | 51 | 52 | 137 | 138 | -------------------------------------------------------------------------------- /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 | } -------------------------------------------------------------------------------- /static/images/AppIcon57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/AppIcon57x57@2x.png -------------------------------------------------------------------------------- /static/images/a4s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/a4s.png -------------------------------------------------------------------------------- /static/images/a6a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/a6a.png -------------------------------------------------------------------------------- /static/images/a6l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/a6l.png -------------------------------------------------------------------------------- /static/images/a82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/a82.png -------------------------------------------------------------------------------- /static/images/aag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/aag.png -------------------------------------------------------------------------------- /static/images/aah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/aah.png -------------------------------------------------------------------------------- /static/images/aal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/aal.png -------------------------------------------------------------------------------- /static/images/ajb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/ajb.png -------------------------------------------------------------------------------- /static/images/ajd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/ajd.png -------------------------------------------------------------------------------- /static/images/ajf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/ajf.png -------------------------------------------------------------------------------- /static/images/ajh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/ajh.png -------------------------------------------------------------------------------- /static/images/arrow-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/arrow-left.png -------------------------------------------------------------------------------- /static/images/arrow-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/arrow-right.png -------------------------------------------------------------------------------- /static/images/cm2_act_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_delete@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_praise@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_icn_praise@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_praised@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_icn_praised@2x.png -------------------------------------------------------------------------------- /static/images/cm2_act_icn_share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_act_icn_share@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_account.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_account.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_account_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_account_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_discovery.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_discovery_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_discovery_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_friend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_friend.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_friend_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_friend_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_music.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_music_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_music_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_radio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_radio.png -------------------------------------------------------------------------------- /static/images/cm2_btm_icn_radio_prs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btm_icn_radio_prs.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_dlt_dis@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btmlay_btn_dlt_dis@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_dlt_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btmlay_btn_dlt_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_fav_dis@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btmlay_btn_fav_dis@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btmlay_btn_fav_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btmlay_btn_fav_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btn_icn_add_thin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btn_icn_add_thin@2x.png -------------------------------------------------------------------------------- /static/images/cm2_btn_icn_check_thin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_btn_icn_check_thin@2x.png -------------------------------------------------------------------------------- /static/images/cm2_daily_cal_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_daily_cal_bg@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_act_320@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_act_320@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_artist_banner@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_artist_banner@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_default_cover_100@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_cover_100@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_play_bg-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_play_bg-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_default_recmd_list-ip@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_recmd_list-ip@2x.png -------------------------------------------------------------------------------- /static/images/cm2_default_runfm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_default_runfm-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_cn-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_banner_cn-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_jp-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_banner_jp-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_kr-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_banner_kr-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_banner_us-ip6@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_banner_us-ip6@2x.jpg -------------------------------------------------------------------------------- /static/images/cm2_discover_btn_slt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_btn_slt.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_0@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_1@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_2@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_3@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_4@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_4@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_fm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_fm-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_mv@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_mv@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_newest@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_newest@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_radio@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_radio@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_recmd@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_recmd@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_start_big@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_start_big@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_icn_upbill-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_icn_upbill-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_discover_slted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_discover_slted@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_list@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_list@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_loop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_loop@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_one@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_one@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_order@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_order@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_shuffle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_shuffle@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_time@2x.png -------------------------------------------------------------------------------- /static/images/cm2_icn_userhead@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_icn_userhead@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_artist_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_artist_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_close_prs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_close_prs@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_cloud@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_cloud@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_cmt_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_cmt_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_dlt_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_dlt_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_fav_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_fav_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_mv_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_mv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_notinterest_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_notinterest_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_quality_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_quality_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_icn_similar_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_icn_similar_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_order_album_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lay_order_album_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lay_order_artist_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/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/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_btn_icn_mv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_btn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_btn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_cover_rank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_cover_rank@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_cover_recent@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_cover_recent@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_dld@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_dld@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_fav_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_fav_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_faved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_faved@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_infor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_infor@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_detail_icn_share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_detail_icn_share@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_artists_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_artists_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_dld_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_dld_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_filter@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_filter@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_mymv_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_mymv_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_play24@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_play24@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_rdi_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_rdi_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_recent_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_recent_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_search@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_icn_subscribe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_icn_subscribe@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_search_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_search_time@2x.png -------------------------------------------------------------------------------- /static/images/cm2_list_sup_hot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_list_sup_hot@2x.png -------------------------------------------------------------------------------- /static/images/cm2_lists_icn_hot_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_lists_icn_hot_new@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_loop@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_btn_loop@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_one@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_btn_one@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_order@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_btn_order@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_btn_shuffle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_btn_shuffle@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_disc_radio-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_disc_radio-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_cmt_num@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_cmt_num@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_dld@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_dld@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_love@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_love@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_loved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_loved@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_praise@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_praise@2x.png -------------------------------------------------------------------------------- /static/images/cm2_play_icn_yizan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_play_icn_yizan@2x.png -------------------------------------------------------------------------------- /static/images/cm2_playlist_icn_dlt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_playlist_icn_dlt@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_btn_icn_subed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_pro_btn_icn_subed@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_boy@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_pro_icn_boy@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_girl@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_pro_icn_girl@2x.png -------------------------------------------------------------------------------- /static/images/cm2_pro_icn_lv@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_pro_icn_lv@2x.png -------------------------------------------------------------------------------- /static/images/cm2_radio_icn_hot_sml@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_radio_icn_hot_sml@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_artist@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_rdi_icn_artist@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_list@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_rdi_icn_list@2x.png -------------------------------------------------------------------------------- /static/images/cm2_rdi_icn_name@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_rdi_icn_name@2x.png -------------------------------------------------------------------------------- /static/images/cm2_runfm_icn_arr@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_runfm_icn_arr@2x.png -------------------------------------------------------------------------------- /static/images/cm2_vehicle_icn_subscribe@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_vehicle_icn_subscribe@2x.png -------------------------------------------------------------------------------- /static/images/cm2_vehicle_icn_subscribed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm2_vehicle_icn_subscribed@2x.png -------------------------------------------------------------------------------- /static/images/cm4_act_icn_more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_act_icn_more@2x.png -------------------------------------------------------------------------------- /static/images/cm4_disc_cover_new@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_disc_cover_new@2x.png -------------------------------------------------------------------------------- /static/images/cm4_disc_topbtn_daily-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_disc_topbtn_daily-ip6@2x.png -------------------------------------------------------------------------------- /static/images/cm4_list_icn_play_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_list_icn_play_time@2x.png -------------------------------------------------------------------------------- /static/images/cm4_list_icn_time@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_list_icn_time@2x.png -------------------------------------------------------------------------------- /static/images/cm4_my_icn_fav@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_my_icn_fav@2x.png -------------------------------------------------------------------------------- /static/images/cm4_slist_icn_hot@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/cm4_slist_icn_hot@2x.png -------------------------------------------------------------------------------- /static/images/common_icon_arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/common_icon_arrow@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_default_cover_fm-ip6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_default_cover_fm-ip6@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_cmt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_cmt@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_cmt_number@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_cmt_number@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_delete@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_delete@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_love@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_love@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_loved@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_loved@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_next@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_next@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_pause@2x.png -------------------------------------------------------------------------------- /static/images/fm/cm2_fm_btn_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/fm/cm2_fm_btn_play@2x.png -------------------------------------------------------------------------------- /static/images/icn_vip_pro_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/icn_vip_pro_36.png -------------------------------------------------------------------------------- /static/images/icn_vip_sq_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/icn_vip_sq_39.png -------------------------------------------------------------------------------- /static/images/l0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/l0.png -------------------------------------------------------------------------------- /static/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/loading.gif -------------------------------------------------------------------------------- /static/images/logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/logo.ico -------------------------------------------------------------------------------- /static/images/p0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/p0.png -------------------------------------------------------------------------------- /static/images/pl-playall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/pl-playall.png -------------------------------------------------------------------------------- /static/images/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/play.png -------------------------------------------------------------------------------- /static/images/video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/video.png -------------------------------------------------------------------------------- /static/images/wu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/wu.png -------------------------------------------------------------------------------- /static/images/xg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xg.png -------------------------------------------------------------------------------- /static/images/xi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xi.png -------------------------------------------------------------------------------- /static/images/xr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xr.png -------------------------------------------------------------------------------- /static/images/xu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xu.png -------------------------------------------------------------------------------- /static/images/xv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xv.png -------------------------------------------------------------------------------- /static/images/xy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sqaiyan/neteasemusic/115362ea049f964882339800deba1558a29ef1b6/static/images/xy.png --------------------------------------------------------------------------------