├── .editorconfig
├── LICENSE
├── README.md
├── app.js
├── app.json
├── app.wxss
├── comm
├── script
│ ├── config.js
│ └── fetch.js
└── style
│ ├── animation.wxss
│ └── tab.wxss
├── component
├── filmList
│ ├── filmList.wxml
│ └── filmList.wxss
├── list
│ ├── list.wxml
│ └── list.wxss
├── message
│ ├── message.js
│ ├── message.wxml
│ └── message.wxss
└── nullTip
│ ├── nullTip.wxml
│ └── nullTip.wxss
├── dist
└── images
│ ├── coming_active_icon.png
│ ├── coming_icon.png
│ ├── green_tri.png
│ ├── my_active_icon.png
│ ├── my_icon.png
│ ├── popular_active_icon.png
│ ├── popular_icon.png
│ ├── search_active_icon.png
│ ├── search_icon.png
│ ├── top_active_icon.png
│ └── top_icon.png
├── pages
├── about
│ ├── about.js
│ ├── about.json
│ ├── about.wxml
│ └── about.wxss
├── coming
│ ├── coming.js
│ ├── coming.json
│ ├── coming.wxml
│ └── coming.wxss
├── editPersonInfo
│ ├── editPersonInfo.js
│ ├── editPersonInfo.json
│ ├── editPersonInfo.wxml
│ └── editPersonInfo.wxss
├── favorite
│ ├── favorite.js
│ ├── favorite.json
│ ├── favorite.wxml
│ └── favorite.wxss
├── filmDetail
│ ├── filmDetail.js
│ ├── filmDetail.json
│ ├── filmDetail.wxml
│ └── filmDetail.wxss
├── gallery
│ ├── gallery.js
│ ├── gallery.json
│ ├── gallery.wxml
│ └── gallery.wxss
├── history
│ ├── history.js
│ ├── history.json
│ ├── history.wxml
│ └── history.wxss
├── location
│ ├── location.js
│ ├── location.json
│ ├── location.wxml
│ └── location.wxss
├── my
│ ├── my.js
│ ├── my.json
│ ├── my.wxml
│ └── my.wxss
├── personDetail
│ ├── personDetail.js
│ ├── personDetail.json
│ ├── personDetail.wxml
│ └── personDetail.wxss
├── personInfo
│ ├── personInfo.js
│ ├── personInfo.json
│ ├── personInfo.wxml
│ └── personInfo.wxss
├── popular
│ ├── popular.js
│ ├── popular.json
│ ├── popular.wxml
│ └── popular.wxss
├── search
│ ├── search.js
│ ├── search.json
│ ├── search.wxml
│ └── search.wxss
├── searchResult
│ ├── searchResult.js
│ ├── searchResult.json
│ ├── searchResult.wxml
│ └── searchResult.wxss
├── setting
│ ├── setting.js
│ ├── setting.json
│ ├── setting.wxml
│ └── setting.wxss
├── shake
│ ├── shake.js
│ ├── shake.json
│ ├── shake.wxml
│ └── shake.wxss
├── skin
│ ├── skin.js
│ ├── skin.json
│ ├── skin.wxml
│ └── skin.wxss
├── systemInfo
│ ├── systemInfo.js
│ ├── systemInfo.json
│ ├── systemInfo.wxml
│ └── systemInfo.wxss
└── top
│ ├── top.js
│ ├── top.json
│ ├── top.wxml
│ └── top.wxss
├── resource
└── logo.png
└── util
└── util.js
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | insert_final_newline = true
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Sesine
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 |

