├── .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 | 
55 | 
56 | 
57 | 
58 | 
59 | 
60 | 
61 | 
62 | 
63 | 
64 | 
65 | 
66 | 
67 | 
68 | 
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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
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 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
17 |
18 |
回复 @{{item.beReplied[0].user.nickname}}:
19 |
20 |
21 | {{re.text}}
22 |
23 |
24 |
25 |
26 |
@{{item.beReplied[0].user.nickname}}:
27 |
28 |
29 | {{r.text}}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
58 |
59 |
--------------------------------------------------------------------------------
/src/components/loading.vue:
--------------------------------------------------------------------------------
1 |
2 | 加载中
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
15 |
16 |
19 |
--------------------------------------------------------------------------------
/src/components/lrc.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
纯音乐,无歌词
5 |
*歌词不支持滚动*
6 |
暂无歌词
7 |
8 | {{item.lrc}}
{{item.tlrc}}
9 |
11 |
12 |
13 |
14 |
加载出错了
15 |
16 |
17 |
18 |
55 |
56 |
--------------------------------------------------------------------------------
/src/components/music.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
36 |
--------------------------------------------------------------------------------
/src/components/playaction.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{playtime|time}}
5 |
6 |
{{duration|time}}
7 |
8 |
9 |
10 |
15 |
16 |
21 |
22 |
23 |

24 |
25 |
26 |
27 |

28 |

29 |
30 |
31 |

32 |
33 |
34 |

35 |
36 |
37 |
38 |
39 |
![]()
40 |
41 |
42 |

43 |

44 |
45 |
46 |
47 |

48 |

49 |
50 |
51 |
52 |

53 |
54 |
61 |
62 |
63 |
64 |
65 |
143 |
144 |
--------------------------------------------------------------------------------
/src/components/playico.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
23 |
24 |
--------------------------------------------------------------------------------
/src/components/playlist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
![]()
6 |
7 |
8 |
9 |
{{re.name}}
10 |
{{re.trackCount}}首,By{{re.creator.nickname}},播放{{re.playCount|playcount}}次
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/components/playpercent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{playtime|time}}
4 |
5 |
{{duration|time}}
6 |
7 |
8 |
9 |
45 |
46 |
--------------------------------------------------------------------------------
/src/components/pop.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
31 |
32 |
--------------------------------------------------------------------------------
/src/components/slider.vue:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
172 |
173 |
--------------------------------------------------------------------------------
/src/components/songlist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |

7 |
8 |
9 |
{{idx+1}}
10 |
11 |
12 |

{{trackids[idx].ratio}}%
13 |
14 |

15 |

16 |

17 |
{{(trackids[idx].v>idx)?(trackids[idx].v-idx):(idx-trackids[idx].v)}}
18 |
19 |
20 |

21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |

29 |
30 |
31 |
32 |
{{re.name}}({{...re.alia}})
33 |
{{re.ar[0].name}} - {{re.al.name}}
34 |
35 |
36 |
37 |
38 |
39 |
40 |

41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
93 |
94 |
--------------------------------------------------------------------------------
/src/components/tabs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{item.name}}
5 |
{{item.text}}
6 |
7 |
8 |
9 |
10 |
11 |
12 |
{{item.name}}
13 |
{{item.text}}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
41 |
42 |
--------------------------------------------------------------------------------
/src/components/topicontent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
![]()
7 |
8 |
9 |
{{topic.name}}
10 |
11 |
{{type==5?topic.radio.category:'歌单'}}
12 | {{topic.ar[0].name}}
13 | {{topic.creator.nickname}},{{type}}
14 | by{{topic.dj.nickname}}
15 |
16 |
17 |
18 |
19 |
20 |
21 |
89 |
--------------------------------------------------------------------------------
/src/components/topicres.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{resource}}
5 |
6 |
7 |
8 |
9 |
10 |
11 |
16 |
17 |
![]()
18 |

{{resource.playTime|playcount}}
19 |
20 |
{{resource.duration|dateS}}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
38 |
39 |
![]()
40 |
41 |
42 |
{{resource.name}}
43 |
44 |
{{type==4?'歌单':(resource.category||resource.radio.category)}}
45 | {{resource.artists[0].name}}
46 | {{resource.creator.nickname}}
47 | by{{resource.dj.nickname}}
48 |
49 |
50 |
51 |
52 |
53 |
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 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
44 |
45 |
46 |
47 |
48 |

