Commit 339f8f40edc818959c71af6290806b20f5f1fc5b
0 parents
init
Showing
18 changed files
with
393 additions
and
0 deletions
README.md
0 → 100644
app.js
0 → 100644
1 | +++ a/app.js | ||
1 | +//app.js | ||
2 | +App({ | ||
3 | + onLaunch: function() { | ||
4 | + | ||
5 | + }, | ||
6 | + getUserInfo: function(cb) { | ||
7 | + var that = this | ||
8 | + if (this.globalData.userInfo) { | ||
9 | + typeof cb == "function" && cb(this.globalData.userInfo) | ||
10 | + } else { | ||
11 | + //调用登录接口 | ||
12 | + wx.login({ | ||
13 | + success: function() { | ||
14 | + wx.getUserInfo({ | ||
15 | + success: function(res) { | ||
16 | + that.globalData.userInfo = res.userInfo | ||
17 | + typeof cb == "function" && cb(that.globalData.userInfo) | ||
18 | + } | ||
19 | + }) | ||
20 | + } | ||
21 | + }) | ||
22 | + } | ||
23 | + }, | ||
24 | + globalData: { | ||
25 | + userInfo: null | ||
26 | + } | ||
27 | +}); |
app.json
0 → 100644
1 | +++ a/app.json | ||
1 | +{ | ||
2 | + "pages": [ | ||
3 | + "pages/index/index", | ||
4 | + "pages/result/result" | ||
5 | + ], | ||
6 | + "window": { | ||
7 | + "backgroundTextStyle": "light", | ||
8 | + "navigationBarBackgroundColor": "#fff", | ||
9 | + "navigationBarTitleText": "文字转语音", | ||
10 | + "navigationBarTextStyle": "black" | ||
11 | + }, | ||
12 | + "sitemapLocation": "sitemap.json" | ||
13 | +} | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
app.wxss
0 → 100644
images/logo.png
0 → 100644
21.3 KB
images/logo1.png
0 → 100644
13.2 KB
images/logo2.png
0 → 100644
1.7 KB
pages/index/index.js
0 → 100644
1 | +++ a/pages/index/index.js | ||
1 | +//index.js | ||
2 | +//获取应用实例 | ||
3 | +const app = getApp(); | ||
4 | +const storageKey = 'audioTypeselectedIndex'; | ||
5 | +const selectedIndex = wx.getStorageSync(storageKey); | ||
6 | +const type = [ | ||
7 | + { | ||
8 | + desc: '男声一', | ||
9 | + createUrl(text){ | ||
10 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=1` | ||
11 | + } | ||
12 | + }, | ||
13 | + { | ||
14 | + desc: '男声二', | ||
15 | + createUrl(text){ | ||
16 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=4` | ||
17 | + } | ||
18 | + }, | ||
19 | + { | ||
20 | + desc: '女声一', | ||
21 | + createUrl(text){ | ||
22 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=2` | ||
23 | + } | ||
24 | + }, | ||
25 | + { | ||
26 | + desc: '女声二', | ||
27 | + createUrl(text){ | ||
28 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=3` | ||
29 | + } | ||
30 | + }, | ||
31 | + { | ||
32 | + desc: '女声三', | ||
33 | + createUrl(text){ | ||
34 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=5` | ||
35 | + } | ||
36 | + }, | ||
37 | + { | ||
38 | + desc: '女声四', | ||
39 | + createUrl(text){ | ||
40 | + return `https://fanyi.sogou.com/reventondc/synthesis?text=${text}&speed=1&lang=zh-CHS&from=translateweb&speaker=6` | ||
41 | + } | ||
42 | + }, | ||
43 | + { | ||
44 | + desc: '女声五', | ||
45 | + createUrl(text){ | ||
46 | + return `https://tts.youdao.com/fanyivoice?word=${text}&le=zh&keyfrom=speaker-target` | ||
47 | + } | ||
48 | + } | ||
49 | +]; | ||
50 | + | ||
51 | +let audio = null; | ||
52 | + | ||
53 | +Page({ | ||
54 | + data: { | ||
55 | + placeholder: '点击此处输入文字', | ||
56 | + text: '', | ||
57 | + type, | ||
58 | + selectedIndex: String(selectedIndex) ? selectedIndex : 5 | ||
59 | + }, | ||
60 | + onLoad(){ | ||
61 | + wx.showShareMenu(); | ||
62 | + }, | ||
63 | + inputText(e){ | ||
64 | + this.data.text = e.detail.value; | ||
65 | + }, | ||
66 | + play(){ | ||
67 | + const text = this.data.text || this.data.placeholder; | ||
68 | + this.resetAudio(); | ||
69 | + audio = wx.createInnerAudioContext({useWebAudioImplement: true}); | ||
70 | + audio.autoplay = true; | ||
71 | + audio.src = this.data.type[this.data.selectedIndex].createUrl(text); | ||
72 | + }, | ||
73 | + clear(){ | ||
74 | + this.resetAudio(); | ||
75 | + this.setData({ | ||
76 | + text: '' | ||
77 | + }); | ||
78 | + }, | ||
79 | + resetAudio(){ | ||
80 | + if(audio){ | ||
81 | + audio.destroy(); | ||
82 | + audio = null; | ||
83 | + } | ||
84 | + }, | ||
85 | + selectIndex(e){ | ||
86 | + const { index } = e.target.dataset; | ||
87 | + this.setData({ | ||
88 | + selectedIndex: index | ||
89 | + }, () => { | ||
90 | + this.play(); | ||
91 | + }); | ||
92 | + wx.setStorageSync(storageKey, index); | ||
93 | + } | ||
94 | +}); |
pages/index/index.json
0 → 100644
pages/index/index.wxml
0 → 100644
1 | +++ a/pages/index/index.wxml | ||
1 | +<!--index.wxml--> | ||
2 | +<view class="container"> | ||
3 | + <view class="text-view"> | ||
4 | + <textarea | ||
5 | + auto-focus | ||
6 | + class="text-area" | ||
7 | + placeholder="{{placeholder}}" | ||
8 | + confirm-type="done" | ||
9 | + bindconfirm="play" | ||
10 | + bindinput="inputText" | ||
11 | + value="{{text}}" | ||
12 | + /> | ||
13 | + </view> | ||
14 | + <view class="button-view"> | ||
15 | + <button bindtap="play" class="button" type="primary" size="mini"> 播放 </button> | ||
16 | + <button bindtap="clear" class="button" type="default" size="mini"> 清空 </button> | ||
17 | + </view> | ||
18 | + <view class="type-view"> | ||
19 | + <button | ||
20 | + wx:for="{{type}}" | ||
21 | + wx:key="desc" | ||
22 | + bindtap="selectIndex" | ||
23 | + class="button" | ||
24 | + data-index="{{index}}" | ||
25 | + type="{{index === selectedIndex ? 'primary' : 'default'}}" | ||
26 | + size="mini" | ||
27 | + > {{item.desc}} </button> | ||
28 | + </view> | ||
29 | +</view> |
pages/index/index.wxss
0 → 100644
1 | +++ a/pages/index/index.wxss | ||
1 | +/**index.wxss**/ | ||
2 | + | ||
3 | +.text-view{ | ||
4 | + width: 100%; | ||
5 | + text-align: center; | ||
6 | +} | ||
7 | +.text-area{ | ||
8 | + width: 95%; | ||
9 | + padding: 5rpx 10rpx; | ||
10 | + text-align: left; | ||
11 | + box-sizing: border-box; | ||
12 | + display: inline-block; | ||
13 | + border: 1rpx dashed #afafaf; | ||
14 | +} | ||
15 | + | ||
16 | +.button-view{ | ||
17 | + width: 100%; | ||
18 | + margin-top: 20rpx; | ||
19 | + text-align: center; | ||
20 | +} | ||
21 | +.button-view button{ | ||
22 | + width: 95%; | ||
23 | + display: inline-block; | ||
24 | + height: 92rpx; | ||
25 | + line-height: 92rpx; | ||
26 | + font-size: 36rpx; | ||
27 | + text-align: center; | ||
28 | +} | ||
29 | + | ||
30 | +.type-view{ | ||
31 | + width: 95%; | ||
32 | + margin-top: 40rpx; | ||
33 | + display: flex; | ||
34 | + justify-content: space-between; | ||
35 | +} | ||
36 | +.type-view button{ | ||
37 | + padding: 20rpx 10rpx; | ||
38 | + writing-mode: vertical-lr; | ||
39 | + text-align: center; | ||
40 | + letter-spacing: 15rpx; | ||
41 | +} | ||
0 | \ No newline at end of file | 42 | \ No newline at end of file |
pages/result/result.js
0 → 100644
1 | +++ a/pages/result/result.js | ||
1 | +Page({ | ||
2 | + data: { | ||
3 | + total: '', | ||
4 | + benefit: '', | ||
5 | + diff: '' | ||
6 | + }, | ||
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) | ||
14 | + }); | ||
15 | + wx.showShareMenu(); | ||
16 | + }, | ||
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 | + } | ||
34 | + } | ||
35 | +}); | ||
0 | \ No newline at end of file | 36 | \ No newline at end of file |
pages/result/result.json
0 → 100644
pages/result/result.wxml
0 → 100644
1 | +++ a/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> | ||
0 | \ No newline at end of file | 14 | \ No newline at end of file |
pages/result/result.wxss
0 → 100644
1 | +++ a/pages/result/result.wxss | ||
1 | +.text-view{ | ||
2 | + display: flex; | ||
3 | + flex-direction: row; | ||
4 | + width: 100%; | ||
5 | + padding: 15rpx; | ||
6 | + background: #efefef; | ||
7 | +} | ||
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; | ||
16 | + text-align: right; | ||
17 | +} | ||
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; | ||
26 | +} | ||
27 | +.red{ | ||
28 | + color: red; | ||
29 | +} | ||
30 | +.green{ | ||
31 | + color: green; | ||
32 | +} | ||
33 | +.blue{ | ||
34 | + color: blue; | ||
35 | +} | ||
0 | \ No newline at end of file | 36 | \ No newline at end of file |
project.config.json
0 → 100644
1 | +++ a/project.config.json | ||
1 | +{ | ||
2 | + "description": "项目配置文件。", | ||
3 | + "setting": { | ||
4 | + "urlCheck": false, | ||
5 | + "es6": true, | ||
6 | + "enhance": true, | ||
7 | + "postcss": true, | ||
8 | + "preloadBackgroundData": false, | ||
9 | + "minified": true, | ||
10 | + "newFeature": true, | ||
11 | + "coverView": true, | ||
12 | + "nodeModules": false, | ||
13 | + "autoAudits": false, | ||
14 | + "showShadowRootInWxmlPanel": true, | ||
15 | + "scopeDataCheck": false, | ||
16 | + "uglifyFileName": false, | ||
17 | + "checkInvalidKey": true, | ||
18 | + "checkSiteMap": true, | ||
19 | + "uploadWithSourceMap": true, | ||
20 | + "compileHotReLoad": false, | ||
21 | + "lazyloadPlaceholderEnable": false, | ||
22 | + "useMultiFrameRuntime": true, | ||
23 | + "useApiHook": true, | ||
24 | + "useApiHostProcess": true, | ||
25 | + "babelSetting": { | ||
26 | + "ignore": [], | ||
27 | + "disablePlugins": [], | ||
28 | + "outputPath": "" | ||
29 | + }, | ||
30 | + "enableEngineNative": false, | ||
31 | + "useIsolateContext": false, | ||
32 | + "userConfirmedBundleSwitch": false, | ||
33 | + "packNpmManually": false, | ||
34 | + "packNpmRelationList": [], | ||
35 | + "minifyWXSS": true, | ||
36 | + "disableUseStrict": false, | ||
37 | + "minifyWXML": true, | ||
38 | + "showES6CompileOption": false, | ||
39 | + "useCompilerPlugins": false | ||
40 | + }, | ||
41 | + "compileType": "miniprogram", | ||
42 | + "libVersion": "1.9.93", | ||
43 | + "appid": "wx330e54aa6000516d", | ||
44 | + "projectname": "%E8%AF%AD%E9%9F%B3%E5%8A%A9%E6%89%8B", | ||
45 | + "isGameTourist": false, | ||
46 | + "condition": { | ||
47 | + "search": { | ||
48 | + "list": [] | ||
49 | + }, | ||
50 | + "conversation": { | ||
51 | + "list": [] | ||
52 | + }, | ||
53 | + "game": { | ||
54 | + "currentL": -1, | ||
55 | + "list": [] | ||
56 | + }, | ||
57 | + "miniprogram": { | ||
58 | + "list": [] | ||
59 | + } | ||
60 | + } | ||
61 | +} | ||
0 | \ No newline at end of file | 62 | \ No newline at end of file |
sitemap.json
0 → 100644
utils/util.js
0 → 100644
1 | +++ a/utils/util.js | ||
1 | +function formatTime(date) { | ||
2 | + var year = date.getFullYear() | ||
3 | + var month = date.getMonth() + 1 | ||
4 | + var day = date.getDate() | ||
5 | + | ||
6 | + var hour = date.getHours() | ||
7 | + var minute = date.getMinutes() | ||
8 | + var second = date.getSeconds() | ||
9 | + | ||
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 | +} | ||
18 | + | ||
19 | +module.exports = { | ||
20 | + formatTime: formatTime | ||
21 | +} |