├── .gitignore
├── LICENSE
├── README.md
├── app.js
├── app.json
├── app.wxss
├── assets
└── imges
│ ├── course-select.png
│ ├── course.png
│ ├── discovery-select.png
│ ├── discovery.png
│ ├── dynamic-select.png
│ ├── dynamic.png
│ ├── me-select.png
│ └── me.png
├── components
├── card
│ ├── vui-card.js
│ ├── vui-card.json
│ ├── vui-card.wxml
│ └── vui-card.wxss
├── courseList
│ ├── vui-course-list.js
│ ├── vui-course-list.json
│ ├── vui-course-list.wxml
│ └── vui-course-list.wxss
├── dialog
│ ├── dialog.js
│ ├── dialog.json
│ ├── dialog.wxml
│ └── dialog.wxss
├── icon
│ ├── vui-icon.js
│ ├── vui-icon.json
│ ├── vui-icon.wxml
│ └── vui-icon.wxss
└── video
│ ├── vui-video.js
│ ├── vui-video.json
│ ├── vui-video.wxml
│ └── vui-video.wxss
├── image
├── course.png
├── details.png
├── home.png
└── me.png
├── pages
├── course
│ ├── course.js
│ ├── course.json
│ ├── course.wxml
│ └── course.wxss
├── courseDetails
│ ├── courseDetails.js
│ ├── courseDetails.json
│ ├── courseDetails.wxml
│ └── courseDetails.wxss
├── dynamic
│ ├── dynamic.js
│ ├── dynamic.json
│ ├── dynamic.wxml
│ └── dynamic.wxss
├── index
│ ├── index.js
│ ├── index.json
│ ├── index.wxml
│ └── index.wxss
├── me
│ ├── me.js
│ ├── me.json
│ ├── me.wxml
│ └── me.wxss
├── nominate
│ ├── nominate.js
│ ├── nominate.json
│ ├── nominate.wxml
│ └── nominate.wxss
├── org
│ ├── org.js
│ ├── org.json
│ ├── org.wxml
│ └── org.wxss
├── search
│ ├── search.js
│ ├── search.json
│ ├── search.wxml
│ └── search.wxss
├── setting
│ ├── setting.js
│ ├── setting.json
│ ├── setting.wxml
│ └── setting.wxss
└── user
│ ├── user.js
│ ├── user.json
│ ├── user.wxml
│ └── user.wxss
├── project.config.json
├── sitemap.json
├── templates
├── tmpl.wxml
└── tmpl.wxss
└── utils
└── util.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # 忽略文件
2 | .idea
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 赵云兴
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # edu-wechat
2 | 码小课--小程序
3 |
4 | - [x] 首页
5 | - [x] 课程页面
6 | - [ ] 动态
7 | - [x] 我的
8 | - [x] 用户页面
9 | - [ ] 搜索页面
10 |
11 | ## 效果图展示
12 |
13 | ### 首页
14 |
15 | 
16 |
17 | ### 我的
18 |
19 | 
20 |
21 | ### 课程列表
22 |
23 | 
24 |
25 | ### 课程详情
26 |
27 | 
28 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | //app.js
2 | App({
3 |
4 | onLaunch: function () {
5 | // 显示动态数字
6 | wx.setTabBarBadge({
7 | index: 2,
8 | text: '9+'
9 | })
10 | // // 登录
11 | // wx.login({
12 | // success: res => {
13 | // // 发送 res.code 到后台换取 openId, sessionKey, unionId
14 | // console.log(res.code)
15 | // }
16 | // })
17 | // // 获取用户信息
18 | // wx.getSetting({
19 | // success: res => {
20 | // if (res.authSetting['scope.userInfo']) {
21 | // // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
22 | // wx.getUserInfo({
23 | // success: res => {
24 | // // 可以将 res 发送给后台解码出 unionId
25 | // this.globalData.userInfo = res.userInfo
26 | // console.log(res.userInfo)
27 | // // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
28 | // // 所以此处加入 callback 以防止这种情况
29 | // if (this.userInfoReadyCallback) {
30 | // this.userInfoReadyCallback(res)
31 | // }
32 | // }
33 | // })
34 | // }
35 | // }
36 | // })
37 | },
38 | globalData: {
39 | // Info: null,
40 | // 推荐课程
41 | nominateList: [
42 |
43 | {
44 | "id": 1001,
45 | "cover": "http://mvimg2.meitudata.com/5abf7d38dd1633882.jpg",
46 | "playUrl":"http://mvvideo10.meitudata.com/5abdf80eef17c6493_H264_3.mp4",
47 | "browse": 3650,
48 | "collect": 87,
49 | "op": 7487,
50 | "share": 9879,
51 | "like": 157,
52 | "price": 0,
53 | "tyep": 2,
54 | "name": "人鱼的眼泪史莱姆教程",
55 | "summary":"人鱼的眼泪史莱姆教程,今天配音了,嗓子还是哑手还是胖不要建议😑我还是你们的小阔爱咩,炸评最多送转发@★XuFei~许菲★手作 @菲菲姐夫 @璐璐吖✨ @美拍小助手 #i like 美拍##手工##史莱姆#",
56 | "author": {
57 | "id": 1000,
58 | "name": "sunny",
59 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
60 | }
61 | }, {
62 | "id": 1002,
63 | "cover": "http://mvimg1.meitudata.com/5abded5954d057076.jpg",
64 | "playUrl": "http://mvvideo10.meitudata.com/5abded59446e96967_H264_13.mp4",
65 | "browse": 3650,
66 | "collect": 87,
67 | "op": 7487,
68 | "share": 9879,
69 | "like": 157,
70 | "price": 85.7,
71 | "tyep": 2,
72 | "name": "You Are The Reason",
73 | "summary": "晚安翻唱#我甘愿翻山越岭,穿过海洋,只为陪伴着你。歌曲:You Are The Reason - 原唱:Calum Scott)",
74 | "author": {
75 | "id": "user_id",
76 | "name": "sunny",
77 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
78 | }
79 | }, {
80 | "id": 1002,
81 | "cover": "http://mvimg1.meitudata.com/5abdf8a14048a8887.jpg",
82 | "browse": 3650,
83 | "collect": 87,
84 | "op": 7487,
85 | "share": 9879,
86 | "like": 157,
87 | "price": 85.7,
88 | "tyep": 2,
89 | "name": "【🌊辰叔美拍】好久不见🤟🏾 更一个简短的牛头...",
90 | "summary":"【🌊辰叔美拍】好久不见🤟🏾 更一个简短的牛头...",
91 | "author": {
92 | "id": 1000,
93 | "name": "sunny",
94 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
95 | }
96 | }
97 | ],
98 | //课程列表
99 | courseList: [
100 | {
101 | "id": 1001,
102 | "cover": "http://mvimg11.meitudata.com/5abf6708db7b19559.jpg",
103 | "playUrl":"http://mvvideo11.meitudata.com/5abf6708db7ea5754.mp4",
104 | "browse": 3650,
105 | "collect": 87,
106 | "op": 7487,
107 | "share": 9879,
108 | "like": 157,
109 | "price": 0,
110 | "tyep": 2,
111 | "name": "起喝优乐美的爱情",
112 | "summary": "一起喝优乐美的爱情,你要不要?#飞碟神曲#《有奶茶,中国人就不会害怕世界末日》片尾曲,改编自#周杰伦#《我不配》#音乐#",
113 | "author": {
114 | "id": "user_id",
115 | "name": "sunny",
116 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
117 | }
118 | }, {
119 | "id": 1002,
120 | "cover": "http://mvimg1.meitudata.com/5abded5954d057076.jpg",
121 | "playUrl":"http://mvvideo10.meitudata.com/5abded59446e96967_H264_13.mp4",
122 | "browse": 3650,
123 | "collect": 87,
124 | "op": 7487,
125 | "share": 9879,
126 | "like": 157,
127 | "price": 85.7,
128 | "tyep": 2,
129 | "name": "You Are The Reason",
130 | "summary": "晚安翻唱#我甘愿翻山越岭,穿过海洋,只为陪伴着你。歌曲:You Are The Reason - 原唱:Calum Scott)",
131 | "author": {
132 | "id": "user_id",
133 | "name": "sunny",
134 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
135 | }
136 | }, {
137 | "id": 1003,
138 | "cover": "http://mvimg11.meitudata.com/5a9a9b8121b441409.jpg",
139 | "playUrl":"http://mvvideo11.meitudata.com/5a9a9b80b7f603108_H264_13.mp4",
140 | "browse": 3650,
141 | "collect": 87,
142 | "op": 7487,
143 | "share": 9879,
144 | "like": 157,
145 | "price": 85.7,
146 | "tyep": 2,
147 | "name": "无知并身无",
148 | "summary": "【科特KurtSchneider美拍】#晚安翻唱#我们年轻、无知并身无...",
149 | "author": {
150 | "id": "user_id",
151 | "name": "sunny",
152 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
153 | }
154 | }, {
155 | "id": 1004,
156 | "cover": "http://mvimg10.meitudata.com/5abe26fb65b474150.jpg",
157 | "playUrl":"http://mvvideo10.meitudata.com/5abe27ac3ad862822.mp4",
158 | "browse": 3650,
159 | "collect": 87,
160 | "op": 7487,
161 | "share": 9879,
162 | "like": 157,
163 | "price": 85.7,
164 | "tyep": 2,
165 | "name": "MAMAMOO",
166 | "summary": "【韩流音悦Tai美拍】#韩流新歌速递#마마무(MAMAMOO) ...",
167 | "author": {
168 | "id": "user_id",
169 | "name": "sunny",
170 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
171 | }
172 | }, {
173 | "id": 1004,
174 | "cover": "http://mvimg10.meitudata.com/5abf6a2eecd4b9159.jpg",
175 | "playUrl":"http://mvvideo11.meitudata.com/5abf409ed68963024_H264_3.mp4",
176 | "browse": 3650,
177 | "collect": 87,
178 | "op": 7487,
179 | "share": 9879,
180 | "like": 157,
181 | "price": 85.7,
182 | "tyep": 2,
183 | "name": "提了个琴美拍",
184 | "summary": "【提了个琴美拍】#音乐#HAVANA (Violin Cover by ...",
185 | "author": {
186 | "id": "user_id",
187 | "name": "sunny",
188 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
189 | }
190 | }, {
191 | "id": 1004,
192 | "cover": "http://mvimg11.meitudata.com/5ac0edf1ddc0b9473.jpg",
193 | "playUrl":"http://mvvideo11.meitudata.com/5ac0ed7746b5b8217_H264_3.mp4",
194 | "browse": 3650,
195 | "collect": 87,
196 | "op": 7487,
197 | "share": 9879,
198 | "like": 157,
199 | "price": 85.7,
200 | "tyep": 2,
201 | "summary": "Tinashe",
202 | "name": "Tinashe - Me So Bad (Official Video) ft. Ty Dolla $ign, French Montana ",
203 | "author": {
204 | "id": "user_id",
205 | "name": "sunny",
206 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
207 | }
208 | }, {
209 | "id": 1002,
210 | "cover": "http://mvimg11.meitudata.com/5a589c7fbe9f17604.jpg",
211 | "playUrl": "http://mvvideo11.meitudata.com/5a589c54780d5578_H264_3.mp4",
212 | "browse": 3650,
213 | "collect": 87,
214 | "op": 7487,
215 | "share": 9879,
216 | "like": 157,
217 | "price": 85.7,
218 | "tyep": 2,
219 | "name": "You Are The Reason",
220 | "summary": "晚安翻唱#我甘愿翻山越岭,穿过海洋,只为陪伴着你。歌曲:You Are The Reason - 原唱:Calum Scott)",
221 | "author": {
222 | "id": "user_id",
223 | "name": "sunny",
224 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
225 | }
226 | }
227 | ],
228 | //首页轮播图数据
229 | swiperList: [{
230 | "id": 1002,
231 | "cover": "http://mvimg1.meitudata.com/5abded5954d057076.jpg",
232 | "playUrl": "http://mvvideo10.meitudata.com/5abded59446e96967_H264_13.mp4",
233 | "browse": 3650,
234 | "collect": 87,
235 | "op": 7487,
236 | "share": 9879,
237 | "like": 157,
238 | "price": 85.7,
239 | "tyep": 2,
240 | "name": "You Are The Reason",
241 | "summary": "晚安翻唱#我甘愿翻山越岭,穿过海洋,只为陪伴着你。歌曲:You Are The Reason - 原唱:Calum Scott)",
242 | "author": {
243 | "id": "user_id",
244 | "name": "sunny",
245 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png"
246 | }
247 | },
248 | {
249 | "id": 10001,
250 | "cover": "http://mvimg10.meitudata.com/5abdef97d617e8241.jpg",
251 | "playUrl": "http://mvvideo10.meitudata.com/5abdef97ca4d91880_H264_13.mp4",
252 | "name": "Alyson Stoner",
253 | "summary": "Evolution of K-POP - 翻唱制作:Alyson Stoner ",
254 | "like": 1580,
255 | "collect": 587,
256 | "op": 87,
257 | "share": 79,
258 | "author": {
259 | "id": 1000,
260 | "name": "sunny",
261 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
262 | }
263 | },
264 | {
265 | "id": 10002,
266 | "cover": "http://mvimg11.meitudata.com/5a8818e47fe779475.jpg",
267 | "playUrl": "http://mvvideo10.meitudata.com/5a8818309202a409_H264_13.mp4",
268 | "name": "Medicine",
269 | "summary": "我知道没有你我也很坚强,你的离开不会让我伤心太久,我已经不在乎了,你不能再左右我的心了。(歌曲:Medicine - 原唱:Kelly Clarkson - 翻唱制作:KHS)",
270 | "like": 10,
271 | "collect": 87,
272 | "op": 7487,
273 | "share": 9879,
274 | "author": {
275 | "id": 1000,
276 | "name": "sunny",
277 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
278 | }
279 | },
280 |
281 | {
282 | "cover": "http://mvimg10.meitudata.com/5aaa6470d3b959174.jpg",
283 | "playUrl": "http://mvvideo11.meitudata.com/5aaa6470c82e81959_H264_13.mp4",
284 | "id": 10005,
285 | "name": "The Middle",
286 | "summary": "亲爱的,你为何不愿意做出一点让步,做出一点牺牲,我快要被逼疯了",
287 | "like": 8810,
288 | "collect": 87,
289 | "op": 7487,
290 | "share": 9879,
291 | "author": {
292 | "id": 1000,
293 | "name": "sunny",
294 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
295 | }
296 | }, {
297 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
298 | "playUrl": "http://mvvideo10.meitudata.com/5a4f7d70ef4f42024_H264_3.mp4",
299 | "id": 10004,
300 | "name": "Madilyn Bailey",
301 | "summary": "来自英国的两位抒情派歌手,你们喜欢他俩组合吗?(歌曲:ADELE vs SAM SMITH Mashup - 翻唱制作:Madilyn Bailey )",
302 | "like": 8810,
303 | "collect": 87,
304 | "op": 7487,
305 | "share": 9879,
306 | "author": {
307 | "id": 1000,
308 | "name": "sunny",
309 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
310 | }
311 | }
312 | ],
313 | // 课程发言数据
314 | courseOpinions: [
315 | {
316 | "id": "1",
317 | "name": "sunny",
318 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
319 | "content": "视频不错",
320 | "likes": 8,
321 | "time": "2018.02.25"
322 | },
323 | {
324 | "id": "1",
325 | "name": "abpj2gdu",
326 | "cover": "https://gitee.com/uploads/56/1167256_sunny9.png",
327 | "content": "测试数据",
328 | "likes": 4,
329 | "time": "2018-02-06"
330 | },
331 | {
332 | "id": "1",
333 | "name": "sunny",
334 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
335 | "content": "曾经的我有很多兄弟姐妹,他们流入世界各地,为人类造福,可是快乐总是那么的短暂",
336 | "likes": 8,
337 | "time": "2018.02.25"
338 | },
339 | {
340 | "id": "1",
341 | "name": "sunny",
342 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
343 | "content": "曾经的我有很多兄弟姐妹,他们流入世界各地,为人类造福,可是快乐总是那么的短暂",
344 | "likes": 8,
345 | "time": "2018.02.25"
346 | },
347 | {
348 | "id": "1",
349 | "name": "sunny",
350 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
351 | "content": "曾经的我有很多兄弟姐妹,他们流入世界各地,为人类造福,可是快乐总是那么的短暂",
352 | "likes": 8,
353 | "time": "2018.02.25"
354 | },
355 | {
356 | "id": "1",
357 | "name": "sunny",
358 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
359 | "content": "我的兄弟姐妹流着泪默默祈祷,却无济于事。人们把自然水随便的用,大人洗完菜后一大盆还很干净的水就泼在地上,小孩在水里踩,把水放在杯子里,加点肥皂水吹泡泡,吹不了就倒掉重做,一直做好才行,浪费了多少水!",
360 | "likes": 8,
361 | "time": "2018.02.25"
362 | },
363 | {
364 | "id": "1",
365 | "name": "sunny",
366 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
367 | "content": "我的兄弟姐妹流着泪默默祈祷,却无济于事。人们把自然水随便的用,大人洗完菜后一大盆还很干净的水就泼在地上,小孩在水里踩,把水放在杯子里,加点肥皂水吹泡泡,吹不了就倒掉重做,一直做好才行,浪费了多少水!",
368 | "likes": 8,
369 | "time": "2018.02.25"
370 | },
371 | {
372 | "id": "1",
373 | "name": "sunny",
374 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
375 | "content": "水,是生命之源;水,是造福人类的;水,为人类无私奉献,你们却眼睁睁地看着水慢慢消失",
376 | "likes": 8,
377 | "time": "2018.02.25"
378 | },
379 | {
380 | "id": "1",
381 | "name": "sunny",
382 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
383 | "content": "水到最后没有了,你们只能哭泣,我是最后一滴水,你们哭泣的泪水,请保护水源,不浪费。否则,连我这最后一滴水,也将消失在那茫茫的宇宙中。",
384 | "likes": 8,
385 | "time": "2018.02.25"
386 | }
387 | ],
388 | //课程课件
389 | courseFiles: [
390 | {
391 | "name": "打开调试模式才能打开该文件.docx",
392 | "url": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg"
393 | }
394 | ]
395 | }
396 | })
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/index/index",
4 | "pages/courseDetails/courseDetails",
5 | "pages/me/me",
6 | "pages/dynamic/dynamic",
7 | "pages/course/course",
8 | "pages/org/org",
9 | "pages/search/search",
10 | "pages/nominate/nominate",
11 | "pages/user/user",
12 | "pages/setting/setting"
13 | ],
14 | "window": {
15 | "navigationBarBackgroundColor": "#fff",
16 | "navigationBarTextStyle": "black",
17 | "backgroundColor": "#eeeeee",
18 | "backgroundTextStyle": "dark",
19 | "enablePullDownRefresh": false
20 | },
21 | "tabBar": {
22 | "position": "bottom",
23 | "selectedColor": "#b4e131",
24 | "color": "#707070",
25 | "borderStyle": "white",
26 | "list": [
27 | {
28 | "pagePath": "pages/index/index",
29 | "text": "发现",
30 | "iconPath": "assets/imges/discovery.png",
31 | "selectedIconPath": "assets/imges/discovery-select.png"
32 | },
33 | {
34 | "pagePath": "pages/course/course",
35 | "text": "课程",
36 | "iconPath": "assets/imges/course.png",
37 | "selectedIconPath": "assets/imges/course-select.png"
38 | },
39 | {
40 | "pagePath": "pages/dynamic/dynamic",
41 | "text": "动态",
42 | "iconPath": "assets/imges/dynamic.png",
43 | "selectedIconPath": "assets/imges/dynamic-select.png"
44 | },
45 | {
46 | "pagePath": "pages/me/me",
47 | "text": "我的",
48 | "iconPath": "assets/imges/me.png",
49 | "selectedIconPath": "assets/imges/me-select.png"
50 | }
51 | ]
52 | },
53 | "sitemapLocation": "sitemap.json"
54 | }
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 | /*page设置默认背景 */
2 | page {
3 | background-color: #f5f5f5;
4 | }
5 | /*文本内容容器*/
6 | .container{
7 | margin-bottom: 20rpx;
8 | background-color: #fff
9 | }
10 | /*课程搜索 */
11 | .course-search {
12 | height:70rpx;
13 | line-height:80rpx;
14 | border:solid 1rpx #eee;
15 | border-radius:36rpx;
16 | background-color:#f5f5f5;
17 | }
18 | /* 公共卡片css */
19 | .vui-card-title{
20 | color: #333;
21 | }
22 | /*更多 */
23 | .vui-card-extra{
24 | padding: 8rpx 0;
25 | line-height: 25rpx;
26 | height: 25rpx;
27 | float: right;
28 | font-size: 30rpx;
29 | color: #707070;
30 | }
31 | /*视频播放导航菜单 */
32 |
33 | .vui-menu {
34 | width: 100%;
35 | height: 90rpx;
36 | line-height: 90rpx;
37 | display: inline-block;
38 | background-color: #fff;
39 | box-shadow: 0 2rpx 10rpx 0 #d7d7d7;
40 | text-align: center;
41 | font-size: 32rpx;
42 | }
43 |
44 | .vui-menu-avtive {
45 | color: #a3d900 !important;
46 | }
47 |
48 | .vui-menu-item-3, .vui-menu-item-4, .vui-menu-item-5 {
49 | float: left;
50 | box-sizing: border-box;
51 | color: #868686;
52 | /* border-right: solid 1rpx #f8f6f6; */
53 | }
54 |
55 | .vui-menu-item-3 {
56 | width: 33.3%;
57 | }
58 |
59 | .vui-menu-item-4 {
60 | width: 25%;
61 | }
62 |
63 | .vui-menu-item-5 {
64 | width: 20%;
65 | }
66 |
67 | /* .vui-menu-item-3:last-child,.vui-menu-item-4:last-child,.vui-menu-item-5:last-child {
68 | border-right: none;
69 | } */
70 |
71 |
72 | /*用户模块 */
73 | .vui-user {
74 | display: inline-block;
75 | width: 100%;
76 | height: 100rpx;
77 | }
78 |
79 | /*用户头像 */
80 | .vui-user-cover {
81 | width: 90rpx;
82 | height: 90rpx;
83 | border-radius: 45rpx;
84 | float: left;
85 | }
86 |
87 | /*用户名称 */
88 | .vui-user-name{
89 | color: #3c8dff;
90 | display: inline-block;
91 | margin: -25rpx 15rpx;
92 | }
93 | /*发言列表、动态类别 */
94 | /*发言模板 */
95 |
96 | .course-opinion {
97 | width: 96%;
98 | margin-bottom: 70rpx;
99 | }
100 |
101 | /*课程发言用户 */
102 |
103 | .course-opinion-user {
104 | height: 90rpx;
105 | line-height: 90rpx;
106 | }
107 |
108 | /*发言用户头像 */
109 |
110 | .course-opinion-user-cover {
111 | height: 80rpx;
112 | width: 80rpx;
113 | border-radius: 40rpx;
114 | margin-top: 12rpx;
115 | float: left;
116 | }
117 |
118 | /*发言用户作者 */
119 |
120 | .course-opinion-user-name {
121 | color: #3c8dff;
122 | display: inline-block;
123 | margin: 0rpx 18rpx;
124 | }
125 |
126 | /*发言时间 */
127 |
128 | .course-opinion-user-time {
129 | color: #999;
130 | font-size: 28rpx;
131 | }
132 |
133 | /*发言内容 */
134 |
135 | .course-opinion-content {
136 | font-size: 28rpx;
137 | color: #707070;
138 | margin-top: 15rpx;
139 | }
140 |
141 | /*
142 | 收藏的状态:#f77000
143 | 激活状态:#b4e131
144 | */
--------------------------------------------------------------------------------
/assets/imges/course-select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/course-select.png
--------------------------------------------------------------------------------
/assets/imges/course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/course.png
--------------------------------------------------------------------------------
/assets/imges/discovery-select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/discovery-select.png
--------------------------------------------------------------------------------
/assets/imges/discovery.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/discovery.png
--------------------------------------------------------------------------------
/assets/imges/dynamic-select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/dynamic-select.png
--------------------------------------------------------------------------------
/assets/imges/dynamic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/dynamic.png
--------------------------------------------------------------------------------
/assets/imges/me-select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/me-select.png
--------------------------------------------------------------------------------
/assets/imges/me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/assets/imges/me.png
--------------------------------------------------------------------------------
/components/card/vui-card.js:
--------------------------------------------------------------------------------
1 | Component({
2 | options: {
3 | multipleSlots: true // 在组件定义时的选项中启用多slot支持
4 | },
5 | })
6 |
--------------------------------------------------------------------------------
/components/card/vui-card.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true
3 | }
--------------------------------------------------------------------------------
/components/card/vui-card.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/components/card/vui-card.wxss:
--------------------------------------------------------------------------------
1 | .vui-card {
2 | /* margin-top: 30rpx; */
3 | background-color: #fff;
4 | padding: 15rpx;
5 | }
--------------------------------------------------------------------------------
/components/courseList/vui-course-list.js:
--------------------------------------------------------------------------------
1 | // components/courseList/vui-course-list.js
2 | Component({
3 | /**
4 | * 组件的属性列表
5 | */
6 | properties: {
7 | // 课程
8 | courses: {
9 | type: Array,
10 | value: []
11 | },
12 | //点击用户头像是否跳转
13 | noSkip:{
14 | type:Boolean,
15 | value: false
16 | }
17 | },
18 | /**
19 | * 组件的方法列表
20 | */
21 | methods: {
22 | //跳转
23 | _navigateTo(env){
24 | let path = env.currentTarget.dataset.path;
25 | let item = env.currentTarget.dataset.item;
26 | let skip = env.currentTarget.dataset.skip;
27 | if (skip){
28 | wx.navigateTo({
29 | url: path + '?item=' + JSON.stringify(item)
30 | })
31 | }
32 |
33 | }
34 | }
35 | })
36 |
--------------------------------------------------------------------------------
/components/courseList/vui-course-list.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {
4 | "i": "../icon/vui-icon"
5 | }
6 | }
--------------------------------------------------------------------------------
/components/courseList/vui-course-list.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{item.name}}
7 |
8 |
9 |
10 |
11 |
12 | {{item.price==0?'免费':item.price}}
13 |
14 |
15 |
16 |
17 | {{item.browse}}
18 |
19 |
20 |
21 |
22 | {{item.collect}}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {{item.author.name}}
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/components/courseList/vui-course-list.wxss:
--------------------------------------------------------------------------------
1 | .course-list {
2 | padding: 15rpx;
3 | background-color: #fff;
4 | }
5 | .course-item {
6 | display: block;
7 | border-bottom: solid 1rpx #f5f5f5;
8 | height: 240rpx;
9 | width: 100%;
10 | }
11 |
12 | .course-item:last-child {
13 | border: none;
14 | }
15 |
16 | .course-item-cover, .course-item-info {
17 | height: 200rpx;
18 | margin: 20rpx 0;
19 | }
20 |
21 | /*课程封面 */
22 |
23 | .course-item-cover {
24 | float: left;
25 | width: 45%;
26 | border-radius: 10rpx;
27 | }
28 |
29 | /*课程信息 */
30 |
31 | .course-item-info {
32 | width: 52%;
33 | float: right;
34 | height: 200rpx;
35 | }
36 |
37 | /*课程标题 */
38 |
39 | .course-title {
40 | float: left;
41 | font-size: 28rpx;
42 | width: 100%;
43 | overflow: hidden;
44 | text-overflow: ellipsis;
45 | white-space: nowrap;
46 | }
47 |
48 | .course-stat {
49 | font-size: 25rpx;
50 | color: #ccc;
51 | width: 100%;
52 | display: inline-block;
53 | line-height:90rpx;
54 | }
55 |
56 | .course-stat-item {
57 | display: inline-block;
58 | width: 33%;
59 | }
60 |
61 | /*组织 */
62 | .course-author, .course-stat {
63 | line-height: 90rpx;
64 | height: 80rpx;
65 | }
66 |
67 | /*课程来源名称 */
68 |
69 | .course-author-name {
70 | color: #707070;
71 | font-size: 30rpx;
72 | margin-left: 10rpx;
73 | display: inline-block;
74 | }
75 |
76 | /*课程来源logo */
77 |
78 | .course-author-cover {
79 | height: 60rpx;
80 | width: 60rpx;
81 | border-radius: 30rpx;
82 | float: left;
83 | margin-top: 15rpx;
84 | }
85 |
86 | .has-price {
87 | color: red;
88 | }
89 |
--------------------------------------------------------------------------------
/components/dialog/dialog.js:
--------------------------------------------------------------------------------
1 | Component({
2 | options: {
3 | multipleSlots: true // 在组件定义时的选项中启用多slot支持
4 | },
5 | /**
6 | * 组件的属性列表
7 | * 用于组件自定义设置
8 | */
9 | properties: {
10 | // 弹窗标题
11 | title: { // 属性名
12 | type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
13 | value: '标题' // 属性初始值(可选),如果未指定则会根据类型选择一个
14 | },
15 | // 弹窗内容
16 | content: {
17 | type: String,
18 | value: '弹窗内容'
19 | },
20 | // 弹窗取消按钮文字
21 | cancelText: {
22 | type: String,
23 | value: '取消'
24 | },
25 | // 弹窗确认按钮文字
26 | confirmText: {
27 | type: String,
28 | value: '确定'
29 | }
30 | },
31 |
32 | /**
33 | * 私有数据,组件的初始数据
34 | * 可用于模版渲染
35 | */
36 | data: {
37 | // 弹窗显示控制
38 | isShow: false
39 | },
40 |
41 | /**
42 | * 组件的方法列表
43 | * 更新属性和数据的方法与更新页面数据的方法类似
44 | */
45 | methods: {
46 | /*
47 | * 公有方法
48 | */
49 |
50 | //隐藏弹框
51 | hideDialog() {
52 | this.setData({
53 | isShow: !this.data.isShow
54 | })
55 | },
56 | //展示弹框
57 | showDialog() {
58 | this.setData({
59 | isShow: !this.data.isShow
60 | })
61 | },
62 | /*
63 | * 内部私有方法建议以下划线开头
64 | * triggerEvent 用于触发事件
65 | */
66 | _cancelEvent() {
67 | //触发取消回调
68 | this.triggerEvent("cancelEvent")
69 | },
70 | _confirmEvent() {
71 | //触发成功回调
72 | this.triggerEvent("confirmEvent");
73 | }
74 | }
75 | })
--------------------------------------------------------------------------------
/components/dialog/dialog.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/components/dialog/dialog.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{ title }}
6 | {{ content }}
7 |
11 |
12 |
--------------------------------------------------------------------------------
/components/dialog/dialog.wxss:
--------------------------------------------------------------------------------
1 | /* components/Dialog/dialog.wxss */
2 | .wx-mask{
3 | position: fixed;
4 | z-index: 1000;
5 | top: 0;
6 | right: 0;
7 | left: 0;
8 | bottom: 0;
9 | background: rgba(0, 0, 0, 0.3);
10 | }
11 | .wx-dialog{
12 | position: fixed;
13 | z-index: 5000;
14 | width: 80%;
15 | max-width: 600rpx;
16 | top: 50%;
17 | left: 50%;
18 | -webkit-transform: translate(-50%, -50%);
19 | transform: translate(-50%, -50%);
20 | background-color: #FFFFFF;
21 | text-align: center;
22 | border-radius: 3px;
23 | overflow: hidden;
24 | }
25 | .wx-dialog-title{
26 | font-size: 18px;
27 | padding: 15px 15px 5px;
28 | }
29 | .wx-dialog-content{
30 | padding: 15px 15px 5px;
31 | min-height: 40px;
32 | font-size: 16px;
33 | line-height: 1.3;
34 | word-wrap: break-word;
35 | word-break: break-all;
36 | color: #999999;
37 | }
38 | .wx-dialog-footer{
39 | display: flex;
40 | align-items: center;
41 | position: relative;
42 | line-height: 45px;
43 | font-size: 17px;
44 | }
45 | .wx-dialog-footer::before{
46 | content: '';
47 | position: absolute;
48 | left: 0;
49 | top: 0;
50 | right: 0;
51 | height: 1px;
52 | border-top: 1px solid #D5D5D6;
53 | color: #D5D5D6;
54 | -webkit-transform-origin: 0 0;
55 | transform-origin: 0 0;
56 | -webkit-transform: scaleY(0.5);
57 | transform: scaleY(0.5);
58 | }
59 | .wx-dialog-btn{
60 | display: block;
61 | -webkit-flex: 1;
62 | flex: 1;
63 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
64 | position: relative;
65 | }
66 | .wx-dialog-footer .wx-dialog-btn:nth-of-type(1){
67 | color: #353535;
68 | }
69 | .wx-dialog-footer .wx-dialog-btn:nth-of-type(2){
70 | color: #3CC51F;
71 | }
72 | .wx-dialog-footer .wx-dialog-btn:nth-of-type(2):after{
73 | content: " ";
74 | position: absolute;
75 | left: 0;
76 | top: 0;
77 | width: 1px;
78 | bottom: 0;
79 | border-left: 1px solid #D5D5D6;
80 | color: #D5D5D6;
81 | -webkit-transform-origin: 0 0;
82 | transform-origin: 0 0;
83 | -webkit-transform: scaleX(0.5);
84 | transform: scaleX(0.5);
85 | }
86 |
--------------------------------------------------------------------------------
/components/icon/vui-icon.js:
--------------------------------------------------------------------------------
1 | Component({
2 | properties: {
3 | // icon名称
4 | name: {
5 | type: String,
6 | value: ""
7 | },
8 | color: {
9 | type: String,
10 | value: '',
11 | },
12 | size: {
13 | type: String,
14 | value: '30',
15 | }
16 | },
17 | })
18 |
--------------------------------------------------------------------------------
/components/icon/vui-icon.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true
3 | }
--------------------------------------------------------------------------------
/components/icon/vui-icon.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/components/icon/vui-icon.wxss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'vui-icon';
3 | src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff');
4 | font-weight: normal;
5 | font-style: normal;
6 | }
7 | .vui-icon{
8 | font-family: 'vui-icon' !important;
9 | font-style: normal;
10 | font-weight: normal;
11 | font-variant: normal;
12 | text-transform: none;
13 | margin:0 5rpx;
14 | line-height: 1;
15 | -webkit-font-smoothing: antialiased;
16 | -moz-osx-font-smoothing: grayscale;
17 | }
18 |
19 | .icon-setting:before {
20 | content: "\e90d";
21 | }
22 | .icon-thumb:before {
23 | content: "\e903";
24 | }
25 | .icon-following:before {
26 | content: "\e904";
27 | }
28 | .icon-browse:before {
29 | content: "\e906";
30 | }
31 | .icon-book:before {
32 | content: "\e909";
33 | }
34 | .icon-fans:before {
35 | content: "\e90c";
36 | }
37 | .icon-share:before {
38 | content: "\e90a";
39 | }
40 | .icon-send:before {
41 | content: "\e90b";
42 | }
43 | .icon-collect:before {
44 | content: "\e900";
45 | }
46 | .icon-money:before {
47 | content: "\e901";
48 | }
49 | .icon-hot:before {
50 | content: "\e902";
51 | }
52 | .icon-info:before {
53 | content: "\e905";
54 | }
55 | .icon-more:before {
56 | content: "\e907";
57 | }
58 | .icon-recommend:before {
59 | content: "\e908";
60 | }
61 |
--------------------------------------------------------------------------------
/components/video/vui-video.js:
--------------------------------------------------------------------------------
1 | Component({
2 | options: {
3 | multipleSlots: true // 在组件定义时的选项中启用多slot支持
4 | },
5 | /**
6 | * 组件的属性列表
7 | * 用于组件自定义设置
8 | */
9 | properties: {
10 | initialTime:{// 开始时间
11 | type: String,
12 | value: '0'
13 | },
14 | url:{//播放地址
15 | type: String
16 | },
17 | danmuList: {//弹幕列表
18 | type: Array,
19 | value: []
20 | },
21 | // 视频封面
22 | cover: {
23 | type: String,
24 | value: ''
25 | },
26 | // 弹窗确认按钮文字
27 | confirmText: {
28 | type: String,
29 | value: '确定'
30 | }
31 | },
32 |
33 | /**
34 | * 私有数据,组件的初始数据
35 | * 可用于模版渲染
36 | */
37 | data: {
38 | // 弹窗显示控制
39 | isShow: false
40 | },
41 |
42 | /**
43 | * 组件的方法列表
44 | * 更新属性和数据的方法与更新页面数据的方法类似
45 | */
46 | methods: {
47 | /*
48 | * 公有方法
49 | */
50 |
51 | //隐藏弹框
52 | hideDialog() {
53 | this.setData({
54 | isShow: !this.data.isShow
55 | })
56 | },
57 | //展示弹框
58 | showDialog() {
59 | this.setData({
60 | isShow: !this.data.isShow
61 | })
62 | },
63 | /*
64 | * 内部私有方法建议以下划线开头
65 | * triggerEvent 用于触发事件
66 | */
67 | _cancelEvent() {
68 | //触发取消回调
69 | this.triggerEvent("cancelEvent")
70 | },
71 | _confirmEvent() {
72 | //触发成功回调
73 | this.triggerEvent("confirmEvent");
74 | }
75 | }
76 | })
--------------------------------------------------------------------------------
/components/video/vui-video.json:
--------------------------------------------------------------------------------
1 | {
2 | "component": true,
3 | "usingComponents": {}
4 | }
--------------------------------------------------------------------------------
/components/video/vui-video.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/components/video/vui-video.wxss:
--------------------------------------------------------------------------------
1 | /* components/video/video.wxss */
2 |
--------------------------------------------------------------------------------
/image/course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/image/course.png
--------------------------------------------------------------------------------
/image/details.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/image/details.png
--------------------------------------------------------------------------------
/image/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/image/home.png
--------------------------------------------------------------------------------
/image/me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zhaoyunxing92/edu/7f60ee58bc5aac5b59376db507666ca5f42f28e5/image/me.png
--------------------------------------------------------------------------------
/pages/course/course.js:
--------------------------------------------------------------------------------
1 | // pages/course/course.js
2 | const app = getApp()
3 | Page({
4 |
5 | /**
6 | * 页面的初始数据
7 | */
8 | data: {
9 | courseList: [],
10 | },
11 |
12 | /**
13 | * 生命周期函数--监听页面加载
14 | */
15 | onLoad: function (options) {
16 | console.log("onLoad")
17 | wx.setNavigationBarTitle({
18 | title: '课程'
19 | })
20 | this.setData({
21 | courseList: app.globalData.courseList
22 | })
23 | },
24 |
25 | /**
26 | * 生命周期函数--监听页面初次渲染完成
27 | */
28 | onReady: function () {
29 | console.log("onReady")
30 | },
31 |
32 | /**
33 | * 生命周期函数--监听页面显示
34 | */
35 | onShow: function () {
36 | console.log("onShow")
37 | },
38 |
39 | /**
40 | * 生命周期函数--监听页面隐藏
41 | */
42 | onHide: function () {
43 |
44 | },
45 |
46 | /**
47 | * 生命周期函数--监听页面卸载
48 | */
49 | onUnload: function () {
50 |
51 | },
52 |
53 | /**
54 | * 页面相关事件处理函数--监听用户下拉动作
55 | */
56 | onPullDownRefresh: function () {
57 |
58 | },
59 |
60 | /**
61 | * 页面上拉触底事件的处理函数
62 | */
63 | onReachBottom: function () {
64 |
65 | },
66 |
67 | /**
68 | * 用户点击右上角分享
69 | */
70 | onShareAppMessage: function () {
71 |
72 | },
73 | //事件处理函数
74 | goToPath: function (env) {
75 | wx.navigateTo({
76 | url: '/pages/courseDetails/courseDetails?item=' + JSON.stringify(env.currentTarget.dataset.item)
77 | })
78 | }
79 |
80 | })
--------------------------------------------------------------------------------
/pages/course/course.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "vui-course-list": "/components/courseList/vui-course-list"
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/course/course.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/pages/course/course.wxss:
--------------------------------------------------------------------------------
1 | .container{
2 | padding:8rpx 25rpx;
3 | background-color: #fff;
4 | }
--------------------------------------------------------------------------------
/pages/courseDetails/courseDetails.js:
--------------------------------------------------------------------------------
1 | // pages/courseDetails/courseDetails.js
2 | const util = require('../../utils/util.js')
3 | const app = getApp()
4 | Page({
5 |
6 | data: {
7 | course: {},
8 | selected: true,
9 | selected1: false,
10 | courseOpinions: [],//课程发言
11 | courseFiles: [],//课程附件
12 | avtiveItem: 1,//当前点击的菜单
13 | opinionMsg: "",//发言信息
14 | },
15 |
16 | // 切换item
17 | clickItem: function (env) {
18 | let index = env.currentTarget.dataset.index;
19 | this.setData({ avtiveItem: index });
20 | },
21 | //打开文件
22 | openFile: function (env) {
23 | let url = env.currentTarget.dataset.url;
24 | wx.downloadFile({
25 | url: url,
26 | success: function (res) {
27 | var filePath = res.tempFilePath;
28 | console.log(filePath);
29 | wx.openDocument({
30 | filePath: filePath,
31 | success: function (res) {
32 | console.log('打开文档成功')
33 | }
34 | })
35 | }
36 | })
37 | },
38 | //绑定发言输入框
39 | bindOpinionMsg: function (e) {
40 | this.setData({
41 | opinionMsg: e.detail.value
42 | })
43 | },
44 | // 发言
45 | sendOpinions: function () {
46 | let msg = this.data.opinionMsg;
47 | if (undefined == msg || '' == msg) {
48 | wx.showToast({
49 | title: '说点什么再发送吧',
50 | icon: 'none',
51 | duration: 2000
52 | })
53 | return;
54 | }
55 | let ops = this.data.courseOpinions;
56 | ops.unshift(
57 | {
58 | "id": "1",
59 | "name": "sunny",
60 | "cover": "http://mvimg11.meitudata.com/5a4f81c39fa589605.jpg",
61 | "content": msg,
62 | "likes": 0,
63 | "time": util.formatTime(new Date())
64 | }
65 | );
66 | this.setData({
67 | courseOpinions: ops,
68 | opinionMsg: ''
69 | });
70 | },
71 | onLoad: function (options) {
72 | let item;
73 | if (undefined !== options.item) {
74 | item = JSON.parse(options.item);
75 | this.setData({
76 | course: item
77 | })
78 | }
79 |
80 | wx.setNavigationBarTitle({
81 | title: util.getValue(item, 'name', '播放课程')
82 | })
83 |
84 | // 设置发言数据
85 | this.setData({
86 | courseOpinions: app.globalData.courseOpinions,
87 | courseFiles: app.globalData.courseFiles
88 | })
89 | },
90 |
91 | /**
92 | * 生命周期函数--监听页面初次渲染完成
93 | */
94 | onReady: function () {
95 | // this.videoCtx = wx.createVideoContext('myVideo');
96 | this.vuiVideo = this.selectComponent("#video");
97 | },
98 |
99 | /**
100 | * 生命周期函数--监听页面显示
101 | */
102 | onShow: function () {
103 |
104 | },
105 |
106 | /**
107 | * 生命周期函数--监听页面隐藏
108 | */
109 | onHide: function () {
110 |
111 | },
112 |
113 | /**
114 | * 生命周期函数--监听页面卸载
115 | */
116 | onUnload: function () {
117 |
118 | },
119 |
120 | /**
121 | * 页面相关事件处理函数--监听用户下拉动作
122 | */
123 | onPullDownRefresh: function () {
124 |
125 | },
126 |
127 | /**
128 | * 页面上拉触底事件的处理函数
129 | */
130 | onReachBottom: function () {
131 |
132 | },
133 |
134 | /**
135 | * 用户点击右上角分享
136 | */
137 | onShareAppMessage: function () {
138 |
139 | }
140 | })
141 |
--------------------------------------------------------------------------------
/pages/courseDetails/courseDetails.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "vui-video": "/components/video/vui-video",
4 | "card": "/components/card/vui-card",
5 | "i": "/components/icon/vui-icon"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/courseDetails/courseDetails.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{course.author.name}}
24 |
25 |
28 |
29 |
30 |
31 | {{course.name}}
32 |
33 |
34 |
53 |
54 |
55 |
56 | {{course.summary}}
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | {{user.name}}
66 | {{user.time}}
67 |
69 |
70 |
71 |
72 | {{user.content}}
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 | {{file.name}}
86 |
87 |
88 |
89 |
90 |
91 |
--------------------------------------------------------------------------------
/pages/courseDetails/courseDetails.wxss:
--------------------------------------------------------------------------------
1 | .course-detatils {
2 | overflow-x: hidden;
3 | }
4 |
5 | page {
6 | background-color: #fff;
7 | }
8 |
9 | .vui-menu {
10 | margin-top: -8rpx;
11 | }
12 |
13 | .course-details-video, video {
14 | width: 100%;
15 | height: 380rpx;
16 | }
17 |
18 | /*内容区 */
19 |
20 | .course-content {
21 | position: fixed;
22 | bottom: 15rpx;
23 | top: 475rpx;
24 | width: 96%;
25 | overflow-y: scroll;
26 | left: 2%;
27 | right: 2%;
28 | overflow-x: hidden;
29 | padding: 15rpx 15rpx;
30 | z-index: -10;
31 | }
32 |
33 | /* .course-opinion-user-name {
34 | color: #3c8dff;
35 | display: inline-block;
36 | } */
37 |
38 | /*课程标题 */
39 |
40 | .course-title {
41 | font-size: 35rpx;
42 | margin: 25rpx auto;
43 | width: 100%;
44 | display: inline-block;
45 | color: #333;
46 | }
47 |
48 | /*课程作者名称 */
49 |
50 | .course-author-name {
51 | margin: -25rpx 18rpx;
52 | }
53 |
54 | .vui-card-extra {
55 | margin: 28rpx 0;
56 | color: #999;
57 | }
58 |
59 | /*课程简介 */
60 |
61 | .course-summary {
62 | font-size: 28rpx;
63 | color: #999;
64 | text-indent: 40rpx;
65 | }
66 |
67 | /*课程统计 */
68 |
69 | .course-stat {
70 | color: #ccc;
71 | height: 100rpx;
72 | line-height: 110rpx;
73 | display: inline-block;
74 | width: 100%;
75 | font-size: 28rpx;
76 | text-align: center;
77 | border-radius: 12rpx;
78 | background-color: #f5f5f5;
79 | margin: 0 0 15rpx 0;
80 | }
81 |
82 | /*发言按钮 */
83 |
84 | .course-opinion-btn {
85 | background-color: #fafafa;
86 | margin-left: -29rpx;
87 | width: 100%;
88 | position: fixed;
89 | bottom: 0;
90 | height: 100rpx;
91 | box-shadow: 0 -2px 5px -1px #d7d7d7;
92 | }
93 |
94 | /*发言输入框 */
95 |
96 | .opinion-btn-input {
97 | border: solid 1rpx #e7e7e7;
98 | height: 70rpx;
99 | line-height: 70rpx;
100 | width: 80%;
101 | border-radius: 35rpx;
102 | margin: 15rpx 15rpx;
103 | padding: 0 25rpx;
104 | font-size: 28rpx;
105 | background-color: #f4f4f4;
106 | color: #707070;
107 | float: left;
108 | }
109 |
110 | /*发言icon */
111 |
112 | .opinion-icon {
113 | display: inline-block;
114 | margin: 23rpx 0 0 -5rpx;
115 | }
116 |
117 | /*课程附件*/
118 |
119 | .course-file {
120 | color: #3c8dff;
121 | font-size: 30rpx;
122 | width: 100%;
123 | }
124 |
125 | .course-file-item {
126 | height: 90rpx;
127 | line-height: 90rpx;
128 | border-bottom: solid 1rpx #f5f5f5;
129 | display: inline-block;
130 | display: -webkit-box;
131 | -webkit-box-orient: vertical;
132 | -webkit-line-clamp: 1;
133 | overflow: hidden;
134 | }
135 |
136 | .course-file-item:last-child {
137 | border-bottom: none;
138 | }
139 |
--------------------------------------------------------------------------------
/pages/dynamic/dynamic.js:
--------------------------------------------------------------------------------
1 | // pages/dynamic/dynamic.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 |
9 | },
10 |
11 | /**
12 | * 生命周期函数--监听页面加载
13 | */
14 | onLoad: function (options) {
15 |
16 | },
17 |
18 | /**
19 | * 生命周期函数--监听页面初次渲染完成
20 | */
21 | onReady: function () {
22 | wx.setNavigationBarTitle({
23 | title: '动态'
24 | })
25 | },
26 |
27 | /**
28 | * 生命周期函数--监听页面显示
29 | */
30 | onShow: function () {
31 |
32 | },
33 |
34 | /**
35 | * 生命周期函数--监听页面隐藏
36 | */
37 | onHide: function () {
38 |
39 | },
40 |
41 | /**
42 | * 生命周期函数--监听页面卸载
43 | */
44 | onUnload: function () {
45 |
46 | },
47 |
48 | /**
49 | * 页面相关事件处理函数--监听用户下拉动作
50 | */
51 | onPullDownRefresh: function () {
52 |
53 | },
54 |
55 | /**
56 | * 页面上拉触底事件的处理函数
57 | */
58 | onReachBottom: function () {
59 |
60 | },
61 |
62 | /**
63 | * 用户点击右上角分享
64 | */
65 | onShareAppMessage: function () {
66 |
67 | }
68 | })
--------------------------------------------------------------------------------
/pages/dynamic/dynamic.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "vui-icon": "/components/icon/vui-icon"
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/dynamic/dynamic.wxml:
--------------------------------------------------------------------------------
1 |
2 | 待开发...
3 |
--------------------------------------------------------------------------------
/pages/dynamic/dynamic.wxss:
--------------------------------------------------------------------------------
1 | /* pages/dynamic/dynamic.wxss */
--------------------------------------------------------------------------------
/pages/index/index.js:
--------------------------------------------------------------------------------
1 | //index.js
2 | //获取应用实例
3 | const app = getApp()
4 | Page({
5 | data: {
6 | iconType:'',
7 | topData: [],
8 | courseList:{},
9 | nominateList:[],/*推荐课程列表*/
10 | userInfo: {},
11 | hasUserInfo: false,
12 | canIUse: wx.canIUse('button.open-type.getUserInfo')
13 | },
14 | //事件处理函数
15 | goToPath: function(env) {
16 |
17 | wx.navigateTo({
18 | url: '/pages/courseDetails/courseDetails?item=' + JSON.stringify(env.currentTarget.dataset.item)
19 | })
20 | },
21 | onLoad: function () {
22 | wx.setTopBarText({
23 | text: 'hello, world!'
24 | })
25 | //首页显示分享
26 | wx.showShareMenu({
27 | withShareTicket: false
28 | })
29 | // 显示动态数字
30 | wx.setTabBarBadge({
31 | index: 2,
32 | text: '9+'
33 | })
34 |
35 | //推荐列表
36 | this.setData({
37 | nominateList: app.globalData.nominateList,
38 | hotList: app.globalData.nominateList,
39 | topData: app.globalData.swiperList,
40 | })
41 | if (app.globalData.userInfo) {
42 | this.setData({
43 | userInfo: app.globalData.userInfo,
44 | hasUserInfo: true
45 | })
46 | } else if (this.data.canIUse){
47 | // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
48 | // 所以此处加入 callback 以防止这种情况
49 | app.userInfoReadyCallback = res => {
50 | this.setData({
51 | userInfo: res.userInfo,
52 | hasUserInfo: true
53 | })
54 | }
55 | } else {
56 | // 在没有 open-type=getUserInfo 版本的兼容处理
57 | wx.getUserInfo({
58 | success: res => {
59 | app.globalData.userInfo = res.userInfo
60 | this.setData({
61 | userInfo: res.userInfo,
62 | hasUserInfo: true
63 | })
64 | }
65 | })
66 | }
67 | },
68 | getUserInfo: function(e) {
69 | console.log(e)
70 | app.globalData.userInfo = e.detail.userInfo
71 | this.setData({
72 | userInfo: e.detail.userInfo,
73 | hasUserInfo: true
74 | })
75 | },
76 | /**
77 | * 生命周期函数--监听页面初次渲染完成
78 | */
79 | onReady: function () {
80 | wx.setNavigationBarTitle({
81 | title: "码小课"
82 | })
83 | },
84 | //跳转
85 | _navigateTo(env) {
86 | let path ="/pages/nominate/nominate";
87 | let title = env.currentTarget.dataset.title;
88 | let type = env.currentTarget.dataset.type;
89 | wx.navigateTo({
90 | url: path + '?title=' + title+'&type='+type
91 | })
92 | }
93 | })
94 |
--------------------------------------------------------------------------------
/pages/index/index.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "card": "/components/card/vui-card",
4 | "i": "/components/icon/vui-icon",
5 | "vui-course-list": "/components/courseList/vui-course-list"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/index/index.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 推荐课程
16 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | 热门课程
29 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/pages/index/index.wxss:
--------------------------------------------------------------------------------
1 | /**index.wxss**/
2 | .index-top-card{
3 | width: 100%;
4 | height: 380rpx;
5 | }
6 | /*首页轮播图宽高*/
7 | .index-slide-image{
8 | width: 100%;
9 | height: 100%;
10 | }
11 | .index-card{
12 | margin-top: 20rpx;
13 | }
14 |
--------------------------------------------------------------------------------
/pages/me/me.js:
--------------------------------------------------------------------------------
1 | const app = getApp()
2 | Page({
3 | // 切换item
4 | clickItem: function (env) {
5 | let index = env.currentTarget.dataset.index;
6 | this.setData({ avtiveItem: index });
7 | },
8 | //跳转设置界面
9 | _navigateTo(env) {
10 |
11 | wx.navigateTo({
12 | url: "/pages/setting/setting"
13 | })
14 | },
15 | data: {
16 | avtiveItem: 1,
17 | user: [],
18 | collect: [],
19 | course: []
20 | },
21 |
22 | /**
23 | * 生命周期函数--监听页面加载
24 | */
25 | onLoad: function (options) {
26 | wx.setNavigationBarTitle({
27 | title: '我的'
28 | })
29 |
30 | //课程列表
31 | this.setData({
32 | user: { id: 1000, name: "sunny", cover: "https://gitee.com/uploads/56/1167256_sunny9.png" },
33 | collect: app.globalData.nominateList,
34 | course: app.globalData.courseList,
35 | })
36 |
37 | },
38 |
39 | /**
40 | * 生命周期函数--监听页面初次渲染完成
41 | */
42 | onReady: function () {
43 |
44 | },
45 |
46 | /**
47 | * 生命周期函数--监听页面显示
48 | */
49 | onShow: function () {
50 |
51 | },
52 |
53 | /**
54 | * 生命周期函数--监听页面隐藏
55 | */
56 | onHide: function () {
57 |
58 | },
59 |
60 | /**
61 | * 生命周期函数--监听页面卸载
62 | */
63 | onUnload: function () {
64 |
65 | },
66 |
67 | /**
68 | * 页面相关事件处理函数--监听用户下拉动作
69 | */
70 | onPullDownRefresh: function () {
71 |
72 | },
73 |
74 | /**
75 | * 页面上拉触底事件的处理函数
76 | */
77 | onReachBottom: function () {
78 |
79 | },
80 |
81 | /**
82 | * 用户点击右上角分享
83 | */
84 | onShareAppMessage: function () {
85 |
86 | }
87 | })
--------------------------------------------------------------------------------
/pages/me/me.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "card": "/components/card/vui-card",
4 | "i": "/components/icon/vui-icon",
5 | "vui-course-list": "/components/courseList/vui-course-list"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/me/me.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{user.name}}
8 |
9 |
12 |
13 |
14 | 这里写用户的签名保持在50字内
15 |
16 |
17 |
18 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | {{user.name}}
50 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | sunny
68 |
72 |
73 |
74 |
75 |
76 |
77 | sunny
78 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | sunny
89 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | sunny
100 |
104 |
105 |
106 |
107 |
108 |
109 |
110 | sunny
111 |
115 |
116 |
117 |
118 |
119 |
120 | sunny
121 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | sunny
132 |
136 |
137 |
138 |
139 |
140 |
141 |
142 | sunny
143 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | sunny
154 |
158 |
159 |
160 |
161 |
162 |
163 | sunny
164 |
168 |
169 |
170 |
171 |
172 |
173 |
174 | sunny
175 |
179 |
180 |
181 |
182 |
183 |
184 |
185 | sunny
186 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
--------------------------------------------------------------------------------
/pages/me/me.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #fff;
3 | }
4 |
5 | .user-container {
6 | padding: 20rpx 0rpx;
7 | background-color: #fff;
8 | }
9 |
10 | .vui-menu {
11 | margin-top: 15rpx;
12 | line-height: 80rpx;
13 | height: 80rpx;
14 | }
15 |
16 | .container-top {
17 | position: fixed;
18 | top: 0;
19 | height: 150rpx;
20 | }
21 | /*简介*/
22 | .vui-user-intro{
23 | font-size: 25rpx;
24 | color: #707070;
25 | margin-top: 30rpx;
26 | padding: 15rpx;
27 | text-indent: 50rpx;
28 | }
29 |
30 | .container {
31 | top: 252rpx;
32 | bottom: 15rpx;
33 | position: absolute;
34 | overflow-y: scroll;
35 | overflow-x: hidden;
36 | z-index: -10;
37 | width:98%;
38 | left: 1%;
39 | right: 1%;
40 | padding-top: 10rpx;
41 | }
42 |
43 | .course-opinion {
44 | margin-bottom: 0;
45 | }
46 |
47 | .vui-card-extra {
48 | font-size: 25rpx;
49 | }
50 |
51 | .course-opinion-content {
52 | margin: 0 30rpx;
53 | }
54 |
55 | /* 修改点击颜色 */
56 |
57 | .vui-menu-avtive {
58 | color: #3c8dff !important;
59 | }
60 |
--------------------------------------------------------------------------------
/pages/nominate/nominate.js:
--------------------------------------------------------------------------------
1 | // pages/nominate/nominate.js
2 | const app = getApp()
3 | Page({
4 |
5 | /**
6 | * 页面的初始数据
7 | */
8 | data: {
9 | courseList: [],
10 | },
11 |
12 | /**
13 | * 生命周期函数--监听页面加载
14 | */
15 | onLoad: function (options) {
16 | wx.setNavigationBarTitle({
17 | title: options.title
18 | });
19 | this.setData({
20 | courseList: app.globalData.courseList
21 | })
22 | },
23 |
24 | /**
25 | * 生命周期函数--监听页面初次渲染完成
26 | */
27 | onReady: function () {
28 |
29 | },
30 |
31 | /**
32 | * 生命周期函数--监听页面显示
33 | */
34 | onShow: function () {
35 |
36 | },
37 |
38 | /**
39 | * 生命周期函数--监听页面隐藏
40 | */
41 | onHide: function () {
42 |
43 | },
44 |
45 | /**
46 | * 生命周期函数--监听页面卸载
47 | */
48 | onUnload: function () {
49 |
50 | },
51 |
52 | /**
53 | * 页面相关事件处理函数--监听用户下拉动作
54 | */
55 | onPullDownRefresh: function () {
56 |
57 | },
58 |
59 | /**
60 | * 页面上拉触底事件的处理函数
61 | */
62 | onReachBottom: function () {
63 |
64 | },
65 |
66 | /**
67 | * 用户点击右上角分享
68 | */
69 | onShareAppMessage: function () {
70 |
71 | }
72 | })
--------------------------------------------------------------------------------
/pages/nominate/nominate.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "vui-course-list": "/components/courseList/vui-course-list"
4 | }
5 | }
--------------------------------------------------------------------------------
/pages/nominate/nominate.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/pages/nominate/nominate.wxss:
--------------------------------------------------------------------------------
1 | .container{
2 | padding:8rpx 25rpx;
3 | background-color: #fff;
4 | }
--------------------------------------------------------------------------------
/pages/org/org.js:
--------------------------------------------------------------------------------
1 | // pages/org/org.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 | org:[],//组织信息
9 | },
10 |
11 | /**
12 | * 生命周期函数--监听页面加载
13 | */
14 | onLoad: function (options) {
15 |
16 | },
17 |
18 | /**
19 | * 生命周期函数--监听页面初次渲染完成
20 | */
21 | onReady: function () {
22 |
23 | },
24 |
25 | /**
26 | * 生命周期函数--监听页面显示
27 | */
28 | onShow: function () {
29 |
30 | },
31 |
32 | /**
33 | * 生命周期函数--监听页面隐藏
34 | */
35 | onHide: function () {
36 |
37 | },
38 |
39 | /**
40 | * 生命周期函数--监听页面卸载
41 | */
42 | onUnload: function () {
43 |
44 | },
45 |
46 | /**
47 | * 页面相关事件处理函数--监听用户下拉动作
48 | */
49 | onPullDownRefresh: function () {
50 |
51 | },
52 |
53 | /**
54 | * 页面上拉触底事件的处理函数
55 | */
56 | onReachBottom: function () {
57 |
58 | },
59 |
60 | /**
61 | * 用户点击右上角分享
62 | */
63 | onShareAppMessage: function () {
64 |
65 | }
66 | })
--------------------------------------------------------------------------------
/pages/org/org.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/pages/org/org.wxml:
--------------------------------------------------------------------------------
1 |
2 | 待开发...
3 |
--------------------------------------------------------------------------------
/pages/org/org.wxss:
--------------------------------------------------------------------------------
1 | /* pages/org/org.wxss */
--------------------------------------------------------------------------------
/pages/search/search.js:
--------------------------------------------------------------------------------
1 | // pages/search/search.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 |
9 | },
10 |
11 | /**
12 | * 生命周期函数--监听页面加载
13 | */
14 | onLoad: function (options) {
15 |
16 | },
17 |
18 | /**
19 | * 生命周期函数--监听页面初次渲染完成
20 | */
21 | onReady: function () {
22 | wx.setNavigationBarTitle({
23 | title: '搜索'
24 | })
25 | },
26 |
27 | /**
28 | * 生命周期函数--监听页面显示
29 | */
30 | onShow: function () {
31 |
32 | },
33 |
34 | /**
35 | * 生命周期函数--监听页面隐藏
36 | */
37 | onHide: function () {
38 |
39 | },
40 |
41 | /**
42 | * 生命周期函数--监听页面卸载
43 | */
44 | onUnload: function () {
45 |
46 | },
47 |
48 | /**
49 | * 页面相关事件处理函数--监听用户下拉动作
50 | */
51 | onPullDownRefresh: function () {
52 |
53 | },
54 |
55 | /**
56 | * 页面上拉触底事件的处理函数
57 | */
58 | onReachBottom: function () {
59 |
60 | },
61 |
62 | /**
63 | * 用户点击右上角分享
64 | */
65 | onShareAppMessage: function () {
66 |
67 | }
68 | })
--------------------------------------------------------------------------------
/pages/search/search.json:
--------------------------------------------------------------------------------
1 | {
2 |
3 | }
--------------------------------------------------------------------------------
/pages/search/search.wxml:
--------------------------------------------------------------------------------
1 |
2 | 待开发...
3 |
--------------------------------------------------------------------------------
/pages/search/search.wxss:
--------------------------------------------------------------------------------
1 | /* pages/search/search.wxss */
--------------------------------------------------------------------------------
/pages/setting/setting.js:
--------------------------------------------------------------------------------
1 | // pages/setting/setting.js
2 | Page({
3 |
4 | /**
5 | * 页面的初始数据
6 | */
7 | data: {
8 |
9 | },
10 |
11 | /**
12 | * 生命周期函数--监听页面加载
13 | */
14 | onLoad: function (options) {
15 | wx.setNavigationBarTitle({
16 | title: '设置'
17 | })
18 | },
19 |
20 | /**
21 | * 生命周期函数--监听页面初次渲染完成
22 | */
23 | onReady: function () {
24 |
25 | },
26 |
27 | /**
28 | * 生命周期函数--监听页面显示
29 | */
30 | onShow: function () {
31 |
32 | },
33 |
34 | /**
35 | * 生命周期函数--监听页面隐藏
36 | */
37 | onHide: function () {
38 |
39 | },
40 |
41 | /**
42 | * 生命周期函数--监听页面卸载
43 | */
44 | onUnload: function () {
45 |
46 | },
47 |
48 | /**
49 | * 页面相关事件处理函数--监听用户下拉动作
50 | */
51 | onPullDownRefresh: function () {
52 |
53 | },
54 |
55 | /**
56 | * 页面上拉触底事件的处理函数
57 | */
58 | onReachBottom: function () {
59 |
60 | },
61 |
62 | /**
63 | * 用户点击右上角分享
64 | */
65 | onShareAppMessage: function () {
66 |
67 | }
68 | })
--------------------------------------------------------------------------------
/pages/setting/setting.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/pages/setting/setting.wxml:
--------------------------------------------------------------------------------
1 |
2 | 待开发...
--------------------------------------------------------------------------------
/pages/setting/setting.wxss:
--------------------------------------------------------------------------------
1 | /* pages/setting/setting.wxss */
--------------------------------------------------------------------------------
/pages/user/user.js:
--------------------------------------------------------------------------------
1 | const util = require('../../utils/util.js')
2 | const app = getApp()
3 | Page({
4 |
5 | // 切换item
6 | clickItem: function (env) {
7 | let index = env.currentTarget.dataset.index;
8 | this.setData({ avtiveItem: index });
9 | },
10 | data: {
11 | user: [],//用户主页
12 | avtiveItem: 1,//当前点击的菜单
13 | infos:[
14 | {
15 | "time": '刚刚',
16 | "msg":"收藏了课程《java初级开发》",
17 | "id":1000
18 | },
19 | {
20 | "time": '三天前',
21 | "msg": "关注了用户abc",
22 | "id": 1000
23 | },
24 | {
25 | "time": '3天前',
26 | "msg": "收藏了课程《java初级开发》",
27 | "id": 1000
28 | },
29 | {
30 | "time": '1个月前',
31 | "msg": "收藏了课程《java初级开发》",
32 | "id": 1000
33 | },
34 | {
35 | "time": '1个月前',
36 | "msg": "收藏了课程《java初级开发》",
37 | "id": 1000
38 | },
39 | {
40 | "time": '1个月前',
41 | "msg": "收藏了课程《java初级开发》",
42 | "id": 1000
43 | },
44 | {
45 | "time": '1个月前',
46 | "msg": "发布了课程《java初级开发》",
47 | "id": 1000
48 | },
49 | {
50 | "time": '1个月前',
51 | "msg": "收藏了课程《java初级开发》",
52 | "id": 1000
53 | }
54 |
55 | ],//动态
56 | collect:[],
57 | course:[]
58 | },
59 |
60 | /**
61 | * 生命周期函数--监听页面加载
62 | */
63 | onLoad: function (options) {
64 | // 设置发言数据
65 | let item = JSON.parse(options.item);
66 | console.log(item)
67 | this.setData({
68 | user: item
69 | })
70 | wx.setNavigationBarTitle({
71 | title: util.getValue(item, 'name', '他的主页')
72 | })
73 |
74 | this.setData({
75 | collect: app.globalData.nominateList,
76 | course: app.globalData.courseList,
77 | })
78 | },
79 |
80 | /**
81 | * 生命周期函数--监听页面初次渲染完成
82 | */
83 | onReady: function () {
84 |
85 | },
86 |
87 | /**
88 | * 生命周期函数--监听页面显示
89 | */
90 | onShow: function () {
91 |
92 | },
93 |
94 | /**
95 | * 生命周期函数--监听页面隐藏
96 | */
97 | onHide: function () {
98 |
99 | },
100 |
101 | /**
102 | * 生命周期函数--监听页面卸载
103 | */
104 | onUnload: function () {
105 |
106 | },
107 |
108 | /**
109 | * 页面相关事件处理函数--监听用户下拉动作
110 | */
111 | onPullDownRefresh: function () {
112 |
113 | },
114 |
115 | /**
116 | * 页面上拉触底事件的处理函数
117 | */
118 | onReachBottom: function () {
119 |
120 | },
121 |
122 | /**
123 | * 用户点击右上角分享
124 | */
125 | onShareAppMessage: function () {
126 |
127 | }
128 | })
--------------------------------------------------------------------------------
/pages/user/user.json:
--------------------------------------------------------------------------------
1 | {
2 | "usingComponents": {
3 | "card": "/components/card/vui-card",
4 | "i": "/components/icon/vui-icon",
5 | "vui-course-list": "/components/courseList/vui-course-list"
6 | }
7 | }
--------------------------------------------------------------------------------
/pages/user/user.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | {{user.name}}
8 |
9 |
12 |
13 |
14 | 这里写用户的签名保持在50字内
15 |
16 |
17 |
18 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 | {{user.name}}
46 |
49 |
50 |
51 |
52 | {{info.msg}}
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | {{user.name}}
62 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | sunny
80 |
83 |
84 |
85 |
86 |
87 |
88 | sunny
89 |
92 |
93 |
94 |
95 |
96 |
97 |
98 | sunny
99 |
102 |
103 |
104 |
105 |
106 |
107 |
108 | sunny
109 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | sunny
119 |
122 |
123 |
124 |
125 |
126 |
127 | sunny
128 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | sunny
138 |
141 |
142 |
143 |
144 |
145 |
146 |
147 | sunny
148 |
151 |
152 |
153 |
154 |
155 |
156 |
157 | sunny
158 |
161 |
162 |
163 |
164 |
165 |
166 | sunny
167 |
170 |
171 |
172 |
173 |
174 |
175 |
176 | sunny
177 |
180 |
181 |
182 |
183 |
184 |
185 |
186 | sunny
187 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
--------------------------------------------------------------------------------
/pages/user/user.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background-color: #fff;
3 | }
4 |
5 | .user-container {
6 | padding: 20rpx 0rpx;
7 | background-color: #fff;
8 | }
9 |
10 | .vui-menu {
11 | margin-top: 15rpx;
12 | line-height: 80rpx;
13 | height: 80rpx;
14 | }
15 |
16 | .container-top {
17 | position: fixed;
18 | top: 0;
19 | height: 150rpx;
20 | }
21 | /*简介*/
22 | .vui-user-intro{
23 | font-size: 25rpx;
24 | color: #707070;
25 | margin-top: 30rpx;
26 | padding: 15rpx;
27 | text-indent: 50rpx;
28 | }
29 |
30 | .container {
31 | top: 252rpx;
32 | bottom: 15rpx;
33 | position: absolute;
34 | overflow-y: scroll;
35 | overflow-x: hidden;
36 | z-index: -10;
37 | width:98%;
38 | left: 1%;
39 | right: 1%;
40 | padding-top: 10rpx;
41 | }
42 |
43 | .course-opinion {
44 | margin-bottom: 0;
45 | }
46 |
47 | .vui-card-extra {
48 | font-size: 25rpx;
49 | }
50 |
51 | .course-opinion-content {
52 | margin: 0 30rpx;
53 | }
54 |
55 | /* 修改点击颜色 */
56 |
57 | .vui-menu-avtive {
58 | color: #3c8dff !important;
59 | }
60 |
--------------------------------------------------------------------------------
/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "description": "项目配置文件。",
3 | "setting": {
4 | "urlCheck": false,
5 | "es6": true,
6 | "postcss": true,
7 | "minified": true,
8 | "newFeature": true
9 | },
10 | "compileType": "miniprogram",
11 | "libVersion": "1.9.94",
12 | "appid": "wxf776dd19cdb5edf8",
13 | "projectname": "edu-wechat",
14 | "isGameTourist": false,
15 | "simulatorType": "wechat",
16 | "simulatorPluginLibVersion": {},
17 | "condition": {
18 | "search": {
19 | "current": -1,
20 | "list": []
21 | },
22 | "conversation": {
23 | "current": -1,
24 | "list": []
25 | },
26 | "plugin": {
27 | "current": -1,
28 | "list": []
29 | },
30 | "game": {
31 | "currentL": -1,
32 | "list": []
33 | },
34 | "miniprogram": {
35 | "current": 2,
36 | "list": [
37 | {
38 | "id": -1,
39 | "name": "我的",
40 | "pathName": "pages/me/me",
41 | "query": ""
42 | },
43 | {
44 | "id": -1,
45 | "name": "动态",
46 | "pathName": "pages/dynamic/dynamic",
47 | "query": ""
48 | },
49 | {
50 | "id": -1,
51 | "name": "发现",
52 | "pathName": "pages/index/index",
53 | "query": ""
54 | },
55 | {
56 | "id": -1,
57 | "name": "课程",
58 | "pathName": "pages/course/course",
59 | "query": ""
60 | }
61 | ]
62 | }
63 | }
64 | }
--------------------------------------------------------------------------------
/sitemap.json:
--------------------------------------------------------------------------------
1 | {
2 | "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
3 | "rules": [{
4 | "action": "allow",
5 | "page": "*"
6 | }]
7 | }
--------------------------------------------------------------------------------
/templates/tmpl.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{item.name}}
12 |
13 |
14 |
15 |
16 |
17 | {{item.price==0?'免费':item.price}}
18 |
19 |
20 |
21 |
22 | {{item.browse}}
23 |
24 |
25 |
26 |
27 | {{item.collect}}
28 |
29 |
30 |
31 |
32 |
33 | {{item.org.name}}
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | 推荐课程
44 |
45 | 更多
46 |
47 |
48 |
49 |
50 |
51 | {{item.name}}
52 |
53 |
54 |
55 |
56 |
57 | {{item.price==0?'免费':item.price}}
58 |
59 |
60 |
61 |
62 | {{item.browse}}
63 |
64 |
65 |
66 |
67 | {{item.collect}}
68 |
69 |
70 |
71 |
72 |
73 | {{item.org.name}}
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 | 热门课程
85 |
86 | 更多
87 |
88 |
89 |
90 |
91 |
92 | {{item.name}}
93 |
94 |
95 |
96 |
97 |
98 | {{item.price==0?'免费':item.price}}
99 |
100 |
101 |
102 |
103 | {{item.browse}}
104 |
105 |
106 |
107 |
108 | {{item.collect}}
109 |
110 |
111 |
112 |
113 |
114 | {{item.org.name}}
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
--------------------------------------------------------------------------------
/templates/tmpl.wxss:
--------------------------------------------------------------------------------
1 | /*课程列表 卡片 */
2 |
3 | .course-card {
4 | margin-top: 40rpx;
5 | background-color: #fff;
6 | padding: 25rpx;
7 | }
8 |
9 | /*课程列表 */
10 |
11 | .course-list {
12 | padding: 15rpx;
13 | background-color: #fff;
14 | }
15 |
16 | .course-item {
17 | display: block;
18 | border-bottom: solid 1rpx #f5f5f5;
19 | height: 240rpx;
20 | width: 100%;
21 | }
22 |
23 | .course-item:last-child {
24 | border: none;
25 | }
26 |
27 | .course-item-cover, .course-item-info {
28 | height: 200rpx;
29 | margin: 20rpx 0;
30 | }
31 |
32 | /*课程封面 */
33 |
34 | .course-item-cover {
35 | float: left;
36 | width: 45%;
37 | border-radius: 10rpx;
38 | }
39 |
40 | /*课程信息 */
41 |
42 | .course-item-info {
43 | width: 52%;
44 | float: right;
45 | height: 200rpx;
46 | }
47 |
48 | /*课程标题 */
49 |
50 | .course-title {
51 | float: left;
52 | font-size: 28rpx;
53 | width: 100%;
54 | overflow: hidden;
55 | text-overflow: ellipsis;
56 | white-space: nowrap;
57 | }
58 |
59 | .course-stat {
60 | font-size: 25rpx;
61 | color: #ccc;
62 | width: 100%;
63 | display: inline-block;
64 | }
65 |
66 | .course-stat-item {
67 | display: inline-block;
68 | width: 33%;
69 | }
70 |
71 | /*组织 */
72 |
73 | .course-org, .course-stat, .course-title {
74 | height: 33%;
75 | }
76 |
77 | /*组织名称 */
78 |
79 | .course-org-name {
80 | color: #707070;
81 | font-size: 30rpx;
82 | margin-left: 10rpx;
83 | }
84 |
85 | /*组织logo */
86 |
87 | .course-org-cover {
88 | height: 60rpx;
89 | width: 60rpx;
90 | border-radius: 30rpx;
91 | float: left;
92 | }
93 |
94 | .has-price {
95 | color: red;
96 | }
97 |
98 | /*课程搜索 */
99 |
100 | .course-search {
101 | height:70rpx;
102 | line-height:80rpx;
103 | border:solid 1rpx #eee;
104 | border-radius:36rpx;
105 | background-color:#f5f5f5;
106 | margin:10rpx auto;
107 |
108 | }
109 |
--------------------------------------------------------------------------------
/utils/util.js:
--------------------------------------------------------------------------------
1 | const formatTime = date => {
2 | const year = date.getFullYear()
3 | const month = date.getMonth() + 1
4 | const day = date.getDate()
5 | const hour = date.getHours()
6 | const minute = date.getMinutes()
7 | const second = date.getSeconds()
8 |
9 | return [year, month, day].map(formatNumber).join('.') + ' ' + [hour, minute, second].map(formatNumber).join(':')
10 | }
11 |
12 | const formatNumber = n => {
13 | n = n.toString()
14 | return n[1] ? n : '0' + n
15 | }
16 | // 获取对象值
17 | const getValue=(obj,key,def)=>{
18 |
19 | if(undefined==obj||null==obj){
20 | return def;
21 | }
22 | //只处理object对象
23 | if (typeof (obj) == 'object'){
24 | let val = obj[key];
25 | if (val != undefined || val != null) {
26 | return val;
27 | }
28 | return def;
29 | }
30 | }
31 |
32 | module.exports = {
33 | formatTime: formatTime,
34 | getValue: getValue
35 | }
36 |
--------------------------------------------------------------------------------