├── LICENSE
├── README.md
├── app.js
├── app.json
├── app.wxss
├── image
├── 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_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_fav_dis@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_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_fav_new@2x.png
├── cm2_lay_icn_mv_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_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_subscribe@2x.png
├── cm2_lists_icn_hot_new@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
├── cm4_list_icn_play_time@2x.png
├── cm4_list_icn_time@2x.png
├── cm4_my_icn_fav@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
├── p0.png
├── pl-playall.png
├── play.png
├── video.png
├── wu.png
├── xg.png
├── xi.png
├── xr.png
├── xu.png
├── xv.png
└── xy.png
├── page
└── component
│ ├── album
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── artist
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── cloud
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── djradio
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── fm
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── home
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── login
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── me
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── mv
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── new
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── playing
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── playlist
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── program
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── recommend
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── record
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── recsongs
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── search
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── simi
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ ├── toplist
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
│ └── user
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
├── screenshot
├── IMG_4271.PNG
├── IMG_4272.PNG
├── IMG_4273.PNG
├── IMG_4274.PNG
├── IMG_4275.PNG
├── IMG_4276.PNG
├── IMG_4277.PNG
├── IMG_4279.PNG
├── wx.jpg
└── zfb.jpg
└── utils
├── async.js
├── base64md5.js
├── bsurl.js
├── commentslist.wxml
├── common.wxss
├── image.wxml
├── loading.wxml
├── lrc.wxml
├── nt.js
├── pageplay.wxml
├── pl.wxml
├── playing.wxml
├── playlist.wxml
├── playpercent.wxml
├── pp_music.wxml
├── recordlist.wxml
├── searchtypelist.js
└── util.js
/README.md:
--------------------------------------------------------------------------------
1 | # netmusic-app
2 | 欢迎star issue
3 |
4 | 仿网易云音乐APP的微信小程序
5 |
6 | [还有Vue版本哦](https://github.com/sqaiyan/neteasemusic)
7 |
8 | 需后端支持
9 | 下载启动[node服务端](https://github.com/sqaiyan/netmusic-node)即可
10 |
11 | ### 目前实现功能
12 |
13 | 1. 用户
14 | 2. 歌单
15 | 3. FM
16 | 4. 播放
17 | 5. 评论
18 | 6. MV
19 | 7. 专辑
20 | 8. 歌手
21 | 9. 登录
22 | 10. 歌曲红心,FM trash,收藏单曲至歌单
23 | 11. 收听记录
24 | 12. 歌单歌曲推荐
25 | 13. 迷你播放条
26 | 14. 电台,节目
27 | 15. 搜索
28 |
29 | ### TODO
30 |
31 | * 增加评论,评论点赞等
32 | * 歌词翻译
33 | * 收藏(歌单,歌手,专辑,电台
34 | * 音质切换
35 | * 用户动态,粉丝
36 | * 新歌 新专 分类电台
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | ### 如果本示例对您学习小程序有帮助欢迎大佬赏杯奶茶喝
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "page/component/home/index",
4 | "page/component/user/index",
5 | "page/component/playlist/index",
6 | "page/component/mv/index",
7 | "page/component/playing/index",
8 | "page/component/login/index",
9 | "page/component/fm/index",
10 | "page/component/toplist/index",
11 | "page/component/recommend/index",
12 | "page/component/search/index",
13 | "page/component/album/index",
14 | "page/component/artist/index",
15 | "page/component/recsongs/index",
16 | "page/component/record/index",
17 | "page/component/me/index",
18 | "page/component/cloud/index",
19 | "page/component/program/index",
20 | "page/component/djradio/index",
21 | "page/component/simi/index",
22 | "page/component/new/index"
23 | ],
24 | "window": {
25 | "navigationBarTextStyle": "#fff",
26 | "navigationBarTitleText": "Music",
27 | "backgroundColor": "#fbfcfd",
28 | "navigationBarBackgroundColor": "#BB2C08"
29 | },
30 | "tabBar": {
31 | "color": "#aaa",
32 | "selectedColor": "#fff",
33 | "borderStyle": "#333",
34 | "backgroundColor": "#212121",
35 | "list": [
36 | {
37 | "pagePath": "page/component/home/index",
38 | "iconPath": "image/cm2_btm_icn_discovery.png",
39 | "selectedIconPath": "image/cm2_btm_icn_discovery_prs.png",
40 | "text": "发现音乐"
41 | },
42 | {
43 | "pagePath": "page/component/me/index",
44 | "iconPath": "image/cm2_btm_icn_music.png",
45 | "selectedIconPath": "image/cm2_btm_icn_music_prs.png",
46 | "text": "我的音乐"
47 | }
48 | ]
49 | },
50 | "networkTimeout": {
51 | "request": 10000,
52 | "connectSocket": 10000,
53 | "uploadFile": 10000,
54 | "downloadFile": 10000
55 | },
56 | "debug": true
57 | }
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-size: 100% 100%;
3 | height: 100%;
4 | font-size: 32rpx;
5 | font-family: "微软雅黑";
6 | color: #333;
7 | }
8 |
9 | input,
10 | textarea,
11 | select {
12 | font-size: 32rpx;
13 | font-family: "微软雅黑";
14 | color: #333;
15 | }
16 |
17 | .container {
18 | display: flex;
19 | flex-direction: column;
20 | justify-content: space-between;
21 | }
22 |
23 | .page-header {
24 | display: flex;
25 | font-size: 32rpx;
26 | color: #aaa;
27 | margin-top: 50rpx;
28 | flex-direction: column;
29 | align-items: center;
30 | }
31 |
32 | .page-header-text {
33 | padding: 20rpx 40rpx;
34 | }
35 |
36 | .page-header-line {
37 | width: 150rpx;
38 | height: 1px;
39 | border-bottom: 1px solid #ccc;
40 | }
41 |
42 | .page-body {
43 | width: 100%;
44 | display: flex;
45 | flex-direction: column;
46 | align-items: center;
47 | flex-grow: 1;
48 | overflow-x: hidden;
49 | }
50 |
51 | .green {
52 | color: #09BB07;
53 | }
54 |
55 | .red {
56 | color: #F76260;
57 | }
58 |
59 | .blue {
60 | color: #10AEFF;
61 | }
62 |
63 | .yellow {
64 | color: #FFBE00;
65 | }
66 |
67 | .gray {
68 | color: #C9C9C9;
69 | }
70 |
71 | .strong {
72 | font-weight: bold;
73 | }
74 |
75 | .bc_green {
76 | background-color: #09BB07;
77 | }
78 |
79 | .bc_red {
80 | background-color: #F76260;
81 | }
82 |
83 | .bc_blue {
84 | background-color: #10AEFF;
85 | }
86 |
87 | .bc_yellow {
88 | background-color: #FFBE00;
89 | }
90 |
91 | .bc_gray {
92 | background-color: #C9C9C9;
93 | }
94 |
95 | .tc {
96 | text-align: center;
97 | }
98 |
99 | .page input {
100 | padding: 20rpx 30rpx;
101 | background-color: #fff;
102 | }
103 |
104 | checkbox,
105 | radio {
106 | margin-right: 10rpx;
107 | }
108 |
109 | .btn-area {
110 | padding: 0 30px;
111 | }
112 |
113 | .btn-area button {
114 | margin-top: 20rpx;
115 | margin-bottom: 20rpx;
116 | }
117 |
118 | .page {
119 | min-height: 100%;
120 | flex: 1;
121 | overflow: hidden;
122 | }
123 |
124 | .tags {
125 | border: 1rpx solid #BB2C08;
126 | color: #BB2C08;
127 | font-size: 20rpx;
128 | line-height: 1;
129 | margin-right: 10rpx;
130 | padding: 3rpx 8rpx;
131 | }
132 |
133 | .box-txt-e {
134 | text-overflow: ellipsis;
135 | display: box;
136 | box-orient: vertical;
137 | line-clamp: 2;
138 | overflow: hidden;
139 | }
140 |
141 | #pageplay {
142 | position: fixed;
143 | width: 100%;
144 | display: flex;
145 | justify-content: center;
146 | bottom: 0;
147 | background: rgba(33, 33, 33, .8);
148 | -webkit-backdrop-filter: blur(15px);
149 | backdrop-filter: blur(15px);
150 | z-index: 100;
151 | align-items: center;
152 | }
153 |
154 | #pp_pic {
155 | flex: 0 0 70rpx;
156 | text-align: center;
157 | border-radius: 50%;
158 | padding: 15rpx;
159 | }
160 |
161 | #pp_playing {
162 | background: rgba(0, 0, 0, .5);
163 | position: absolute;
164 | left: 15rpx;
165 | z-index: 2;
166 | }
167 |
168 | #pageplay image {
169 | width: 70rpx;
170 | height: 70rpx;
171 | vertical-align: top
172 | }
173 |
174 | #pp_name {
175 | flex: 1;
176 | overflow: hidden;
177 | line-height: 1.6;
178 | color: #fff;
179 | font-size: 28rpx;
180 | }
181 |
182 | #pp_name view {
183 | height: 1.4em;
184 | white-space: nowrap;
185 | overflow: hidden;
186 | text-overflow: ellipsis;
187 | word-break: keep-all
188 | }
189 |
190 | #pp_name #ppn_des {
191 | font-size: 22rpx;
192 | color: #eee;
193 | }
194 |
195 | #pp_action {
196 | display: flex;
197 | align-items: center;
198 | padding: 0 5rpx
199 | }
200 |
201 | #pp_action .pa-baction {
202 | padding: 0 5rpx;
203 | flex: 0 0 auto
204 | }
205 |
206 | #pageplay #pp_next {
207 | width: 60rpx;
208 | height: 60rpx
209 | }
210 |
211 | .page_pp {
212 | padding-bottom: 100rpx;
213 | }
214 |
215 | .page_loading {
216 | text-align: center;
217 | padding: 20rpx;
218 | display: block
219 | }
220 |
221 | .pp_overlay {
222 | position: fixed;
223 | left: 0;
224 | top: 0;
225 | right: 0;
226 | bottom: 0;
227 | z-index: 100;
228 | background: rgba(0, 0, 0, .5);
229 | }
230 |
231 | .pp_main {
232 | background: rgba(255, 255, 255, .65);
233 | -webkit-backdrop-filter: blur(15px);
234 | backdrop-filter: blur(15px);
235 | position: fixed;
236 | z-index: 101;
237 | width: 100%;
238 | bottom: 0;
239 | left: 0;
240 | }
241 |
242 | .ppm_header {
243 | border-bottom: 1rpx solid #ccc;
244 | padding: 20rpx;
245 | font-size: 28rpx;
246 | color: #666;
247 | display: flex;
248 | justify-content: space-between;
249 | white-space: nowrap;
250 | overflow: hidden;
251 | text-overflow: ellipsis;
252 | }
253 |
254 | .ppm_header image {
255 | vertical-align: middle
256 | }
257 |
258 | .pph_cnt {
259 | display: flex;
260 | }
261 |
262 | .pph_cnt view {
263 | padding-left: 20rpx
264 | }
265 |
266 | .ppm_footer {
267 | border-top: 1rpx solid #ccc;
268 | text-align: center;
269 | padding: 20rpx;
270 | }
271 |
272 | .ppm_content {
273 | max-height: 600rpx;
274 | overflow: auto
275 | }
276 |
277 | .ppm_content scroll-view {
278 | height: 600rpx;
279 | }
280 |
281 | .ppm_content .menu .cmain {
282 | border-bottom-color: #ccc
283 | }
284 |
285 | .ppm_content .flexlist .flexlist {
286 | border-bottom: 1rpx solid #ccc
287 | }
288 |
289 | .ppm_content .flexlist .flexmain text {
290 | font-size: 26rpx;
291 | }
292 |
293 | .userprofiles .flexmain image {
294 | width: 32rpx;
295 | height: 32rpx;
296 | }
297 |
298 | .userprofiles .fl-image image {
299 | border-radius: 50%
300 | }
301 |
302 | @import "utils/common.wxss"
--------------------------------------------------------------------------------
/image/a4s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/a4s.png
--------------------------------------------------------------------------------
/image/a6a.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/a6a.png
--------------------------------------------------------------------------------
/image/a6l.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/a6l.png
--------------------------------------------------------------------------------
/image/a82.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/a82.png
--------------------------------------------------------------------------------
/image/aag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/aag.png
--------------------------------------------------------------------------------
/image/aah.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/aah.png
--------------------------------------------------------------------------------
/image/aal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/aal.png
--------------------------------------------------------------------------------
/image/ajb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/ajb.png
--------------------------------------------------------------------------------
/image/ajd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/ajd.png
--------------------------------------------------------------------------------
/image/ajf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/ajf.png
--------------------------------------------------------------------------------
/image/ajh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/ajh.png
--------------------------------------------------------------------------------
/image/arrow-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/arrow-left.png
--------------------------------------------------------------------------------
/image/arrow-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/arrow-right.png
--------------------------------------------------------------------------------
/image/cm2_act_delete@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_act_delete@2x.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_account.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_account_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_account_prs.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_discovery.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_discovery.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_discovery_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_discovery_prs.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_friend.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_friend_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_friend_prs.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_music.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_music_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_music_prs.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_radio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_radio.png
--------------------------------------------------------------------------------
/image/cm2_btm_icn_radio_prs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btm_icn_radio_prs.png
--------------------------------------------------------------------------------
/image/cm2_btmlay_btn_dlt_dis@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btmlay_btn_dlt_dis@2x.png
--------------------------------------------------------------------------------
/image/cm2_btmlay_btn_fav_dis@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btmlay_btn_fav_dis@2x.png
--------------------------------------------------------------------------------
/image/cm2_btn_icn_add_thin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btn_icn_add_thin@2x.png
--------------------------------------------------------------------------------
/image/cm2_btn_icn_check_thin@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_btn_icn_check_thin@2x.png
--------------------------------------------------------------------------------
/image/cm2_daily_cal_bg@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_daily_cal_bg@2x.png
--------------------------------------------------------------------------------
/image/cm2_default_act_320@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_act_320@2x.png
--------------------------------------------------------------------------------
/image/cm2_default_artist_banner@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_artist_banner@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_default_cover_100@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_cover_100@2x.png
--------------------------------------------------------------------------------
/image/cm2_default_play_bg-ip6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_play_bg-ip6@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_default_recmd_list-ip@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_recmd_list-ip@2x.png
--------------------------------------------------------------------------------
/image/cm2_default_runfm-ip6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_default_runfm-ip6@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_banner_cn-ip6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_banner_cn-ip6@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_discover_banner_jp-ip6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_banner_jp-ip6@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_discover_banner_kr-ip6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_banner_kr-ip6@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_discover_banner_us-ip6@2x.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_banner_us-ip6@2x.jpg
--------------------------------------------------------------------------------
/image/cm2_discover_btn_slt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_btn_slt.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_0@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_0@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_1@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_2@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_3@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_4@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_fm-ip6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_fm-ip6@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_mv@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_mv@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_newest@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_newest@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_radio@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_radio@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_recmd@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_recmd@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_start_big@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_start_big@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_icn_upbill-ip6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_icn_upbill-ip6@2x.png
--------------------------------------------------------------------------------
/image/cm2_discover_slted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_discover_slted@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_list@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_list@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_loop@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_loop@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_one@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_one@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_order@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_order@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_shuffle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_shuffle@2x.png
--------------------------------------------------------------------------------
/image/cm2_icn_userhead@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_icn_userhead@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_artist_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_artist_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_close_prs@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_close_prs@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_cloud@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_cloud@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_fav_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_fav_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_mv_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_mv_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_quality_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_quality_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_icn_similar_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_icn_similar_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_order_album_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_order_album_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_lay_order_artist_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lay_order_artist_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_btn_icn_mv_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_btn_icn_mv_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_btn_more@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_btn_more@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_cover_rank@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_cover_rank@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_cover_recent@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_cover_recent@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_arr@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_arr@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_cmt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_cmt@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_dld@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_dld@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_fav_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_fav_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_faved@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_faved@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_infor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_infor@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_detail_icn_share@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_detail_icn_share@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_artists_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_artists_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_dld_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_dld_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_mymv_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_mymv_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_play24@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_play24@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_rdi_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_rdi_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_recent_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_recent_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_list_icn_subscribe@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_list_icn_subscribe@2x.png
--------------------------------------------------------------------------------
/image/cm2_lists_icn_hot_new@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_lists_icn_hot_new@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_disc_radio-ip6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_disc_radio-ip6@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_cmt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_cmt@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_cmt_num@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_cmt_num@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_dld@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_dld@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_love@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_love@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_loved@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_loved@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_more@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_more@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_praise@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_praise@2x.png
--------------------------------------------------------------------------------
/image/cm2_play_icn_yizan@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_play_icn_yizan@2x.png
--------------------------------------------------------------------------------
/image/cm2_playlist_icn_dlt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_playlist_icn_dlt@2x.png
--------------------------------------------------------------------------------
/image/cm2_pro_btn_icn_subed@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_pro_btn_icn_subed@2x.png
--------------------------------------------------------------------------------
/image/cm2_pro_icn_boy@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_pro_icn_boy@2x.png
--------------------------------------------------------------------------------
/image/cm2_pro_icn_girl@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_pro_icn_girl@2x.png
--------------------------------------------------------------------------------
/image/cm2_pro_icn_lv@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_pro_icn_lv@2x.png
--------------------------------------------------------------------------------
/image/cm2_radio_icn_hot_sml@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_radio_icn_hot_sml@2x.png
--------------------------------------------------------------------------------
/image/cm2_rdi_icn_artist@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_rdi_icn_artist@2x.png
--------------------------------------------------------------------------------
/image/cm2_rdi_icn_list@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_rdi_icn_list@2x.png
--------------------------------------------------------------------------------
/image/cm2_rdi_icn_name@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm2_rdi_icn_name@2x.png
--------------------------------------------------------------------------------
/image/cm4_list_icn_play_time@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm4_list_icn_play_time@2x.png
--------------------------------------------------------------------------------
/image/cm4_list_icn_time@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm4_list_icn_time@2x.png
--------------------------------------------------------------------------------
/image/cm4_my_icn_fav@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/cm4_my_icn_fav@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_default_cover_fm-ip6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_default_cover_fm-ip6@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_cmt@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_cmt@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_cmt_number@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_cmt_number@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_delete@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_delete@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_love@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_love@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_loved@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_loved@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_next@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_next@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_pause@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_pause@2x.png
--------------------------------------------------------------------------------
/image/fm/cm2_fm_btn_play@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/fm/cm2_fm_btn_play@2x.png
--------------------------------------------------------------------------------
/image/icn_vip_pro_36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/icn_vip_pro_36.png
--------------------------------------------------------------------------------
/image/icn_vip_sq_39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/icn_vip_sq_39.png
--------------------------------------------------------------------------------
/image/l0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/l0.png
--------------------------------------------------------------------------------
/image/p0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/p0.png
--------------------------------------------------------------------------------
/image/pl-playall.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/pl-playall.png
--------------------------------------------------------------------------------
/image/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/play.png
--------------------------------------------------------------------------------
/image/video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/video.png
--------------------------------------------------------------------------------
/image/wu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/wu.png
--------------------------------------------------------------------------------
/image/xg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xg.png
--------------------------------------------------------------------------------
/image/xi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xi.png
--------------------------------------------------------------------------------
/image/xr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xr.png
--------------------------------------------------------------------------------
/image/xu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xu.png
--------------------------------------------------------------------------------
/image/xv.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xv.png
--------------------------------------------------------------------------------
/image/xy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/image/xy.png
--------------------------------------------------------------------------------
/page/component/album/index.js:
--------------------------------------------------------------------------------
1 | var app = getApp();
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var common = require('../../../utils/util.js');
4 | var nt = require("../../../utils/nt.js");
5 | Page({
6 | data: {
7 | result: {},
8 | curplay: 0,
9 | music: {},
10 | playing: false,
11 | playtype: 1,
12 | loading: true,
13 | music: {},
14 | playing: false,
15 | playtype: 1,
16 | share: {
17 | title: "一起来听",
18 | des: ""
19 | }
20 | },
21 | toggleplay: function () {
22 | common.toggleplay(this, app);
23 | },
24 | playnext: function (e) {
25 | app.nextplay(e.currentTarget.dataset.pt)
26 | },
27 | music_next: function (r) {
28 | this.setData({
29 | music: r.music,
30 | playtype: r.playtype,
31 | curplay: r.music.id
32 | })
33 | },
34 | music_toggle: function (r) {
35 | this.setData({
36 | playing: r.playing,
37 | music: r.music,
38 | playtype: r.playtype,
39 | curplay: r.music.id
40 | })
41 | },
42 | onHide: function () {
43 | nt.removeNotification("music_next", this)
44 | nt.removeNotification("music_toggle", this)
45 | },
46 | lovesong: function () {
47 | common.songheart(this, app, 0, (this.data.playtype == 1 ? this.data.music.st : this.data.music.starred));
48 | },
49 | onLoad: function (options) {
50 |
51 | var that = this;
52 | wx.request({
53 | url: bsurl + 'album/detail',
54 | data: {
55 | id: options.pid
56 | },
57 | success: function (res) {
58 | var re = res.data;
59 | re.album.publishTime = common.formatTime(re.album.publishTime, 3);
60 | var canplay = [];
61 | for (var i = 0; i < res.data.songs.length; i++) {
62 | var r = res.data.songs[i]
63 | if (r.privilege.st > -1) {
64 | canplay.push(r)
65 | }
66 | }
67 | that.setData({
68 | result: res.data,
69 | loading: false,
70 | canplay: canplay,
71 | share: {
72 | id: options.id,
73 | title: res.data.album.name + '-' + res.data.album.artist.name,
74 | des: res.data.album.description
75 | }
76 | });
77 | wx.setNavigationBarTitle({
78 | title: res.data.album.name
79 | })
80 | },
81 | fail: function (res) {
82 | wx.navigateBack({
83 | delta: 1
84 | })
85 | }
86 | });
87 | },
88 | onShareAppMessage: function () {
89 | if (this.data.share.id) return;
90 | return {
91 | title: this.data.share.title,
92 | desc: this.data.share.des,
93 | path: 'page/component/playing/index?id=' + this.data.share.id
94 | }
95 | },
96 | onShow: function () {
97 | nt.addNotification("music_next", this.music_next, this);
98 | nt.addNotification("music_toggle", this.music_toggle, this);
99 | this.setData({
100 | curplay: app.globalData.curplay.id,
101 | music: app.globalData.curplay,
102 | playing: app.globalData.playing,
103 | playtype: app.globalData.playtype
104 | })
105 | },
106 | artlist: function (e) {
107 | var userid = e.currentTarget.dataset.userid;
108 | wx.redirectTo({
109 | url: '../artist/index?id=' + userid
110 | })
111 | },
112 | playall: function (event) {
113 | this.setplaylist(this.data.canplay[0], 0);
114 | app.seekmusic(1)
115 |
116 | },
117 | setplaylist: function (music, index) {
118 | //设置播放列表,设置当前播放音乐,设置当前音乐在列表中位置
119 | app.globalData.curplay = app.globalData.curplay.id != music.id ? music : app.globalData.curplay;
120 | app.globalData.index_am = index; //event.currentTarget.dataset.idx;
121 | app.globalData.playtype = 1;
122 | var shuffle = app.globalData.shuffle;
123 | app.globalData.list_sf = this.data.canplay; //this.data.list.tracks;
124 | app.shuffleplay(shuffle);
125 | app.globalData.globalStop = false;
126 | },
127 | mv: function (e) {
128 | var id = e.currentTarget.dataset.mvid;
129 | wx.navigateTo({
130 | url: '../mv/index?id=' + id
131 | })
132 | },
133 | playmusic: function (event) {
134 | var that = this;
135 | var music = event.currentTarget.dataset.idx;
136 | var st = event.currentTarget.dataset.st;
137 | if (st * 1 < 0) {
138 | wx.showToast({
139 | title: '歌曲已下架',
140 | icon: 'success',
141 | duration: 2000
142 | });
143 | return;
144 | }
145 | music = this.data.result.songs[music];
146 | that.setplaylist(music, event.currentTarget.dataset.idx)
147 | }
148 | });
--------------------------------------------------------------------------------
/page/component/album/index.json:
--------------------------------------------------------------------------------
1 | { "navigationBarTitleText": "专辑"}
--------------------------------------------------------------------------------
/page/component/album/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 播放全部 (共{{result.songs.length}}首)
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/page/component/album/index.wxss:
--------------------------------------------------------------------------------
1 | #plist-header {
2 | position: relative;
3 | overflow: hidden
4 | }
5 |
6 | #plh-main {
7 | position: relative;
8 | z-index: 3;
9 | overflow: hidden
10 | }
11 |
12 | #plh-cover {
13 | width: 328rpx;
14 | height: 280rpx;
15 | float: left;
16 | margin: 30rpx;
17 | position: relative;
18 | margin-bottom: 10rpx
19 | }
20 |
21 | #plh-cover image {
22 | height: 100%;
23 | position: relative;
24 | z-index: 2;
25 | width: 280rpx
26 | }
27 | #plh-cover #plh-cover-album{height: 100%;position: absolute;z-index: 1;top:0;left:0;width: 100%}
28 | .blurbg{background-color: #eee}
29 | #plh-playinfo{position: absolute;z-index: 3;right: 10rpx;bottom: 10rpx;}
30 | #plh-playinfo image{width: 46rpx;height:46rpx; vertical-align: top; background-color: rgba(0,0,0,.2);border-radius: 50%;}
31 | #user_ava {
32 | width: 60rpx;
33 | height: 60rpx;
34 | border-radius: 50%;
35 | margin-right: 20rpx;
36 | vertical-align: middle;
37 | }
38 |
39 | #plh-cnt {
40 | margin-left:350rpx;
41 | color: #fff;
42 | font-size: 24rpx;
43 | line-height: 50rpx
44 | }
45 |
46 | #music_h_name {
47 | font-size: 32rpx;
48 | padding: 60rpx 20rpx 40rpx 0;
49 | display: block
50 | }
51 |
52 | #plh_action {
53 | display: flex;
54 | position: relative;
55 | z-index: 3;
56 | clear: both;
57 | width: 100%;
58 | line-height:2;
59 |
60 | }
61 |
62 | #plh_action view {
63 | text-align: center;
64 | color: #fff;
65 | border-bottom: none;
66 | font-size: 24rpx;
67 | flex: 1;
68 | }
69 |
70 | #plh_action view image {
71 | width:110rpx;
72 | height: 110rpx;
73 | display: block;margin: 0 auto -30rpx
74 | }
75 | #plh_action view text{display: block;padding-bottom:.5em;line-height: 2}
76 |
77 | .topindex{color: red}
78 | .playingidx{width: 38rpx;height:38rpx;}
79 | .ftp{display: block;color: #888;font-size: 18rpx;padding-top: 10rpx;}
80 | .ftp image{width:18rpx;display: inline-block;vertical-align: middle;overflow: hidden;margin-right: 5rpx;}
81 | .ftp image.tpnew{width:38rpx}
82 |
83 |
84 | .pld-mv image {
85 | width: 78rpx;height:63rpx;
86 | }
--------------------------------------------------------------------------------
/page/component/artist/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var app = getApp();
3 | Page({
4 | data: {
5 | art: {},
6 | loading: false,
7 | tab: 1,
8 | curplay: -1,
9 | album: {
10 | offset: 0,
11 | loading: false
12 | },
13 | mvs: {
14 | offset: 0,
15 | loading: false
16 | },
17 | desc: {
18 | loading: false
19 | },
20 | simi: {
21 | loading: false
22 | }
23 | },
24 | onLoad: function(options) {
25 | var id = options.id;
26 | var that = this;
27 | wx.request({
28 | url: bsurl + 'artist?id=' + id,
29 | success: function(res) {
30 | that.setData({
31 | art: res.data,
32 | loading: true
33 | });
34 | wx.setNavigationBarTitle({
35 | title: res.data.artist.name
36 | })
37 | }
38 | })
39 | },
40 | playmusic: function(event) {
41 |
42 | },
43 | tabtype: function(e) {
44 | var t = e.currentTarget.dataset.t;
45 | this.setData({ tab: t });
46 | var that = this;
47 | if(t == 2 && !this.data.album.loading) {
48 | this.setData({ loading: false })
49 | wx.request({
50 | url: bsurl + 'artist/album',
51 | data: {
52 | id: that.data.art.artist.id,
53 | offset: that.data.album.offset,
54 | limit: 20
55 | },
56 | success: function(res) {
57 | res.data.loading = true;
58 | res.data.offset = that.data.album.offset + res.data.hotAlbums.length
59 | that.setData({
60 | album: res.data,
61 | loading: true
62 | })
63 | }
64 | })
65 | }
66 | if(t == 3 && !this.data.mvs.loading) {
67 | this.setData({ loading: false })
68 | wx.request({
69 | url: bsurl + 'artist/mv',
70 | data: {
71 | id: that.data.art.artist.id,
72 | offset: that.data.mvs.offset,
73 | limit: 20
74 | },
75 | success: function(res) {
76 | res.data.loading = true;
77 | res.data.offset = that.data.mvs.offset + res.data.mvs.length
78 | that.setData({
79 | mvs: res.data,
80 | loading: true
81 | })
82 | }
83 | })
84 | }
85 | if(t == 4 && !this.data.desc.loading) {
86 | this.setData({ loading: false })
87 | wx.request({
88 | url: bsurl + 'artist/desc',
89 | data: {
90 | id: that.data.art.artist.id
91 | },
92 | success: function(res) {
93 | res.data.loading = true;
94 | that.setData({
95 | loading: true,
96 | desc: res.data
97 | })
98 | }
99 | })
100 | wx.request({
101 | url: bsurl + 'artist/simi',
102 | data: {
103 | id: that.data.art.artist.id,
104 | cookie: app.globalData.cookie
105 | },
106 | success: function(res) {
107 | if(res.data.code != 200) return
108 | res.data.loading = true;
109 | that.setData({
110 | simi: res.data
111 | })
112 | }
113 | })
114 | }
115 | }
116 | })
--------------------------------------------------------------------------------
/page/component/artist/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "歌手"}
--------------------------------------------------------------------------------
/page/component/artist/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
12 |
13 |
14 | 热门50
15 |
16 |
17 | 专辑 {{art.artist.albumSize}}
18 |
19 |
20 |
21 | Mv {{art.artist.mvSize}}
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 | {{re.name}}
49 | ({{re.alias[0]}})
50 |
51 | {{re.artist.name}}
52 | ({{re.artist.alias[re.artist.alias.length-1]}})
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 | {{re.playCount}}
69 |
70 |
71 |
72 | {{re.name}}
73 | {{re.artistName}}
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
86 | {{desc.briefDesc}}
87 |
88 |
89 |
92 | {{item.txt}}
93 |
94 |
95 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | {{item.name}}
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/page/component/artist/index.wxss:
--------------------------------------------------------------------------------
1 | page{overflow-x: hidden}
2 | #artist_header{position: relative;height: 540rpx;overflow: hidden}
3 | #artist_header image{width: 100%;height:609rpx;position: absolute;left: 0;top:0}
4 | .tab-item{position: relative}
5 | .tab-item:after{position: absolute;right: -1rpx;top:26rpx;height:32rpx;width: 2rpx;background-color:#dfdfdf;content: "";overflow: hidden }
6 | .tbi-des{font-size: 20rpx;}
7 |
8 | .mvs .cover{padding-top: 56.2%}
9 | .mvs{padding-right:15rpx;}
10 | .mvs .tl_cnt{width: 352.5rpx;}
11 |
12 | .artist_des{padding:5rpx 15rpx;font-size:28rpx;color:#999;line-height: 1.5;display: block}
13 | #simiwrap{overflow: hidden}
14 |
--------------------------------------------------------------------------------
/page/component/cloud/index.js:
--------------------------------------------------------------------------------
1 | var appInstance = getApp();
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var id2Url = require('../../../utils/base64md5.js');
4 | Page({
5 | data: {
6 | list: {},
7 | offset: 0,
8 | limit: 20,
9 | loading: false,
10 | curplay: -1
11 | },
12 | onLoad: function (options) {
13 | this.getcloud()
14 | },
15 | getcloud: function (isadd) {
16 | var that = this;
17 | wx.request({
18 | url: bsurl + 'user/cloud',
19 | data: {
20 | offset: that.data.offset,
21 | limit: that.data.limit
22 | },
23 | success: function (res) {
24 | wx.stopPullDownRefresh();
25 | if (res.data.code != 200) {
26 | wx.showToast({
27 | title: "云盘数据获取失败!",
28 | duration: 2000
29 | });
30 | that.setData({
31 | loading: true
32 | })
33 | return;
34 | }
35 | if (isadd) {
36 | that.data.offset += res.data.data.length
37 | res.data.data = that.data.list.data.concat(res.data.data)
38 | }
39 | else {
40 | that.data.offset = res.data.data.length
41 | }
42 | var list = res.data;
43 | list.size = (res.data.size / 1073741824).toFixed(2)
44 | list.maxSize = (res.data.maxSize / 1073741824)
45 | list.percent = (list.size / list.maxSize).toFixed(2)
46 | that.setData({
47 | loading: true,
48 | offset: that.data.offset,
49 | list: list
50 | });
51 | }
52 | });
53 | },
54 | onPullDownRefresh: function () {
55 | this.data.offset = 0;
56 | this.getcloud();
57 | },
58 | onReachBottom: function () {
59 | this.data.list.hasMore && this.getcloud(1);
60 | },
61 | playall: function (event) {
62 | this.setplaylist(this.data.canplay[0], 0);
63 | appInstance.seekmusic(1)
64 |
65 | },
66 | setplaylist: function (music, index) {
67 | //设置播放列表,设置当前播放音乐,设置当前音乐在列表中位置
68 | appInstance.globalData.curplay = appInstance.globalData.curplay.id != music.id ? music : appInstance.globalData.curplay;
69 | appInstance.globalData.index_am = index;//event.currentTarget.dataset.idx;
70 | appInstance.globalData.playtype = 1;
71 | var shuffle = appInstance.globalData.shuffle;
72 | appInstance.globalData.list_sf = this.data.canplay;//this.data.list.tracks;
73 | appInstance.shuffleplay(shuffle);
74 | appInstance.globalData.globalStop = false;
75 | console.log(appInstance.globalData.globalStop, "F playlist")
76 | this.setData({
77 | curplay: music.id
78 | })
79 | },
80 | playmusic: function (event) {
81 | var that = this;
82 | let music = event.currentTarget.dataset.idx;
83 | let st = event.currentTarget.dataset.st;
84 | console.log(st)
85 | if (st * 1 < 0) {
86 | wx.showToast({
87 | title: '歌曲已下架',
88 | icon: 'success',
89 | duration: 2000
90 | });
91 | return;
92 | }
93 | music = this.data.list.playlist.tracks[music];
94 | that.setplaylist(music, event.currentTarget.dataset.idx)
95 | }
96 | });
--------------------------------------------------------------------------------
/page/component/cloud/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "我的云盘","enablePullDownRefresh":true}
--------------------------------------------------------------------------------
/page/component/cloud/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 云盘容量:
8 | {{list.size}}G/{{list.maxSize}}G
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{idx+1}}
24 |
25 |
26 |
27 |
28 | {{re.simpleSong.name}}({{re.simpleSong.alia[0]}})
29 | {{re.simpleSong.ar[0].name}}-{{re.simpleSong.al.name}}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/page/component/cloud/index.wxss:
--------------------------------------------------------------------------------
1 |
2 | #plh_action view text{display: block;padding-bottom:.5em;line-height: 2}
3 |
4 | .topindex{color: red}
5 | .playingidx{width: 38rpx;height:38rpx;}
6 | .ftp{display: block;color: #888;font-size: 18rpx;padding-top: 10rpx;}
7 | .ftp image{width:18rpx;display: inline-block;vertical-align: middle;overflow: hidden;margin-right: 5rpx;}
8 | .ftp image.tpnew{width:38rpx}
9 |
10 | #cloud_percent{text-align: center;background: #ddd;border-radius: 2em;height: 1em;font-size: 24rpx;position: relative;flex: 1;line-height: 1;overflow: hidden}
11 | #cloud_percent view{position: absolute;background: #d33a31;height: 100%;left: 0;top: 0;border-radius: 2em}
12 |
13 |
14 | .pld-mv image {
15 | width: 78rpx;height:63rpx;
16 | }
--------------------------------------------------------------------------------
/page/component/djradio/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var async = require("../../../utils/async.js")
3 | var nt = require("../../../utils/nt.js");
4 | var common = require('../../../utils/util.js');
5 | var app = getApp();
6 | Page({
7 | data: {
8 | djradio: {},
9 | loading: false,
10 | programs: {},
11 | music:{},
12 | playing:false,
13 | playtype:1,
14 | curplay:-1,
15 | base: {
16 | id: 0,
17 | offset: 0,
18 | limit: 20,
19 | asc: true
20 | }
21 | },
22 | toggleplay: function () {
23 | common.toggleplay(this, app);
24 | },
25 | playnext: function (e) {
26 | app.nextplay(e.currentTarget.dataset.pt)
27 | },
28 | music_next: function (r) {
29 | this.setData({
30 | music: r.music,
31 | playtype: r.playtype,
32 | curplay: r.p.id
33 | })
34 | },
35 | music_toggle: function (r) {
36 | this.setData({
37 | playing: r.playing
38 | })
39 | },
40 | onHide:function(){
41 | nt.removeNotification("music_next", this)
42 | nt.removeNotification("music_toggle", this)
43 | },
44 | onShow: function () {
45 | nt.addNotification("music_next", this.music_next, this);
46 | nt.addNotification("music_toggle", this.music_toggle, this);
47 | this.setData({
48 | curplay: (app.globalData.list_dj[app.globalData.index_dj]||{}).id,
49 | music: app.globalData.curplay,
50 | playing: app.globalData.playing,
51 | playtype: app.globalData.playtype
52 | })
53 | },
54 | onLoad: function (options) {
55 | var id = options.id;
56 | var that = this;
57 | wx.request({
58 | url: bsurl + 'dj/detail',
59 | data: {
60 | id: id,
61 | cookie: app.globalData.cookie
62 | },
63 | complete: function (res) {
64 | that.setData({
65 | djradio: res.data.djRadio
66 | })
67 | }
68 | });
69 | this.data.base.id = id
70 | this.setData({
71 | base: this.data.base
72 | })
73 | this.getprograms(false);
74 | },
75 | getprograms: function (isadd) {
76 | var that = this;
77 | this.setData({ loading: false })
78 | wx.request({
79 | url: bsurl + 'dj/program',
80 | data: {
81 | id: that.data.base.id,
82 | offset: that.data.base.offset,
83 | limit: that.data.base.limit,
84 | asc: that.data.base.asc
85 | },
86 | complete: function (res) {
87 | if (isadd) {
88 | res.data.programs = that.data.programs.programs.concat(res.data.programs);
89 | }
90 | that.data.base.offset = (isadd ? that.data.base.offset : 0) + res.data.programs.length
91 | that.setData({
92 | programs: res.data,
93 | loading: true,
94 | base: that.data.base
95 | })
96 | }
97 | });
98 | },
99 | onReachBottom: function () {
100 | (this.data.programs.more && this.data.loading) && this.getprograms(1);
101 | },
102 | djradio_sub: function () {
103 | var sub = this.data.djradio.subed;
104 | },
105 | playmusic: function (event) {
106 | let that = this;
107 | let idx = event.currentTarget.dataset.idx;
108 | var music = that.data.programs.programs[idx];
109 | app.globalData.curplay = music.mainSong
110 | app.globalData.list_dj = this.data.programs.programs
111 | app.globalData.index_dj = idx;
112 | var shuffle = app.globalData.shuffle;
113 | app.shuffleplay(shuffle);
114 | this.setData({
115 | curplay: music.id
116 | })
117 | app.seekmusic(3)
118 | }
119 | })
--------------------------------------------------------------------------------
/page/component/djradio/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "电台","enablePullDownRefresh":true}
--------------------------------------------------------------------------------
/page/component/djradio/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
16 |
17 |
18 | {{djradio.name}}
19 |
20 |
21 | {{djradio.category}}{{djradio.desc}}
22 |
23 | 共{{programs.count}}期
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | {{idx+1}}
35 |
36 |
37 |
38 |
39 | {{re.name}}
40 |
41 | {{re.createTime}}
42 |
43 | {{re.likedCount}}
44 |
45 | {{re.listenerCount}}
46 |
47 |
48 |
49 | {{re.duration}}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/page/component/djradio/index.wxss:
--------------------------------------------------------------------------------
1 | page{overflow-x: hidden}
2 | #artist_header{position: relative;height: 540rpx;overflow: hidden}
3 | #artist_header image{width: 100%;height:750rpx;position: absolute;left: 0;top:-105rpx}
4 | .tab-item{position: relative}
5 | .tab-item:after{position: absolute;right: -1rpx;top:26rpx;height:32rpx;width: 2rpx;background-color:#dfdfdf;content: "";overflow: hidden }
6 | .tbi-des{font-size: 20rpx;}
7 |
8 | .mvs .cover{padding-top: 56.2%}
9 | .mvs{padding-right:15rpx;}
10 | .mvs .tl_cnt{width: 352.5rpx;}
11 |
12 | .artist_des{padding:5rpx 15rpx;font-size:28rpx;color:#999;line-height: 1.5;display: block}
13 | #simiwrap{overflow: hidden}
14 |
15 |
16 | #djradio_info{margin-top:-1rpx;line-height: 1.4}
17 | #djradio_info view{padding:20rpx;font-size: 28rpx;border-top:1rpx solid #eee;}
18 | #djradio_info image{width: 80rpx;height: 80rpx;border-radius: 50%;vertical-align: middle;margin-right: 20rpx;}
19 |
20 | #ah_wrap{background-image: linear-gradient(rgba(255,255,255,0),rgba(0,0,0,.5));position: absolute;width: 100%;box-sizing: border-box;padding: 120rpx 20rpx 20rpx;z-index: 20;bottom: 0;left: 0;color: #fff;overflow: hidden;display: flex;align-items: center;flex-flow: row;justify-content: space-between;}
21 | #ah_wrap image{position: relative;left: auto;top: auto;}
22 | #ah_wrap .ahw_btn{border: 1rpx solid #fff;padding:10rpx 30rpx;float: right;font-size: 28rpx;border-radius:3em;background: rgba(0,0,0,.2)}
23 |
24 | .ahw_btn{ white-space: nowrap;}
25 | .ahw_name{flex: 0 0 400rpx;line-height: 1.2}
--------------------------------------------------------------------------------
/page/component/fm/index.js:
--------------------------------------------------------------------------------
1 | var common = require('../../../utils/util.js');
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var nt = require('../../../utils/nt.js');
4 | let app = getApp();
5 | let seek = 0;
6 | Page({
7 | data: {
8 | music: {},
9 | playtime: "00:00",
10 | duration: "00:00",
11 | percent: 0,
12 | downloadPercent: 0,
13 | imgload: false,
14 | playing: true,
15 | showlrc: false,
16 | commentscount: 0,
17 | lrc: {},
18 | stared: false
19 | },
20 | music_next: function (r) {
21 | var that = this
22 | console.log("playing next")
23 | common.loadrec(app.globalData.cookie, 0, 0, r.music.id, function (res) {
24 | that.setData({
25 | commentscount: res.total
26 | })
27 | })
28 | },
29 | onLoad: function (options) {
30 | var that = this;
31 | var music = app.globalData.list_fm[app.globalData.index_fm];
32 | var that = this;
33 | if (music && app.globalData.playtype == 2) {
34 | this.setData({
35 | music: music,
36 | duration: common.formatduration(music.duration),
37 | });
38 | common.loadrec(app.globalData.cookie, 0, 0, that.data.music.id, function (res) {
39 | that.setData({
40 | commentscount: res.total
41 | })
42 | })
43 | } else {
44 | app.nextfm();
45 | }
46 | },
47 | onShareAppMessage: function () {
48 | return {
49 | title: this.data.music.name,
50 | desc: this.data.music.artists[0].name,
51 | path: 'page/component/home/index?share=1&st=playing&id=' + this.data.music.id
52 | }
53 | },
54 | loadlrc: function () {
55 | common.loadlrc(this);
56 | },
57 | onShow: function () {
58 | var that = this;
59 | nt.addNotification("music_next", this.music_next, this);
60 | if (app.globalData.playtype != 2) {
61 | app.nextfm();
62 | };
63 | common.playAlrc(that, app);
64 | seek = setInterval(function () {
65 | common.playAlrc(that, app);
66 | }, 1000);
67 | },
68 | onHide: function () {
69 | clearInterval(seek)
70 | nt.removeNotification("music_next", this)
71 | },
72 | onUnload:function(){
73 | nt.removeNotification("music_next", this)
74 | },
75 | songheart: function (e) {
76 | common.songheart(this,app, 0, this.data.music.starred)
77 | },
78 | trash: function () {
79 | var that = this;
80 | common.songheart(this,app, 1)
81 | },
82 | loadimg: function (e) {
83 | this.setData({
84 | imgload: true
85 | })
86 | },
87 | museek: function (e) {
88 | var nextime = e.detail.value
89 | var that = this;
90 | nextime = app.globalData.curplay.duration * nextime / 100000;
91 | app.globalData.currentPosition = nextime
92 | app.seekmusic(2,app.globalData.currentPosition, function () {
93 | that.setData({
94 | percent: e.detail.value
95 | })
96 | });
97 | },
98 | play: function (m) {
99 | console.log('fm play')
100 | common.toggleplay(this, app, function () { })
101 | },
102 | nextplay: function () {
103 | this.setData({
104 | lrc: [],
105 | playtime: '00:00',
106 | percent: '0',
107 | playing: false,
108 | showlrc: false,
109 | duration: "00:00"
110 | })
111 | app.nextfm();
112 | }
113 | })
--------------------------------------------------------------------------------
/page/component/fm/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "私人Fm",
3 | "disableScroll":true
4 | }
--------------------------------------------------------------------------------
/page/component/fm/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{music.name}}
12 | {{music.artists[0].name}}
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/page/component/fm/index.wxss:
--------------------------------------------------------------------------------
1 | #fm-covermain{margin:60rpx auto;border-radius: 20rpx;overflow: hidden;position: relative;z-index: 3;width:610rpx;height:610rpx;}
2 | #coverbg{position: absolute;left: 0;bottom:0;width:750rpx;height:1334rpx;z-index:-2;display:block}
3 | #fm-cmpic{position: absolute;left:0;top: 0;z-index: 2; opacity: 0;}
4 | #fm-covermain .fadein{ animation: fadein linear 1s; opacity: 1; transition: all linear 1s}
5 | #fm-covermain image{width:610rpx;height: 610rpx;}
6 | #fm-covermain #fm-cmbg{width:610rpx;height: 610rpx;}
7 | @keyframes fadein{
8 | 0%{ opacity: 0}
9 | 100%{ opacity: 1}
10 | }
11 |
12 |
13 | #fm-mdes{ text-align: center;color: #fff;line-height: 2;}
14 | #fm-martist{font-size:24rpx; display: block;color: #eee}
15 |
16 | #fm-fixed{position: absolute;left: 0;bottom:0;width: 100%;}
17 | #fm-action{margin:30rpx 0;display: flex}
18 | #fm-action view{flex: 1;text-align: center;position: relative;width: 100%}
19 | #fm-action .playbtn{flex: 0 0 200rpx}
20 | #fm-action image{width: 98rpx;height:98rpx; vertical-align: top;margin-top:19rpx;}
21 | #fm-action .playbtn image{width: 136rpx;height: 136rpx;margin-top: 0}
22 |
--------------------------------------------------------------------------------
/page/component/home/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "发现音乐"}
--------------------------------------------------------------------------------
/page/component/home/index.wxss:
--------------------------------------------------------------------------------
1 | #header{position: fixed;top: 0;width: 100%; z-index: 10;-webkit-backdrop-filter: blur(15px); /* Safari for macOS & iOS*/
2 | backdrop-filter: blur(15px); /* Google Chrome */}
3 | #lastsearch{line-height: 1;padding-top: 20rpx;flex: 0 0 80rpx;}
4 | swiper,swiper image{width: 750rpx;height:290rpx;}
5 | #main{min-height: 1200rpx;padding-top: 80rpx;}
6 | #rec_nav{display: flex; text-align: center;width: 100%;border-bottom: 1rpx solid #eee}
7 | #rec_nav view{flex: 1;position: relative}
8 | #rec_nav navigator{padding:25rpx 0;font-size: 26rpx;}
9 | .recn_ico{width: 110rpx;height:110rpx;line-height: 110rpx;font-size: 56rpx;color: #BB2C08;border: 1rpx solid #BB2C08;border-radius: 50%;margin:0 auto 20rpx;font-weight: 300}
10 | .recn_ico image{width:110rpx;height:110rpx;}
11 | .homepl .tl_cnt{width: 168.75rpx;}
12 |
13 | #album_loading{text-align: center;margin: 120rpx auto 0;color: #999;font-size: 28rpx;}
14 | #album_loading image{width: 88rpx;height: 88rpx;animation: circle infinite 1.5s linear;display: block;margin: 40rpx auto;border-radius: 50%;border: 1rpx solid #999}
15 |
16 | #catewrap{padding:0 15rpx;box-sizing: border-box;position: fixed;width: 100%;height: 100%;z-index: 100;left: 0;top:0;background-color: #fff;}
17 | #closecatelist{margin: 15rpx auto;}
18 |
19 | .catelist{margin-bottom: 20rpx;overflow: hidden;padding-bottom: 2rpx;}
20 | .cl_list{width:179rpx;border: 1rpx solid #eee;text-align: center;height:90rpx;font-size: 26rpx;line-height:90rpx;overflow: hidden;position: relative;z-index: 1;margin: 0 -1rpx -1rpx 0;float: left}
21 |
22 | .cl_ico{height: 182rpx;line-height: 1 }
23 | .cl_ico image{width: 80rpx;height:80rpx;margin:35rpx auto 15rpx;display: block;}
24 | #cateall{float: none;width:auto;margin: 20rpx auto;}
25 | .cl_ico_checked,.cl_ico_hot{content:"";position:absolute;}
26 |
27 | .cl_ico_hot{background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADgAAAA4CAMAAACfWMssAAABTVBMVEXTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjFX1ZKxAAAAbnRSTlMAAQMEBggKCw0ODxATFBUnKSosLi8xP0tNT1JTVFVWV1laW11eX2FiZGVoaWptbnF0dXl6fn+AgYOGh4uMj5CSk5WXnJ2en6ChpKapq6ytr7K3uby9wMHCw8XIy83P0dTj5Obn6err7O7x+fv8/nzHVlgAAAGLSURBVEjH7dVJWxNBEIfxd0YYSEBQFEGWACqKgoIgsig7iixu4EIAFZXNYeb//Y8cmEA4YLrrTJ3q8nu6n6quarg8RnV5vLxyx/OpySUFBk3uHvlti+slv2Vw6SNYs7jHQONffzdA9LGZm3u+/ftMtKGDWzTt+7lE4+uS9pu4fejjnheS02TvBs1H7m4EejL5p5FFZzdKVS29mfw95+zGCNeKtTxMPes5Sbgqfa+hL/VyrwmXJelrRH/q4aYIl06zjYhnqfvcnsMvEU9TV/cp1ivCFUn6FvHE2b0LWmJNEK5Km6XiON3zVwN3Y41x7X0xl7XDcS/9vE77sV5QleNB4rXPtgI6E41At5+LW4HuREOFio6MfJiSFLfR8CbP/USVXQZ3q4NpJR3U/1Axx6wqu9KJC0Ew00XdjqTNztjBlaDmAy5s0UruDGo2YNjDncOyZ+riyuDZRDm5cqhJ7qSu7gLU23/ODr//73/Q0WF1WB1Wh9VhdVgdVofVYXVYHVaH1WF1WB1Wh9VhdScljLevgPOTYwAAAABJRU5ErkJggg==);width: 56rpx;height: 56rpx ;left: 0;top: 0;background-size: 100% 100%}
28 | .cl_ico_checked{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAApVBMVEXTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHTOjHDeOSDAAAANnRSTlMAfwEDKfnqwQrZS9on3q6psZjw0I1Q/gxeeiAr8Y77QRDbavy7brg+E4CLHlvOM/WnFeOXTse/voMEAAAA7klEQVRIx+2WyU6DQQyDP/9dWQuUfS/Q0o0d8v6P1kMRMFRKZSROkOvYUiaxrRBm8QMCRv0T/ghBJkGmlmSKT6ZaZcpbph9kGkim42RaVKanZYaAzNSQGTMyc0lmkMlMPplRWeBX6vWNJYQCv7MOuzmhwF+vwsFaSij7P4JqM/1Die9Uyxw3f93abkRERLcNe/sZYY5vwWFERPMYTk6zsb730wLOIs4v4LKX7eGj/yuo3UQfaoNscZ//bdzCcASMs01/nU9zAsA0k0Y5z7s2cP+QEL7r7bHi6TkR36I+X17fErXKvARkng76pePEqxkbC7UpRDWM4wAAAABJRU5ErkJggg==);width: 38rpx;height: 38rpx;background-position: right bottom;right:0;bottom:0;background-size: 48rpx 48rpx;}
29 | .checked{border-color:#BB2C08;z-index: 2 }
30 |
31 | #catselectbtn{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAMAAACecocUAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACdQTFRFiIiI+/z9vr6/xcXGnJyd9PX28/T1n5+fnp6ejIyMm5ub7e7v3t/gBUeqYAAAAEBJREFUeNpiYAABZgYI4GZj42LmYmPjBrJZGRlZmFkYGVnR2Bzs7JzMnOzsHAwMTCDAAyZRxHHqRTYfYS9AgAEAaTABl1/qO3QAAAAASUVORK5CYII=);border: 1rpx solid #eee;color: #999;font-size: 24rpx;padding: 8rpx 20rpx 8rpx 40rpx;background-position: 10rpx center;float: right;background-repeat: no-repeat;border-radius: 3rpx;}
32 | #plc_header{border:none;}
33 |
34 |
35 | .djcatewrap{display: flex;flex-direction: row;flex-wrap:wrap;}
36 | .djcatelist{text-align:center;font-size:24rpx;flex: 0 0 187.5rpx;height:145rpx}
37 | .djcatelist image{width: 80rpx;height: 80rpx;margin-top:20rpx}
38 |
39 | .flexlist .cover{width:230rpx;height:230rpx;padding: 0;flex: 0 0 230rpx;margin:10rpx 20rpx 10rpx 10rpx;}
40 | .sort_fl_list{flex: 0 0 100%;line-height: 2}
41 | .sortlist .flexlist{flex-flow: wrap; align-content: center;}
--------------------------------------------------------------------------------
/page/component/login/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var app = getApp();
3 | Page({
4 | data: {
5 | phone: "",
6 | pwd: "",
7 | linktype: 1,
8 | url: ''
9 | },
10 | onLoad: function (options) {
11 | //登录成功后跳转类型(1,2,3) navgitorback , redirect ,switchTab
12 | this.setData({
13 | linktype: options.t || 3,
14 | url: options.url || '../home/index'
15 | })
16 |
17 | },
18 | textinput: function (event) {
19 | var type = event.currentTarget.dataset.type;
20 | if (type == 1) {
21 | this.setData({
22 | phone: event.detail.value
23 | })
24 | } else {
25 | this.setData({
26 | pwd: event.detail.value
27 | })
28 | }
29 | },
30 | login: function () {
31 | var that = this;
32 | var url = /^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$/.test(that.data.phone) ? "login/cellphone" : "login"
33 | wx.showToast({
34 | title: '登录中...',
35 | icon: 'loading'
36 | })
37 | wx.request({
38 | url: bsurl + url,
39 | data: {
40 | email: that.data.phone,
41 | phone: that.data.phone,
42 | password: that.data.pwd
43 | },
44 | complete: function (res) {
45 | console.log(res);
46 | wx.hideToast();
47 | if (res.data.code!=200) {
48 | wx.showModal({
49 | title: '提示',
50 | content: '登录失败,请重试!'
51 | })
52 | return;
53 | }
54 | app.mine();
55 | app.likelist();
56 | if (that.data.linktype == 1) {
57 | wx.navigateBack({
58 | delta: 1
59 | })
60 | }
61 | else if (that.data.linktype == 2) {
62 | wx.redirectTo({
63 | url: that.data.url
64 | })
65 | } else {
66 | wx.switchTab({
67 | url: '../home/index'
68 | });
69 | }
70 |
71 | }
72 | })
73 | }
74 | })
--------------------------------------------------------------------------------
/page/component/login/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "登录"
3 | }
--------------------------------------------------------------------------------
/page/component/login/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/page/component/login/index.wxss:
--------------------------------------------------------------------------------
1 | .form-common{padding: 48rpx;}
2 | .formc-cnt{padding: 16rpx 0; display: flex;border-bottom: 1px solid #eee;margin: 16rpx 0}
3 | .form-common button,.btnhover{margin-top: 48rpx;display: block;background-color: #d43c33;height: 2.4em;padding: 0;line-height: 2.4;border-radius: 5rpx;
4 | font-size: 32rpx}
5 | .formc-cnt text{text-align: left}
6 | .formc-cnt input{flex: 1;display: block}
--------------------------------------------------------------------------------
/page/component/me/index.js:
--------------------------------------------------------------------------------
1 | var app=getApp();
2 | var bsurl = require('../../../utils/bsurl.js');
3 | Page({
4 | data: {
5 | list:[],
6 | subcount:{},
7 | loading:true
8 | },
9 | onLoad: function () {
10 | var that=this;
11 | var id= wx.getStorageSync('user');
12 | console.log(id)
13 | if(!id.account){
14 | wx.redirectTo({
15 | url: '../login/index'
16 | });
17 | return;
18 | }
19 | id=id.account.id;
20 | this.setData({uid:id})
21 | wx.request({
22 | url: bsurl + 'user/subcount?id=' + id,
23 | success: function (res) {
24 | that.setData({
25 |
26 | subcount: res.data
27 | });
28 | }
29 | });
30 | wx.request({
31 | url: bsurl + 'user/playlist',
32 | data: {
33 | uid: id,
34 | offset: 0,
35 | limit: 1000
36 | },
37 | success: function (res) {
38 | that.setData({
39 | loading:false,
40 | list1: res.data.playlist.filter(function(item){return item.userId==id}),
41 | list2: res.data.playlist.filter(function(item){return item.userId!=id}),
42 | });
43 | }
44 | });
45 | },
46 | onShow: function () {
47 | console.log("me show----------")
48 | }
49 | })
--------------------------------------------------------------------------------
/page/component/me/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "我的音乐"}
--------------------------------------------------------------------------------
/page/component/me/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
39 |
40 | 我创建的歌单 ({{subcount.createdPlaylistCount}})
41 |
42 |
43 | 我收藏的歌单 ({{subcount.subPlaylistCount}})
44 |
45 |
46 |
47 | 加载中...
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/page/component/me/index.wxss:
--------------------------------------------------------------------------------
1 | page{background-color: #fbfcfd}
--------------------------------------------------------------------------------
/page/component/mv/index.js:
--------------------------------------------------------------------------------
1 | var common = require('../../../utils/util.js');
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var app = getApp();
4 | Page({
5 | data: {
6 | main: {},
7 | tab: 0,
8 | src: "",
9 | rec: {},
10 | loading: true,
11 | offset: 0,
12 | limit: 20,
13 | recid: 0,
14 | loading2:true,
15 | simi: {},
16 | id: ""
17 | },
18 | onLoad: function (options) {
19 | var that = this;
20 | wx.request({
21 | url: bsurl + 'mv',
22 | data: {
23 | id: options.id
24 | },
25 | success: function (res) {
26 | wx.getNetworkType({
27 | complete: function (r) {
28 | var src = res.data.data.brs;
29 | var wifi = r.networkType != 'wifi' ? false : true;
30 | var url = src[1080] || src[720] || src[480] || src[240]
31 | url = bsurl + 'mv/url?url=' + url
32 | that.setData({
33 | id: options.id,
34 | main: res.data.data,
35 | src:url,
36 | wifi: wifi,
37 | loading:false,
38 | recid: res.data.data.commentThreadId
39 | });
40 | }
41 | })
42 |
43 | wx.setNavigationBarTitle({
44 | title: res.data.data.name
45 | })
46 | }
47 | })
48 | },
49 | tab: function (e) {
50 | var t = e.currentTarget.dataset.tab;
51 | this.setData({
52 | tab: t
53 | });
54 | var that = this;
55 | if (this.data.tab == 1 && this.data.rec.code != 200) {
56 | common.loadrec(app.globalData.cookie, this.data.offset, this.data.limit, this.data.recid, function (data) {
57 | that.setData({
58 | loading: false,
59 | rec: data,
60 | offset: data.comments.length
61 | });
62 | }, 1)
63 | }
64 | if (this.data.tab == 2 && this.data.simi.code != 200) {
65 | that.setData({ loading: true });
66 | wx.request({
67 | url: bsurl + 'mv/simi',
68 | data: { id: that.data.id },
69 | success: function (res) {
70 | that.setData({
71 | loading: false,
72 | simi: res.data
73 | });
74 | }
75 | })
76 | }
77 | },
78 | loadmore: function () {
79 | if (this.data.rec.more && !this.data.loading) {
80 | var that = this;
81 | this.setData({
82 | loading2: true
83 | })
84 | common.loadrec(app.globalData.cookie, this.data.offset, this.data.limit, this.data.recid, function (data) {
85 | var rec = that.data.rec;
86 | var offset = that.data.offset + data.comments.length
87 | data.comments = rec.comments.concat(data.comments);
88 | data.hotComments = rec.hotComments;
89 | that.setData({
90 | loading2: false,
91 | rec: data,
92 | offset: offset
93 | });
94 | }, 1)
95 | }
96 | }
97 | })
--------------------------------------------------------------------------------
/page/component/mv/index.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | "navigationBarTitleText": "Mv"
4 |
5 | }
--------------------------------------------------------------------------------
/page/component/mv/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 | 详情
9 |
10 |
11 | 评论 {{main.commentCount}}
12 |
13 |
14 |
15 | 相关Mv
16 |
17 |
18 | 加载中...
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | {{main.name}}
29 |
30 | 歌手:{{main.artistName}}
31 |
32 | 播放:{{main.playCount}}
33 |
34 |
35 | 发行:{{main.publishTime}}
36 | {{main.briefDesc}}
37 | {{main.desc}}
38 |
39 |
40 |
41 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | {{re.playCount}}
53 |
54 |
55 |
56 | {{re.name}}
57 | {{re.artistName}}
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/page/component/mv/index.wxss:
--------------------------------------------------------------------------------
1 | #mvpage{background-color: #fbfcfd;height: 100%;padding-top: 401rpx; box-sizing: border-box}
2 |
3 | #mvheader,#mvideo{height: 320rpx;width: 100%;}
4 | #mvheader{flex: 0 0 320rpx;margin-top: -401rpx;}
5 | #mvpage .tab{height: 81rpx;width: 100%;margin-top: -81prx }
6 | #mvmain{background-color: red;height: 100%}
7 | #mvmain .tab-cnt{height:100%;background-color: #fff}
8 |
9 | #mvinfo,#mvdes{padding:24rpx;font-size: 28rpx;color: #666;line-height: 1.8}
10 | #mvdes{border-top: 1rpx solid #eee;}
11 | #mvname{font-size: 34rpx;white-space: 2rpx;color: #000;padding-bottom: 16rpx;display:block}
12 | #mvinfo navigator{color:#537fb0 }
--------------------------------------------------------------------------------
/page/component/new/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require("../../../utils/bsurl.js")
2 | Page({
3 | data: {
4 | pt: 1,
5 | tab: 1,
6 | tab2: 1,
7 | songs: [
8 | {
9 | name: "ZH",
10 | img: 'cn',
11 | loading: true,
12 | re: []
13 | }, {
14 | name: "EA",
15 | img: 'us',
16 | loading: true,
17 | re: []
18 | },
19 | {
20 | name: "KR",
21 | img: 'kr',
22 | loading: true,
23 | re: []
24 | },
25 | {
26 | name: "JP",
27 | img: 'jp',
28 | loading: true,
29 | re: []
30 | }
31 | ],
32 | albums: [
33 | {
34 | name: "ZH",
35 | offset: 0,
36 | loading: true,
37 | re: []
38 | }, {
39 | name: "EA",
40 | offset: 0,
41 | loading: true,
42 | re: []
43 | },
44 | {
45 | name: "KR",
46 | offset: 0,
47 | loading: true,
48 | re: []
49 | },
50 | {
51 | name: "JP",
52 | offset: 0,
53 | loading: true,
54 | re: []
55 | }
56 | ]
57 | },
58 | onLoad: function () {
59 | this.getsongs(this.data.songs[0].name, 0)
60 | },
61 | tabtype(e) {
62 | var i = e.currentTarget.dataset.tab;
63 | var t = this.data.pt;
64 | if (t == 1) {
65 | this.setData({
66 | tab: i
67 | })
68 | i--
69 | this.data.songs[i].loading && this.getsongs(this.data.songs[i].name, i)
70 | } else {
71 | this.setData({
72 | tab2: i
73 | })
74 | i--
75 | this.data.albums[i].loading && this.getalbums(this.data.albums[i].name, i)
76 | }
77 |
78 | },
79 | ptab(e) {
80 | var i = e.currentTarget.dataset.pt;
81 | this.setData({
82 | pt: i
83 | });
84 | this.data.albums[0].loading && this.getalbums(this.data.albums[0].name, 0)
85 | },
86 | getsongs(type, i) {
87 | var that = this;
88 | wx.request({
89 | url: bsurl + 'top/songs',
90 | data: { type: type },
91 | success: function (res) {
92 | that.data.songs[i].loading = false
93 | that.data.songs[i].re = res;
94 | that.setData({
95 | songs: that.data.songs
96 | })
97 | }
98 | })
99 | },
100 | loadmore() {
101 | if (this.data.pt == 1) return;
102 | var i = this.data.tab2 - 1;
103 | this.data.albums[i].loading && this.getalbums(this.data.albums[i].name, i, 1)
104 | },
105 | getalbums(type, i, t) {
106 | var that = this;
107 | wx.request({
108 | url: bsurl + 'top/album',
109 | data: {
110 | type: type,
111 | limit: 20,
112 | offset: that.data.albums[i].offset
113 | },
114 | success: function (res) {
115 | !res.data.albums.length && (that.data.albums[i].loading = false)
116 | if (!t) {
117 | that.data.albums[i].re = res
118 | } else {
119 | that.data.albums[i].re.data.albums = that.data.albums[i].re.data.albums.concat(res.data.albums);
120 | }
121 | that.data.albums[i].offset += res.data.albums.length;
122 | that.setData({
123 | albums: that.data.albums
124 | })
125 | }
126 | })
127 | }
128 | })
--------------------------------------------------------------------------------
/page/component/new/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/page/component/new/index.wxml:
--------------------------------------------------------------------------------
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 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | {{r.name}}
35 |
36 | {{r.artists[0].name}}
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 | 华语
54 |
55 |
56 | 欧美
57 |
58 |
59 | 韩国
60 |
61 |
62 | 日本
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | {{r.name}}
75 |
76 | {{a.name}}
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/page/component/new/index.wxss:
--------------------------------------------------------------------------------
1 | page{display: flex;flex-flow: column;align-content: stretch}
2 | .ptab{flex: 0 0 56rpx;}
3 | #res_wrap{flex:1;overflow: hidden}
4 | #res_wrap scroll-view{height: 100%;}
--------------------------------------------------------------------------------
/page/component/playing/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "disableScroll":true
3 | }
--------------------------------------------------------------------------------
/page/component/playing/index.wxml:
--------------------------------------------------------------------------------
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 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | {{item.name}}
81 | {{item.trackCount}}首
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | {{item.name}} -
114 | {{item.ar[0].name||item.artists[0].name}}
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
--------------------------------------------------------------------------------
/page/component/playing/index.wxss:
--------------------------------------------------------------------------------
1 | page{}
2 | #playing-zz{text-align: center;position: absolute;z-index:20;width: 100%;top:0;}
3 | #playing-zz image{width: 222rpx;height:366rpx;margin:-60rpx 0 0 60px; transform-origin:60rpx 60rpx; transform: rotate(-20deg);
4 | transition: all linear .5s }
5 |
6 | #coverbg{position: absolute;left: 0;bottom:0;width:750rpx;height:1334rpx;z-index:-2;display:block}
7 |
8 | #playing-main{margin: 160rpx auto 0;position: relative;z-index:10;width: 596rpx;
9 | height:596rpx; animation-delay: .5s;animation: circle 20s linear infinite; animation-play-state: paused;}
10 | #playingmainbg{width:596rpx;height: 596rpx;position: relative;z-index: 1}
11 | #pmaincover{position: absolute;width: 388rpx;height: 388rpx;left:104rpx ;top:104rpx;z-index: 3;
12 | border-radius: 50%;overflow: hidden;}
13 |
14 | #playing-actwrap{position: absolute;left: 0;bottom:0;width: 100%;box-sizing:border-box;overflow: hidden;z-index: 10}
15 | #playing-info{display: flex;margin:0 80rpx}
16 | .pi-act{flex: 1;text-align: center;position: relative}
17 | .pi-act image{width:80rpx;height: 80rpx;}
18 |
19 |
20 | #playingaction{margin: 10rpx 10rpx 30rpx;display: flex}
21 | .pa-baction,.pa-maction,.pa-saction{flex: 1;text-align: center;width: 100%}
22 | .pa-baction image{width:110rpx;height:110rpx; vertical-align: middle }
23 | .pa-maction image{width:80rpx;height:80rpx;vertical-align: middle;margin-top: 15rpx}
24 | .pa-saction image{width:120rpx;height:120rpx; vertical-align: middle;}
25 |
26 |
27 | .playing #playing-main{animation-play-state: running !important;}
28 | .playing #playing-zz image{transform: rotate(-0deg) }
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/page/component/playlist/index.js:
--------------------------------------------------------------------------------
1 | var app = getApp();
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var id2Url = require('../../../utils/base64md5.js');
4 | var nt = require("../../../utils/nt.js")
5 | var common = require('../../../utils/util.js');
6 | Page({
7 | data: {
8 | list: [],
9 | curplay: {},
10 | pid: 0,
11 | cover: '',
12 | music: {},
13 | playing: false,
14 | playtype: 1,
15 | loading: true,
16 | toplist: false,
17 | user: wx.getStorageSync('user') || {}
18 | },
19 | toggleplay: function () {
20 | common.toggleplay(this, app);
21 | },
22 | playnext: function (e) {
23 | app.nextplay(e.currentTarget.dataset.pt)
24 | },
25 | music_next: function (r) {
26 | this.setData({
27 | music: r.music,
28 | playtype: r.playtype,
29 | curplay: r.music.id
30 | })
31 | },
32 | music_toggle: function (r) {
33 | this.setData({
34 | playing: r.playing,
35 | music: r.music,
36 | playtype: r.playtype,
37 | curplay: r.music.id
38 | })
39 | },
40 | onShow: function () {
41 | nt.addNotification("music_next", this.music_next, this);
42 | nt.addNotification("music_toggle", this.music_toggle, this);
43 | this.setData({
44 | curplay: app.globalData.curplay.id,
45 | music: app.globalData.curplay,
46 | playing: app.globalData.playing,
47 | playtype: app.globalData.playtype
48 | })
49 | },
50 | onHide: function () {
51 | nt.removeNotification("music_next", this)
52 | nt.removeNotification("music_toggle", this)
53 | },
54 | lovesong:function(){
55 | common.songheart(this,app, 0,(this.data.playtype==1? this.data.music.st:this.data.music.starred));
56 | },
57 | onLoad: function (options) {
58 | var that = this
59 | wx.request({
60 | url: bsurl + 'playlist/detail',
61 | data: {
62 | id: options.pid,
63 | limit: 1000
64 | },
65 | success: function (res) {
66 | var canplay = [];
67 | console.log(res.data)
68 | for (let i = 0; i < res.data.playlist.tracks.length; i++) {
69 | if (res.data.privileges[i].st >= 0) {
70 | canplay.push(res.data.playlist.tracks[i])
71 | }
72 | }
73 | that.setData({
74 | list: res.data,
75 | canplay: canplay,
76 | toplist: (options.from == 'stoplist' ? true : false),
77 | cover: id2Url.id2Url('' + (res.data.playlist.coverImgId_str || res.data.playlist.coverImgId))
78 | });
79 |
80 | wx.setNavigationBarTitle({
81 | title: res.data.playlist.name
82 | })
83 | }, fail: function (res) {
84 | wx.navigateBack({
85 | delta: 1
86 | })
87 | }
88 | });
89 | },
90 |
91 | userplaylist: function (e) {
92 | var userid = e.currentTarget.dataset.userid;
93 | wx.redirectTo({
94 | url: '../user/index?id=' + userid
95 | })
96 | },
97 | playall: function (event) {
98 | this.setplaylist(this.data.canplay[0], 0);
99 | app.seekmusic(1)
100 |
101 | },
102 | setplaylist: function (music, index) {
103 | //设置播放列表,设置当前播放音乐,设置当前音乐在列表中位置
104 | app.globalData.curplay = app.globalData.curplay.id != music.id ? music : app.globalData.curplay;
105 | app.globalData.index_am = index;//event.currentTarget.dataset.idx;
106 | app.globalData.playtype = 1;
107 | var shuffle = app.globalData.shuffle;
108 | app.globalData.list_sf = this.data.canplay;//this.data.list.tracks;
109 | app.shuffleplay(shuffle);
110 | app.globalData.globalStop = false;
111 | },
112 | playmusic: function (event) {
113 | let music = event.currentTarget.dataset.idx;
114 | let st = event.currentTarget.dataset.st;
115 | if (st * 1 < 0) {
116 | wx.showToast({
117 | title: '歌曲已下架',
118 | icon: 'success',
119 | duration: 2000
120 | });
121 | return;
122 | }
123 | music = this.data.list.playlist.tracks[music];
124 | this.setplaylist(music, event.currentTarget.dataset.idx)
125 | }
126 | });
--------------------------------------------------------------------------------
/page/component/playlist/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/page/component/playlist/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 播放全部 (共{{list.playlist.trackCount}}首)
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | 加载中...
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/page/component/playlist/index.wxss:
--------------------------------------------------------------------------------
1 | #plist-header {
2 | position: relative;
3 | overflow: hidden
4 | }
5 |
6 | #plh-main {
7 | position: relative;
8 | z-index: 3;
9 | overflow: hidden
10 | }
11 |
12 | #plh-cover {
13 | width: 280rpx;
14 | height: 280rpx;
15 | float: left;
16 | margin: 30rpx;
17 | position: relative;
18 | margin-bottom: 10rpx
19 | }
20 |
21 | #plh-cover image {
22 | width: 100%;
23 | height: 100%;
24 | }
25 |
26 | .blurbg {
27 | background-color: #eee
28 | }
29 |
30 | #plh-playinfo {
31 | position: absolute;
32 | z-index: 3;
33 | right: 10rpx;
34 | bottom: 10rpx;
35 | }
36 |
37 | #plh-playinfo image {
38 | width: 46rpx;
39 | height: 46rpx;
40 | vertical-align: top;
41 | background-color: rgba(0, 0, 0, .2);
42 | border-radius: 50%;
43 | }
44 |
45 | #user_ava {
46 | width: 60rpx;
47 | height: 60rpx;
48 | border-radius: 50%;
49 | margin-right: 20rpx;
50 | vertical-align: middle;
51 | }
52 |
53 | #plh-cnt {
54 | margin-left: 280rpx;
55 | color: #fff;
56 | font-size: 24rpx;
57 | line-height: 50rpx
58 | }
59 |
60 | #music_h_name {
61 | font-size: 32rpx;
62 | padding: 60rpx 20rpx 40rpx 0;
63 | display: block
64 | }
65 |
66 | #plh_action {
67 | display: flex;
68 | position: relative;
69 | z-index: 3;
70 | clear: both;
71 | width: 100%;
72 | line-height: 2;
73 | }
74 |
75 | #plh_action view {
76 | text-align: center;
77 | color: #fff;
78 | border-bottom: none;
79 | font-size: 24rpx;
80 | flex: 1;
81 | }
82 |
83 | #plh_action view image {
84 | width: 110rpx;
85 | height: 110rpx;
86 | display: block;
87 | margin: 0 auto -30rpx
88 | }
89 |
90 | #plh_action view text {
91 | display: block;
92 | padding-bottom: .5em;
93 | line-height: 2
94 | }
95 |
96 | .topindex {
97 | color: red
98 | }
99 |
100 | .playingidx {
101 | width: 38rpx;
102 | height: 38rpx;
103 | }
104 |
105 | .ftp {
106 | display: block;
107 | color: #888;
108 | font-size: 18rpx;
109 | padding-top: 10rpx;
110 | }
111 |
112 | .ftp image {
113 | width: 18rpx;
114 | display: inline-block;
115 | vertical-align: middle;
116 | overflow: hidden;
117 | margin-right: 5rpx;
118 | }
119 |
120 | .ftp image.tpnew {
121 | width: 38rpx
122 | }
123 |
124 | .pld-mv image {
125 | width: 78rpx;
126 | height: 63rpx;
127 | }
--------------------------------------------------------------------------------
/page/component/program/index.js:
--------------------------------------------------------------------------------
1 | var common = require('../../../utils/util.js');
2 | var bsurl = require('../../../utils/bsurl.js');
3 | var nt = require('../../../utils/nt.js');
4 | var app = getApp();
5 | var seek = 0;
6 | var defaultdata = {
7 | playing: false,
8 | music: {},
9 | playtime: '00:00',
10 | duration: '00:00',
11 | percent: 1,
12 | lrc: [],
13 | commentscount: 0,
14 | disable: false,
15 | tgpinfo: false,
16 | downloadPercent: 0,
17 | showpinfo: false,
18 | share: {
19 | title: "一起来听",
20 | des: ""
21 | },
22 | p: {},
23 | curpl: []
24 | };
25 | Page({
26 | data: defaultdata,
27 | onShareAppMessage: function () {
28 | return {
29 | title: this.data.share.title,
30 | desc: this.data.share.des,
31 | path: 'page/component/home/index?share=1&st=program&id=' + this.data.share.id
32 | }
33 | },
34 | playmusic: function (that, id) {
35 | wx.request({
36 | url: bsurl + 'program/detail',
37 | data: {
38 | id: id
39 | },
40 | success: function (res) {
41 | if (res.data.code != 200) {
42 | wx.showToast({
43 | title: '获取电台节目失败,请重试!',
44 | icon: 'success',
45 | duration: 2000
46 | });
47 | return;
48 | }
49 | res = res.data.program
50 | app.globalData.curplay = res.mainSong;
51 | !app.globalData.list_dj.length && (app.globalData.list_dj.push(res));
52 | that.setData({
53 | p: res,
54 | share: {
55 | id: id,
56 | title: res.name,
57 | des: res.description
58 | },
59 | music: app.globalData.curplay,
60 | duration: common.formatduration(app.globalData.curplay.duration)
61 | });
62 | wx.setNavigationBarTitle({ title: app.globalData.curplay.name });
63 | nt.postNotificationName("music_next", {
64 | music: app.globalData.curplay,
65 | p: res,
66 | playtype: 3
67 | });
68 | app.seekmusic(3);
69 | common.loadrec(app.globalData.cookie, 0, 0, res.id, function (res) {
70 | that.setData({
71 | commentscount: res.total
72 | })
73 | }, 3)
74 | }
75 | })
76 |
77 | },
78 | togpinfo: function () {
79 | this.setData({
80 | showpinfo: !this.data.showpinfo
81 | })
82 | },
83 | toggleinfo: function () {
84 | this.setData({
85 | tgpinfo: !this.data.tgpinfo
86 | })
87 | },
88 | playother: function (e) {
89 | var type = e.currentTarget.dataset.other;
90 | this.setData(defaultdata);
91 | var that = this;
92 | app.nextplay(type, function () {
93 | that.setData({
94 | p: app.globalData.list_dj[app.globalData.index_dj],
95 | share: {
96 | id: app.globalData.curplay.id,
97 | title: app.globalData.curplay.name
98 | }
99 | })
100 | });
101 | },
102 | playshuffle: function () {
103 | var shuffle = this.data.shuffle;
104 | shuffle++;
105 | shuffle = shuffle > 3 ? 1 : shuffle;
106 | this.setData({
107 | shuffle: shuffle
108 | })
109 | app.shuffleplay(shuffle);
110 | },
111 | songheart: function () {
112 | var that = this;
113 | var p = this.data.p;
114 | wx.request({
115 | url: bsurl + 'resource/like',
116 | data: {
117 | id: p.commentThreadId,
118 | t: p.liked ? 0 : 1,
119 | cookie: app.globalData.cookie
120 | },
121 | success: function (res) {
122 | if (res.data.code == 200) {
123 | p.liked = !p.liked
124 | that.setData({
125 | p: p
126 | })
127 | }
128 | }
129 | })
130 | },
131 | museek: function (e) {
132 | var nextime = e.detail.value
133 | var that = this
134 | nextime = app.globalData.curplay.duration * nextime / 100000;
135 | app.globalData.currentPosition = nextime
136 |
137 | app.seekmusic(1, app.globalData.currentPosition, function () {
138 | that.setData({
139 | percent: e.detail.value
140 | })
141 | });
142 | },
143 | onShow: function () {
144 | var that = this;
145 | common.playAlrc(that, app);
146 | nt.addNotification("music_next", this.music_next, this);
147 | seek = setInterval(function () {
148 | common.playAlrc(that, app);
149 | }, 1000);
150 | },
151 | onUnload: function () {
152 | clearInterval(seek);
153 | nt.removeNotification("music_next", this)
154 | },
155 | onHide: function () {
156 | clearInterval(seek)
157 | nt.removeNotification("music_next", this)
158 | },
159 | music_next: function (r) {
160 | var that = this
161 | common.loadrec(app.globalData.cookie, 0, 0, r.p.id, function (res) {
162 | that.setData({
163 | commentscount: res.total
164 | })
165 | }, 3)
166 | },
167 | onLoad: function (options) {
168 | var that = this;
169 | app.globalData.playtype = 3;
170 | this.setData({
171 | shuffle: app.globalData.shuffle,
172 | curpl: app.globalData.list_dj
173 | });
174 | var curp = app.globalData.list_dj[app.globalData.index_dj] || {}
175 | if (!curp.mainSong || (curp.mainSong.id != options.id)) {
176 | //播放不在列表中的单曲
177 | this.playmusic(that, options.pid);
178 | } else {
179 | that.setData({
180 | start: 0,
181 | music: curp.mainSong,
182 | p: curp,
183 | duration: common.formatduration(app.globalData.curplay.duration),
184 | share: {
185 | id: app.globalData.curplay.id,
186 | title: app.globalData.curplay.name
187 | },
188 | });
189 | wx.setNavigationBarTitle({ title: app.globalData.curplay.name });
190 | common.loadrec(app.globalData.cookie, 0, 0, that.data.p.id, function (res) {
191 | that.setData({
192 | commentscount: res.total
193 | })
194 | }, 3)
195 | };
196 | },
197 | playingtoggle: function (event) {
198 | if (this.data.disable) {
199 | return;
200 | }
201 | var that = this
202 | if (this.data.playing) {
203 | that.setData({ playing: false });
204 | app.stopmusic(3);
205 | } else {
206 | app.seekmusic(3, app.globalData.currentPosition, function () {
207 | that.setData({
208 | playing: true
209 | });
210 | }, );
211 | }
212 | }
213 | })
--------------------------------------------------------------------------------
/page/component/program/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "disableScroll":true
3 | }
--------------------------------------------------------------------------------
/page/component/program/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{p.radio.name}}
15 | {{p.radio.subCount}}人订阅
16 |
17 |
18 |
19 |
20 | 已订阅
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
67 |
68 |
69 |
70 |
71 |
76 |
77 |
78 |
79 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 | {{item.name}} -
140 | {{item.dj.nickname}}
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
--------------------------------------------------------------------------------
/page/component/program/index.wxss:
--------------------------------------------------------------------------------
1 |
2 | #playing-zz{text-align: center;position: absolute;z-index:20;width: 100%;top:0;}
3 | #playing-zz image{width: 222rpx;height:366rpx;margin:-60rpx 0 0 60px; transform-origin:60rpx 60rpx; transform: rotate(-20deg);
4 | transition: all linear .5s }
5 |
6 | #coverbg{position: absolute;left: 0;bottom:0;width:750rpx;height:1334rpx;display:block}
7 |
8 | #playing-main{z-index:10;width: 600rpx;position: absolute;bottom:410rpx;left: 75rpx;
9 | height:600rpx; animation-delay: .5s;animation: circle 20s linear infinite; animation-play-state: paused;}
10 | #playingmainbg{width:600rpx;height: 600rpx;position: relative;z-index: 1}
11 | #pmaincover{position: absolute;width:584rpx;height: 584rpx;left:8rpx;top:8rpx;z-index: 3;
12 | border-radius: 50%;overflow: hidden;}
13 |
14 | #playing-actwrap{position: absolute;left: 0;bottom:0;width: 100%;box-sizing:border-box;overflow: hidden;z-index: 10}
15 | #playing-info{display: flex;margin:0 80rpx}
16 | .pi-act{flex: 1;text-align: center;position: relative}
17 | .pi-act image{width:80rpx;height: 80rpx;}
18 |
19 |
20 | #playingaction{margin: 10rpx 10rpx 30rpx;display: flex}
21 | .pa-baction,.pa-maction,.pa-saction{flex: 1;text-align: center;width: 100%}
22 | .pa-baction image{width:110rpx;height:110rpx; vertical-align: middle }
23 | .pa-maction image{width:80rpx;height:80rpx;vertical-align: middle;margin-top: 15rpx}
24 | .pa-saction image{width:120rpx;height:120rpx; vertical-align: middle;}
25 |
26 |
27 | .playing #playing-main{animation-play-state: running !important;}
28 | .playing #playing-zz image{transform: rotate(-0deg) }
29 |
30 | #program_radio_info{color: #fff;border-bottom: 1rpx solid rgba(255,255,255,.2);padding:20rpx;margin: 0;}
31 | #program_radio_info .flexlist{border: none;padding: 0;font-size: 28rpx;}
32 | #program_radio_info #radio_cover{flex: 0 0 80rpx;width:80rpx;height:80rpx;margin-right:20rpx }
33 | .flexact .fa_list image{width: 24rpx;height: 24rpx;margin: 0 5rpx;}
34 | .fa_list{border:1rpx solid rgba(255,255,255,.2);padding:5rpx 20rpx 5rpx 10rpx;color: #fff}
35 | .flexact{font-size: 28rpx;}
36 | .relistdes{color: #fff}
37 |
38 | #p_info_menu{position: absolute;top: 0;z-index: 10;bottom: 250rpx;}
39 | .menu .mn_ico{flex: 0 0 100rpx; text-align: center;}
40 | .menu .mn_ico,.menu .cmain,.menu .rdes{border-bottom: 1rpx solid rgba(255,255,255,.2);}
41 | .mn_ico image{width: 50rpx;height: 50rpx;}
42 | .mn_list{font-size: 28rpx;}
43 | #p_info{padding: 20rpx;font-size: 26rpx;line-height: 1.5}
44 | #p_info_time{color: #999;padding: 10rpx 0}
45 |
46 |
--------------------------------------------------------------------------------
/page/component/recommend/index.js:
--------------------------------------------------------------------------------
1 | var app = getApp();
2 | var bsurl=require('../../../utils/bsurl.js');
3 | var common = require('../../../utils/util.js');
4 | Page({
5 | data: {
6 | rec: {},
7 | main: {},
8 | loading: true,
9 | limit: 20,
10 | offset: 0,
11 | recid: 0,
12 | },
13 | onLoad: function (options) {
14 | var id = options.id,
15 | fromtype = options.from,
16 | that = this;
17 | this.setData({
18 | recid: id,
19 | loading: true,
20 | });
21 | var type=(fromtype=='song')?'':1;
22 | common.loadrec(app.globalData.cookie,this.data.offset, this.data.limit, id, function (data) {
23 | that.setData({
24 | loading: false,
25 | rec: data,
26 | loading: false,
27 | type:type,
28 | offset: data.comments?data.comments.length:0
29 | });
30 | wx.setNavigationBarTitle({
31 | title: '评论(' + (data.total||0) + ")"
32 | })
33 | },type)
34 | },
35 | onPullDownRefresh:function(){
36 | wx.stopPullDownRefresh();
37 | },
38 | onReachBottom: function () {
39 | if (this.data.rec.more&&!this.data.loading) {
40 | var that = this;
41 | this.setData({
42 | loading:true
43 | })
44 | common.loadrec(app.globalData.cookie,this.data.offset, this.data.limit, this.data.recid, function (data) {
45 | var rec = that.data.rec;
46 | var offset = that.data.offset + (data.comments||[]).length
47 | data.comments = rec.comments.concat(data.comments);
48 | data.hotComments=rec.hotComments;
49 | that.setData({
50 | loading: false,
51 | rec: data,
52 | loading: false,
53 | offset: offset
54 | });
55 | },this.data.type)
56 | }
57 | }
58 |
59 | })
--------------------------------------------------------------------------------
/page/component/recommend/index.json:
--------------------------------------------------------------------------------
1 | { "navigationBarTitleText": "评论","enablePullDownRefresh":true}
--------------------------------------------------------------------------------
/page/component/recommend/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/page/component/recommend/index.wxss:
--------------------------------------------------------------------------------
1 | #recpage{background-color: #fbfcfd}
2 | #rec_header{padding: 20rpx;display: flex; align-items: center;display: none}
3 | #rch_img,#rch_img image{width: 160rpx;height:160rpx;}
4 | #rch_arrow{width:40rpx;text-align: center;}
5 | #rch_arrow image{width: 24rpx;height:42rpx;}
6 | #rch_info{padding-left: 20rpx;font-size:24rpx;color: #999;line-height: 2;width: 100%}
7 | #rchi_name{color: #333;font-size: 30rpx;display: block}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/page/component/record/index.js:
--------------------------------------------------------------------------------
1 | var app = getApp();
2 | var bsurl = require('../../../utils/bsurl.js');
3 | Page({
4 | data: {
5 | loading: false,
6 | weekData: [],
7 | allData: [],
8 | code: 0,
9 | tab: 1,
10 | curplay: -1
11 | },
12 | onLoad: function (options) {
13 | var that = this;
14 | wx.request({
15 | url: bsurl + 'record',
16 | data: { cookie: app.globalData.cookie, uid: options.uid, type: 1 },
17 | success: function (res) {
18 | that.setData({
19 | weekData: res.data
20 | })
21 | }
22 | })
23 | wx.request({
24 | url: bsurl + 'record',
25 | data: { uid: options.uid, type: 0 },
26 | success: function (res) {
27 | console.log(res.data)
28 | that.setData({
29 | allData: res.data
30 | })
31 | },
32 | complete: function () {
33 | that.setData({
34 | loading: true
35 | })
36 | }
37 | })
38 | },
39 | switchtab: function (e) {
40 | var t = e.currentTarget.dataset.t;
41 | console.log(t)
42 | this.setData({ tab: t });
43 | }
44 | })
--------------------------------------------------------------------------------
/page/component/record/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/page/component/record/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
13 | {{weekData.msg}}1
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | {{weekData.msg}}2
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | 加载中...
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/page/component/record/index.wxss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/page/component/record/index.wxss
--------------------------------------------------------------------------------
/page/component/recsongs/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var nt = require("../../../utils/nt.js")
3 | var common = require('../../../utils/util.js');
4 | var app = getApp();
5 | Page({
6 | data: {
7 | list: [],
8 | curplay: -1,
9 | music: {},
10 | playing: false,
11 | playtype: 1,
12 | date: ((new Date()).getDate())
13 | },
14 | toggleplay: function () {
15 | common.toggleplay(this, app);
16 | },
17 | playnext: function (e) {
18 | app.nextplay(e.currentTarget.dataset.pt)
19 | },
20 | music_next: function (r) {
21 | this.setData({
22 | music: r.music,
23 | playtype: r.playtype,
24 | curplay: r.music.id
25 | })
26 | },
27 | music_toggle: function (r) {
28 | this.setData({
29 | playing: r.playing,
30 | music: r.music,
31 | playtype: r.playtype,
32 | curplay: r.music.id
33 | })
34 | },
35 | onShow: function () {
36 | nt.addNotification("music_next", this.music_next, this);
37 | nt.addNotification("music_toggle", this.music_toggle, this);
38 | this.setData({
39 | curplay: app.globalData.curplay.id,
40 | music: app.globalData.curplay,
41 | playing: app.globalData.playing,
42 | playtype: app.globalData.playtype
43 | })
44 | },
45 | onHide: function () {
46 | nt.removeNotification("music_next", this)
47 | nt.removeNotification("music_toggle", this)
48 | },
49 | lovesong: function () {
50 | common.songheart(this, app, 0, (this.data.playtype == 1 ? this.data.music.st : this.data.music.starred));
51 | },
52 | onLoad: function (options) {
53 | var that = this;
54 | wx.request({
55 | url: bsurl + 'recommend/songs',
56 | success: function (res) {
57 | that.setData({
58 | songs: res.data.recommend,
59 | loading: true
60 | })
61 | }
62 | })
63 | },
64 | playall: function (event) {
65 | this.setplaylist(this.data.songs[0], 0);
66 | app.seekmusic(1)
67 | },
68 | setplaylist: function (music, index) {
69 | //设置播放列表,设置当前播放音乐,设置当前音乐在列表中位置
70 | app.globalData.curplay = app.globalData.curplay.id != music.id ? music : app.globalData.curplay;
71 | app.globalData.index_am = index;
72 | app.globalData.playtype = 1;
73 | var shuffle = app.globalData.shuffle;
74 | app.globalData.list_sf = this.data.songs;//this.data.list.tracks;
75 | app.shuffleplay(shuffle);
76 | app.globalData.globalStop = false;
77 | this.setData({
78 | curplay: music.id
79 | })
80 | },
81 | playmusic: function (event) {
82 | var that = this;
83 | let music = event.currentTarget.dataset.idx;
84 | let st = event.currentTarget.dataset.st;
85 | if (st * 1 < 0) {
86 | wx.showToast({
87 | title: '歌曲已下架',
88 | icon: 'success',
89 | duration: 2000
90 | });
91 | return;
92 | }
93 | music = this.data.songs[music];
94 | that.setplaylist(music, event.currentTarget.dataset.idx);
95 | }
96 | })
--------------------------------------------------------------------------------
/page/component/recsongs/index.json:
--------------------------------------------------------------------------------
1 | {"navigationBarTitleText": "歌手"}
--------------------------------------------------------------------------------
/page/component/recsongs/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 | 播放全部 (共{{songs.length}}首)
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | {{re.name}}
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 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/page/component/recsongs/index.wxss:
--------------------------------------------------------------------------------
1 | #recs_header{position: relative}
2 | #recs_header image{width:100%;vertical-align: top}
3 | #date{position: absolute;left: 60rpx;top:50%;text-align: center;font-size: 50rpx;width: 110rpx;transform: translateY(-50%);}
4 | #date text{position: absolute;top: 50%; transform: translateY(-50%);width: 100%;color: #BB2C08}
5 |
--------------------------------------------------------------------------------
/page/component/search/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var typelist = require('../../../utils/searchtypelist.js');
3 | var nt = require("../../../utils/nt.js")
4 | var app = getApp();
5 | Page({
6 | data: {
7 | tab: { tab: typelist[0].type, index: 0 },
8 | value: "",
9 | tabs: typelist,
10 | recent: wx.getStorageSync("recent") || [],
11 | loading: false,
12 | prevalue: ""
13 | },
14 | onLoad: function (options) {
15 | var v = options.key;
16 | v && this.search(v)
17 | },
18 | inputext: function (e) {
19 | var name = e.detail.value;
20 | this.setData({ value: name });
21 | },
22 | playmusic: function (event) {
23 | let that = this;
24 | let music = event.currentTarget.dataset.idx;
25 | let st = event.currentTarget.dataset.st;
26 | if (st * 1 < 0) {
27 | wx.showToast({
28 | title: '歌曲已下架',
29 | icon: 'success',
30 | duration: 2000
31 | });
32 | return;
33 | }
34 | music = this.data.tabs[0].relist.songs[music];
35 | app.globalData.curplay = music
36 | },
37 | search: function (name) {
38 | if (!name || (name == this.data.prevalue)) return;
39 | var index = this.data.tab.index;
40 | var tl = typelist;
41 | this.setData({
42 | tabs: tl,
43 | prevalue: name,
44 | value: name,
45 | loading: true
46 | });
47 | var curtab = this.data.tabs[index]
48 | var that = this;
49 | tl = this.data.tabs;
50 | this.httpsearch(name, curtab.offset, this.data.tab.tab, function (res) {
51 | curtab.relist = res;
52 | curtab.loading = true;
53 | var resultarry = res.songs || res.artists || res.albums || res.playlists || res.mvs || res.djprograms || res.userprofiles || []
54 | curtab.offset = resultarry.length
55 | var size = res.songCount || res.artistCount || res.albumCount || res.playlistCount || res.mvCount || res.djprogramCount || res.userprofileCount;
56 | size = size ? size : 0;
57 | curtab.none = curtab.offset >= size ? true : false;
58 | tl[index] = curtab;
59 | var recent = that.data.recent;
60 | var curname = recent.findIndex(function (e) { return e == name });
61 | if (curname > -1) {
62 | recent.splice(curname, 1)
63 | }
64 | recent.unshift(name);
65 | wx.setStorageSync('recent', recent)
66 | that.setData({
67 | tabs: tl,
68 | loading: true,
69 | recent: recent,
70 | prevalue: name
71 | });
72 |
73 | }, function () {
74 | curtab.loading = true;
75 | curtab.none = true;
76 | tl[index] = curtab;
77 | that.setData({
78 | tabs: tl
79 | })
80 | })
81 | },
82 | searhFrecent: function (e) {
83 | this.search(e.currentTarget.dataset.value)
84 | },
85 | searhFinput: function (e) {
86 | this.search(e.detail.value.name)
87 | },
88 | onReachBottom: function (e) {
89 | var tl = this.data.tabs,
90 | that = this;
91 | var curtab = tl[this.data.tab.index];
92 | if (curtab.none) { return; }
93 | curtab.loading = false;
94 | tl[this.data.tab.index] = curtab
95 | this.setData({
96 | tabs: tl
97 | })
98 | this.httpsearch(this.data.prevalue, curtab.offset, this.data.tab.tab, function (res) {
99 | curtab.loading = true;
100 | var resultarry = res.songs || res.artists || res.albums || res.playlists || res.mvs || res.djprograms || res.userprofiles || [];
101 | var size = res.songCount || res.artistCount || res.albumCount || res.playlistCount || res.mvCount || res.djprogramCount || res.userprofileCount;
102 | size = size ? size : 0;
103 | var length = resultarry.length
104 | curtab.offset = curtab.offset + length;
105 | curtab.none = curtab.offset >= size ? true : false;
106 | curtab.relist.songs = curtab.relist.songs ? curtab.relist.songs.concat(resultarry) : null;
107 | curtab.relist.artists = curtab.relist.artists ? curtab.relist.artists.concat(resultarry) : null;
108 | curtab.relist.albums = curtab.relist.albums ? curtab.relist.albums.concat(resultarry) : null;
109 | curtab.relist.playlists = curtab.relist.playlists ? curtab.relist.playlists.concat(resultarry) : null;
110 | curtab.relist.mvs = curtab.relist.mvs ? curtab.relist.mvs.concat(resultarry) : null;
111 | curtab.relist.djprograms = curtab.relist.djprograms ? curtab.relist.djprograms.concat(resultarry) : null;
112 | curtab.relist.userprofiles = curtab.relist.userprofiles ? curtab.relist.userprofiles.concat(resultarry) : null;
113 | tl[that.data.tab.index] = curtab
114 | that.setData({
115 | tabs: tl
116 | })
117 | }, function () {
118 | curtab.loading = true;
119 | curtab.none = true;
120 | tl[that.data.tab.index] = curtab
121 | that.setData({
122 | tabs: tl
123 | })
124 | })
125 | },
126 | httpsearch: function (name, offset, type, cb, err) {
127 | wx.request({
128 | url: bsurl + 'search',
129 | data: {
130 | keywords: name,
131 | offset: offset,
132 | limit: 20,
133 | type: type
134 | },
135 | method: 'GET',
136 | success: function (res) {
137 | cb && cb(res.data.result)
138 | },
139 | fail: function () {
140 | err && err();
141 | }
142 | })
143 | },
144 | tabtype: function (e) {
145 | var index = e.currentTarget.dataset.index;
146 | var curtab = this.data.tabs[index];
147 | var type = e.currentTarget.dataset.tab;
148 | var that = this;
149 | var tl = that.data.tabs;
150 | if (!curtab.loading) {
151 | this.httpsearch(this.data.prevalue, curtab.offset, type, function (res) {
152 | curtab.relist = res;
153 | curtab.loading = true;
154 | var resultarry = res.songs || res.artists || res.albums || res.playlists || res.mvs || res.djprograms || res.userprofiles || [];
155 | curtab.offset = resultarry.length
156 | var size = res.songCount || res.artistCount || res.albumCount || res.playlistCount || res.mvCount || res.djprogramCount || res.userprofileCount;
157 | size = size ? size : 0;
158 | curtab.none = curtab.offset >= size ? true : false;
159 | console.log(size, curtab.offset)
160 |
161 | tl[index] = curtab;
162 | that.setData({
163 | tabs: tl
164 | })
165 | }, function () {
166 | curtab.loading = true;
167 | curtab.none = true;
168 | tl[index] = curtab;
169 | that.setData({
170 | tabs: tl
171 | })
172 | })
173 | }
174 | this.setData({
175 | tab: {
176 | tab: type,
177 | index: index
178 | }
179 | })
180 | },
181 | clear_kw: function () {
182 | this.setData({
183 | value: "",
184 | loading: false,
185 | tabs: typelist,
186 | prevalue: ""
187 | })
188 | },
189 | del_research: function (e) {
190 | //删除搜索历史
191 | var index = e.currentTarget.dataset.index;
192 | this.data.recent.splice(index, 1);
193 | this.setData({
194 | recent: this.data.recent
195 | })
196 | wx.setStorageSync('recent', this.data.recent)
197 | }
198 |
199 | })
--------------------------------------------------------------------------------
/page/component/search/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "搜索"
3 | }
--------------------------------------------------------------------------------
/page/component/search/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
31 |
32 |
33 |
34 |
35 | 历史搜索
36 |
37 |
38 |
39 |
40 |
41 |
42 | {{item}}
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | {{re.name}}
61 | ({{re.alias[0]}})
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | {{re.name}}
76 | ({{re.alias[0]}})
77 |
78 | {{re.artist.name}}
79 | ({{re.artist.alias[re.artist.alias.length-1]}})
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 | {{re.name}}
93 | {{re.trackCount}}首,By{{re.creator.nickname}},播放{{re.playCount}}次
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 | {{re.playCount}}
103 |
104 |
105 |
106 | {{re.name}}
107 | {{re.artistName}}
108 |
109 |
110 |
111 | 电台
112 |
113 |
114 |
115 |
116 |
117 |
118 | {{re.name}}
119 | {{re.dj.nickname}}
120 |
121 |
122 |
123 | 节目
124 |
125 |
126 |
127 |
128 |
129 |
130 | {{re.name}}
131 | {{re.dj.brand}} {{'Vol.'+re.serialNum}}
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 | {{re.nickname}}
143 |
144 |
145 |
146 | {{re.signature}}
147 |
148 |
149 |
150 |
151 |
152 | 暂无结果
153 | 暂无结果
154 | 暂无结果
155 | 暂无结果
156 | 暂无结果
157 | 暂无结果
158 | 暂无结果
159 |
160 |
161 |
162 |
--------------------------------------------------------------------------------
/page/component/search/index.wxss:
--------------------------------------------------------------------------------
1 | page{}
2 | #search_input{padding: 0 0 20rpx 20rpx;background-color: #BB2C08;overflow: hidden;height: 60rpx;flex:0 0 60rpx;color: #fff}
3 | #search_input .form{display: flex;}
4 | .form_input{flex: 1;position: relative;color: #fff;height: 60rpx;overflow: hidden}
5 | .form_input view{position: absolute;top: 0;z-index: 10;left: 0;padding:12rpx 15rpx }
6 | .form_input .sf_clear{right: 0;left: auto}
7 | #search_input input{border:none;color: #515151;background-color: #ececec;
8 | border-radius:4rpx;font-size: 28rpx;padding: 0 60rpx;box-sizing: border-box;height: 60rpx;line-height:60rpx;display: block;}
9 |
10 | .button button{padding: 0 20rpx;height:60rpx;border: none;line-height: 60rpx;display:block;text-align: right;font-size: 30rpx;color: #fff}
11 |
12 | #search_result{height:100%;padding-top:161rpx; box-sizing: border-box;}
13 | #search_header{position: fixed;top:0;left: 0;width: 100%;z-index: 10;}
14 | #search_tab{overflow-x: auto;-webkit-backdrop-filter: blur(15px);backdrop-filter: blur(15px);}
15 | #search_hot{padding: 60rpx 0;min-height: 100rpx;}
16 | .tab .tab-item{flex: 0 0 160rpx;}
17 | .vhidden{visibility:hidden;}
18 |
19 |
20 | .sm_title{font-size: 28rpx;margin: 0}
21 | #re_search_wrap{display: flex; flex-direction: column; justify-content: flex-end; }
22 | .sr_lists icon{ vertical-align:top;}
23 | .sr_lists image{width: 60rpx;height: 60rpx; vertical-align:top}
24 |
25 | .search_relist{height: 100%;padding-top: 161rpx;box-sizing: border-box}
26 | .seare_list{height: 100%;}
27 | .seare_list scroll-view{height: 100%;}
--------------------------------------------------------------------------------
/page/component/simi/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var async = require("../../../utils/async.js");
3 | var app = getApp();
4 | Page({
5 | data: {
6 | loading: false,
7 | pl: [],
8 | songs: [],
9 | user: []
10 | },
11 | onLoad: function (options) {
12 | var id = options.id;
13 | var that = this;
14 | async.map(['simi/playlist', 'simi/song', 'simi/user'], function (item, callback) {
15 | wx.request({
16 | url: bsurl + item,
17 | data: { id: id },
18 | success: function (res) {
19 | callback(null, res.data)
20 | }
21 | })
22 | }, function (err, results) {
23 | that.setData({
24 | loading: true,
25 | pl: results[0].playlists,
26 | song: results[1].songs,
27 | user: results[2].userprofiles
28 | })
29 | })
30 | }
31 | })
--------------------------------------------------------------------------------
/page/component/simi/index.json:
--------------------------------------------------------------------------------
1 | { "navigationBarTitleText": "相似推荐"}
--------------------------------------------------------------------------------
/page/component/simi/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 包含这首歌的歌单
7 |
8 |
9 |
10 |
11 |
12 |
13 | {{item.playCount}}
14 |
15 |
16 | {{item.name}}
17 | {{item.creator.nickname}}
18 |
19 |
20 |
21 |
22 |
23 |
24 | 喜欢这首歌的人你也听
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | {{re.name}}
34 | {{re.artists[0].name}}-{{re.album.name}}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 喜欢这首歌的人
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | {{re.nickname}}
58 |
59 | {{re.recommendReason}}
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/page/component/simi/index.wxss:
--------------------------------------------------------------------------------
1 | /* page/component/simi/index.wxss */
--------------------------------------------------------------------------------
/page/component/toplist/index.js:
--------------------------------------------------------------------------------
1 |
2 | Page({
3 | data:{
4 |
5 | },
6 | onLoad:function(){
7 |
8 | }
9 | })
--------------------------------------------------------------------------------
/page/component/toplist/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/page/component/toplist/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{item.updatetime}}
8 |
9 |
10 |
11 | {{item.name}}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{item.updatetime}}
24 |
25 | {{item.name}}
26 |
27 |
28 |
--------------------------------------------------------------------------------
/page/component/toplist/index.wxss:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/page/component/user/index.js:
--------------------------------------------------------------------------------
1 | var bsurl = require('../../../utils/bsurl.js');
2 | var app = getApp();
3 | Page({
4 | data: {
5 | list1: [],
6 | list2: [],
7 | user: {},
8 | id: -1,
9 | offset: 0,
10 | more: true,
11 | loading: true
12 | },
13 |
14 | onLoad: function (options) {
15 | var id = options.id
16 | var that = this;
17 | wx.request({
18 | url: bsurl + 'user/detail?uid=' + id,
19 | success: function (res) {
20 | that.setData({
21 | id: id,
22 | user: res.data
23 | });
24 | wx.setNavigationBarTitle({
25 | title: res.data.profile.nickname
26 | });
27 | }
28 | });
29 | this.loadplaylist(false, id)
30 | },
31 | onReachBottom: function () {
32 | this.loadplaylist(1)
33 | },
34 | loadplaylist: function (isadd, id) {
35 | var that = this;
36 | if (!this.data.more || !this.data.loading) { return }
37 | this.setData({
38 | loading: true
39 | })
40 | wx.request({
41 | url: bsurl + 'user/playlist',
42 | data: {
43 | uid: id || that.data.id,
44 | offset: that.data.offset,
45 | limit: 2,
46 | cookie: app.globalData.cookie
47 | },
48 | complete: function (res) {
49 | var a = res.data.playlist || [];
50 | var offset = a.length;
51 | var list1 = a.filter(function (item) { return item.userId == id })
52 | var list2 = a.filter(function (item) { return item.userId != id })
53 | if (isadd) {
54 | offset = that.data.offset + a.length
55 | list1 = that.data.list1.concat(list1);
56 | list2 = that.data.list2.concat(list2);
57 | }
58 | that.setData({
59 | loading: false,
60 | more: res.data.more,
61 | offset: offset,
62 | list1: list1,
63 | list2: list2
64 | });
65 | }
66 | });
67 | }
68 | });
69 |
--------------------------------------------------------------------------------
/page/component/user/index.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/page/component/user/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{user.profile.nickname}}
8 |
9 |
10 | {{user.profile.signature}}
11 |
12 |
13 |
14 |
15 | {{user.profile.eventCount}}动态
16 |
17 |
18 |
19 | {{user.profile.follows}}关注
20 |
21 |
22 |
23 | {{user.profile.followeds}}粉丝
24 |
25 |
26 |
27 |
28 | {{user.profile.nickname}}创建的歌单({{user.profile.playlistCount}}) 共被收藏{{user.profile.playlistBeSubscribedCount}}次
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | 听歌排行
38 | 累计收听{{user.listenSongs}}首
39 |
40 |
41 |
42 |
43 |
44 | {{user.profile.nickname}}收藏的歌单 ({{list2.length}})
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/page/component/user/index.wxss:
--------------------------------------------------------------------------------
1 |
2 | .head{
3 | padding: 80rpx;
4 | line-height: 1;
5 | }
6 | .body{
7 | padding-left: 20rpx;
8 | padding-right: 20rpx;
9 | overflow: hidden;
10 | }
11 | .title{
12 | font-size: 52rpx;
13 | }
14 | .desc{
15 | margin-top: 10rpx;
16 | font-size: 28rpx;
17 | }
18 |
19 | .widgets__item{
20 | overflow: hidden;
21 | cursor: pointer;
22 |
23 | }
24 | .widgets__info{
25 | padding:15rpx 0 0 15rpx;
26 | overflow: hidden;
27 | line-height: 1;
28 | }
29 | .widgets__info-img{
30 | width:100rpx;
31 | height:100rpx;margin-right: 15rpx;
32 | float:left;
33 | }
34 |
35 | .widgets__info-name{display: block;height:50rpx;padding-top:15rpx;margin-right: 15rpx;
36 | white-space: nowrap;overflow: hidden;text-overflow: ellipsis;font-size: 28rpx}
37 | .widgets__info-info{color:#aaa;font-size:22rpx;display: block;border-bottom:1rpx solid #eee;padding-bottom: 20rpx;margin-left: 115rpx}
38 |
39 |
40 | #user{position: relative;height:0;padding-top:70%;width:100%;background-size:cover;background-position: center center;
41 | background-repeat: no-repeat;background-color: #eee;border-bottom:1rpx solid #fff;}
42 | #usergender{width: 32rpx;height: 32rpx;margin:0 10rpx}
43 | #user_info{position: absolute;left:60rpx;bottom:110rpx;color: #fff;overflow: hidden;right:60rpx;font-size: 28rpx;}
44 | #user_sig{padding-top: .5em;}
45 | #user_ava{width:80rpx;height:80rpx;border-radius: 50%;border:2rpx solid #fff;vertical-align: middle;margin-right:20rpx;}
46 |
47 | .tab{position: absolute;left: 0;bottom:0;width: 100%;border: none;background-color: rgba(0,0,0,.5);color: #fff;background-image: linear-gradient(rgba(0,0,0,.3),rgba(0,0,0,.5),rgba(0,0,0,.3));}
48 | .tab .tab-item{font-size:22rpx;color: #ccc;line-height:1.3;border-right:1rpx solid #333}
49 | .tab .tab-item text{display: block;color: #fff;font-size:1.2em;padding-top: 8rpx}
--------------------------------------------------------------------------------
/screenshot/IMG_4271.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4271.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4272.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4272.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4273.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4273.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4274.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4274.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4275.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4275.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4276.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4276.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4277.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4277.PNG
--------------------------------------------------------------------------------
/screenshot/IMG_4279.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/IMG_4279.PNG
--------------------------------------------------------------------------------
/screenshot/wx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/wx.jpg
--------------------------------------------------------------------------------
/screenshot/zfb.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sqaiyan/NeteaseMusicWxMiniApp/b834992a13fec5e71d0246a893885b1e9b12e36a/screenshot/zfb.jpg
--------------------------------------------------------------------------------
/utils/bsurl.js:
--------------------------------------------------------------------------------
1 | module.exports="http://localhost:3000/v1/"
--------------------------------------------------------------------------------
/utils/commentslist.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 热门评论
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
20 |
21 | 回复 @{{item.beReplied[0].user.nickname}}:
22 |
23 |
24 | {{re.text}}
25 |
26 |
27 |
28 |
29 |
30 |
31 | @{{item.beReplied[0].user.nickname}}:
32 |
33 |
34 | {{re.text}}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | 查看更多热门评论
45 |
46 |
47 | 精彩评论({{rec.total}})
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
63 |
64 | 回复 @{{item.beReplied[0].user.nickname}}:
65 |
66 |
67 | {{re.text}}
68 |
69 |
70 |
71 |
72 |
73 |
74 | @{{item.beReplied[0].user.nickname}}:
75 |
76 |
77 | {{r.text}}
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | 暂无评论
89 | 加载中...
90 |
91 |
92 |
93 |
94 |
95 |
96 | 上拉加载更多
97 |
--------------------------------------------------------------------------------
/utils/image.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/utils/loading.wxml:
--------------------------------------------------------------------------------
1 |
2 | {{text||'加载中...'}}
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/utils/lrc.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 纯音乐,无歌词
5 | *歌词不支持滚动*
6 | 暂无歌词
7 |
8 | {{item.lrc}}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | 歌词加载中...
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/utils/nt.js:
--------------------------------------------------------------------------------
1 | /**
2 | * author: Di (微信小程序开发工程师)
3 | * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
4 | * 垂直微信小程序开发交流社区
5 | *
6 | * github地址: https://github.com/icindy/WxNotificationCenter
7 | *
8 | * for: 微信小程序通知广播模式类,降低小程序之间的耦合度
9 | * detail : http://weappdev.com/t/wxnotificationcenter/233
10 | */
11 | // 存放
12 | var __notices = [];
13 | var isDebug = true;
14 | /**
15 | * addNotification
16 | * 注册通知对象方法
17 | *
18 | * 参数:
19 | * name: 注册名,一般let在公共类中
20 | * selector: 对应的通知方法,接受到通知后进行的动作
21 | * observer: 注册对象,指Page对象
22 | */
23 | function addNotification(name, selector, observer) {
24 | if (name && selector) {
25 | if(!observer){
26 | console.log("addNotification Warning: no observer will can't remove notice");
27 | }
28 | console.log("addNotification:" + name);
29 | var newNotice = {
30 | name: name,
31 | selector: selector,
32 | observer: observer
33 | };
34 |
35 | addNotices(newNotice);
36 |
37 | } else {
38 | console.log("addNotification error: no selector or name");
39 | }
40 | }
41 |
42 | /**
43 | * 仅添加一次监听
44 | *
45 | * 参数:
46 | * name: 注册名,一般let在公共类中
47 | * selector: 对应的通知方法,接受到通知后进行的动作
48 | * observer: 注册对象,指Page对象
49 | */
50 | function addOnceNotification(name, selector, observer) {
51 | if (__notices.length > 0) {
52 | for (var i = 0; i < __notices.length; i++) {
53 | var notice = __notices[i];
54 | if (notice.name === name) {
55 | if (notice.observer === observer) {
56 | return;
57 | }
58 | }
59 | }
60 | this.addNotification(name, selector, observer)
61 | }
62 | }
63 |
64 | function addNotices(newNotice) {
65 | // if (__notices.length > 0) {
66 | // for (var i = 0; i < __notices.length; i++) {
67 | // var hisNotice = __notices[i];
68 | // //当名称一样时进行对比,如果不是同一个 则放入数组,否则跳出
69 | // if (newNotice.name === hisNotice.name) {
70 | // if (!cmp(hisNotice, newNotice)) {
71 | // __notices.push(newNotice);
72 | // }
73 | // return;
74 | // }else{
75 | // __notices.push(newNotice);
76 | // }
77 |
78 | // }
79 | // } else {
80 |
81 | // }
82 |
83 | __notices.push(newNotice);
84 | }
85 |
86 | /**
87 | * removeNotification
88 | * 移除通知方法
89 | *
90 | * 参数:
91 | * name: 已经注册了的通知
92 | * observer: 移除的通知所在的Page对象
93 | */
94 |
95 | function removeNotification(name,observer) {
96 | console.log("removeNotification:" + name);
97 | for (var i = 0; i < __notices.length; i++){
98 | var notice = __notices[i];
99 | if(notice.name === name){
100 | if(notice.observer === observer){
101 | __notices.splice(i,1);
102 | return;
103 | }
104 | }
105 | }
106 |
107 |
108 | }
109 |
110 | /**
111 | * postNotificationName
112 | * 发送通知方法
113 | *
114 | * 参数:
115 | * name: 已经注册了的通知
116 | * info: 携带的参数
117 | */
118 |
119 | function postNotificationName(name, info) {
120 | console.log("postNotificationName:" + name);
121 | if(__notices.length == 0){
122 | console.log("postNotificationName error: u hadn't add any notice.");
123 | return;
124 | }
125 |
126 | for (var i = 0; i < __notices.length; i++){
127 | var notice = __notices[i];
128 | if(notice.name === name){
129 | notice.selector(info);
130 | }
131 | }
132 |
133 | }
134 |
135 | // 用于对比两个对象是否相等
136 | function cmp(x, y) {
137 | // If both x and y are null or undefined and exactly the same
138 | if (x === y) {
139 | return true;
140 | }
141 |
142 | // If they are not strictly equal, they both need to be Objects
143 | if (! (x instanceof Object) || !(y instanceof Object)) {
144 | return false;
145 | }
146 |
147 | // They must have the exact same prototype chain, the closest we can do is
148 | // test the constructor.
149 | if (x.constructor !== y.constructor) {
150 | return false;
151 | }
152 |
153 | for (var p in x) {
154 | // Inherited properties were tested using x.constructor === y.constructor
155 | if (x.hasOwnProperty(p)) {
156 | // Allows comparing x[ p ] and y[ p ] when set to undefined
157 | if (!y.hasOwnProperty(p)) {
158 | return false;
159 | }
160 |
161 | // If they have the same strict value or identity then they are equal
162 | if (x[p] === y[p]) {
163 | continue;
164 | }
165 |
166 | // Numbers, Strings, Functions, Booleans must be strictly equal
167 | if (typeof(x[p]) !== "object") {
168 | return false;
169 | }
170 |
171 | // Objects and Arrays must be tested recursively
172 | if (!Object.equals(x[p], y[p])) {
173 | return false;
174 | }
175 | }
176 | }
177 |
178 | for (p in y) {
179 | // allows x[ p ] to be set to undefined
180 | if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
181 | return false;
182 | }
183 | }
184 | return true;
185 | };
186 |
187 | module.exports = {
188 | addNotification: addNotification,
189 | removeNotification: removeNotification,
190 | postNotificationName: postNotificationName,
191 | addOnceNotification: addOnceNotification
192 | }
--------------------------------------------------------------------------------
/utils/pageplay.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | {{music.name||'暂无播放'}}
10 | {{music.ar[0].name||music.artists[0].name}} -《{{music.al.name||music.album.name}}》
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/utils/pl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | {{item.name}}
11 | {{item.trackCount}}首,播放{{item.playCount}}次
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/utils/playing.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{music.name}}
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/utils/playlist.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{idx+1}}
13 |
14 |
15 | {{item.ratio}}%
16 |
17 |
18 |
19 |
20 | {{item.lastRank
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | {{re.name}}({{re.alia[0]}})
32 | {{re.ar[0].name}}-{{re.al.name}}
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | {{idx+1}}
56 |
57 |
58 |
59 |
60 | {{re.name}}({{re.alia[0]}})
61 | {{re.ar[0].name}}-{{re.al.name}}
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
--------------------------------------------------------------------------------
/utils/playpercent.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{playtime}}
4 |
9 | {{duration}}
10 |
11 |
--------------------------------------------------------------------------------
/utils/pp_music.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/utils/recordlist.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{idx+1}}
8 |
9 |
10 |
11 | {{re.song.name}}
12 | {{re.song.ar[0].name}}-{{re.song.al.name}}
13 |
14 |
15 |
16 | {{re.playCount}}次
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/utils/searchtypelist.js:
--------------------------------------------------------------------------------
1 | module.exports=[{
2 | type:1,
3 | name:"单曲",
4 | relist:[],
5 | klass:'songs',
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 |
--------------------------------------------------------------------------------