2 |
3 | # 🎬 电影推荐小程序 v2.0
4 |
5 | 🎉 查看页面UI请点击:[https://sesine.com/mina](https://sesine.com/mina/)
6 |
7 | 🌠 此项目使用了大部分微信的api,封装了一些UI组件。如果对您有帮助,请给一个⭐️Star。如果在使用过程中发现问题,请给我 [反馈](https://github.com/sesine/wechat-weapp-movie/issues/new) 我会尽量在第一时间解决。
8 |
9 | ## 🔌 使用方法
10 |
11 | 1. 克隆或下载此项目
12 | 2. 在微信开发者工具导入此项目
13 | 3. 域名设置
14 | - 如果有自己的APPID,可以使用自己的APPID,并在微信后台添加可信域名 `https://sesine.com/` 和 `https://sesine.com/mina/api/`。
15 | - 如果没有自己的APPID,可以使用测试APPID。开发时勾选 `不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书` 的选项,如果需要在手机上预览,并且出现api无法访问的问题。请在 [微信小程序测试号管理](https://developers.weixin.qq.com/sandbox) 里面添加上一条中的二个可信域名。
16 | 4. 开发、体验与反馈。发现问题时,可以给我 [反馈](https://github.com/sesine/wechat-weapp-movie/issues/new)
17 |
18 |
19 | ## ❤️ 感谢与支持
20 | - 豆瓣api https://sesine.com/ (代理豆瓣api)
21 |
22 | > 由于微信服务器请求豆瓣api次数过多,已经禁止微信小程序请求。请使用新的api地址请求,请将原来的api请求地址从 `https://api.douban.com/v2/` 改为 `https://sesine.com/mina/api/` 即可,api请求的参数不变。
23 |
24 | - 百度地图 http://lbsyun.baidu.com/
25 |
26 | ## 🚀 v2.0更新内容
27 |
28 | - 将搜索从页面转移到首页面的搜索框
29 | - 增加了电影与人物的浏览历史、收藏功能
30 | - 添加“我的页面”(重头戏)
31 | - 添加摇一摇、相册模块
32 | - 添加设置功能,可清除缓存、编辑个人资料、查看手机信息、更新地理位置
33 | - 添加关于页面,里面列举除了项目中所有使用到的api
34 |
35 | ## 📅 更新日志
36 |
37 | > v1.0的旧版本代码可以通过master分支中的 [tag](https://github.com/sesine/wechat-weapp-movie/tree/v1.0) 中找到
38 |
39 | - **v1.8.0** 2016-11-20
40 | + 1.添加下拉刷新功能
41 | + 2.列表改为模板渲染
42 | + 3.封装了api请求的代码提高可复用性
43 |
44 | - **v1.7.0** 2016-11-21
45 | + 1.添加人物的详情页
46 | + 2.将电影详情和人物详情的网络请求进行了封装
47 |
48 | - **v1.6.0** 2016-11-22
49 | + 1.添加了消息通知组件
50 | + 2.搜索页调整
51 | + 3.调整了目录结构,整合静态资源(dist)和组件文件(component)
52 |
53 | - **v1.5.0** 2016-11-25
54 | + 1.将网络请求从wx.request改为fetch的方式
55 | + 2.完成搜索功能
56 | + 3.完成消息通知组件
57 | + 4.删除了没有用到的util文件夹
58 |
59 | - **v1.4.0** 2016-12-03
60 | + 1.将电影列表的下拉刷新从scroll-view的bindscrolltolower改为Page的onReachBottom事件触发
61 | + 2.将“我的”页面的文件补全,功能列表改为数据渲染,添加跳转。新增换肤
62 | + 3.删除了tabBar中的搜索选项,添加“我的”选项
63 | + 4.首页搜索栏(点击跳转到搜索页)添加轮播图
64 | + 5.添加定位功能,在小程序载入时进行定位
65 | + 6.添加浏览记录、收藏、相册、设置、摇一摇功能(都在开发中)
66 |
67 | - **v1.3.0** 2016-12-04
68 | + 1.将api列表 banner列表、搜索关键词列表、皮肤列表整合配置文件(config.js)
69 | + 2.完成换肤、设置、个人资料(还差修改)、摇一摇功能(再次进入不能摇的问题还需解决)
70 | + 3.添加util文件及文件夹,用于封装获取并格式化时间等工具类方法
71 | + 4.消息组件修改,删除了成功、失败等情况,避免与wx.showToast重合,添加了网络不正常的提示
72 | + 5.电影详情页面添加存储浏览历史的功能
73 |
74 | - **v1.2.0** 2016-12-06
75 | + 1.完成电影收藏和人物收藏功能
76 | + 2.搜索页面添加为空时的提示页面并封装成组件
77 |
78 | - **v1.1.0** 2016-12-14
79 | + 1.完成相册功能和关于页面
80 | + 2.添加定位功能(gps)
81 |
82 | - **v1.0.0** 2016-12-24
83 | + 1.相册的背景图片方式改成image标签的方式
84 | + 2.添加摇一摇debug测试开关变量
85 |
--------------------------------------------------------------------------------
/app.js:
--------------------------------------------------------------------------------
1 | var config = require('comm/script/config')
2 | App({
3 | globalData: {
4 | userInfo: null
5 | },
6 | onLaunch: function() {
7 | // 获取用户信息
8 | this.getUserInfo()
9 | //初始化缓存
10 | this.initStorage()
11 | },
12 | getUserInfo:function(cb){
13 | var that = this
14 | wx.login({
15 | success: function () {
16 | wx.getUserInfo({
17 | success: function (res) {
18 | that.globalData.userInfo = res.userInfo
19 | typeof cb == "function" && cb(that.globalData.userInfo)
20 | }
21 | })
22 | }
23 | })
24 | },
25 | getCity: function(cb) {
26 | var that = this
27 | wx.getLocation({
28 | type: 'gcj02',
29 | success: function (res) {
30 | var locationParam = res.latitude + ',' + res.longitude + '1'
31 | wx.request({
32 | url: config.apiList.baiduMap,
33 | data: {
34 | ak: config.baiduAK,
35 | location: locationParam,
36 | output: 'json',
37 | pois: '1'
38 | },
39 | method: 'GET',
40 | success: function(res){
41 | config.city = res.data.result.addressComponent.city.slice(0,-1)
42 | typeof cb == "function" && cb(res.data.result.addressComponent.city.slice(0,-1))
43 | },
44 | fail: function(res) {
45 | // 重新定位
46 | that.getCity();
47 | }
48 | })
49 | }
50 | })
51 | },
52 | initStorage: function() {
53 | wx.getStorageInfo({
54 | success: function(res) {
55 | // 判断电影收藏是否存在,没有则创建
56 | if (!('film_favorite' in res.keys)) {
57 | wx.setStorage({
58 | key: 'film_favorite',
59 | data: []
60 | })
61 | }
62 | // 判断人物收藏是否存在,没有则创建
63 | if (!('person_favorite' in res.keys)) {
64 | wx.setStorage({
65 | key: 'person_favorite',
66 | data: []
67 | })
68 | }
69 | // 判断电影浏览记录是否存在,没有则创建
70 | if (!('film_history' in res.keys)) {
71 | wx.setStorage({
72 | key: 'film_history',
73 | data: []
74 | })
75 | }
76 | // 判断人物浏览记录是否存在,没有则创建
77 | if (!('person_history' in res.keys)) {
78 | wx.setStorage({
79 | key: 'person_history',
80 | data: []
81 | })
82 | }
83 | // 个人信息默认数据
84 | var personInfo = {
85 | name: '',
86 | nickName: '',
87 | gender: '',
88 | age: '',
89 | birthday: '',
90 | constellation: '',
91 | company: '',
92 | school: '',
93 | tel: '',
94 | email:'',
95 | intro: ''
96 | }
97 | // 判断个人信息是否存在,没有则创建
98 | if (!('person_info' in res.keys)) {
99 | wx.setStorage({
100 | key: 'person_info',
101 | data: personInfo
102 | })
103 | }
104 | // 判断相册数据是否存在,没有则创建
105 | if (!('gallery' in res.keys)) {
106 | wx.setStorage({
107 | key: 'gallery',
108 | data: []
109 | })
110 | }
111 | // 判断背景卡选择数据是否存在,没有则创建
112 | if (!('skin' in res.keys)) {
113 | wx.setStorage({
114 | key: 'skin',
115 | data: ''
116 | })
117 | }
118 | }
119 | })
120 | }
121 | })
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "pages": [
3 | "pages/popular/popular",
4 | "pages/coming/coming",
5 | "pages/top/top",
6 | "pages/search/search",
7 | "pages/filmDetail/filmDetail",
8 | "pages/personDetail/personDetail",
9 | "pages/searchResult/searchResult",
10 | "pages/my/my",
11 | "pages/favorite/favorite",
12 | "pages/history/history",
13 | "pages/shake/shake",
14 | "pages/gallery/gallery",
15 | "pages/setting/setting",
16 | "pages/skin/skin",
17 | "pages/personInfo/personInfo",
18 | "pages/editPersonInfo/editPersonInfo",
19 | "pages/systemInfo/systemInfo",
20 | "pages/about/about",
21 | "pages/location/location"
22 | ],
23 | "window": {
24 | "navigationBarBackgroundColor": "#47a86c",
25 | "navigationBarTextStyle": "white",
26 | "navigationBarTitleText": "电影推荐",
27 | "backgroundColor": "#fff",
28 | "backgroundTextStyle": "dark",
29 | "enablePullDownRefresh": true
30 | },
31 | "tabBar": {
32 | "color": "#686868",
33 | "selectedColor": "#47a86c",
34 | "backgroundColor": "#ffffff",
35 | "borderStyle": "white",
36 | "list": [{
37 | "pagePath": "pages/popular/popular",
38 | "iconPath": "dist/images/popular_icon.png",
39 | "selectedIconPath": "dist/images/popular_active_icon.png",
40 | "text": "热映"
41 | }, {
42 | "pagePath": "pages/coming/coming",
43 | "iconPath": "dist/images/coming_icon.png",
44 | "selectedIconPath": "dist/images/coming_active_icon.png",
45 | "text": "待映"
46 | },
47 | {
48 | "pagePath": "pages/top/top",
49 | "iconPath": "dist/images/top_icon.png",
50 | "selectedIconPath": "dist/images/top_active_icon.png",
51 | "text": "口碑"
52 | },
53 | {
54 | "pagePath": "pages/my/my",
55 | "iconPath": "dist/images/my_icon.png",
56 | "selectedIconPath": "dist/images/my_active_icon.png",
57 | "text": "我的"
58 | }]
59 | },
60 | "networkTimeout": {
61 | "request": 10000,
62 | "downloadFile": 10000
63 | },
64 | "debug": true
65 | }
--------------------------------------------------------------------------------
/app.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | display: block;
3 | background-color: #fff;
4 | font-family: "微软雅黑";
5 | font-size: 28rpx;
6 | }
7 |
8 | .loading {
9 | position: fixed;
10 | left: 50%;
11 | top: 50%;
12 | width: 200rpx;
13 | height: 200rpx;
14 | margin: -100rpx 0 0 -100rpx;
15 | line-height: 300rpx;
16 | border-radius: 16rpx;
17 | background-image: url(data:image/gif;base64,R0lGODlhgACAAKIAAP///93d3bu7u5mZmQAA/wAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFBQAEACwCAAIAfAB8AAAD/0i63P4wygYqmDjrzbtflvWNZGliYXiubKuloivPLlzReD7al+7/Eh5wSFQIi8hHYBkwHUmD6CD5YTJLz49USuVYraRsZ7vtar7XnQ1Kjpoz6LRHvGlz35O4nEPP2O94EnpNc2sef1OBGIOFMId/inB6jSmPdpGScR19EoiYmZobnBCIiZ95k6KGGp6ni4wvqxilrqBfqo6skLW2YBmjDa28r6Eosp27w8Rov8ekycqoqUHODrTRvXsQwArC2NLF29UM19/LtxO5yJd4Au4CK7DUNxPebG4e7+8n8iv2WmQ66BtoYpo/dvfacBjIkITBE9DGlMvAsOIIZjIUAixliv9ixYZVtLUos5GjwI8gzc3iCGghypQqrbFsme8lwZgLZtIcYfNmTJ34WPTUZw5oRxdD9w0z6iOpO15MgTh1BTTJUKos39jE+o/KS64IFVmsFfYT0aU7capdy7at27dw48qdS7eu3bt480I02vUbX2F/JxYNDImw4GiGE/P9qbhxVpWOI/eFKtlNZbWXuzlmG1mv58+gQ4seTbq06dOoU6vGQZJy0FNlMcV+czhQ7SQmYd8eMhPs5BxVdfcGEtV3buDBXQ+fURxx8oM6MT9P+Fh6dOrH2zavc13u9JXVJb520Vp8dvC76wXMuN5Sepm/1WtkEZHDefnzR9Qvsd9+/wi8+en3X0ntYVcSdAE+UN4zs7ln24CaLagghIxBaGF8kFGoIYV+Ybghh841GIyI5ICIFoklJsigihmimJOLEbLYIYwxSgigiZ+8l2KB+Ml4oo/w8dijjcrouCORKwIpnJIjMnkkksalNeR4fuBIm5UEYImhIlsGCeWNNJphpJdSTlkml1jWeOY6TnaRpppUctcmFW9mGSaZceYopH9zkjnjUe59iR5pdapWaGqHopboaYua1qije67GJ6CuJAAAIfkEBQUABAAsCgACAFcAMAAAA/9Iutz+ML5Ag7w46z0r5WAoSp43nihXVmnrdusrv+s332dt4Tyo9yOBUJD6oQBIQGs4RBlHySSKyczVTtHoidocPUNZaZAr9F5FYbGI3PWdQWn1mi36buLKFJvojsHjLnshdhl4L4IqbxqGh4gahBJ4eY1kiX6LgDN7fBmQEJI4jhieD4yhdJ2KkZk8oiSqEaatqBekDLKztBG2CqBACq4wJRi4PZu1sA2+v8C6EJexrBAD1AOBzsLE0g/V1UvYR9sN3eR6lTLi4+TlY1wz6Qzr8u1t6FkY8vNzZTxaGfn6mAkEGFDgL4LrDDJDyE4hEIbdHB6ESE1iD4oVLfLAqPETIsOODwmCDJlv5MSGJklaS6khAQAh+QQFBQAEACwfAAIAVwAwAAAD/0i63P5LSAGrvTjrNuf+YKh1nWieIumhbFupkivPBEzR+GnnfLj3ooFwwPqdAshAazhEGUXJJIrJ1MGOUamJ2jQ9QVltkCv0XqFh5IncBX01afGYnDqD40u2z76JK/N0bnxweC5sRB9vF34zh4gjg4uMjXobihWTlJUZlw9+fzSHlpGYhTminKSepqebF50NmTyor6qxrLO0L7YLn0ALuhCwCrJAjrUqkrjGrsIkGMW/BMEPJcphLgDaABjUKNEh29vdgTLLIOLpF80s5xrp8ORVONgi8PcZ8zlRJvf40tL8/QPYQ+BAgjgMxkPIQ6E6hgkdjoNIQ+JEijMsasNY0RQix4gKP+YIKXKkwJIFF6JMudFEAgAh+QQFBQAEACw8AAIAQgBCAAAD/kg0PPowykmrna3dzXvNmSeOFqiRaGoyaTuujitv8Gx/661HtSv8gt2jlwIChYtc0XjcEUnMpu4pikpv1I71astytkGh9wJGJk3QrXlcKa+VWjeSPZHP4Rtw+I2OW81DeBZ2fCB+UYCBfWRqiQp0CnqOj4J1jZOQkpOUIYx/m4oxg5cuAaYBO4Qop6c6pKusrDevIrG2rkwptrupXB67vKAbwMHCFcTFxhLIt8oUzLHOE9Cy0hHUrdbX2KjaENzey9Dh08jkz8Tnx83q66bt8PHy8/T19vf4+fr6AP3+/wADAjQmsKDBf6AOKjS4aaHDgZMeSgTQcKLDhBYPEswoA1BBAgAh+QQFBQAEACxOAAoAMABXAAAD7Ei6vPOjyUkrhdDqfXHm4OZ9YSmNpKmiqVqykbuysgvX5o2HcLxzup8oKLQQix0UcqhcVo5ORi+aHFEn02sDeuWqBGCBkbYLh5/NmnldxajX7LbPBK+PH7K6narfO/t+SIBwfINmUYaHf4lghYyOhlqJWgqDlAuAlwyBmpVnnaChoqOkpaanqKmqKgGtrq+wsbA1srW2ry63urasu764Jr/CAb3Du7nGt7TJsqvOz9DR0tPU1TIA2ACl2dyi3N/aneDf4uPklObj6OngWuzt7u/d8fLY9PXr9eFX+vv8+PnYlUsXiqC3c6PmUUgAACH5BAUFAAQALE4AHwAwAFcAAAPpSLrc/m7IAau9bU7MO9GgJ0ZgOI5leoqpumKt+1axPJO1dtO5vuM9yi8TlAyBvSMxqES2mo8cFFKb8kzWqzDL7Xq/4LB4TC6bz1yBes1uu9uzt3zOXtHv8xN+Dx/x/wJ6gHt2g3Rxhm9oi4yNjo+QkZKTCgGWAWaXmmOanZhgnp2goaJdpKGmp55cqqusrZuvsJays6mzn1m4uRAAvgAvuBW/v8GwvcTFxqfIycA3zA/OytCl0tPPO7HD2GLYvt7dYd/ZX99j5+Pi6tPh6+bvXuTuzujxXens9fr7YPn+7egRI9PPHrgpCQAAIfkEBQUABAAsPAA8AEIAQgAAA/lIutz+UI1Jq7026h2x/xUncmD5jehjrlnqSmz8vrE8u7V5z/m5/8CgcEgsGo/IpHLJbDqf0Kh0ShBYBdTXdZsdbb/Yrgb8FUfIYLMDTVYz2G13FV6Wz+lX+x0fdvPzdn9WeoJGAYcBN39EiIiKeEONjTt0kZKHQGyWl4mZdREAoQAcnJhBXBqioqSlT6qqG6WmTK+rsa1NtaGsuEu6o7yXubojsrTEIsa+yMm9SL8osp3PzM2cStDRykfZ2tfUtS/bRd3ewtzV5pLo4eLjQuUp70Hx8t9E9eqO5Oku5/ztdkxi90qPg3x2EMpR6IahGocPCxp8AGtigwQAIfkEBQUABAAsHwBOAFcAMAAAA/9Iutz+MMo36pg4682J/V0ojs1nXmSqSqe5vrDXunEdzq2ta3i+/5DeCUh0CGnF5BGULC4tTeUTFQVONYAs4CfoCkZPjFar83rBx8l4XDObSUL1Ott2d1U4yZwcs5/xSBB7dBMBhgEYfncrTBGDW4WHhomKUY+QEZKSE4qLRY8YmoeUfkmXoaKInJ2fgxmpqqulQKCvqRqsP7WooriVO7u8mhu5NacasMTFMMHCm8qzzM2RvdDRK9PUwxzLKdnaz9y/Kt8SyR3dIuXmtyHpHMcd5+jvWK4i8/TXHff47SLjQvQLkU+fG29rUhQ06IkEG4X/Rryp4mwUxSgLL/7IqFETB8eONT6ChCFy5ItqJomES6kgAQAh+QQFBQAEACwKAE4AVwAwAAAD/0i63A4QuEmrvTi3yLX/4MeNUmieITmibEuppCu3sDrfYG3jPKbHveDktxIaF8TOcZmMLI9NyBPanFKJp4A2IBx4B5lkdqvtfb8+HYpMxp3Pl1qLvXW/vWkli16/3dFxTi58ZRcChwIYf3hWBIRchoiHiotWj5AVkpIXi4xLjxiaiJR/T5ehoomcnZ+EGamqq6VGoK+pGqxCtaiiuJVBu7yaHrk4pxqwxMUzwcKbyrPMzZG90NGDrh/JH8t72dq3IN1jfCHb3L/e5ebh4ukmxyDn6O8g08jt7tf26ybz+m/W9GNXzUQ9fm1Q/APoSWAhhfkMAmpEbRhFKwsvCsmosRIHx444PoKcIXKkjIImjTzjkQAAIfkEBQUABAAsAgA8AEIAQgAAA/VIBNz+8KlJq72Yxs1d/uDVjVxogmQqnaylvkArT7A63/V47/m2/8CgcEgsGo/IpHLJbDqf0Kh0Sj0FroGqDMvVmrjgrDcTBo8v5fCZki6vCW33Oq4+0832O/at3+f7fICBdzsChgJGeoWHhkV0P4yMRG1BkYeOeECWl5hXQ5uNIAOjA1KgiKKko1CnqBmqqk+nIbCkTq20taVNs7m1vKAnurtLvb6wTMbHsUq4wrrFwSzDzcrLtknW16tI2tvERt6pv0fi48jh5h/U6Zs77EXSN/BE8jP09ZFA+PmhP/xvJgAMSGBgQINvEK5ReIZhQ3QEMTBLAAAh+QQFBQAEACwCAB8AMABXAAAD50i6DA4syklre87qTbHn4OaNYSmNqKmiqVqyrcvBsazRpH3jmC7yD98OCBF2iEXjBKmsAJsWHDQKmw571l8my+16v+CweEwum8+hgHrNbrvbtrd8znbR73MVfg838f8BeoB7doN0cYZvaIuMjY6PkJGSk2gClgJml5pjmp2YYJ6dX6GeXaShWaeoVqqlU62ir7CXqbOWrLafsrNctjIDwAMWvC7BwRWtNsbGFKc+y8fNsTrQ0dK3QtXAYtrCYd3eYN3c49/a5NVj5eLn5u3s6e7x8NDo9fbL+Mzy9/T5+tvUzdN3Zp+GBAAh+QQJBQAEACwCAAIAfAB8AAAD/0i63P4wykmrvTjrzbv/YCiOZGmeaKqubOu+cCzPdArcQK2TOL7/nl4PSMwIfcUk5YhUOh3M5nNKiOaoWCuWqt1Ou16l9RpOgsvEMdocXbOZ7nQ7DjzTaeq7zq6P5fszfIASAYUBIYKDDoaGIImKC4ySH3OQEJKYHZWWi5iZG0ecEZ6eHEOio6SfqCaqpaytrpOwJLKztCO2jLi1uoW8Ir6/wCHCxMG2x7muysukzb230M6H09bX2Nna29zd3t/g4cAC5OXm5+jn3Ons7eba7vHt2fL16tj2+QL0+vXw/e7WAUwnrqDBgwgTKlzIsKHDh2gGSBwAccHEixAvaqTYcFCjRoYeNyoM6REhyZIHT4o0qPIjy5YTTcKUmHImx5cwE85cmJPnSYckK66sSAAj0aNIkypdyrSp06dQo0qdSrWq1atYs2rdyrWr169gwxZJAAA7);
18 | background-position: center 40rpx;
19 | background-repeat: no-repeat;
20 | background-size: 80rpx;
21 | background-color: rgba(0, 0, 0, 0.85);
22 | color: #fff;
23 | text-align: center;
24 | font-size: 24rpx;
25 | animation: bounceIn .3s;
26 | }
--------------------------------------------------------------------------------
/comm/script/config.js:
--------------------------------------------------------------------------------
1 | /*
2 | 备注
3 | city: 城市(在程序载入时获取一次)
4 | count: 返回结果数量
5 | baiduAK: 百度地图AK
6 | apiList: api列表
7 | hotKeyword: 搜索页热门关键词关键词
8 | hotTag: 搜索页热门类型
9 | bannerList: 首页(热映页)轮播图列表列表
10 | skinList: “我的”页面背景列表
11 | shakeSound: 摇一摇音效地址(带staticUrl表示远程地址)
12 | shakeWelcomeImg: 摇一摇欢迎图片
13 | */
14 | // 静态资源地址
15 | var staticUrl = 'https://static.sesine.com/wechat-weapp-movie'
16 | // api地址
17 | var apiUrl = 'https://sesine.com/mina/api'
18 | module.exports = {
19 | city: '',
20 | count: 20,
21 | baiduAK: 'Y1R5guY8Y2GNRdDpLz7SUeM3QgADAXec',
22 | apiList: {
23 | popular: apiUrl + '/movie/in_theaters',
24 | coming: apiUrl + '/movie/coming_soon',
25 | top: apiUrl + '/movie/top250',
26 | search: {
27 | byKeyword: apiUrl + '/movie/search?q=',
28 | byTag: apiUrl + '/movie/search?tag='
29 | },
30 | filmDetail: apiUrl + '/movie/subject/',
31 | personDetail: apiUrl + '/movie/celebrity/',
32 | baiduMap: 'https://api.map.baidu.com/geocoder/v2/'
33 | },
34 | hotKeyword: ['功夫熊猫', '烈日灼心', '摆渡人', '长城', '我不是潘金莲', '这个杀手不太冷', '驴得水', '海贼王之黄金城', '西游伏妖片', '我在故宫修文物', '你的名字'],
35 | hotTag: ['动作', '喜剧', '爱情', '悬疑'],
36 | bannerList: [
37 | {type:'film', id: '26683290', imgUrl: staticUrl + '/images/banner_1.jpg'},
38 | {type:'film', id: '25793398', imgUrl: staticUrl + '/images/banner_2.jpg'},
39 | {type:'film', id: '26630781', imgUrl: staticUrl + '/images/banner_3.jpg'},
40 | {type:'film', id: '26415200', imgUrl: staticUrl + '/images/banner_4.jpg'},
41 | {type:'film', id: '3025375', imgUrl: staticUrl + '/images/banner_5.jpg'}
42 | ],
43 | skinList: [
44 | {title: '公路', imgUrl: staticUrl + '/images/user_bg_1.jpg'},
45 | {title: '黑夜森林', imgUrl: staticUrl + '/images/user_bg_2.jpg'},
46 | {title: '鱼与水', imgUrl: staticUrl + '/images/user_bg_3.jpg'},
47 | {title: '山之剪影', imgUrl: staticUrl + '/images/user_bg_4.jpg'},
48 | {title: '火山', imgUrl: staticUrl + '/images/user_bg_5.jpg'},
49 | {title: '科技', imgUrl: staticUrl + '/images/user_bg_6.jpg'},
50 | {title: '沙漠', imgUrl: staticUrl + '/images/user_bg_7.jpg'},
51 | {title: '叶子', imgUrl: staticUrl + '/images/user_bg_8.jpg'},
52 | {title: '早餐', imgUrl: staticUrl + '/images/user_bg_9.jpg'},
53 | {title: '英伦骑车', imgUrl: staticUrl + '/images/user_bg_10.jpg'},
54 | {title: '草原', imgUrl: staticUrl + '/images/user_bg_11.jpg'},
55 | {title: '城市', imgUrl: staticUrl + '/images/user_bg_12.jpg'}
56 | ],
57 | shakeSound: {
58 | startUrl: staticUrl + '/sound/shake.mp3',
59 | start: '',
60 | completeUrl: staticUrl + '/sound/shakeComplete.wav',
61 | complete: ''
62 | },
63 | shakeWelcomeImg: staticUrl + '/images/shake_welcome.png'
64 | }
65 |
--------------------------------------------------------------------------------
/comm/script/fetch.js:
--------------------------------------------------------------------------------
1 | var config = require('./config.js')
2 | var message = require('../../component/message/message')
3 |
4 | // 获取电影列表
5 | function fetchFilms(url, start, count, cb, fail_cb) {
6 | var that = this
7 | message.hide.call(that)
8 | if (that.data.hasMore) {
9 | wx.request({
10 | url: url,
11 | data: {
12 | city: config.city,
13 | start: start,
14 | count: config.count
15 | },
16 | method: 'GET',
17 | header: {
18 | "Content-Type": "application/json,application/json"
19 | },
20 | success: function(res){
21 | if(res.data.subjects.length === 0){
22 | that.setData({
23 | hasMore: false,
24 | })
25 | }else{
26 | that.setData({
27 | films: that.data.films.concat(res.data.subjects),
28 | start: that.data.start + res.data.subjects.length,
29 | showLoading: false
30 | })
31 | console.log(that.data.start);
32 | }
33 | wx.stopPullDownRefresh()
34 | typeof cb == 'function' && cb(res.data)
35 | },
36 | fail: function() {
37 | that.setData({
38 | showLoading: false
39 | })
40 | message.show.call(that,{
41 | content: '网络开小差了',
42 | icon: 'offline',
43 | duration: 3000
44 | })
45 | wx.stopPullDownRefresh()
46 | typeof fail_cb == 'function' && fail_cb()
47 | }
48 | })
49 | }
50 | }
51 |
52 | // 获取电影详情
53 | function fetchFilmDetail(url, id, cb) {
54 | var that = this;
55 | message.hide.call(that)
56 | wx.request({
57 | url: url + id,
58 | method: 'GET',
59 | header: {
60 | "Content-Type": "application/json,application/json"
61 | },
62 | success: function(res){
63 | that.setData({
64 | filmDetail: res.data,
65 | showLoading: false,
66 | showContent: true
67 | })
68 | wx.setNavigationBarTitle({
69 | title: res.data.title
70 | })
71 | wx.stopPullDownRefresh()
72 | typeof cb == 'function' && cb(res.data)
73 | },
74 | fail: function() {
75 | that.setData({
76 | showLoading: false
77 | })
78 | message.show.call(that,{
79 | content: '网络开小差了',
80 | icon: 'offline',
81 | duration: 3000
82 | })
83 | }
84 | })
85 | }
86 |
87 | // 获取人物详情
88 | function fetchPersonDetail(url, id, cb) {
89 | var that = this;
90 | message.hide.call(that)
91 | wx.request({
92 | url: url + id,
93 | method: 'GET',
94 | header: {
95 | "Content-Type": "application/json,application/json"
96 | },
97 | success: function(res){
98 | that.setData({
99 | personDetail: res.data,
100 | showLoading: false,
101 | showContent: true
102 | })
103 | wx.setNavigationBarTitle({
104 | title: res.data.name
105 | })
106 | wx.stopPullDownRefresh()
107 | typeof cb == 'function' && cb(res.data)
108 | },
109 | fail: function() {
110 | that.setData({
111 | showLoading: false
112 | })
113 | message.show.call(that,{
114 | content: '网络开小差了',
115 | icon: 'offline',
116 | duration: 3000
117 | })
118 | }
119 | })
120 | }
121 |
122 | // 搜索(关键词或者类型)
123 | function search(url, keyword, start, count, cb){
124 | var that = this
125 | message.hide.call(that)
126 | var url = decodeURIComponent(url)
127 | if (that.data.hasMore) {
128 | wx.request({
129 | url: url + keyword,
130 | data: {
131 | start: start,
132 | count: count
133 | },
134 | method: 'GET',
135 | header: {
136 | "Content-Type": "application/json,application/json"
137 | },
138 | success: function(res){
139 | if(res.data.subjects.length === 0){
140 | that.setData({
141 | hasMore: false,
142 | showLoading: false
143 | })
144 | }else{
145 | that.setData({
146 | films: that.data.films.concat(res.data.subjects),
147 | start: that.data.start + res.data.subjects.length,
148 | showLoading: false
149 | })
150 | wx.setNavigationBarTitle({
151 | title: keyword
152 | })
153 | }
154 | wx.stopPullDownRefresh()
155 | typeof cb == 'function' && cb(res.data)
156 | },
157 | fail: function() {
158 | that.setData({
159 | showLoading: false
160 | })
161 | message.show.call(that,{
162 | content: '网络开小差了',
163 | icon: 'offline',
164 | duration: 3000
165 | })
166 | }
167 | })
168 | }
169 | }
170 | module.exports = {
171 | fetchFilms: fetchFilms,
172 | fetchFilmDetail: fetchFilmDetail,
173 | fetchPersonDetail: fetchPersonDetail,
174 | search: search
175 | }
--------------------------------------------------------------------------------
/comm/style/animation.wxss:
--------------------------------------------------------------------------------
1 | @keyframes fadeIn {
2 | from {
3 | opacity: 0;
4 | }
5 | to {
6 | opacity: 1;
7 | }
8 | }
9 |
10 | @keyframes fadeInDown {
11 | from {
12 | opacity: 0;
13 | transform: translate3d(0, -100%, 0);
14 | }
15 | to {
16 | opacity: 1;
17 | transform: none;
18 | }
19 | }
20 |
21 | @keyframes fadeInUp {
22 | from {
23 | opacity: 0;
24 | transform: translate3d(0, 100%, 0);
25 | }
26 | to {
27 | opacity: 1;
28 | transform: none;
29 | }
30 | }
31 |
32 | @keyframes bounceIn {
33 | from, 20%, 40%, 60%, 80%, to {
34 | animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
35 | }
36 | 0% {
37 | opacity: 0;
38 | transform: scale3d(.3, .3, .3);
39 | }
40 | 20% {
41 | transform: scale3d(1.1, 1.1, 1.1);
42 | }
43 | 40% {
44 | transform: scale3d(.9, .9, .9);
45 | }
46 | 60% {
47 | opacity: 1;
48 | transform: scale3d(1.03, 1.03, 1.03);
49 | }
50 | 80% {
51 | transform: scale3d(.97, .97, .97);
52 | }
53 | to {
54 | opacity: 1;
55 | transform: scale3d(1, 1, 1);
56 | }
57 | }
58 |
59 | @keyframes fadeInRight {
60 | from {
61 | opacity: 0;
62 | -webkit-transform: translate3d(100%, 0, 0);
63 | transform: translate3d(100%, 0, 0);
64 | }
65 |
66 | to {
67 | opacity: 1;
68 | -webkit-transform: none;
69 | transform: none;
70 | }
71 | }
72 |
73 |
74 | @keyframes fadeInLeft {
75 | from {
76 | opacity: 0;
77 | -webkit-transform: translate3d(-100%, 0, 0);
78 | transform: translate3d(-100%, 0, 0);
79 | }
80 |
81 | to {
82 | opacity: 1;
83 | -webkit-transform: none;
84 | transform: none;
85 | }
86 | }
--------------------------------------------------------------------------------
/comm/style/tab.wxss:
--------------------------------------------------------------------------------
1 | page{
2 | background-color: #fcfcfc;
3 | }
4 |
5 | .tab-header {
6 | box-sizing: border-box;
7 | position: fixed;
8 | top: 0;
9 | left: 0;
10 | display: table;
11 | width: 750rpx;
12 | height: 80rpx;
13 | background-color: #fff;
14 | border-bottom: 1px solid #eee;
15 | }
16 |
17 | .tab-header-item {
18 | display: table-cell;
19 | height: 80rpx;
20 | line-height: 80rpx;
21 | text-align: center;
22 | }
23 |
24 | .tab-header-item:active {
25 | background-color: #f8f8f8;
26 | }
27 |
28 | .tab-header-active {
29 | border-bottom: 4rpx solid #47a86c;
30 | }
31 |
32 | .tab-content {
33 | margin-top: 80rpx;
34 | }
35 |
36 | .tab-content-item {
37 | box-sizing: border-box;
38 | padding: 30rpx;
39 | }
--------------------------------------------------------------------------------
/component/filmList/filmList.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 玩命加载中…
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 暂无评分
14 |
15 |
16 | {{filmItem.rating.average}}分
17 |
18 |
19 |
20 |
21 | {{filmItem.title}}
22 |
23 |
24 | {{filmTagItem}}
25 |
26 |
27 |
28 |
29 |
30 |
31 | 拼命加载中…
32 |
33 |
34 | 没有更多内容了
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/component/filmList/filmList.wxss:
--------------------------------------------------------------------------------
1 | @import "../../comm/style/animation.wxss";
2 | .film {
3 | box-sizing: border-box;
4 | width: 750rpx;
5 | padding: 10rpx 15rpx;
6 | display: flex;
7 | flex-wrap: wrap;
8 | flex-direction: row;
9 | justify-content: space-between;
10 | box-shadow: 0 0 40rpx #f4f4f4 inset;
11 | }
12 |
13 | .film-item {
14 | width: 350rpx;
15 | margin-bottom: 20rpx;
16 | border-radius: 10rpx;
17 | background-color: #fff;
18 | border: 1px solid #e4e4e4;
19 | box-shadow: 0 20rpx 40rpx #eee;
20 | overflow: hidden;
21 | animation: fadeIn 1s;
22 | }
23 |
24 | .film-cover, .film-cover-img {
25 | width: 350rpx;
26 | height: 508rpx;
27 | }
28 |
29 | .film-cover {
30 | position: relative;
31 | overflow: hidden;
32 | }
33 |
34 | .film-rating {
35 | box-sizing: border-box;
36 | position: absolute;
37 | bottom: 0;
38 | left: 0;
39 | width: 100%;
40 | height: 50rpx;
41 | padding-right: 20rpx;
42 | font-size: 12px;
43 | text-align: right;
44 | line-height: 50rpx;
45 | background-color: rgba(0, 0, 0, .65);
46 | color: #fff;
47 | }
48 |
49 | .file-intro {
50 | padding: 16rpx;
51 | margin-top: -8rpx;
52 | }
53 |
54 | .film-title {
55 | white-space: nowrap;
56 | text-overflow: ellipsis;
57 | overflow: hidden;
58 | }
59 |
60 | .film-tag {
61 | width: 100%;
62 | margin-top: 10rpx;
63 | display: flex;
64 | justify-content: flex-start;
65 | }
66 |
67 | .film-tag-item {
68 | padding: 4rpx 6rpx;
69 | margin-right: 10rpx;
70 | font-size: 24rpx;
71 | box-shadow: 0 0 0 1px #ccc;
72 | border-top: 1px solid #fff;
73 | border-radius: 10rpx;
74 | background-color: #fafafa;
75 | color: #666;
76 | }
77 |
78 | .loading-tip {
79 | width: 100%;
80 | height: 80rpx;
81 | line-height: 80rpx;
82 | text-align: center;
83 | color: #ccc;
84 | }
--------------------------------------------------------------------------------
/component/list/list.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{cellItem.title}}
7 | {{cellItem.text}}
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/component/list/list.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | background: #f4f4f4;
3 | }
4 |
5 | .cells {
6 | position: relative;
7 | margin: 20rpx 0;
8 | background: #fff;
9 | overflow: hidden;
10 | }
11 |
12 | .cells::before, .cells::after {
13 | content: '';
14 | display: block;
15 | position: absolute;
16 | z-index: 99;
17 | left: 0;
18 | width: 100%;
19 | height: 1px;
20 | transform-origin: 0 0;
21 | transform: scaleY(0.5);
22 | background-color: #e5e5e5;
23 | }
24 |
25 | .cells::before {
26 | top: 0;
27 | }
28 |
29 | .cells::after {
30 | bottom: 0;
31 | }
32 |
33 | .cell {
34 | display: flex;
35 | justify-content: space-between;
36 | position: relative;
37 | box-sizing: border-box;
38 | width: 750rpx;
39 | height: 100rpx;
40 | padding: 0 40rpx;
41 | font-size: 32rpx;
42 | line-height: 100rpx;
43 | }
44 |
45 | .cell:first-child::before {
46 | display: none;
47 | }
48 |
49 | .cell::before {
50 | content: '';
51 | display: block;
52 | position: absolute;
53 | z-index: 99;
54 | top: 0;
55 | left: 40rpx;
56 | width: 100%;
57 | height: 1px;
58 | transform-origin: 0 0;
59 | transform: scaleY(0.5);
60 | background-color: #e5e5e5;
61 | }
62 |
63 | .cell:active {
64 | background-color: #fafafa;
65 | }
66 |
67 | .cell-ft{
68 | color: #bbb;
69 | }
70 |
71 | .cell-access .cell-ft {
72 | padding-right: 13px;
73 | position: relative;
74 | }
75 |
76 | .cell-access .cell-ft::after {
77 | content: '';
78 | display: inline-block;
79 | height: 6px;
80 | width: 6px;
81 | border-width: 2px 2px 0 0;
82 | border-color: #C8C8CD;
83 | border-style: solid;
84 | transform: matrix(0.71, 0.71, -0.71, 0.71, 0, 0);
85 | position: absolute;
86 | top: 50%;
87 | margin-top: -4px;
88 | right: 2px;
89 | }
--------------------------------------------------------------------------------
/component/message/message.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | show: function(cfg) {
3 | var that = this
4 | that.setData({
5 | message: {
6 | content: cfg.content,
7 | icon: cfg.icon,
8 | visiable: true
9 | }
10 | })
11 | if (typeof cfg.duration !== 'undefined') {
12 | setTimeout(function(){
13 | that.setData({
14 | message: {
15 | visiable: false
16 | }
17 | })
18 | }, cfg.duration)
19 | }
20 | },
21 | hide: function() {
22 | var that = this
23 | that.setData({
24 | message: {
25 | visiable: false
26 | }
27 | })
28 | }
29 | }
--------------------------------------------------------------------------------
/component/message/message.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{message.content}}
6 |
7 |
8 |
--------------------------------------------------------------------------------
/component/message/message.wxss:
--------------------------------------------------------------------------------
1 | @import "../../comm/style/animation.wxss";
2 | .message-area {
3 | position: fixed;
4 | width: 100%;
5 | height: 100%;
6 | z-index: 99;
7 | }
8 |
9 | .message {
10 | box-sizing: border-box;
11 | position: fixed;
12 | z-index: 999;
13 | left: 50%;
14 | top: 50%;
15 | width: 250rpx;
16 | height: 250rpx;
17 | padding: 20rpx;
18 | margin-top: -125rpx;
19 | margin-left: -125rpx;
20 | display: flex;
21 | justify-content: center;
22 | flex-direction: column;
23 | align-items: center;
24 | border-radius: 16rpx;
25 | background-color: rgba(0, 0, 0, .75);
26 | color: #fff;
27 | animation: fadeIn .6s;
28 | }
29 |
30 | .message-icon {
31 | height: 100rpx;
32 | width: 100rpx;
33 | background-position: center;
34 | background-repeat: no-repeat;
35 | background-size: 100rpx;
36 | }
37 |
38 | .message-icon-offline {
39 | background-image: url(data:image/png;base64,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);
40 | }
41 |
42 | .message-icon-null {
43 | background-image: url(data:image/png;base64,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);
44 | }
45 |
46 | .message-content {
47 | margin-top: 15rpx;
48 | text-align: center;
49 | }
--------------------------------------------------------------------------------
/component/nullTip/nullTip.wxml:
--------------------------------------------------------------------------------
1 |
2 | {{nullTip.tipText}}
3 |
4 | {{nullTip.actionText}}
5 |
6 |
7 | {{nullTip.actionText}}
8 |
9 |
--------------------------------------------------------------------------------
/component/nullTip/nullTip.wxss:
--------------------------------------------------------------------------------
1 | .null-tip {
2 | height: 400rpx;
3 | margin: 120rpx 0;
4 | background-image: url(data:image/png;base64,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);
5 | background-repeat: no-repeat;
6 | background-position: center;
7 | background-size: 140rpx 112rpx;
8 | line-height: 800rpx;
9 | text-align: center;
10 | color: #999;
11 | }
12 |
13 | .null-action {
14 | margin: 0 auto;
15 | width: 200rpx;
16 | height: 80rpx;
17 | line-height: 80rpx;
18 | text-align: center;
19 | border-radius: 8rpx;
20 | border: 1px solid #47a86c;
21 | color: #47a86c;
22 | }
23 |
24 | .null-action:active {
25 | background-color: #47a86c;
26 | color: #fff;
27 | }
--------------------------------------------------------------------------------
/dist/images/coming_active_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/coming_active_icon.png
--------------------------------------------------------------------------------
/dist/images/coming_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/coming_icon.png
--------------------------------------------------------------------------------
/dist/images/green_tri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/green_tri.png
--------------------------------------------------------------------------------
/dist/images/my_active_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/my_active_icon.png
--------------------------------------------------------------------------------
/dist/images/my_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/my_icon.png
--------------------------------------------------------------------------------
/dist/images/popular_active_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/popular_active_icon.png
--------------------------------------------------------------------------------
/dist/images/popular_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/popular_icon.png
--------------------------------------------------------------------------------
/dist/images/search_active_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/search_active_icon.png
--------------------------------------------------------------------------------
/dist/images/search_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/search_icon.png
--------------------------------------------------------------------------------
/dist/images/top_active_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/top_active_icon.png
--------------------------------------------------------------------------------
/dist/images/top_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/dist/images/top_icon.png
--------------------------------------------------------------------------------
/pages/about/about.js:
--------------------------------------------------------------------------------
1 | Page({
2 | data:{
3 |
4 | },
5 | onLoad:function(options){
6 | // 页面初始化 options为页面跳转所带来的参数
7 | }
8 | })
--------------------------------------------------------------------------------
/pages/about/about.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "关于",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/about/about.wxml:
--------------------------------------------------------------------------------
1 |
2 | 电影推荐
3 |
4 |
5 | 后端支持
6 | 豆瓣API:https://developers.douban.com/
7 | 百度地图API:http://lbsyun.baidu.com/
8 |
9 |
10 | 作者
11 | sesine:https://github.com/yesifeng
12 |
13 |
14 | 此项目所使用到的API
15 |
16 | wx.request、wx.chooseImage、wx.previewImage、wx.playVoice、wx.saveFile、wx.setStorage、wx.getStorage、wx.clearStorage、wx.getStorageInfo、wx.getLocation、wx.getSystemInfo、wx.onAccelerometerChange、wx.showToast、wx.showModal、wx.showActionSheet、wx.setNavigationBarTitle、wx.navigateTo、wx.redirectTo、wx.login
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/pages/about/about.wxss:
--------------------------------------------------------------------------------
1 | page {
2 | width: 100%;
3 | height: 100%;
4 | }
5 |
6 | view {
7 | width: 100%;
8 | }
9 |
10 | .weapp-about {
11 | width: 100%;
12 | height: 100%;
13 | display: flex;
14 | flex-wrap: wrap;
15 | justify-content: center;
16 | align-content: space-around;
17 | align-items: center;
18 | }
19 |
20 | .weapp-name {
21 | font-size: 60rpx;
22 | text-align: center;
23 | color: #555;
24 | }
25 |
26 | .webapp-intro {
27 | box-sizing: border-box;
28 | padding: 60rpx;
29 | height: 900rpx;
30 | }
31 |
32 | .webapp-intro-item {
33 | margin-bottom: 40rpx;
34 | }
35 |
36 | .webapp-intro-title {
37 | margin-bottom: 10rpx;
38 | font-size: 32rpx;
39 | color: #666;
40 | }
41 |
42 | .webapp-intro-content {
43 | color: #ccc;
44 | }
--------------------------------------------------------------------------------
/pages/coming/coming.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var config = require('../../comm/script/config')
3 | Page({
4 | data: {
5 | films: [],
6 | hasMore: true,
7 | showLoading: true,
8 | start: 0
9 | },
10 | onLoad: function() {
11 | var that = this
12 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start)
13 | },
14 | onPullDownRefresh: function() {
15 | var that = this
16 | that.setData({
17 | films: [],
18 | hasMore: true,
19 | showLoading: true,
20 | start: 0
21 | })
22 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start)
23 | },
24 | onReachBottom: function() {
25 | var that = this
26 | if (!that.data.showLoading) {
27 | douban.fetchFilms.call(that, config.apiList.coming, that.data.start)
28 | }
29 | },
30 | viewFilmDetail: function(e) {
31 | var data = e.currentTarget.dataset;
32 | wx.navigateTo({
33 | url: "../filmDetail/filmDetail?id=" + data.id
34 | })
35 | },
36 | viewFilmByTag: function(e) {
37 | var data = e.currentTarget.dataset
38 | var keyword = data.tag
39 | wx.navigateTo({
40 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
41 | })
42 | }
43 | })
--------------------------------------------------------------------------------
/pages/coming/coming.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "即将上映"
3 | }
--------------------------------------------------------------------------------
/pages/coming/coming.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/pages/coming/coming.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/filmList/filmList.wxss";
2 | @import "../../component/message/message.wxss";
--------------------------------------------------------------------------------
/pages/editPersonInfo/editPersonInfo.js:
--------------------------------------------------------------------------------
1 | var util = require('../../util/util')
2 | Page({
3 | data:{
4 | name: '',
5 | nickName: '',
6 | gender: 0,
7 | genderArray: ['男', '女'],
8 | genderIndex: 0,
9 | age: 0,
10 | birthday: '',
11 | constellation: '',
12 | constellationArray: ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座'],
13 | constellationIndex: 0,
14 | company: '',
15 | school: '',
16 | tel: '',
17 | email:'',
18 | intro: '',
19 | birthdayEndDate: ''
20 | },
21 | onLoad:function(options){
22 | var birthdayEndDate = util.getDate()
23 | var that = this
24 | wx.getStorage({
25 | key: 'person_info',
26 | success: function(res){
27 | var data = res.data
28 | that.setData({
29 | name: data.name,
30 | nickName: data.nickName,
31 | gender: data.gender,
32 | age: data.age,
33 | birthday: data.birthday,
34 | constellation: data.constellation,
35 | company: data.company,
36 | school: data.school,
37 | tel: data.tel,
38 | email: data.email,
39 | intro: data.intro,
40 | birthdayEndDate: birthdayEndDate
41 | })
42 | }
43 | })
44 | },
45 | savePersonInfo: function(e) {
46 | var data = e.detail.value
47 | console.log(data);
48 | wx.setStorage({
49 | key: 'person_info',
50 | data: {
51 | name: data.name,
52 | nickName: data.nickName,
53 | gender: data.gender,
54 | age: data.age,
55 | birthday: data.birthday,
56 | constellation: data.constellation,
57 | company: data.company,
58 | school: data.school,
59 | tel: data.tel,
60 | email:data.email,
61 | intro: data.intro
62 | },
63 | success: function(res){
64 | wx.showToast({
65 | title: '资料修改成功',
66 | icon: 'success',
67 | duration: 2000
68 | })
69 | setTimeout(function(){
70 | wx.navigateTo({
71 | url: '../personInfo/personInfo'
72 | })
73 | },2000)
74 | }
75 | })
76 | },
77 | changeGender: function(e) {
78 | console.log(e)
79 | var genderIndex = e.detail.value
80 | if (genderIndex != "null") {
81 | this.setData({
82 | genderIndex: genderIndex,
83 | gender: this.data.genderArray[this.data.genderIndex]
84 | })
85 | }
86 | },
87 | changeBirthday: function(e) {
88 | var birthday = e.detail.value
89 | if (birthday != "null") {
90 | this.setData(
91 | {birthday: birthday}
92 | )
93 | }
94 | },
95 | changeConstellation: function(e) {
96 | var constellationIndex = e.detail.value
97 | if (constellationIndex != "null") {
98 | this.setData({
99 | constellationIndex: constellationIndex,
100 | constellation: this.data.constellationArray[this.data.constellationIndex]
101 | })
102 | }
103 | }
104 | })
--------------------------------------------------------------------------------
/pages/editPersonInfo/editPersonInfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "编辑个人资料",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/editPersonInfo/editPersonInfo.wxml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/editPersonInfo/editPersonInfo.wxss:
--------------------------------------------------------------------------------
1 | .form-list {
2 | position: relative;
3 | margin-bottom: 20rpx;
4 | }
5 |
6 | .form-list:first-child {
7 | margin-top: 20rpx;
8 | }
9 |
10 | .form-list::before, .form-list::after {
11 | content: '';
12 | display: block;
13 | position: absolute;
14 | left: 0;
15 | height: 1px;
16 | width: 100%;
17 | transform: scaleY(.5);
18 | background-color: #e3e3e3;
19 | }
20 |
21 | .form-list::before {
22 | top: 0;
23 | }
24 |
25 | .form-list::after {
26 | bottom: 0;
27 | }
28 |
29 | .form-item {
30 | position: relative;
31 | box-sizing: border-box;
32 | display: flex;
33 | width: 100%;
34 | padding: 15rpx 40rpx;
35 | }
36 |
37 | .form-item::before {
38 | content: '';
39 | display: block;
40 | position: absolute;
41 | z-index: 99;
42 | left: 0;
43 | top: 0;
44 | height: 1px;
45 | width: 100%;
46 | transform: scaleY(.5);
47 | background-color: #e3e3e3;
48 | }
49 |
50 | .form-item:first-child::before {
51 | display: none;
52 | }
53 |
54 | .form-item-hd {
55 | width: 150rpx;
56 | height: 60rpx;
57 | line-height: 60rpx;
58 | }
59 |
60 | .form-item-bd {
61 | flex: 1;
62 | height: 60rpx;
63 | }
64 |
65 | input, .input {
66 | box-sizing: border-box;
67 | width: 100%;
68 | height: 60rpx;
69 | line-height: 60rpx;
70 | background-color: #fff;
71 | padding: 0 15rpx;
72 | }
73 |
74 | .input-placeholder {
75 | color: #808080;
76 | }
77 |
78 | .edit-btn {
79 | width: 300rpx;
80 | height: 80rpx;
81 | margin: 0 auto;
82 | font-size: 32rpx;
83 | text-align: center;
84 | line-height: 80rpx;
85 | background-color: #47a86c;
86 | border-radius: 80rpx;
87 | color: #fff;
88 | }
89 |
90 | .hidden {
91 | display: none;
92 | }
--------------------------------------------------------------------------------
/pages/favorite/favorite.js:
--------------------------------------------------------------------------------
1 | var filmNullTip = {
2 | tipText: '亲,找不到电影的收藏',
3 | actionText: '去逛逛',
4 | routeUrl: '../../pages/popular/popular'
5 | }
6 | var personNullTip = {
7 | tipText: '亲,找不到人物的收藏',
8 | actionText: '去逛逛',
9 | routeUrl: '../../pages/popular/popular'
10 | }
11 | Page({
12 | data:{
13 | film_favorite: [],
14 | person_favorite: [],
15 | show: 'film_favorite',
16 | nullTip: filmNullTip
17 | },
18 | onLoad:function(options){
19 | var that = this
20 | wx.getStorage({
21 | key: 'film_favorite',
22 | success: function(res){
23 | that.setData({
24 | film_favorite: res.data
25 | })
26 | }
27 | })
28 | wx.getStorage({
29 | key: 'person_favorite',
30 | success: function(res){
31 | that.setData({
32 | person_favorite: res.data
33 | })
34 | }
35 | })
36 | wx.stopPullDownRefresh()
37 | },
38 | viewFilmDetail: function(e) {
39 | var data = e.currentTarget.dataset
40 | wx.redirectTo({
41 | url: "../filmDetail/filmDetail?id=" + data.id
42 | })
43 | },
44 | viewPersonDetail: function(e) {
45 | var data = e.currentTarget.dataset
46 | wx.redirectTo({
47 | url: "../personDetail/personDetail?id=" + data.id
48 | })
49 | },
50 | changeViewType: function(e) {
51 | var data = e.currentTarget.dataset
52 | this.setData({
53 | show: data.type,
54 | nullTip: data.type == 'film_favorite' ? filmNullTip : personNullTip
55 | })
56 | }
57 | })
--------------------------------------------------------------------------------
/pages/favorite/favorite.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "收藏"
3 | }
--------------------------------------------------------------------------------
/pages/favorite/favorite.wxml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{filmFavoriteItem.title}}
17 | 导演:{{filmFavoriteItem.directors[0].name}}
18 | 演员:
19 |
20 | {{filmDetailCastItem.name}}
21 | /
22 |
23 |
24 | 豆瓣评分:
25 |
26 | 暂无评分
27 |
28 |
29 | {{filmFavoriteItem.rating.average}}分
30 |
31 |
32 | 上映年份:{{filmFavoriteItem.year}}年
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 | {{personFavoriteItem.name}}
49 | {{personFavoriteItem.name_en}}
50 | {{personFavoriteItem.born_place}}
51 | 主要作品:
52 |
53 | {{personFavoriteWorkItem.subject.title}}
54 |
55 | 、
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/pages/favorite/favorite.wxss:
--------------------------------------------------------------------------------
1 | @import '../../comm/style/tab.wxss';
2 | @import '../../component/nullTip/nullTip.wxss';
3 |
4 | .favorite-film-item {
5 | display: flex;
6 | justify-content: space-between;
7 | margin-bottom: 40rpx;
8 | }
9 |
10 | .favorite-film-cover {
11 | width: 300rpx;
12 | height: 420rpx;
13 | box-shadow: 10rpx 10rpx 30rpx rgba(0, 0, 0, .2);
14 | }
15 |
16 | .favorite-film-info {
17 | width: 360rpx;
18 | }
19 |
20 | .favorite-film-txt {
21 | margin-bottom: 15rpx;
22 | color: #666;
23 | }
24 |
25 | .favorite-film-title {
26 | font-size: 40rpx;
27 | color: #333;
28 | }
29 |
30 | .favorite-person-item {
31 | box-sizing: border-box;
32 | padding: 40rpx;
33 | margin-bottom: 60rpx;
34 | background-color: #fff;
35 | border: 1px solid #e1e1e1;
36 | border-radius: 20rpx;
37 | box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, .1);
38 | }
39 |
40 | .favorite-person-intro {
41 | display: flex;
42 | justify-content: space-between;
43 | }
44 |
45 | .favorite-person-info {
46 | width: 320rpx;
47 | }
48 |
49 | .favorite-person-time {
50 | margin-bottom: 20rpx;
51 | font-size: 36rpx;
52 | text-align: center;
53 | color: #ccc;
54 | }
55 |
56 | .favorite-person-cover {
57 | width: 260rpx;
58 | height: 260rpx;
59 | margin-bottom: 30rpx;
60 | border-radius: 260rpx;
61 | box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, .1);
62 | background-position: center;
63 | background-repeat: no-repeat;
64 | background-size: cover;
65 | }
66 |
67 | .favorite-person-txt {
68 | margin-bottom: 10rpx;
69 | color: #999;
70 | }
71 |
72 | .favorite-person-name {
73 | font-size: 40rpx;
74 | color: #666;
75 | }
--------------------------------------------------------------------------------
/pages/filmDetail/filmDetail.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var util = require('../../util/util')
3 | var config = require('../../comm/script/config')
4 | Page({
5 | data: {
6 | filmDetail: {},
7 | showLoading: true,
8 | showContent: false
9 | },
10 | onLoad: function(options) {
11 | var that = this
12 | var id = options.id
13 | douban.fetchFilmDetail.call(that, config.apiList.filmDetail, id, function(data){
14 | /// 判断是否收藏
15 | wx.getStorage({
16 | key: 'film_favorite',
17 | success: function(res){
18 | for (var i = 0; i < res.data.length; i++) {
19 | if (res.data[i].id == data.id) {
20 | that.setData({
21 | isFilmFavorite: true
22 | })
23 | }
24 | }
25 | }
26 | })
27 | // 存储浏览历史
28 | var date = util.getDate()
29 | var time = util.getTime()
30 | var film_history = []
31 | console.log('----进入----')
32 | wx.getStorage({
33 | key: 'film_history',
34 | success: function(res){
35 | film_history = res.data
36 | console.log('----获取缓存----')
37 | console.log(res.data)
38 | // 当前的数据
39 | var now_data = {
40 | time: time,
41 | data: data
42 | }
43 | // 今天的数据,没有时插入
44 | var sub_data = {
45 | date: date,
46 | films: []
47 | }
48 | sub_data.films.push(now_data)
49 | if (film_history.length == 0) { // 判断是否为空
50 | console.log('----为空插入----')
51 | film_history.push(sub_data)
52 | } else if ((film_history[0].date = date)) { //判断第一个是否为今天
53 | console.log('----今日插入----')
54 | console.log(film_history[0].films.length)
55 | for (var i = 0; i < film_history[0].films.length; i++) {
56 | // 如果存在则删除,添加最新的
57 | if (film_history[0].films[i].data.id == data.id) {
58 | film_history[0].films.splice(i,1)
59 | }
60 | }
61 | film_history[0].films.push(now_data)
62 | } else { // 不为今天(昨天)插入今天的数据
63 | console.log('----昨日插入今日----')
64 | film_history.push(sub_data)
65 | }
66 | wx.setStorage({
67 | key: 'film_history',
68 | data: film_history,
69 | success: function(res){
70 | console.log(res)
71 | console.log('----设置成功----')
72 | }
73 | })
74 | console.log(film_history)
75 | },
76 | fail: function(res) {
77 | console.log('----获取失败----')
78 | console.log(res)
79 | }
80 | })
81 | })
82 | },
83 | viewPersonDetail: function(e) {
84 | var data = e.currentTarget.dataset;
85 | wx.redirectTo({
86 | url: '../personDetail/personDetail?id=' + data.id
87 | })
88 | },
89 | viewFilmByTag: function(e) {
90 | var data = e.currentTarget.dataset
91 | var keyword = data.tag
92 | wx.redirectTo({
93 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
94 | })
95 | },
96 | onPullDownRefresh: function() {
97 | var data = {
98 | id: this.data.filmDetail.id
99 | }
100 | this.onLoad(data)
101 | },
102 | favoriteFilm: function() {
103 | var that = this
104 | // 判断原来是否收藏,是则删除,否则添加
105 | wx.getStorage({
106 | key: 'film_favorite',
107 | success: function(res){
108 | var film_favorite = res.data
109 | if (that.data.isFilmFavorite) {
110 | // 删除
111 | for (var i = 0; i < film_favorite.length; i++) {
112 | if (film_favorite[i].id == that.data.filmDetail.id) {
113 | film_favorite.splice(i,1)
114 | that.setData({
115 | isFilmFavorite: false
116 | })
117 | }
118 | }
119 | wx.setStorage({
120 | key: 'film_favorite',
121 | data: film_favorite,
122 | success: function(res){
123 | console.log(res)
124 | console.log('----设置成功----')
125 | }
126 | })
127 | } else {
128 | // 添加
129 | film_favorite.push(that.data.filmDetail)
130 | wx.setStorage({
131 | key: 'film_favorite',
132 | data: film_favorite,
133 | success: function(res){
134 | that.setData({
135 | isFilmFavorite: true
136 | })
137 | }
138 | })
139 | }
140 | }
141 | })
142 | }
143 | })
--------------------------------------------------------------------------------
/pages/filmDetail/filmDetail.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "电影详情"
3 | }
--------------------------------------------------------------------------------
/pages/filmDetail/filmDetail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 玩命加载中…
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{filmDetail.title}}
12 | 导演:{{filmDetail.directors[0].name}}
13 | 演员:
14 |
15 | {{filmDetailCastItem.name}}
16 | /
17 |
18 |
19 | 豆瓣评分:
20 |
21 | 暂无评分
22 |
23 |
24 | {{filmDetail.rating.average}}分
25 |
26 |
27 | 上映年份:{{filmDetail.year}}年
28 |
29 | 收藏
30 |
31 |
32 |
33 | {{filmDetail.collect_count}}
34 | 看过
35 |
36 |
37 | {{filmDetail.wish_count}}
38 | 想看
39 |
40 |
41 | {{filmDetail.ratings_count}}
42 | 评分人数
43 |
44 |
45 |
46 | 剧情简介
47 | {{filmDetail.summary}}
48 | 导演/演员
49 |
50 |
51 |
52 | {{filmDetail.directors[0].name}}
53 | 导演
54 |
55 |
56 |
57 |
58 | {{filmDetailCastItem.name}}
59 | 演员
60 |
61 |
62 |
63 | 标签
64 |
65 |
66 | {{filmDetailTagItem}}
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/pages/filmDetail/filmDetail.wxss:
--------------------------------------------------------------------------------
1 | @import "../../comm/style/animation.wxss";
2 | @import "../../component/message/message.wxss";
3 | .fd-hd {
4 | position: relative;
5 | width: 100%;
6 | height: 600rpx;
7 | display: flex;
8 | justify-content: center;
9 | align-content: center;
10 | overflow: hidden;
11 | }
12 |
13 | .fd-hd:before {
14 | content: '';
15 | display: block;
16 | position: absolute;
17 | left: 0;
18 | top: 0;
19 | z-index: -1;
20 | width: 100%;
21 | height: 600rpx;
22 | background-color: rgba(0, 0, 0, .6);
23 | }
24 |
25 | .fd-hd-bg {
26 | position: absolute;
27 | z-index: -2;
28 | left: 0;
29 | top: 0;
30 | width: 100%;
31 | height: 600rpx;
32 | background-size: cover;
33 | background-position: center;
34 | filter: blur(30rpx);
35 | transform: scale(1.2);
36 | }
37 |
38 | .fd-favorite {
39 | box-sizing: border-box;
40 | position: absolute;
41 | z-index: 99;
42 | bottom: 30rpx;
43 | left: 120rpx;
44 | width: 160rpx;
45 | padding: 10rpx 30rpx;
46 | padding-left: 60rpx;
47 | font-size: 32rpx;
48 | line-height: 1;
49 | border-radius: 30rpx;
50 | border: 1px solid #fff;
51 | background-position: 20rpx center;
52 | background-repeat: no-repeat;
53 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC7klEQVRoQ9WagXHUMBBF91dAUgFQAVABXAWQCoAKCBUQKiBXAVwFIRWQVEBSAVwFHBUs849VJtzZ1kpac7ZmPHMzZ0n/SdZfeWXICEVVj0Tkk4i8EZGNiHwVkfcA+Du0ILQ1a0xVv4vI0522rwAsovsLB1BVjvrnHqFvAXyJhBgD4IeIPOoReQPg2WQBMqOfdC8AXEVBhM6Aqn4TkRcZcaFrIQxAVSmcAJ4SNguRAJ7RT3ArAFzszSUEQFVpmbTOkvIYwM+SCl33RgHQGl8XigmZhWYAVaVl0jprynFrdI4AqBn9BPsRwFkNearTBGB7nl8NArg34lqo3iNVAZjwJyLySkROGwBY9ZybPQDXNe0MApi7PLDgxGedFx2Hu80xCmfixi7+ZsReD7nVHYCqvjRxDEgUuLubHENwSZsEo+1uAQFcsjLscWAQmprgHBxBFgRocZFcJ2P/vyIAXWSsZ3psgA0BuFi4UOdY1gSgjb2bo3oRWaZFTLuir8+p3NLetzZqTjQniL/igc39OMCFPAeINS0/bT/+icQWeQkx1UX920aeMWBb9rYSE4bYE98JYGuCUXlKM9EpvhdgYhC94gcBJgIxKD4LcGCIrHgXwD2I0qxDS1B0iXcDGIS2KCqtC8D1tui6qTLvU6p5935X3sgLUJI2bBWe6rvSj14Apj4+RClztuNKuXgBDvHW5srceQEYlZ87Ry7qtmsAuVT9/l6oq3dV/a8OZBo2AI5zo5GdgcbcZ67/3P/Z3KkH4BAO5HYiD8AhHCgB8GyZ7+y9xQPQ4kDcErDUviAtAQzmXj0ANQ5E4Ry5NHoUwasUJOtEHoDSxNdSRM52U+aWOCBQyUlO1ok8AF4LXZnwwXMvczWuKxdIblPnAaCghwPriHn9UwB3L9o5b7TdLd2NIEMBkqn1vlP/bTceAB5iXHSIonA+Kk2n7na+zEerK7F2AoBfutS7kI0WITha7IRJpfPojzbsMwUu9NQHB2dQPLX9AbQjJU2PHjqcAAAAAElFTkSuQmCC);
54 | background-size: 32rpx;
55 | color: #fff;
56 | transition: left .3s, color .3s, background-image .3s;
57 | }
58 |
59 | .fd-favorite-active {
60 | left: 100rpx;
61 | width: 190rpx;
62 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADk0lEQVRoQ9Wa0VLaQBSGzwmNU00YZUbjZfFO6IX0CYpPUPsEtU9QfIKmT1B8guoT1D6B+ATFiwJ3wqWpM9ABsVNrTuckwakI2U2yKWkuyWbP/+1m/z17AkIKF/WLa9e3Kx8BYJ8ABghwYujjAyx0B6rDoeoOub+RU/4KAJWHfVPDtNq7quMpBxg52/sA2qfZQt23ptU5UgmhHuCydAGIxTkim6bVepFZgPDR92UTurv5jU5DFYTSGRg5pVMArIaLU7sWlAEMv29XkbRTmZFVOQvKAORGf4JHx6bV3peBFbVRAjBynlcAiK1T+srp7tZyodOVfmBOQ0UApSMAfBNNjJpZSAxw098u3t1qF9HE+60NfVxIujsnBhg5cUY/sFSCD/nNlh0HfvJMIoAg5+nHFcB5kqmPt5LMQiwAFv7z99OdO8I9AKzFBQjmoZ5DOlne6JzF6ScUgN0lh3erLmhVIigCUJEAKwiwFieY6Bk/c6UmADQRcaCB24An0Atzq3uA66vyKyCoEFEVAFngVDYpCp/6/SYRdTUNm4DQNNZbXzgiBu8x76BZEywakaahj3cxiYuIIqR/n45x6JT7ab3TaQN4a2bolAYIuJp2sFT6J+rxK1QHwHepBEi9UzqcLGI+YOykHk9tgHNDH1c9Gw2c6H+C8MUXulzxCPZDvxSSfQiinrF0U5mkHw92Yt55CdxGVhc1Af1A0Kqm9Y13a+96lEpkFWKW+JkA/GPWIOaJnwuQJYgw8aEAWYAQiRcCLBJCRrwUwAQiatUhyZ4lK14awIcoUxJRUZ81rZbUaVGqUZy6T1TB0+1l60ZSAFHKhkmF32cGkkVgOYDLso0I71WJk+mHJEsuUgCLObXJVe6kAIZOifOjlzIjp6oNAZ3lrbagVD8jF5ol4F87EGvg42LeahVEAyKcgSS1T1Fw0X2Z2qkQYBEOFMWJxAALcKD7mUE6MDfa9bCZEgIkcSBOCfztPm7Vgw5Nqx1aexUCxHEgTzhh3Vwae6M3+rVSA6RaVBAZJ5IAiFr4okNDv7GnS+Z+4WCZSzjSX3JknEgIIG+hdJzTyRZ99/JdDW1ZEFFSJwa4LHUB8dm8hcTTjKDV/j5oi+yR77O7AaEdukES9czN9ryv/l4YIcD1VWmPXPw8LYqFA5Kd9Kt7YNO8Vh4V1lCj18Z6+ySRC/HDAQR/y+Ig5wBuXfWfNoK/KbDjeDFQI1sknrX9Ae1as5bu7R6bAAAAAElFTkSuQmCC);
63 | color: #f4ea2a;
64 | border: 1px solid #f4ea2a;
65 | }
66 |
67 | .fd-favorite-active::before {
68 | content: '已'
69 | }
70 |
71 | .fd-cover {
72 | z-index: 9999;
73 | width: 300rpx;
74 | height: 420rpx;
75 | margin-top: 80rpx;
76 | border-radius: 8rpx;
77 | box-shadow: 0 30rpx 150rpx rgba(255, 255, 255, .3)
78 | }
79 |
80 | .fd-intro {
81 | z-index: 2;
82 | width: 320rpx;
83 | margin-top: 80rpx;
84 | margin-left: 40rpx;
85 | color: #fff;
86 | }
87 |
88 | .fd-title {
89 | margin-bottom: 30rpx;
90 | font-size: 42rpx;
91 | }
92 |
93 | .fd-intro-txt {
94 | margin-bottom: 18rpx;
95 | color: #eee;
96 | }
97 |
98 | .fd-data {
99 | display: flex;
100 | height: 150rpx;
101 | justify-content: space-around;
102 | align-items: center;
103 | border-bottom: 1px solid #f4f4f4;
104 | }
105 |
106 | .fd-data-item {
107 | width: 33.33%;
108 | text-align: center;
109 | }
110 |
111 | .fd-data-item {
112 | border-left: 1px solid #eee;
113 | }
114 |
115 | .fd-data-item:first-child {
116 | border-left: none;
117 | }
118 |
119 | .fd-data-num {
120 | font-size: 40rpx;
121 | font-weight: 100;
122 | color: #444;
123 | }
124 |
125 | .fd-data-title {
126 | color: #999;
127 | }
128 |
129 | .fd-bd {
130 | padding: 0 40rpx 40rpx;
131 | }
132 |
133 | .fd-bd-title {
134 | padding-left: 20rpx;
135 | margin-top: 40rpx;
136 | margin-bottom: 20rpx;
137 | font-size: 32rpx;
138 | font-weight: bold;
139 | color: #444;
140 | border-left: 10rpx solid #47a86c;
141 | }
142 |
143 | .fd-bd-intro {
144 | text-align: justify;
145 | line-height: 1.5;
146 | color: #666;
147 | }
148 |
149 | .fd-bd-tag {
150 | display: flex;
151 | }
152 |
153 | .fd-bd-tag-item {
154 | padding: 5rpx 10rpx;
155 | margin-right: 15rpx;
156 | border: 1px solid #ccc;
157 | border-radius: 10rpx;
158 | color: #666;
159 | }
160 |
161 | .fd-bd-person {
162 | display: flex;
163 | width: 100%;
164 | height: 480rpx;
165 | overflow-x: scroll;
166 | overflow-y: hidden;
167 | }
168 |
169 | .fd-bd-person-item {
170 | margin-left: 20rpx;
171 | text-align: center;
172 | }
173 |
174 | .fd-bd-person-item:first-child {
175 | margin-left: 0;
176 | }
177 |
178 | .fd-bd-person-avatar {
179 | width: 280rpx;
180 | height: 400rpx;
181 | }
182 |
183 | .fd-bd-person-name {
184 | color: #666;
185 |
186 | }
187 |
188 | .fd-bd-person-role {
189 | color: #999
190 | }
--------------------------------------------------------------------------------
/pages/gallery/gallery.js:
--------------------------------------------------------------------------------
1 | Page({
2 | data:{
3 | pictures: [],
4 | nullTip: {
5 | tipText: '亲,没有上传照片哦',
6 | actionText: '上传',
7 | fn: 'uploadImg'
8 | }
9 | },
10 | onLoad:function(options){
11 | var that = this
12 | wx.getStorage({
13 | key: 'gallery',
14 | success: function(res){
15 | that.setData({
16 | pictures: res.data
17 | })
18 | }
19 | })
20 | },
21 | uploadImg: function() {
22 | var that = this
23 | wx.chooseImage({
24 | count: 1,
25 | success: function(res) {
26 | var tempFilePath = res.tempFilePaths[0]
27 | wx.saveFile({
28 | tempFilePath: tempFilePath,
29 | success: function(res) {
30 | var savedFilePath = res.savedFilePath
31 | console.log(savedFilePath)
32 | that.setData({
33 | pictures: that.data.pictures.concat(savedFilePath)
34 | })
35 | wx.setStorage({
36 | key: 'gallery',
37 | data: that.data.pictures
38 | })
39 | }
40 | })
41 | }
42 | })
43 | },
44 | previewImage: function(e) {
45 | var data = e.currentTarget.dataset
46 | var index = data.index
47 | var that = this
48 | wx.previewImage({
49 | current: that.data.pictures[index], // 当前显示图片的链接,不填则默认为 urls 的第一张
50 | urls: that.data.pictures
51 | })
52 | }
53 | })
--------------------------------------------------------------------------------
/pages/gallery/gallery.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "相册",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/gallery/gallery.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | 上传
14 |
--------------------------------------------------------------------------------
/pages/gallery/gallery.wxss:
--------------------------------------------------------------------------------
1 | @import '../../component/nullTip/nullTip.wxss';
2 | .gallery {
3 | display: flex;
4 | flex-wrap: wrap;
5 | margin-bottom: 60rpx;
6 | position: relative;
7 | }
8 |
9 | .gallery::before, .gallery::after, .gallery-item::before, .gallery-item::after {
10 | content: '';
11 | display: block;
12 | position: absolute;
13 | background-color: #e5e5e5;
14 | }
15 |
16 | .gallery::before, .gallery::after {
17 | top: 0;
18 | left: 0;
19 | }
20 |
21 | .gallery-item::before, .gallery-item::after {
22 | bottom: 0;
23 | right: 0;
24 | }
25 |
26 | .gallery::before, .gallery-item::before {
27 | width: 100%;
28 | height: 1px;
29 | transform: scaleY(0.5);
30 | }
31 |
32 | .gallery::after, .gallery-item::after {
33 | width: 1px;
34 | height: 100%;
35 | transform: scaleX(0.5);
36 | }
37 |
38 | .gallery-item {
39 | width: 250rpx;
40 | height: 250rpx;
41 | overflow: hidden;
42 | position: relative;
43 | }
44 |
45 | .gallery-item-cover {
46 | width: 100%;
47 | height: 100%;
48 | }
--------------------------------------------------------------------------------
/pages/history/history.js:
--------------------------------------------------------------------------------
1 | var filmNullTip = {
2 | tipText: '亲,找不到电影的浏览记录',
3 | actionText: '去逛逛',
4 | routeUrl: '../../pages/popular/popular'
5 | }
6 | var personNullTip = {
7 | tipText: '亲,找不到人物的浏览记录',
8 | actionText: '去逛逛',
9 | routeUrl: '../../pages/popular/popular'
10 | }
11 | Page({
12 | data:{
13 | film_history: [],
14 | person_history: [],
15 | show: 'film_history',
16 | nullTip: filmNullTip
17 | },
18 | onLoad:function(options){
19 | var that = this
20 | wx.getStorage({
21 | key: 'film_history',
22 | success: function(res){
23 | that.setData({
24 | film_history: res.data
25 | })
26 | }
27 | })
28 | wx.getStorage({
29 | key: 'person_history',
30 | success: function(res){
31 | that.setData({
32 | person_history: res.data
33 | })
34 | }
35 | })
36 | wx.stopPullDownRefresh()
37 | },
38 | onPullDownRefresh: function() {
39 | this.setData({
40 | film_history: [],
41 | person_history: []
42 | })
43 | this.onLoad()
44 | },
45 | viewFilmDetail: function(e) {
46 | var data = e.currentTarget.dataset
47 | wx.redirectTo({
48 | url: "../filmDetail/filmDetail?id=" + data.id
49 | })
50 | },
51 | viewPersonDetail: function(e) {
52 | var data = e.currentTarget.dataset
53 | wx.redirectTo({
54 | url: "../personDetail/personDetail?id=" + data.id
55 | })
56 | },
57 | changeViewType: function(e) {
58 | var data = e.currentTarget.dataset
59 | this.setData({
60 | show: data.type,
61 | nullTip: data.type == 'film_history' ? filmNullTip : personNullTip
62 | })
63 | }
64 | })
--------------------------------------------------------------------------------
/pages/history/history.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "浏览历史"
3 | }
--------------------------------------------------------------------------------
/pages/history/history.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{filmHistoryFilmItem.time}}
17 |
18 |
19 |
20 | {{filmHistoryFilmItem.data.title}}
21 | 导演:{{filmHistoryFilmItem.data.directors[0].name}}
22 | 演员:
23 |
24 | {{filmDetailCastItem.name}}
25 | /
26 |
27 |
28 | 豆瓣评分:
29 |
30 | 暂无评分
31 |
32 |
33 | {{filmHistoryFilmItem.data.rating.average}}分
34 |
35 |
36 | 上映年份:{{filmHistoryFilmItem.data.year}}年
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 | {{personHistoryItem.date}}
51 |
52 | {{personHistoryItem.time}}
53 |
54 |
55 |
56 |
57 | {{personHistoryItem.data.name}}
58 | {{personHistoryItem.data.name_en}}
59 | {{personHistoryItem.data.born_place}}
60 | 主要作品:
61 |
62 | {{personHistoryWorkItem.subject.title}}
63 |
64 | 、
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
--------------------------------------------------------------------------------
/pages/history/history.wxss:
--------------------------------------------------------------------------------
1 | @import '../../comm/style/tab.wxss';
2 | @import '../../component/nullTip/nullTip.wxss';
3 | .history-film-item {
4 | display: flex;
5 | flex-direction: column;
6 | }
7 |
8 | .history-film-date, .history-person-date {
9 | box-sizing: border-box;
10 | width: 300rpx;
11 | padding: 10rpx 20rpx;
12 | margin: 0 auto 30rpx auto;
13 | font-size: 36rpx;
14 | text-align: center;
15 | color: #999;
16 | border-radius: 60rpx;
17 | background-color: #f4f4f4;
18 | }
19 |
20 | .history-film-time {
21 | margin-bottom: 10rpx;
22 | color: #e5e5e5;
23 | font-size: 60rpx;
24 | }
25 |
26 | .history-film-item {
27 | margin-bottom: 60rpx;
28 | }
29 |
30 | .history-film-intro {
31 | display: flex;
32 | }
33 |
34 | .history-film-cover {
35 | width: 300rpx;
36 | height: 420rpx;
37 | box-shadow: 10rpx 10rpx 30rpx rgba(0, 0, 0, .2)
38 | }
39 |
40 | .history-film-info {
41 | max-width: 350rpx;
42 | margin-left: 40rpx;
43 | }
44 |
45 | .history-film-txt {
46 | background-color: #fafafa;
47 | padding: 5rpx 10rpx;
48 | margin-bottom: 10rpx;
49 | color: #666;
50 | display: inline-block;
51 | }
52 |
53 | .history-film-title {
54 | font-size: 40rpx;
55 | color: #444;
56 | }
57 |
58 | .history-person-item {
59 | box-sizing: border-box;
60 | padding: 40rpx;
61 | margin-bottom: 60rpx;
62 | background-color: #fff;
63 | border: 1px solid #e1e1e1;
64 | border-radius: 20rpx;
65 | box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, .1);
66 | }
67 |
68 | .history-person-intro {
69 | display: flex;
70 | justify-content: space-between;
71 | }
72 |
73 | .history-person-info {
74 | width: 320rpx;
75 | }
76 |
77 | .history-person-time {
78 | margin-bottom: 20rpx;
79 | font-size: 36rpx;
80 | text-align: center;
81 | color: #ccc;
82 | }
83 |
84 | .history-person-cover {
85 | width: 260rpx;
86 | height: 260rpx;
87 | margin-bottom: 30rpx;
88 | border-radius: 260rpx;
89 | box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, .1);
90 | background-position: center;
91 | background-repeat: no-repeat;
92 | background-size: cover;
93 | }
94 |
95 | .history-person-txt {
96 | margin-bottom: 10rpx;
97 | color: #999;
98 | }
99 |
100 | .history-person-name {
101 | font-size: 40rpx;
102 | color: #666;
103 | }
--------------------------------------------------------------------------------
/pages/location/location.js:
--------------------------------------------------------------------------------
1 | var config = require('../../comm/script/config')
2 | Page({
3 | data:{
4 | latitude: '',
5 | longitude: '',
6 | markers: [{
7 | latitude: 0,
8 | longitude: 0,
9 | name: '我的位置',
10 | desc: ''
11 | }],
12 | covers: [{
13 | latitude: 0,
14 | longitude: 0,
15 | iconPath: '../../dist/images/green_tri.png',
16 | }, {
17 | latitude: 0,
18 | longitude: 0,
19 | iconPath: '../../dist/images/green_tri.png',
20 | rotate: 180
21 | }],
22 | formatted_address: '',
23 | loading: false
24 | },
25 | onLoad:function(options){
26 | this.getLocation();
27 | },
28 | getLocation: function() {
29 | var that = this
30 | that.setData({
31 | loading: true
32 | })
33 | wx.getLocation({
34 | type: 'gcj02',
35 | success: function(res){
36 | // 设置地图
37 | that.setData({
38 | latitude: res.latitude,
39 | longitude: parseFloat(res.longitude+ '1'),
40 | markers: [{
41 | latitude: res.latitude,
42 | longitude: parseFloat(res.longitude+ '1')
43 | }],
44 | covers: [{
45 | latitude: res.latitude,
46 | longitude: parseFloat(res.longitude+ '1')
47 | }, {
48 | latitude: res.latitude,
49 | longitude: parseFloat(res.longitude+ '1')
50 | }]
51 | })
52 | // 获取中文详细地址
53 | var locationParam = res.latitude + ',' + res.longitude + '1'
54 | wx.request({
55 | url: config.apiList.baiduMap,
56 | data: {
57 | ak: config.baiduAK,
58 | location: locationParam,
59 | output: 'json',
60 | pois: '1'
61 | },
62 | method: 'GET',
63 | success: function(res){
64 | that.setData({
65 | markers: [{
66 | latitude: 0,
67 | longitude: 0,
68 | name: '我的位置',
69 | desc: res.data.result.formatted_address
70 | }],
71 | formatted_address: res.data.result.formatted_address
72 | })
73 | that.setData({
74 | loading: false
75 | })
76 | },
77 | fail: function(){
78 | that.getLocation()
79 | }
80 | })
81 | }
82 | })
83 | },
84 | refreshLocation: function(){
85 | this.getLocation()
86 | }
87 | })
--------------------------------------------------------------------------------
/pages/location/location.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "更新位置",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/location/location.wxml:
--------------------------------------------------------------------------------
1 |
2 | 您的当前位置在:{{formatted_address}}
3 | gps坐标:经度({{latitude}}),纬度纬度({{longitude}})
4 |
--------------------------------------------------------------------------------
/pages/location/location.wxss:
--------------------------------------------------------------------------------
1 | .location-map {
2 | width: 100%;
3 | height: 800rpx;
4 | }
5 |
6 | .location-address {
7 | padding: 20rpx;
8 | text-align: center;
9 | font-size: 30rpx;
10 | }
11 |
12 | .location-coord {
13 | font-size: 24rpx;
14 | text-align: center;
15 | color: #ccc;
16 | }
17 |
18 | .location-refresh {
19 | width: 600rpx;
20 | margin-top: 60rpx;
21 | }
--------------------------------------------------------------------------------
/pages/my/my.js:
--------------------------------------------------------------------------------
1 | var config = require('../../comm/script/config')
2 | var app = getApp();
3 | Page({
4 | data:{
5 | gridList: [
6 | {enName:'favorite', zhName:'收藏'},
7 | {enName:'history', zhName:'浏览记录'},
8 | {enName:'shake', zhName:'摇一摇'},
9 | {enName:'gallery', zhName:'相册'},
10 | {enName:'setting', zhName:'设置'}
11 | ],
12 | skin: ''
13 | },
14 | onLoad:function(cb){
15 | var that = this
16 | console.log(app.globalData.userInfo)
17 | // 检测是否存在用户信息
18 | if (app.globalData.userInfo != null) {
19 | that.setData({
20 | userInfo: app.globalData.userInfo
21 | })
22 | } else {
23 | app.getUserInfo()
24 | }
25 | typeof cb == 'function' && cb()
26 | },
27 | onShow:function(){
28 | var that = this
29 | wx.getStorage({
30 | key: 'skin',
31 | success: function(res){
32 | if (res.data == "") {
33 | that.setData({
34 | skin: config.skinList[0].imgUrl
35 | })
36 | } else {
37 | that.setData({
38 | skin: res.data
39 | })
40 | }
41 | }
42 | })
43 | },
44 | onPullDownRefresh: function() {
45 | this.onLoad(function(){
46 | wx.stopPullDownRefresh()
47 | })
48 | },
49 | viewGridDetail: function(e) {
50 | var data = e.currentTarget.dataset
51 | wx.navigateTo({
52 | url: "../" + data.url + '/' + data.url
53 | })
54 | },
55 | viewSkin: function() {
56 | wx.navigateTo({
57 | url: "../skin/skin"
58 | })
59 | }
60 | })
--------------------------------------------------------------------------------
/pages/my/my.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "我的",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/my/my.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{userInfo.nickName}}
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{userInfo.province}},{{userInfo.city}}
15 |
16 |
17 |
18 |
19 |
20 | {{gridItem.zhName}}
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/pages/my/my.wxss:
--------------------------------------------------------------------------------
1 | .user-info {
2 | box-sizing: border-box;
3 | width: 750rpx;
4 | height: 400rpx;
5 | padding: 30rpx 0;
6 | display: flex;
7 | flex-direction: column;
8 | align-items: center;
9 | justify-content: space-around;
10 | background-color: #999;
11 | background-position: center;
12 | background-repeat: no-repeat;
13 | background-size: cover;
14 | color: #666;
15 | }
16 |
17 | .user-skin {
18 | position: absolute;
19 | top: 20rpx;
20 | right: 20rpx;
21 | width: 60rpx;
22 | height: 60rpx;
23 | border: 4rpx solid #fff;
24 | border-radius: 60rpx;
25 | background-color: rgba(0, 0, 0, .3);
26 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACHElEQVRoQ+2YfVXDMBTF71MADgAFMAdMAThgUwA42BwMB5sCQAE4YCgAHODgce5Idto0adJ26ygn+bMnee/+3lfTCga+ZOD6kQEOncGcgZyBjhHoVEKqegHgyGj4EpHPFD2qegrgpOk5n+1GAKp6DOAKwATApWNwLSKjRIA3AIQvricASxF5TrFh9yQDqOotgBkAQoTWWERe6wSoKsFfavasAdzH7CQDmKg/eiLu0/ANYBQqJVM6jH5dEKzdmYjMY9mozYCpcUYrxaH1RQg6fyg6T8ygq5dlNRUR2vSuIEBL8a4T29Rs2raLJcXS9EJ4AXYkvq1g37nggKgAmJpn2bhTYpeC2tjihJq6B30AbNjrNh56OMPptCj6KQGoKoUT4C8vTjn2xWZtAUzpfDScOIcA5WAgxKapiwBLADeHUNTC51xE+FL9BTAvGEZ/SOuML0wLwBcVrwDnAyF4582AZeT2wBAgtuJLPWBKKSUTNLCvTMVsl8RXABIgVrzyRm6TXapwbK7qvmFSEe8FqIFYicgk4TrcCYDXaFV1J6JXfBDAA7ERb57H7vOdAYwfCxEUXwtQgLizM7dPAOOLs37R6jodCmMfJdQkhcmflNZoBqgPb/Sb2j2eM9CkXhP25gxEg5SbODdxOQJ5CkWbptmGPIWi8foPU4hfbfv6a8dfiMEfub7oNm7iaIp63pABeg54xV3OQM5AxwgMvoR+AMyi8zFvBJhOAAAAAElFTkSuQmCC);
27 | background-position: center;
28 | background-repeat: no-repeat;
29 | background-size: 40rpx;
30 | }
31 |
32 | .user-nickname {
33 | color: #fff;
34 | font-size: 40rpx;
35 | text-shadow: 1px 1px 0 rgba(0, 0, 0, .6);
36 | }
37 |
38 | .user-sex-male, .user-sex-female {
39 | display: inline-block;
40 | width: 40rpx;
41 | height: 40rpx;
42 | margin-bottom: -5rpx;
43 | background-position: center;
44 | background-repeat: no-repeat;
45 | background-size: cover;
46 | }
47 |
48 | .user-sex-male {
49 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACeklEQVRYR91WS3LaQBB9LWAdjoCrLLbGJwjEZG1ygjBcIPIJEp8g5AKInCB4HRHLJ4i8hYU5gr1GqFMjMc4I0GcwCanMCkoz3a9fv/4QjnzoyP7x/wG4GM0CIjrLZpYDTzTP1feDM1AMAPCE/ez34AA2I++68zYD3wioq29/DcAbd9a3QK50zMxfiei9/G0MoO0+1Cu8ugRxj8ANgFqxUfACoABMkxVVbnxx8qii7LrzTwA+Jvfoy1ScOl13zkYApOMqwg8MODqFuwTGwCMBQ0/Y1xej2VhFG4HFD9EcyzdGABLny1sVLRh3EfG4AgTfRTOQBt+6s9YKaFlMfRBeJ9HGQOpgPEXEjnJuBCCmHOGDNMTM90TkeML285pWLDbmoSpBBr2bitOJ/kZWiPw/HTTjFMqzVQV65NL5imptPbd5IBKtLP0ERLres95tAVDiMXWuHKRB4NoTthRj5kkB0KkH0CmiPcuqTAeAW6mHFaoneQymADzXLePOG9jSyN6nO5r7Uph6FewylgLQHc0nIFwWPSqDSgvmxhvYvVIaUH2cwOeq1Mo423VHliiDfhaJMc3Ajk61L4Csut+0928B+BMpkOWsN558Bo4tQm18+p6wOy/K/z5lGLdhDhcgvDpEI5IDKaRqo3QjWit3Pcc5CFHrlJ0DeivWpqhZK5ZGNgeKCYjNQZYnvsxpqED8TgUHAF0VzYWk//PneH8oQX0ugG0m4us+M40tiu71hSRi64yI+5I8ecl0iuZuxeuVzAHDWQszuzAYTyAMQ1SHJroptZZLIBaWPYupx+DG89YjtyXQIiKeRKhNTBwXpuAlPcDkbSkGTAya3j06gF9mC4Ew4aDj3gAAAABJRU5ErkJggg==);
50 | }
51 |
52 | .user-sex-female {
53 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACe0lEQVRYR9WWUU7bQBCG/wlIkBBU+lgJl/QEDSdocgL8UmH8RE/Q9ASlJ2h6gubJcdQXcwLMCZqcoAEj9bGgloRI4KnWjmnirtdrSAXd59mdb2Zn5h/CAx96YP8oBPDDNDcuy+UdDmECVAOhHgXA6AM8pBK8tfH48KnnnesGpgUgHP9arbxlRosIG6rHmXFOhHb1avRJByQXIHK+Ujm6jRZ8TKAObtDf/OL0BczZa7uOJdQZvA/QqyQr1cmomQehBBDOf65UvkVRMw9A3DJc11dlILCsBpjaIHopsrE+Gb1QQWQCzEXOPKhOxo28aBKw+G7ZFxCiPlSZyAQILPsAwHsReRHnUgjgg+E64r2/jhRgLvUIm3lpz/qS6DtQOlJ9hRTgzLL3GfgM8LHhdhu6LSWzC6w9XxQmAW82XaeTtpECnO7aHhF2si4VAUqCYcbh855jagEEu3t9UUB0g+2k1Yo4nbUVLcpL+CqK0eg523oAls3C0HCd3DmhAxYo3pM6UF3QcZi2KQ7wT76AB0avG2vHzHmcRTjThr7hdpt3SXty505tGA+i8pCInmAhg4gv1ifjmmyUa4xi9SzPyk5KRYuN4tv0TYsxT1DSEGkhkxVfckfZ598tq3aNkpDfrWjrofBdni7Eclz6ON0fTpYRNp657jArU7mDZk5ao1fYJ0IH1zSYW0iWWei/WEhi7dBU0VyAP9VsHzBzKy7M7MPMF0TUzpJfrTmgKqzL1YoZMkyKF9Ktqe0JM/olgrd2NfJ0FxdxVzsDMqhFjOz/ByCRaK2pmCG9srvaGSgGIBeeewE8zhoQk1IsLhKZ1fqq+3aBrhOVnXYNLMKZ7I3f0PtsMHAXhlMAAAAASUVORK5CYII=);
54 | }
55 |
56 | .user-avatar {
57 | width: 200rpx;
58 | height: 200rpx;
59 | border-radius: 200rpx;
60 | box-shadow: 0 0 300rpx 100rpx rgba(255, 255, 255, .2), 0 1px 0 rgba(255, 255, 255, 0.4);
61 | }
62 |
63 | .user-location {
64 | font-size: 24rpx;
65 | color: #eee;
66 | text-shadow: 1px 1px 0 rgba(0, 0, 0, .6);
67 | }
68 |
69 | .grids {
70 | position: relative;
71 | width: 100%;
72 | display: flex;
73 | flex-wrap: wrap;
74 | }
75 |
76 | .grids::before, .grid::before, .grids::after, .grid::after {
77 | content: '';
78 | display: block;
79 | position: absolute;
80 | z-index: 99;
81 | background-color: #ccc;
82 | }
83 | .grids::before, .grid::before {
84 | left: 0;
85 | width: 100%;
86 | height: 1px;
87 | transform: scaleY(0.5);
88 | }
89 |
90 | .grids::before {
91 | top: 0;
92 | }
93 |
94 | .grid::before {
95 | bottom: 0;
96 | }
97 |
98 | .grids::after, .grid::after {
99 | top: 0;
100 | height: 100%;
101 | width: 1px;
102 | transform: scaleX(0.5);
103 | }
104 |
105 | .grids::after {
106 | left: 0;
107 | }
108 |
109 | .grid::after {
110 | right: 0;
111 | }
112 |
113 | .grid {
114 | box-sizing: border-box;
115 | position: relative;
116 | display: flex;
117 | flex-wrap: wrap;
118 | align-items: center;
119 | justify-content: space-around;
120 | width: 250rpx;
121 | height: 250rpx;
122 | padding: 20rpx;
123 | text-align: center;
124 | }
125 |
126 | .grid:active {
127 | background-color: #fafafa;
128 | }
129 |
130 | .grid-icon {
131 | width: 80rpx;
132 | height: 80rpx;
133 | margin-top: 20rpx;
134 | margin-bottom: 10rpx;
135 | background-position: center;
136 | background-repeat: no-repeat;
137 | background-size: contain;
138 | }
139 |
140 | .grid-icon-favorite {
141 | background-image: url(data:image/png;base64,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);
142 | }
143 |
144 | .grid-icon-history {
145 | background-image: url(data:image/png;base64,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);
146 | }
147 |
148 | .grid-icon-shake {
149 | background-image: url(data:image/png;base64,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);
150 | }
151 |
152 | .grid-icon-gallery {
153 | background-image: url(data:image/png;base64,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);
154 | }
155 |
156 | .grid-icon-setting {
157 | background-image: url(data:image/png;base64,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);
158 | }
159 |
160 | .grid-title {
161 | width: 100%;
162 | color: #666;
163 | }
--------------------------------------------------------------------------------
/pages/personDetail/personDetail.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var util = require('../../util/util')
3 | var config = require('../../comm/script/config')
4 | Page({
5 | data: {
6 | personDetail: {},
7 | showLoading: true,
8 | showContent: false
9 | },
10 | onLoad: function(options) {
11 | var that = this
12 | var id = options.id
13 | douban.fetchPersonDetail.call(that, config.apiList.personDetail, id, function(data){
14 | /// 判断是否收藏
15 | wx.getStorage({
16 | key: 'person_favorite',
17 | success: function(res){
18 | for (var i = 0; i < res.data.length; i++) {
19 | if (res.data[i].id == data.id) {
20 | that.setData({
21 | isPersonFavorite: true
22 | })
23 | }
24 | }
25 | }
26 | })
27 | // 存储浏览历史
28 | var date = util.getDate()
29 | var time = util.getTime()
30 | var person_history = []
31 | console.log('----进入----')
32 | wx.getStorage({
33 | key: 'person_history',
34 | success: function(res){
35 | person_history = res.data
36 | console.log('----获取缓存----')
37 | console.log(res.data)
38 | // 当前的数据
39 | var now_data = {
40 | time: time,
41 | data: data
42 | }
43 | // 今天的数据,没有时插入
44 | var sub_data = {
45 | date: date,
46 | persons: []
47 | }
48 | sub_data.persons.push(now_data)
49 | if (person_history.length == 0) { // 判断是否为空
50 | console.log('----为空插入----')
51 | person_history.push(sub_data)
52 | } else if ((person_history[0].date = date)) { //判断第一个是否为今天
53 | console.log('----今日插入----')
54 | console.log(person_history[0].persons.length)
55 | for (var i = 0; i < person_history[0].persons.length; i++) {
56 | // 如果存在则删除,添加最新的
57 | if (person_history[0].persons[i].data.id == data.id) {
58 | person_history[0].persons.splice(i,1)
59 | }
60 | }
61 | person_history[0].persons.push(now_data)
62 | } else { // 不为今天(昨天)插入今天的数据
63 | console.log('----昨日插入今日----')
64 | person_history.push(sub_data)
65 | }
66 | wx.setStorage({
67 | key: 'person_history',
68 | data: person_history,
69 | success: function(res){
70 | console.log(res)
71 | console.log('----设置成功----')
72 | }
73 | })
74 | console.log(person_history)
75 | },
76 | fail: function(res) {
77 | console.log('----获取失败----')
78 | console.log(res)
79 | }
80 | })
81 | })
82 | },
83 | viewFilmDetail: function(e) {
84 | var data = e.currentTarget.dataset;
85 | wx.redirectTo({
86 | url: '../filmDetail/filmDetail?id=' + data.id
87 | })
88 | },
89 | onPullDownRefresh: function() {
90 | var data = {
91 | id: this.data.filmDetail.id
92 | }
93 | this.onLoad(data)
94 | },
95 | favoritePerson: function() {
96 | var that = this
97 | // 判断原来是否收藏,是则删除,否则添加
98 | wx.getStorage({
99 | key: 'person_favorite',
100 | success: function(res){
101 | var person_favorite = res.data
102 | if (that.data.isPersonFavorite) {
103 | // 删除
104 | for (var i = 0; i < person_favorite.length; i++) {
105 | if (person_favorite[i].id == that.data.personDetail.id) {
106 | person_favorite.splice(i,1)
107 | that.setData({
108 | isPersonFavorite: false
109 | })
110 | }
111 | }
112 | wx.setStorage({
113 | key: 'person_favorite',
114 | data: person_favorite,
115 | success: function(res){
116 | console.log(res)
117 | console.log('----设置成功----')
118 | }
119 | })
120 | } else {
121 | // 添加
122 | person_favorite.push(that.data.personDetail)
123 | wx.setStorage({
124 | key: 'person_favorite',
125 | data: person_favorite,
126 | success: function(res){
127 | that.setData({
128 | isPersonFavorite: true
129 | })
130 | }
131 | })
132 | }
133 | }
134 | })
135 | }
136 | })
--------------------------------------------------------------------------------
/pages/personDetail/personDetail.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "人物详情"
3 | }
--------------------------------------------------------------------------------
/pages/personDetail/personDetail.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 玩命加载中…
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{personDetail.name}}
12 | {{personDetail.name_en}}
13 | {{personDetail.born_place}}
14 |
15 | 收藏
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{psersonWorkItem.subject.title}}
24 | 担任:{{psersonWorkItem.roles}}
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/pages/personDetail/personDetail.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/message/message.wxss";
2 | .pd-hd {
3 | position: relative;
4 | width: 100%;
5 | height: 600rpx;
6 | overflow: hidden;
7 | }
8 |
9 | .pd-hd-bg {
10 | position: absolute;
11 | z-index: 0;
12 | width: 100%;
13 | height: 600rpx;
14 | background-repeat: no-repeat;
15 | background-position: center top;
16 | background-size: cover;
17 | filter: blur(15rpx);
18 | transform: scale(1.2);
19 | }
20 |
21 | .pd-hd:before {
22 | content: '';
23 | display: block;
24 | position: absolute;
25 | z-index: 1;
26 | width: 100%;
27 | height: 600rpx;
28 | background-color: rgba(0, 0, 0, .6);
29 | }
30 |
31 | .pd-favorite {
32 | box-sizing: border-box;
33 | position: absolute;
34 | z-index: 99;
35 | top: 30rpx;
36 | right: 30rpx;
37 | width: 160rpx;
38 | padding: 10rpx 30rpx;
39 | padding-left: 60rpx;
40 | font-size: 32rpx;
41 | line-height: 1;
42 | border-radius: 30rpx;
43 | border: 1px solid #fff;
44 | background-position: 20rpx center;
45 | background-repeat: no-repeat;
46 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC7klEQVRoQ9WagXHUMBBF91dAUgFQAVABXAWQCoAKCBUQKiBXAVwFIRWQVEBSAVwFHBUs849VJtzZ1kpac7ZmPHMzZ0n/SdZfeWXICEVVj0Tkk4i8EZGNiHwVkfcA+Du0ILQ1a0xVv4vI0522rwAsovsLB1BVjvrnHqFvAXyJhBgD4IeIPOoReQPg2WQBMqOfdC8AXEVBhM6Aqn4TkRcZcaFrIQxAVSmcAJ4SNguRAJ7RT3ArAFzszSUEQFVpmbTOkvIYwM+SCl33RgHQGl8XigmZhWYAVaVl0jprynFrdI4AqBn9BPsRwFkNearTBGB7nl8NArg34lqo3iNVAZjwJyLySkROGwBY9ZybPQDXNe0MApi7PLDgxGedFx2Hu80xCmfixi7+ZsReD7nVHYCqvjRxDEgUuLubHENwSZsEo+1uAQFcsjLscWAQmprgHBxBFgRocZFcJ2P/vyIAXWSsZ3psgA0BuFi4UOdY1gSgjb2bo3oRWaZFTLuir8+p3NLetzZqTjQniL/igc39OMCFPAeINS0/bT/+icQWeQkx1UX920aeMWBb9rYSE4bYE98JYGuCUXlKM9EpvhdgYhC94gcBJgIxKD4LcGCIrHgXwD2I0qxDS1B0iXcDGIS2KCqtC8D1tui6qTLvU6p5935X3sgLUJI2bBWe6rvSj14Apj4+RClztuNKuXgBDvHW5srceQEYlZ87Ry7qtmsAuVT9/l6oq3dV/a8OZBo2AI5zo5GdgcbcZ67/3P/Z3KkH4BAO5HYiD8AhHCgB8GyZ7+y9xQPQ4kDcErDUviAtAQzmXj0ANQ5E4Ry5NHoUwasUJOtEHoDSxNdSRM52U+aWOCBQyUlO1ok8AF4LXZnwwXMvczWuKxdIblPnAaCghwPriHn9UwB3L9o5b7TdLd2NIEMBkqn1vlP/bTceAB5iXHSIonA+Kk2n7na+zEerK7F2AoBfutS7kI0WITha7IRJpfPojzbsMwUu9NQHB2dQPLX9AbQjJU2PHjqcAAAAAElFTkSuQmCC);
47 | background-size: 32rpx;
48 | color: #fff;
49 | transition: color .3s, background-image .3s;
50 | }
51 |
52 | .pd-favorite-active {
53 | width: 190rpx;
54 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADk0lEQVRoQ9Wa0VLaQBSGzwmNU00YZUbjZfFO6IX0CYpPUPsEtU9QfIKmT1B8guoT1D6B+ATFiwJ3wqWpM9ABsVNrTuckwakI2U2yKWkuyWbP/+1m/z17AkIKF/WLa9e3Kx8BYJ8ABghwYujjAyx0B6rDoeoOub+RU/4KAJWHfVPDtNq7quMpBxg52/sA2qfZQt23ptU5UgmhHuCydAGIxTkim6bVepFZgPDR92UTurv5jU5DFYTSGRg5pVMArIaLU7sWlAEMv29XkbRTmZFVOQvKAORGf4JHx6bV3peBFbVRAjBynlcAiK1T+srp7tZyodOVfmBOQ0UApSMAfBNNjJpZSAxw098u3t1qF9HE+60NfVxIujsnBhg5cUY/sFSCD/nNlh0HfvJMIoAg5+nHFcB5kqmPt5LMQiwAFv7z99OdO8I9AKzFBQjmoZ5DOlne6JzF6ScUgN0lh3erLmhVIigCUJEAKwiwFieY6Bk/c6UmADQRcaCB24An0Atzq3uA66vyKyCoEFEVAFngVDYpCp/6/SYRdTUNm4DQNNZbXzgiBu8x76BZEywakaahj3cxiYuIIqR/n45x6JT7ab3TaQN4a2bolAYIuJp2sFT6J+rxK1QHwHepBEi9UzqcLGI+YOykHk9tgHNDH1c9Gw2c6H+C8MUXulzxCPZDvxSSfQiinrF0U5mkHw92Yt55CdxGVhc1Af1A0Kqm9Y13a+96lEpkFWKW+JkA/GPWIOaJnwuQJYgw8aEAWYAQiRcCLBJCRrwUwAQiatUhyZ4lK14awIcoUxJRUZ81rZbUaVGqUZy6T1TB0+1l60ZSAFHKhkmF32cGkkVgOYDLso0I71WJk+mHJEsuUgCLObXJVe6kAIZOifOjlzIjp6oNAZ3lrbagVD8jF5ol4F87EGvg42LeahVEAyKcgSS1T1Fw0X2Z2qkQYBEOFMWJxAALcKD7mUE6MDfa9bCZEgIkcSBOCfztPm7Vgw5Nqx1aexUCxHEgTzhh3Vwae6M3+rVSA6RaVBAZJ5IAiFr4okNDv7GnS+Z+4WCZSzjSX3JknEgIIG+hdJzTyRZ99/JdDW1ZEFFSJwa4LHUB8dm8hcTTjKDV/j5oi+yR77O7AaEdukES9czN9ryv/l4YIcD1VWmPXPw8LYqFA5Kd9Kt7YNO8Vh4V1lCj18Z6+ySRC/HDAQR/y+Ig5wBuXfWfNoK/KbDjeDFQI1sknrX9Ae1as5bu7R6bAAAAAElFTkSuQmCC);
55 | color: #f4ea2a;
56 | border: 1px solid #f4ea2a;
57 | }
58 |
59 | .pd-favorite-active::before {
60 | content: '已'
61 | }
62 |
63 | .pd-intro {
64 | position: absolute;
65 | z-index: 6;
66 | display: flex;
67 | width: 100%;
68 | height: 600rpx;
69 | justify-content: center;
70 | flex-direction: column;
71 | align-items: center;
72 | color: #fff;
73 | }
74 |
75 | .pd-avatar {
76 | width: 280rpx;
77 | height: 280rpx;
78 | border-radius: 280rpx;
79 | background-position: center;
80 | background-repeat: no-repeat;
81 | background-size: cover;
82 | overflow: hidden;
83 | box-shadow: 0 0 160rpx rgba(255, 255, 255, .6);
84 | }
85 |
86 | .pd-name-cn {
87 | padding: 10rpx 20rpx;
88 | margin-top: 30rpx;
89 | background-color: rgba(0, 0, 0, .1);
90 | border-radius: 32rpx;
91 | font-size: 32rpx;
92 | box-shadow: 0 0 20rpx rgba(0, 0, 0, .2) inset,1px 1px 0 rgba(255, 255, 255, .1);
93 | }
94 |
95 | .pd-name-en {
96 | margin-top: 10rpx;
97 | font-size: 24rpx;
98 | }
99 |
100 | .pd-address {
101 | margin-top: 20rpx;
102 | font-size: 24rpx;
103 | }
104 |
105 | .pd-work {
106 | box-sizing: border-box;
107 | display: flex;
108 | width: 100%;
109 | padding: 10rpx;
110 | margin-top: 10rpx;
111 | flex-wrap: wrap;
112 | flex-direction: row;
113 | justify-content: space-around;
114 | }
115 |
116 | .pd-work-item {
117 | width: 350rpx;
118 | overflow: hidden;
119 | text-align: center;
120 | background-color: #f8f8f8;
121 | border: 1px solid #eee;
122 | margin-bottom: 15rpx;
123 | }
124 |
125 | .pd-work-cover {
126 | width: 360rpx;
127 | height: 533rpx;
128 | }
129 |
130 | .pd-work-intro {
131 | box-sizing: border-box;
132 | padding: 10rpx;
133 | }
134 |
135 | .pd-work-title {
136 | font-size: 36rpx;
137 | color: #333;
138 | }
139 |
140 | .pd-work-roles {
141 | color: #666;
142 | }
--------------------------------------------------------------------------------
/pages/personInfo/personInfo.js:
--------------------------------------------------------------------------------
1 | Page({
2 | data:{
3 | cells: []
4 | },
5 | onLoad:function(options){
6 | var that = this
7 | wx.getStorage({
8 | key: 'person_info',
9 | success: function(res){
10 | var data = res.data
11 | var cells = [[],[],[]]
12 | cells[0].push({title: '姓名', text: data.name == '' ? '未填写' : data.name, access: false, fn: ''})
13 | cells[0].push({title: '昵称', text: data.nickName == '' ? '未填写' : data.nickName, access: false, fn: ''})
14 | cells[0].push({title: '性别', text: data.gender == '' ? '未填写' : data.gender, access: false, fn: ''})
15 | cells[0].push({title: '年龄', text: data.age == '' ? '未填写' : data.age, access: false, fn: ''})
16 | cells[0].push({title: '生日', text: data.birthday == '' ? '未填写' : data.birthday, access: false, fn: ''})
17 | cells[0].push({title: '星座', text: data.constellation == '' ? '未填写' : data.constellation, access: false, fn: ''})
18 | cells[1].push({title: '公司', text: data.company == '' ? '未填写' : data.company, access: false, fn: ''})
19 | cells[1].push({title: '学校', text: data.school == '' ? '未填写' : data.school, access: false, fn: ''})
20 | cells[1].push({title: '手机号码', text: data.tel == '' ? '未填写' : data.tel, access: false, fn: ''})
21 | cells[1].push({title: '邮箱', text: data.email == '' ? '未填写' : data.email, access: false, fn: ''})
22 | cells[2].push({title: '个性签名', text: data.intro == '' ? '未填写' : data.intro, access: false, fn: ''})
23 | that.setData({
24 | cells: cells
25 | })
26 | }
27 | })
28 | }
29 | })
--------------------------------------------------------------------------------
/pages/personInfo/personInfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "个人资料",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/personInfo/personInfo.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 编 辑
--------------------------------------------------------------------------------
/pages/personInfo/personInfo.wxss:
--------------------------------------------------------------------------------
1 | @import '../../component/list/list.wxss';
2 | page::after {
3 | content: '';
4 | display: block;
5 | width: 100%;
6 | height: 1px;
7 | }
8 |
9 | .edit-btn {
10 | width: 300rpx;
11 | height: 80rpx;
12 | margin: 0 auto;
13 | margin-bottom: 30rpx;
14 | font-size: 32rpx;
15 | text-align: center;
16 | line-height: 80rpx;
17 | background-color: #47a86c;
18 | border-radius: 80rpx;
19 | color: #fff;
20 | }
--------------------------------------------------------------------------------
/pages/popular/popular.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var config = require('../../comm/script/config')
3 | var app = getApp()
4 | Page({
5 | data: {
6 | films: [],
7 | hasMore: true,
8 | showLoading: true,
9 | start: 0,
10 | bannerList: config.bannerList
11 | },
12 | onLoad: function() {
13 | var that = this
14 | wx.showNavigationBarLoading()
15 | app.getCity(function(){
16 | wx.hideNavigationBarLoading()
17 | wx.setNavigationBarTitle({
18 | title: '正在热映 - ' + config.city
19 | })
20 | douban.fetchFilms.call(that, config.apiList.popular, that.data.start)
21 | })
22 | },
23 | onPullDownRefresh: function() {
24 | var that = this
25 | that.setData({
26 | films: [],
27 | hasMore: true,
28 | showLoading: true,
29 | start: 0
30 | })
31 | this.onLoad()
32 | },
33 | onReachBottom: function() {
34 | var that = this
35 | if (!that.data.showLoading) {
36 | douban.fetchFilms.call(that, config.apiList.popular, that.data.start)
37 | }
38 | },
39 | viewFilmDetail: function(e) {
40 | var data = e.currentTarget.dataset;
41 | wx.navigateTo({
42 | url: "../filmDetail/filmDetail?id=" + data.id
43 | })
44 | },
45 | viewFilmByTag: function(e) {
46 | var data = e.currentTarget.dataset
47 | var keyword = data.tag
48 | wx.navigateTo({
49 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
50 | })
51 | },
52 | viewBannerDetail: function(e) {
53 | var data = e.currentTarget.dataset
54 | if (data.type == 'film') {
55 | wx.navigateTo({
56 | url: "../filmDetail/filmDetail?id=" + data.id
57 | })
58 | } else if (data.type == 'person') {
59 | wx.navigateTo({
60 | url: '../personDetail/personDetail?id=' + data.id
61 | })
62 | } else if (data.type == 'search') {
63 | // stype(searchType) 0:关键词, 1:类型标签
64 | var searchUrl = stype == 'keyword' ? config.search.byKeyword : config.search.byTag
65 | wx.navigateTo({
66 | url: '../searchResult/searchResult?url=' + encodeURIComponent(searchUrl) + '&keyword=' + keyword
67 | })
68 | }
69 | },
70 | viewSearch: function() {
71 | wx.navigateTo({
72 | url: '../search/search'
73 | })
74 | }
75 | })
--------------------------------------------------------------------------------
/pages/popular/popular.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "正在热映"
3 | }
--------------------------------------------------------------------------------
/pages/popular/popular.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/pages/popular/popular.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/filmList/filmList.wxss";
2 | @import "../../component/message/message.wxss";
3 | .search-bar {
4 | box-sizing: border-box;
5 | position: fixed;
6 | top: 0;
7 | left: 0;
8 | z-index: 999;
9 | width: 100%;
10 | height: 80rpx;
11 | padding: 10rpx;
12 | background-color: #eee;
13 | text-align: center;
14 | box-shadow: 0 10rpx 60rpx rgba(0, 0, 0, .3);
15 | }
16 |
17 | .search-txt {
18 | display: inline-block;
19 | width: 730rpx;
20 | height: 60rpx;
21 | background-color: #fff;
22 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADGUlEQVRoQ+2Z7XETQQyGpQoIFUAqwFSAdQ0QOoAKCBWQVIBTAUkFcRo4mQpIKsBUgKlAzDuzx9jLft/NxBlOfzKZ7O7p0edqw/TEhZ+4/jQDPLYHZw/MHhhpgUlCSFVfEtEbIsLPv2Jm98z8ICLbkXpGtzcDqOoJEX0mojNf8cDX7oloTURXIrKbEqYawCn+kYjOiQgQNQLlVyJyWbMptbYKwIXKLREtRiqwIaJ3U3ijGEBVobQ2WD3GirwABMKrWYoAnOW/p5Q3s5/MDGUGhRZmtmDmFwntsFbGeCIL4GIelo+FzY2L66AlVXVpZhfMjCoVkg0IWl1QAnDhqs3BN8zsNzOfiQjiOSuq+t7MVsz8LLD4g4hcZw8JLEgCOOv/8EPHKb+sjV+XRwhFX5APr1tCKQewIiKUTF/g9SLL+xvhCSL6Gjjzk4jge1WSA4D1D7orEd2ICJRolr7vN4GcuBMRNMUqiQK4ygMAX+DqUaVPVaEo+okvz2vDKAXwj6tRKruu8z1SZbFhcd/3u0BCV4dmCiBUfZrcHCKMhBEaG+5MxVILcCkiABstEYDq8/8vADP71nXdcrT5iSjigeqGlvJAqFJsReR0LIBrkL8C50yaxKg2oTJa/RFf0VgzE5Hs1cY/K7mh73uMhK+8TaMuXzhLVUMNsqnC5Toxpq4vAVdXx+pwhqoGL4dE1HRmDuDEzLaRG2R1R46FzpgGmY05VY15AUY9F5GrkqRWVTwAxHpIdQMbvpkFwMJIyRvO2OCe33XdXSBZMfS/dYqnriDV3qwCQNlzbzyp8RBn+lfs0p6B1wpUt+pLYpEHXOXAjHsdqEolEVSypgmiGMBBwBPrxHxbomhqTTVEFcBeKcR8i0E9F1IHyrqXCxSFrZlhqAnNx1UQTQB7IFAGcY5ETQkSfL0/uGM+ngJiFMAeCKoNnl2Gn/gTEnKXmp0LIE5zE9okAGMCPwORHfQfHWCvwoVyInu9OAqAEISZPTAz3p6Sz/FHAzCUaff/BvyKpM/+L+GoAFpyaQZosdqUe2YPTGnNlrNmD7RYbco9fwAQTXFAoJIHBAAAAABJRU5ErkJggg==);
23 | background-position: 20rpx center;
24 | background-repeat: no-repeat;
25 | background-size: 50rpx;
26 | border-radius: 8rpx;
27 | }
28 |
29 | .search-txt-plc {
30 | color: #bfbfbf;
31 | }
32 |
33 | .banner {
34 | width: 750rpx;
35 | height: 300rpx;
36 | margin-top: 80rpx;
37 | background-color: #eee;
38 | animation: fadeIn 1.8s;
39 | }
40 |
41 | .banner-item {
42 | width: 750rpx;
43 | height: 300rpx;
44 | }
--------------------------------------------------------------------------------
/pages/search/search.js:
--------------------------------------------------------------------------------
1 | var message = require('../../component/message/message')
2 | var douban = require('../../comm/script/fetch')
3 | var config = require('../../comm/script/config')
4 | Page({
5 | data:{
6 | searchType: 'keyword',
7 | hotKeyword: config.hotKeyword,
8 | hotTag: config.hotTag
9 | },
10 | changeSearchType: function() {
11 | var types = ['默认', '类型'];
12 | var searchType = ['keyword', 'tag']
13 | var that = this
14 | wx.showActionSheet({
15 | itemList: types,
16 | success: function(res) {
17 | console.log(res)
18 | if (!res.cancel) {
19 | that.setData({
20 | searchType: searchType[res.tapIndex]
21 | })
22 | }
23 | }
24 | })
25 | },
26 | search: function(e) {
27 | var that = this
28 | var keyword = e.detail.value.keyword
29 | if (keyword == '') {
30 | message.show.call(that,{
31 | content: '请输入内容',
32 | icon: 'null',
33 | duration: 1500
34 | })
35 | return false
36 | } else {
37 | var searchUrl = that.data.searchType == 'keyword' ? config.apiList.search.byKeyword : config.apiList.search.byTag
38 | wx.redirectTo({
39 | url: '../searchResult/searchResult?url=' + encodeURIComponent(searchUrl) + '&keyword=' + keyword
40 | })
41 | }
42 | },
43 | searchByKeyword: function(e) {
44 | var that = this
45 | var keyword = e.currentTarget.dataset.keyword
46 | wx.redirectTo({
47 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byKeyword) + '&keyword=' + keyword
48 | })
49 | },
50 | searchByTag: function(e) {
51 | var that = this
52 | var keyword = e.currentTarget.dataset.keyword
53 | wx.redirectTo({
54 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
55 | })
56 | }
57 | })
--------------------------------------------------------------------------------
/pages/search/search.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "搜索"
3 | }
--------------------------------------------------------------------------------
/pages/search/search.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 | 热门搜索
11 | {{hotKeywordItem}}
12 | 热门标签
13 | {{hotTagItem}}
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/pages/search/search.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/message/message.wxss";
2 | .search-hd {
3 | width: 100%;
4 | height: 140rpx;
5 | background-color: #fff;
6 | border-bottom: 1px solid #f8f8f8;
7 | }
8 | .search-area {
9 | box-sizing: border-box;
10 | position: relative;
11 | margin: 30rpx;
12 | }
13 |
14 | .search-type {
15 | position: absolute;
16 | z-index: 11;
17 | top: 0;
18 | left: 0;
19 | width: 120rpx;
20 | height: 80rpx;
21 | line-height: 80rpx;
22 | text-align: center;
23 | border-right: 1px solid #eee;
24 | }
25 |
26 | .search-txt {
27 | box-sizing: border-box;
28 | width: 100%;
29 | height: 80rpx;
30 | padding-left: 140rpx;
31 | padding-right: 20rpx;
32 | border-radius: 10rpx;
33 | border: 1px solid #eee;
34 | font-family: "微软雅黑";
35 | }
36 |
37 | .search-btn {
38 | position: absolute;
39 | z-index: 11;
40 | top: 0;
41 | right: 0;
42 | height: 80rpx;
43 | width: 120rpx;
44 | text-align: center;
45 | line-height: 80rpx;
46 | font-size: 28rpx;
47 | border-bottom-left-radius: 0;
48 | border-top-left-radius: 0;
49 | }
50 |
51 | .search-btn::after{
52 | border-bottom-left-radius: 0;
53 | border-top-left-radius: 0;
54 | }
55 |
56 | .search-keyword {
57 | padding: 30rpx;
58 | }
59 |
60 | .search-keyword-title {
61 | padding-left: 20rpx;
62 | margin-top: 40rpx;
63 | margin-bottom: 20rpx;
64 | font-size: 30rpx;
65 | border-left: 10rpx solid #47a86c;
66 | }
67 |
68 | .search-keyword-item {
69 | display: inline-block;
70 | padding: 10rpx;
71 | border: 1px solid #ccc;
72 | border-radius: 15rpx;
73 | background-color: #fbfbfb;
74 | margin: 0 10rpx 10rpx 0;
75 | color: #555;
76 | }
--------------------------------------------------------------------------------
/pages/searchResult/searchResult.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var config = require('../../comm/script/config')
3 | Page({
4 | data: {
5 | films: [],
6 | hasMore: true,
7 | showLoading: true,
8 | start: 0,
9 | url: '',
10 | keyword: '',
11 | isNull: false,
12 | nullTip: {
13 | tipText: 'sorry,没有找到您要的内容,换个关键词试试吧',
14 | actionText: '返回',
15 | routeUrl: '../../pages/search/search'
16 | }
17 | },
18 | onLoad: function(options) {
19 | var that = this
20 | that.setData({
21 | url: options.url,
22 | keyword: options.keyword,
23 | title: options.keyword
24 | })
25 | douban.search.call(that, that.data.url, that.data.keyword, that.data.start, config.count, function(data){
26 | if (data.subjects.length == 0) {
27 | that.setData({
28 | isNull: true
29 | })
30 | }
31 | })
32 | },
33 | onPullDownRefresh: function() {
34 | var that = this
35 | that.setData({
36 | films: [],
37 | hasMore: true,
38 | showLoading: true,
39 | start: 0
40 | })
41 | douban.search.call(that, that.data.url, that.data.keyword, that.data.start, config.count)
42 | },
43 | onReachBottom: function() {
44 | var that = this
45 | if (!that.data.showLoading) {
46 | douban.search.call(that, that.data.url, that.data.keyword, that.data.start, config.count)
47 | }
48 | },
49 | viewFilmDetail: function(e) {
50 | var data = e.currentTarget.dataset;
51 | wx.redirectTo({
52 | url: "../filmDetail/filmDetail?id=" + data.id
53 | })
54 | },
55 | viewFilmByTag: function(e) {
56 | var data = e.currentTarget.dataset
57 | var keyword = data.tag
58 | wx.redirectTo({
59 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
60 | })
61 | }
62 | })
--------------------------------------------------------------------------------
/pages/searchResult/searchResult.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "搜索结果",
3 | "enablePullDownRefresh": true
4 | }
--------------------------------------------------------------------------------
/pages/searchResult/searchResult.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/pages/searchResult/searchResult.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/filmList/filmList.wxss";
2 | @import "../../component/nullTip/nullTip.wxss";
--------------------------------------------------------------------------------
/pages/setting/setting.js:
--------------------------------------------------------------------------------
1 | var app = getApp()
2 | Page({
3 | data:{
4 | cells: [
5 | [{title: '个人资料', text: '', access: true, fn: 'viewPersonInfo'}],
6 | [
7 | {title: '手机信息', text: '', access: true, fn: 'viewSystemInfo'},
8 | {title: '清除缓存', text: '', access: false, fn: 'clearStorage'}
9 | ],
10 | [{title: '更新位置', text: '', access: true, fn: 'viewLocation'}],
11 | [{title: '关于', text: '', access: true, fn: 'viewAbount'}]
12 | ]
13 | },
14 | onLoad:function(options){},
15 | viewPersonInfo: function(){
16 | wx.redirectTo({
17 | url: "../personInfo/personInfo"
18 | })
19 | },
20 | viewSystemInfo: function(){
21 | wx.redirectTo({
22 | url: "../systemInfo/systemInfo"
23 | })
24 | },
25 | viewLocation: function(){
26 | wx.redirectTo({
27 | url: "../location/location"
28 | })
29 | },
30 | clearStorage: function() {
31 | wx.showModal({
32 | title: '确认要清除',
33 | content: '清除缓存会删除浏览历史和收藏及个人资料',
34 | success: function(res) {
35 | if (res.confirm) {
36 | wx.clearStorage()
37 | app.initStorage()
38 | wx.showToast({
39 | title: '清除成功',
40 | icon: 'success',
41 | duration: 1500
42 | })
43 | }
44 | }
45 | })
46 | },
47 | viewAbount: function() {
48 | wx.redirectTo({
49 | url: "../about/about"
50 | })
51 | }
52 | })
--------------------------------------------------------------------------------
/pages/setting/setting.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "设置",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/setting/setting.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pages/setting/setting.wxss:
--------------------------------------------------------------------------------
1 | @import '../../component/list/list.wxss';
--------------------------------------------------------------------------------
/pages/shake/shake.js:
--------------------------------------------------------------------------------
1 | var util = require('../../util/util')
2 | var config = require('../../comm/script/config')
3 | var douban = require('../../comm/script/fetch')
4 |
5 | // 重力感应参数
6 | var SHAKE_THRESHOLD = 200
7 | var lastUpdate
8 | var x, y, z, lastX, lastY, lastZ
9 | Page({
10 | data:{
11 | x: 0,
12 | y: 0,
13 | z: 0,
14 | film: [], //摇中的电影
15 | films: [], //全部电影列表
16 | showFilm: false, //是否显示摇中的
17 | loaded: false, //数据是否载入完成,没有完成不可以摇
18 | shakeSoundUrl: config.shakeSound.startUrl,
19 | shakeCompleteSoundUrl: config.shakeSound.completeUrl,
20 | shakeWelcomeImg: config.shakeWelcomeImg,
21 | hasMore: true,
22 | debug: false //显示debug数据
23 | },
24 | onLoad:function(options){
25 | // 初始化数据
26 | x = 0, y = 0, z = 0, lastX = 0, lastY = 0, lastZ = 0, lastUpdate = 0;
27 | var that = this
28 | wx.getStorage({
29 | key: 'shakeFilmList',
30 | success: function(res){
31 | if (res.data.length == 0) {
32 | // 如果缓存内有数据,则获取数据
33 | that.setData({
34 | films: res.data,
35 | loaded: true
36 | })
37 | }
38 | },
39 | fail: function() {
40 | // 如果缓存内无数据,则请求数据
41 | that.getData()
42 | }
43 | })
44 | that.shake() //开启监听重力感应
45 | },
46 | shake: function() {
47 | var that = this
48 | //摇一摇音效
49 | this.shakeSound = wx.createAudioContext('shakeSound')
50 | this.shakeCompleteSound = wx.createAudioContext('shakeCompleteSound')
51 | // 是否可以摇 5秒钟一次
52 | var flag = true
53 | wx.onAccelerometerChange(function(res) {
54 | that.setData({
55 | x: res.x,
56 | y: res.y,
57 | z: res.z,
58 | })
59 | var time = new Date()
60 | var curTime = time.getTime()
61 | if ((curTime - lastUpdate) > 100) {
62 | var diffTime = curTime -lastUpdate
63 | lastUpdate = curTime
64 | x = res.x
65 | y = res.y
66 | z = res.z
67 | var speed = Math.abs(x +y + z - lastX - lastY - lastZ) / diffTime * 10000
68 | if (speed > SHAKE_THRESHOLD) {
69 | // 判断数据是否载入和是否在允许的时间(5秒每次间隔)
70 | if (that.data.loaded && flag) {
71 | that.shakeSound.play()
72 | // 随机获取电影
73 | that.getFilm()
74 | setTimeout(function(){
75 | that.shakeCompleteSound.play()
76 | },800)
77 | flag = false
78 | setTimeout(function(){
79 | flag = true
80 | },5000)
81 | }
82 | }
83 | lastX = x
84 | lastY = y
85 | lastZ = z
86 | }
87 | })
88 | },
89 | getData: function() {
90 | var that = this
91 | var start = 0
92 | var count = 250
93 | getPopular()
94 | wx.showToast({
95 | title: '数据加载中',
96 | icon: 'loading',
97 | duration: 10000
98 | })
99 | // 超过10秒关闭载入动画并保存
100 | setTimeout(function(){
101 | done()
102 | },10000)
103 | function done() {
104 | that.setData({
105 | loaded: true
106 | })
107 | wx.hideToast()
108 | that.saveData(that.data.films)
109 | }
110 | function getPopular() {
111 | // 获取热映列表
112 | douban.fetchFilms.call(that, config.apiList.popular, start, count, function(data){ getComming() }, done)
113 | }
114 | function getComming() {
115 | // 获取待映列表
116 | douban.fetchFilms.call(that, config.apiList.coming, start, count, done, done)
117 | }
118 | },
119 | saveData: function(data) {
120 | wx.setStorage({
121 | key: 'shakeFilmList',
122 | data: data
123 | })
124 | },
125 | play: function(){
126 | this.shakeSound.play()
127 | },
128 | getFilm: function() {
129 | var that = this
130 | var length = that.data.films.length
131 | var index = that.getRandomNum(0, length - 1)
132 | that.setData({
133 | film: that.data.films[index],
134 | showFilm: true
135 | })
136 | },
137 | getRandomNum: function (min, max){
138 | var range = max - min;
139 | var rand = Math.random();
140 | var num = min + Math.round(rand * range); //四舍五入
141 | return num;
142 | },
143 | viewFilmDetail: function(e) {
144 | var data = e.currentTarget.dataset;
145 | wx.redirectTo({
146 | url: "../filmDetail/filmDetail?id=" + data.id
147 | })
148 | }
149 | })
150 |
--------------------------------------------------------------------------------
/pages/shake/shake.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "摇一摇",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/shake/shake.wxml:
--------------------------------------------------------------------------------
1 |
2 | 摇一摇调试数据
3 | x: {{x}}
4 | y: {{y}}
5 | z: {{z}}
6 | showFilm: {{showFilm}}
7 | loaded: {{loaded}}
8 | change test: {{test}}
9 |
10 |
11 |
12 |
13 |
14 | {{film.title}}
15 | 导演:{{film.directors[0].name}}
16 | 演员:
17 |
18 | {{filmCastItem.name}}
19 | /
20 |
21 |
22 | 豆瓣评分:
23 |
24 | 暂无评分
25 |
26 |
27 | {{film.rating.average}}分
28 |
29 |
30 | 上映年份:{{film.year}}年
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/pages/shake/shake.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/message/message.wxss";
2 | .debug {
3 | position: fixed;
4 | top: 0;
5 | right: 0;
6 | padding: 40rpx;
7 | background-color: rgba(0, 0, 0, .6);
8 | color: #0aff67;
9 | }
10 | page {
11 | background-color: #338954;
12 | }
13 | #shakeSound, #shakeCompleteSound {
14 | display: none;
15 | }
16 |
17 | .welcome {
18 | width: 750rpx;
19 | height: 1254rpx;
20 | background-color: #338954;
21 | background-size: contain;
22 | background-position: center 30%;
23 | background-repeat: no-repeat;
24 | }
25 |
26 | .film {
27 | position: fixed;
28 | left: 0;
29 | top: 0;
30 | box-sizing: border-box;
31 | display: flex;
32 | flex-direction: column;
33 | justify-content: space-around;
34 | align-items: center;
35 | width: 100%;
36 | height: 100%;
37 | padding: 40rpx 100rpx;
38 | background-color: #eee;
39 | color: #fff;
40 | font-size: 32rpx;
41 | }
42 |
43 | .film-cover {
44 | width: 500rpx;
45 | height: 700rpx;
46 | box-shadow: 0 60rpx 120rpx rgba(0, 0, 0, .4);
47 | }
48 |
49 | .film-intro {
50 | display: flex;
51 | flex-direction: column;
52 | justify-content: space-around;
53 | height: 300rpx;
54 | color: #666;
55 | }
56 |
57 | .film-title {
58 | margin-bottom: 30rpx;
59 | font-size: 50rpx;
60 | text-align: center;
61 | color: #333;
62 | }
63 |
--------------------------------------------------------------------------------
/pages/skin/skin.js:
--------------------------------------------------------------------------------
1 | var config = require('../../comm/script/config')
2 | Page({
3 | data:{
4 | skinList: config.skinList,
5 | nowSkin: ''
6 | },
7 | onLoad:function(options){
8 | var that = this
9 | wx.getStorage({
10 | key: 'skin',
11 | success: function(res){
12 | if (res.data == "") {
13 | that.setData({
14 | nowSkin: config.skinList[0].imgUrl
15 | })
16 | } else {
17 | that.setData({
18 | nowSkin: res.data
19 | })
20 | }
21 | }
22 | })
23 | },
24 | chooseSkin: function(e) {
25 | var url = e.currentTarget.dataset.url
26 | wx.setStorage({
27 | key: 'skin',
28 | data: url,
29 | success: function(res){
30 | wx.navigateBack({
31 | delta: 1,
32 | success: function(res){
33 | console.log('success')
34 | }
35 | })
36 | }
37 | })
38 | }
39 | })
--------------------------------------------------------------------------------
/pages/skin/skin.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "背景卡"
3 | }
--------------------------------------------------------------------------------
/pages/skin/skin.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{skinItem.title}}
6 |
7 |
8 |
--------------------------------------------------------------------------------
/pages/skin/skin.wxss:
--------------------------------------------------------------------------------
1 | .skin-list {
2 | overflow: hidden;
3 | }
4 | .skin-item, .skin-img {
5 | width: 710rpx;
6 | height: 360rpx;
7 | }
8 |
9 | .skin-item {
10 | box-sizing: border-box;
11 | position: relative;
12 | margin: 20rpx auto;
13 | border-radius: 20rpx;
14 | box-shadow: 0 20rpx 20rpx rgba(0, 0, 0, .2);
15 | overflow: hidden;
16 | }
17 |
18 | .skin-item-active {
19 | border: 6rpx solid #47a86c;
20 | }
21 |
22 | .skin-item-active::before {
23 | content: '';
24 | display: block;
25 | position: absolute;
26 | top: -80rpx;
27 | right: -80rpx;
28 | z-index: 4;
29 | width: 160rpx;
30 | height: 160rpx;
31 | transform: rotate(45deg);
32 | background-color: #47a86c;
33 | }
34 |
35 | .skin-item-active::after {
36 | content: '在用';
37 | display: block;
38 | position: absolute;
39 | top: 5px;
40 | right: 3px;
41 | z-index: 4;
42 | text-align: center;
43 | transform: rotate(45deg);
44 | color: #fff;
45 | }
46 |
47 | .skin-title {
48 | box-sizing: border-box;
49 | position: absolute;
50 | bottom: 0;
51 | left: 0;
52 | width: 100%;
53 | height: 80rpx;
54 | font-size: 32rpx;
55 | line-height: 80rpx;
56 | padding: 0 40rpx;
57 | background-color: rgba(0, 0, 0, .6);
58 | border-radius: 0 0 20rpx 20rpx;
59 | color: #fff;
60 | }
--------------------------------------------------------------------------------
/pages/systemInfo/systemInfo.js:
--------------------------------------------------------------------------------
1 | Page({
2 | data:{
3 | cells: [],
4 | minaVersion: 'v2.0'
5 | },
6 | onLoad:function(options){
7 | var that = this
8 | wx.getSystemInfo({
9 | success: function(res) {
10 | var cells = [[]]
11 | var resolution = res.windowWidth*res.pixelRatio + '*' + res.windowHeight*res.pixelRatio
12 | cells[0].push({title:'手机型号', text:res.model, access: false, fn: ''})
13 | cells[0].push({title:'分辨率', text:resolution, access: false, fn: ''})
14 | cells[0].push({title:'系统语言', text:res.language, access: false, fn: ''})
15 | cells[0].push({title:'微信版本', text:res.version, access: false, fn: ''})
16 | cells[0].push({title:'小程序版本', text:that.data.minaVersion, access: false, fn: ''})
17 | that.setData({
18 | cells: cells
19 | })
20 | }
21 | })
22 | }
23 | })
--------------------------------------------------------------------------------
/pages/systemInfo/systemInfo.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "手机信息",
3 | "enablePullDownRefresh": false
4 | }
--------------------------------------------------------------------------------
/pages/systemInfo/systemInfo.wxml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pages/systemInfo/systemInfo.wxss:
--------------------------------------------------------------------------------
1 | @import '../../component/list/list.wxss';
--------------------------------------------------------------------------------
/pages/top/top.js:
--------------------------------------------------------------------------------
1 | var douban = require('../../comm/script/fetch')
2 | var config = require('../../comm/script/config')
3 | Page({
4 | data: {
5 | films: [],
6 | hasMore: true,
7 | showLoading: true,
8 | start: 0
9 | },
10 | onLoad: function() {
11 | var that = this
12 | douban.fetchFilms.call(that, config.apiList.top, that.data.start)
13 | },
14 | onPullDownRefresh: function() {
15 | var that = this
16 | that.setData({
17 | films: [],
18 | hasMore: true,
19 | showLoading: true,
20 | start: 0
21 | })
22 | douban.fetchFilms.call(that, config.apiList.top, that.data.start)
23 | },
24 | onReachBottom: function() {
25 | var that = this
26 | if (!that.data.showLoading) {
27 | douban.fetchFilms.call(that, config.apiList.top, that.data.start)
28 | }
29 | },
30 | viewFilmDetail: function(e) {
31 | var data = e.currentTarget.dataset;
32 | wx.navigateTo({
33 | url: "../filmDetail/filmDetail?id=" + data.id
34 | })
35 | },
36 | viewFilmByTag: function(e) {
37 | var data = e.currentTarget.dataset
38 | var keyword = data.tag
39 | wx.navigateTo({
40 | url: '../searchResult/searchResult?url=' + encodeURIComponent(config.apiList.search.byTag) + '&keyword=' + keyword
41 | })
42 | }
43 | })
--------------------------------------------------------------------------------
/pages/top/top.json:
--------------------------------------------------------------------------------
1 | {
2 | "navigationBarTitleText": "最具口碑",
3 | "enablePullDownRefresh": true
4 | }
--------------------------------------------------------------------------------
/pages/top/top.wxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/pages/top/top.wxss:
--------------------------------------------------------------------------------
1 | @import "../../component/filmList/filmList.wxss";
2 | @import "../../component/message/message.wxss";
--------------------------------------------------------------------------------
/resource/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sesine/wechat-weapp-movie/913c27a10dc3dabaeaa718733c6c599277740206/resource/logo.png
--------------------------------------------------------------------------------
/util/util.js:
--------------------------------------------------------------------------------
1 | function formatTime(time) {
2 | if (typeof time !== 'number' || time < 0) {
3 | return time
4 | }
5 |
6 | var hour = parseInt(time / 3600)
7 | time = time % 3600
8 | var minute = parseInt(time / 60)
9 | time = time % 60
10 | var second = time
11 |
12 | return ([hour, minute, second]).map(function (n) {
13 | n = n.toString()
14 | return n[1] ? n : '0' + n
15 | }).join(':')
16 | }
17 |
18 | function getDate() {
19 | var time = new Date()
20 | var year = time.getFullYear()
21 | var month = time.getMonth()
22 | month = month < 10 ? '0' + month : month
23 | var day = time.getDay()
24 | day = day < 10 ? '0' + day : day
25 | return [year, month, day].join('-')
26 | }
27 |
28 | function getTime() {
29 | var time = new Date()
30 | var hours = time.getHours()
31 | hours = hours < 10 ? '0' + hours : hours
32 | var minute = time.getMinutes()
33 | minute = minute < 10 ? '0' + minute : minute
34 | var second = time.getSeconds()
35 | second = second < 10 ? '0' + second : second
36 | return [hours, minute, second].join(':')
37 | }
38 |
39 | module.exports = {
40 | formatTime: formatTime,
41 | getDate: getDate,
42 | getTime: getTime
43 | }
44 |
--------------------------------------------------------------------------------