49 |
50 |
51 | 播放全部 (共{{list.songs.length}}首)
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
141 |
142 |
--------------------------------------------------------------------------------
/src/pages/comments.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
热门评论
8 |
9 |
查看更多热门评论
10 |
11 |
12 |
精彩评论({{rec.total}})
13 |
14 |
15 |
暂无评论
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/src/pages/home/home.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
发现音乐
7 |
8 |
9 |
我的音乐
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/src/pages/home/index/djlist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
![]()
8 |
{{re.name}}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
![]()
18 |
19 |
20 |
21 |
{{re.name}}
22 |
{{re.reason}}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
![]()
34 |
35 | {{item.copywriter}}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
![]()
44 |
45 |

{{item.subCount|playcount}}订阅
46 |
47 | {{item.name}}
48 |
49 |
50 |
51 |
52 |
53 |
54 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/src/pages/home/index/find.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |

正在为您生成个性化推荐...
8 |
9 |
10 |
11 |
12 |
13 |

14 |
15 | 私人FM
16 |
17 |
18 |
{{thisday}}
19 | 每日歌曲推荐
20 |
21 |
22 |
23 |

24 |
25 | 云音乐热歌榜
26 |
27 |
28 |
29 |
30 |
31 |
32 |
![]()
33 |
34 | {{item.name}}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
51 |
52 |
53 |
![]()
54 |
55 |
56 |
{{item.name}}
57 |
{{item.song.artists[0].name}}
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
![]()
67 |
68 |
69 |
{{item.name}}
70 |
{{item.artistName}}
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
![]()
80 |
81 | {{item.name}}
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
132 |
133 |
--------------------------------------------------------------------------------
/src/pages/home/index/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/src/pages/home/index/playlist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
![]()
8 |
9 |
10 |
11 |

精品歌单

12 |
{{hiqulity.name}}
13 |
{{hiqulity.copywriter}}
14 |
15 |
16 |
17 |
18 |
20 |
21 |
22 |
23 |
24 |
25 |
![]()
26 |

{{item.creator.nickname}}
27 |
28 |

