Commit c9483180c2b7fee8c141932ca61129cf27e57e3c
1 parent
339f8f40
feat: add download page
Showing
4 changed files
with
169 additions
and
84 deletions
pages/result/result.js
1 | + | |
2 | +import { convertDate } from '../../utils/util.js'; | |
3 | +//获取应用实例 | |
4 | +const app = getApp(); | |
5 | +const audioList = app.globalData.getAudioList(); | |
6 | +const type = app.globalData.getTypeList(); | |
7 | + | |
8 | +let audio = null; | |
9 | +let formateDate = function (audioList) { | |
10 | + return audioList.map(audio => { | |
11 | + return { | |
12 | + ...audio, | |
13 | + date: convertDate(audio.time) | |
14 | + } | |
15 | + }); | |
16 | +}; | |
17 | + | |
1 | 18 | Page({ |
2 | 19 | data: { |
3 | - total: '', | |
4 | - benefit: '', | |
5 | - diff: '' | |
20 | + audioList: formateDate(audioList) | |
21 | + }, | |
22 | + onLoad (options) { | |
23 | + | |
6 | 24 | }, |
7 | - onLoad: function(options){ | |
8 | - var total = new Number((options.price*2*options.days).toFixed(2)); | |
9 | - var benefit = isNaN(total) ? 0 : this.calc(total).toFixed(2); | |
10 | - this.setData({ | |
11 | - total: isNaN(total) ? 0 : total.toFixed(2), | |
12 | - benefit: benefit, | |
13 | - diff: (total - benefit).toFixed(2) | |
25 | + play(e){ | |
26 | + const { index } = e.target.dataset; | |
27 | + const target = app.globalData.getAudioList()[index]; | |
28 | + audio && audio.destroy(); | |
29 | + audio = wx.createInnerAudioContext({useWebAudioImplement: true}); | |
30 | + audio.autoplay = true; | |
31 | + audio.src = target.path; | |
32 | + }, | |
33 | + download(e){ | |
34 | + const { index } = e.target.dataset; | |
35 | + const target = app.globalData.getAudioList()[index]; | |
36 | + const ext = target.path.split('.').pop(); | |
37 | + wx.shareFileMessage({ | |
38 | + filePath: target.path, | |
39 | + fileName: `${target.text.slice(0, 8)}.${ext}` | |
14 | 40 | }); |
15 | - wx.showShareMenu(); | |
16 | 41 | }, |
17 | - calc: function(fee){ | |
18 | - //662.5 = 100 + 50/0.8 + 250/0.5 | |
19 | - if(fee > 662.5){ | |
20 | - return fee - 262.5; | |
21 | - } | |
22 | - //162.5 = 100 + 50/0.8 | |
23 | - else if(fee > 162.5){ | |
24 | - //(fee - 162.5)/2 + 150; | |
25 | - return fee/2 + 68.75; | |
26 | - } | |
27 | - else if(fee > 100){ | |
28 | - //(fee - 100)*0.8 + 100; | |
29 | - return fee*0.8 + 20; | |
30 | - } | |
31 | - else{ | |
32 | - return fee; | |
33 | - } | |
42 | + delete(e){ | |
43 | + const { index } = e.target.dataset; | |
44 | + wx.showModal({ | |
45 | + title: '提示', | |
46 | + content: '确认删除吗?', | |
47 | + success: res => { | |
48 | + if(!res.confirm){ | |
49 | + return; | |
50 | + } | |
51 | + const newList = app.globalData.setAudioList('delete', index); | |
52 | + this.setData({ | |
53 | + audioList: formateDate(newList) | |
54 | + }); | |
55 | + } | |
56 | + }); | |
34 | 57 | } |
35 | 58 | }); |
36 | 59 | \ No newline at end of file | ... | ... |
pages/result/result.wxml
1 | -<view class="text-view border"> | |
2 | - <text class="label">每月总消费: </text> | |
3 | - <text class="val red">{{total}} 元</text> | |
4 | -</view> | |
5 | -<view class="text-view border"> | |
6 | - <text class="label">优惠后: </text> | |
7 | - <text class="val green">{{benefit}} 元</text> | |
8 | -</view> | |
9 | -<view class="text-view"> | |
10 | - <text class="label">共节省了: </text> | |
11 | - <text class="val blue">{{diff}} 元</text> | |
12 | -</view> | |
13 | -<ad unit-id="adunit-0a991618c53a4445"></ad> | |
14 | 1 | \ No newline at end of file |
2 | +<ad unit-id="adunit-0a991618c53a4445" class="ad"></ad> | |
3 | +<view | |
4 | + class="text-view" | |
5 | + wx:for="{{audioList}}" | |
6 | + wx:key="path" | |
7 | + > | |
8 | + <view | |
9 | + class="text"> | |
10 | + {{item.text}} | |
11 | + </view> | |
12 | + <view class="btn-view"> | |
13 | + <view class="text-time">{{item.date}}</view> | |
14 | + <button class="button" type="warn" size="mini" data-index="{{index}}" bindtap="delete">删除</button> | |
15 | + <button class="button" type="primary" size="mini" data-index="{{index}}" bindtap="play">播放</button> | |
16 | + <button class="button" type="primary" size="mini" data-index="{{index}}" bindtap="download">下载</button> | |
17 | + </view> | |
18 | +</view> | |
15 | 19 | \ No newline at end of file | ... | ... |
pages/result/result.wxss
1 | +.ad{ | |
2 | + margin-bottom: 10px; | |
3 | +} | |
1 | 4 | .text-view{ |
2 | - display: flex; | |
3 | - flex-direction: row; | |
4 | - width: 100%; | |
5 | - padding: 15rpx; | |
5 | + margin-bottom: 10px; | |
6 | + padding: 10px; | |
6 | 7 | background: #efefef; |
7 | 8 | } |
8 | -.text-view .label{ | |
9 | - flex: 1; | |
10 | - height: 72rpx; | |
11 | - padding-right: 20rpx; | |
12 | - vertical-align: top; | |
13 | - line-height: 72rpx; | |
14 | - font-size: 36rpx; | |
15 | - color: #666; | |
9 | +.btn-view{ | |
10 | + padding-top: 10px; | |
16 | 11 | text-align: right; |
12 | + border-top: 0.5px solid #d0d0d0; | |
17 | 13 | } |
18 | -.text-view .val{ | |
19 | - flex: 2; | |
20 | - height: 72rpx; | |
21 | - line-height: 72rpx; | |
22 | - font-size: 36rpx; | |
23 | -} | |
24 | -.border{ | |
25 | - border-bottom: 1rpx solid #dfdfdf; | |
14 | +.button{ | |
15 | + margin-left: 10px; | |
26 | 16 | } |
27 | -.red{ | |
28 | - color: red; | |
17 | +.left{ | |
18 | + float: left; | |
19 | + margin-left: 0; | |
29 | 20 | } |
30 | -.green{ | |
31 | - color: green; | |
21 | +.text{ | |
22 | + padding-top: 10px; | |
23 | + padding-bottom: 20px; | |
32 | 24 | } |
33 | -.blue{ | |
34 | - color: blue; | |
25 | +.text-time{ | |
26 | + float: left; | |
27 | + font-size: 13px; | |
28 | + line-height: 2.3; | |
29 | + color: #bababa; | |
35 | 30 | } |
36 | 31 | \ No newline at end of file | ... | ... |
utils/util.js
1 | -function formatTime(date) { | |
2 | - var year = date.getFullYear() | |
3 | - var month = date.getMonth() + 1 | |
4 | - var day = date.getDate() | |
1 | +/** | |
2 | + * 语义化时间转换 | |
3 | + * @param {number} [timestamp] - 当前的时间,可传格式化的字符串或时间戳 | |
4 | + */ | |
5 | +function convertDate(timestamp=Date.now()){ | |
6 | + // pass in `yyyy-mm-dd hh:ii:ss` | |
7 | + // convert to `yyyy-mm-ddThh:ii:ss.000+08:00` | |
8 | + const targetTimestamp = Number(timestamp) ? timestamp : Date.parse(`${timestamp.split(' ').join('T')}.000+08:00`); | |
9 | + const diff = new Date().getTime() - targetTimestamp; | |
10 | + let time = ''; | |
11 | + //小于5分钟->刚刚 | |
12 | + if(diff < 5*60*1000){ | |
13 | + time = '刚刚'; | |
14 | + } | |
15 | + //小于1小时->xx分钟前 | |
16 | + else if(diff < 1*60*60*1000){ | |
17 | + time = parseInt(diff/1000/60) + '分钟前'; | |
18 | + } | |
19 | + //小于24小时->xx小时前 | |
20 | + else if(diff < 24*60*60*1000){ | |
21 | + time = parseInt(diff/1000/60/60) + '小时前'; | |
22 | + } | |
23 | + //小于30天->xx天前 | |
24 | + else if(diff < 30*24*60*60*1000){ | |
25 | + time = parseInt(diff/1000/60/60/24) < 2 ? '昨天' : (parseInt(diff/1000/60/60/24) + '天前'); | |
26 | + } | |
27 | + //小于1年->xx个月前 | |
28 | + else if(diff < 365*24*60*60*1000){ | |
29 | + time = parseInt(diff/1000/60/60/24/30) + '个月前'; | |
30 | + } | |
31 | + //x年x月前 | |
32 | + else{ | |
33 | + let days = parseInt(diff/1000/60/60/24); | |
34 | + time = parseInt(days/365) + '年' + (parseInt(days%365/30) ? (parseInt(days%365/30) + '个月前') : '前'); | |
35 | + } | |
36 | + return time; | |
37 | +}; | |
5 | 38 | |
6 | - var hour = date.getHours() | |
7 | - var minute = date.getMinutes() | |
8 | - var second = date.getSeconds() | |
39 | +/** | |
40 | + * 时间戳转化为日期 | |
41 | + * @param {string} [formateString] 要转化的格式,默认 'y-m-d h:i:s' | |
42 | + * @param {number} [timestamp] 要转化的时间戳,默认 Date.now() | |
43 | + * @returns {string} 格式化后的日期 | |
44 | + */ | |
45 | +function timestampToDate(formateString='y-m-d h:i:s', timestamp=Date.now()){ | |
46 | + if(isNaN(+timestamp)){ | |
47 | + console.error('util.timeStampToDate: timestamp is invilid.'); | |
48 | + return null; | |
49 | + } | |
50 | + if(String(timestamp).length === 10){ | |
51 | + timestamp *= 1000; | |
52 | + } | |
53 | + const reg = /y|m|d|h|i|s/g; | |
54 | + const date = new Date(+timestamp); | |
55 | + const saithToDual = time => { | |
56 | + if(time.toString().length < 2){ | |
57 | + time = '0' + time; | |
58 | + } | |
59 | + return time; | |
60 | + }; | |
9 | 61 | |
10 | - | |
11 | - return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') | |
12 | -} | |
13 | - | |
14 | -function formatNumber(n) { | |
15 | - n = n.toString() | |
16 | - return n[1] ? n : '0' + n | |
17 | -} | |
62 | + return formateString.replace(reg, function($1){ | |
63 | + switch($1){ | |
64 | + case 'y': | |
65 | + return date.getFullYear(); | |
66 | + case 'm': | |
67 | + return saithToDual(date.getMonth() + 1); | |
68 | + case 'd': | |
69 | + return saithToDual(date.getDate()); | |
70 | + case 'h': | |
71 | + return saithToDual(date.getHours()); | |
72 | + case 'i': | |
73 | + return saithToDual(date.getMinutes()); | |
74 | + case 's': | |
75 | + return saithToDual(date.getSeconds()); | |
76 | + } | |
77 | + return $1; | |
78 | + }); | |
79 | +}; | |
18 | 80 | |
19 | 81 | module.exports = { |
20 | - formatTime: formatTime | |
21 | -} | |
82 | + convertDate, | |
83 | + timestampToDate | |
84 | +}; | ... | ... |