{{item.playCount|playcount}}
29 |
30 | {{item.name}}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 | {{catelist.res.all.name}}
41 |
42 |
43 |
{{item}}
44 |
45 |
46 |
47 | {{re.name}}
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/src/pages/home/index/sort.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
![]()
9 |
{{item.updateFrequency}}
10 |
11 |
12 |
13 | {{idx+1}}. {{r.first}} - {{r.second}}
14 |
15 |
16 |
17 |
18 |
19 |
![]()
20 |
{{re.artistToplist.updateFrequency}}
21 |
22 |
23 |
24 | {{idx+1}}. {{r.first}}
{{r.third}}
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
![]()
34 |
{{item.updateFrequency}}
35 |
36 | {{item.name}}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
67 |
68 |
69 |
92 |
93 |
--------------------------------------------------------------------------------
/src/pages/hqplaylist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
{{checked}}
筛选
8 |
9 |
10 |
11 |
12 |
![]()
13 |
14 |
15 |
16 | {{re.name}}
17 |
18 |
by{{re.creator.nickname}}
19 |
{{re.tag}}{{re.copywriter}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 | 全部
28 |
29 |
30 | {{item}}
31 |
32 |
33 |
34 |
35 |
36 |
37 |
78 |
--------------------------------------------------------------------------------
/src/pages/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 |
62 |
63 |
--------------------------------------------------------------------------------
/src/pages/mv.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 返回
5 |
6 |
7 |
9 |
10 |
23 |
24 |
相似Mv
25 |
26 |
27 |
28 |
![]()
29 |
30 |

{{re.playCount}}
31 |
32 |
33 |
34 |
{{re.name}}
35 |
36 |
{{re.artistName}}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
评论({{rec.total}})
45 |
46 |
47 |
48 |
49 |
50 |
51 |
123 |
124 |
--------------------------------------------------------------------------------
/src/pages/my/cloud.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
云盘容量:
10 |
{{(list.size/1073741824).toFixed(2)}}G/{{(list.maxSize/1073741824).toFixed(2)}}G
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |

20 |
21 |
22 | {{idx+1}}
23 |
24 |
25 |
26 |
27 |
{{re.simpleSong.name}}({{re.simpleSong.alia[0]}})
28 |
{{re.simpleSong.ar[0].name}}-{{re.simpleSong.al.name}}
29 |
30 |
31 |
32 |
33 |
34 |
35 |

36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
83 |
84 |
--------------------------------------------------------------------------------
/src/pages/my/favradio.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
我创建的电台({{program.djRadios.length}})
9 |
10 |
11 |
![]()
12 |
13 |
14 |
15 |
{{re.name}}
16 |
by {{re.dj.nickname}}
17 |
{{re.lastProgramName}}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
我收藏的电台({{radio.count}})
25 |
26 |
27 |
![]()
28 |
{{re.newProgramCount}}
29 |
30 |
31 |
32 |
{{re.name}}
33 |
by {{re.dj.nickname}}
34 |
{{re.lastProgramName}}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
92 |
--------------------------------------------------------------------------------
/src/pages/my/my.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 我的
5 |
6 |
7 |
32 |
33 |
34 |
歌单({{subcount.createdPlaylistCount}})
35 |
36 |
37 |
38 |
收藏的歌单({{subcount.subPlaylistCount}})
39 |
40 |
41 |
42 |
43 |
44 |
发现音乐
45 |
46 |
47 |
我的音乐
48 |
49 |
50 |
51 |
52 |
53 |
100 |
101 |
--------------------------------------------------------------------------------
/src/pages/play/fm.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
![]()
10 |
11 |
12 | {{music.name}}
13 | {{(music.artists||[1])[0].name}}
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
![]()
67 |
68 |
69 |
{{re.name}}
70 |
{{re.trackCount}}首
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
161 |
162 |
--------------------------------------------------------------------------------
/src/pages/play/play.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
21 |
--------------------------------------------------------------------------------
/src/pages/playlist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
49 |
50 |
51 |
52 |
53 |

54 |
55 |
56 | 播放全部 (共{{list.playlist.trackCount}}首)
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
154 |
155 |
--------------------------------------------------------------------------------
/src/pages/record.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
12 |
13 | {{idx+1}}
14 |
15 |
16 |
17 |
{{re.song.name}}
18 |
{{re.song.ar[0].name}}-{{re.song.al.name}}
19 |
20 |
21 |

{{re.playCount}}次
22 |
23 |
24 |
25 |
{{allData.msg}}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | {{idx+1}}
36 |
37 |
38 |
39 |
{{re.song.name}}
40 |
{{re.song.ar[0].name}}-{{re.song.al.name}}
41 |
42 |
43 |

{{re.playCount}}次
44 |
45 |
46 |
47 |
{{weekly.msg}}
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/pages/recsongs.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
12 |
13 |
14 |

15 |
16 |
播放全部 (共{{list.length}}首)
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
{{re.name}}({{re.alias[0]}})
26 |
{{re.artists[0].name}}-{{re.album.name}}
27 |
28 |
29 |
30 |
31 |
32 |
33 |

34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
![]()
90 |
91 |
92 |
{{re.name}}
93 |
{{re.trackCount}}首
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
190 |
191 |
--------------------------------------------------------------------------------
/src/pages/simi.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
包含这首歌的歌单
10 |
11 |
12 |
13 |
14 |
![]()
15 |
16 |

{{re.playCount}}
17 |
18 |
19 |
{{re.name}}
20 |
{{re.creator.nickname}}
21 |
22 |
23 |
24 |
25 |
26 |
27 |
喜欢这首歌的人也喜欢听
28 |
29 |
30 |
31 |
32 |

33 |
34 |
35 |
{{re.name}}
36 |
{{re.artists[0].name}}-{{re.album.name}}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
喜欢这首歌的人
49 |
50 |
51 |
52 |
![]()
53 |
54 |
55 |
56 |
{{re.nickname}}
![]()
57 |
{{re.recommendReason}}
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/src/pages/sublist.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
![]()
12 |
13 |
14 |
15 |
{{re.name}} ({{...re.alias}})
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
![]()
27 |
28 |

{{re.playCount}}
29 |
30 |
31 |
32 |
{{re.name}}
33 |
{{re.artistName}}
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
![]()
45 |
46 |
47 |
48 |
{{re.title}}
49 |
by {{re.author}} 阅读 {{re.readCount}}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
![]()
60 |

61 |
62 |
63 |
64 |
{{re.name}}
65 |
{{re.artists[0].name}},{{re.size}}首
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
161 |
--------------------------------------------------------------------------------
/src/pages/topicDetail.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
14 |
21 |
22 |
23 |
28 |
29 |
往期回顾
30 |
31 |
32 |
![]()
33 |
34 |
35 |
36 |
{{re.mainTitle}}
37 |
by{{re.creator.nickname}} 阅读{{re.readCount|playcount}}
38 |
39 |
40 |
41 |
查看更多>
42 |
43 |
44 |
51 |
52 |
53 |
54 |
55 |
56 |
112 |
113 |
--------------------------------------------------------------------------------
/src/pages/video.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 返回
5 |
6 |
7 |
9 |
10 |
27 |
28 |
相关推荐
29 |
30 |
31 |
32 |
![]()
33 |
34 |

{{re.playTime}}
35 |
36 |
41 |
42 |
43 |
44 |
45 |
评论({{rec.total}})
46 |
47 |
48 |
49 |
50 |
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
--------------------------------------------------------------------------------