diff --git a/app.js b/app.js new file mode 100644 index 0000000..f9db25d --- /dev/null +++ b/app.js @@ -0,0 +1,39 @@ +// app.js +App({ + onLaunch() { + // 展示本地存储能力 + const logs = wx.getStorageSync('logs') || [] + logs.unshift(Date.now()) + wx.setStorageSync('logs', logs) + + // 登录 + wx.login({ + success: res => { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + } + }) + // 获取用户信息 + wx.getSetting({ + success: res => { + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 + wx.getUserInfo({ + success: res => { + // 可以将 res 发送给后台解码出 unionId + this.globalData.userInfo = res.userInfo + + // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 + // 所以此处加入 callback 以防止这种情况 + if (this.userInfoReadyCallback) { + this.userInfoReadyCallback(res) + } + } + }) + } + } + }) + }, + globalData: { + userInfo: null + } +}) diff --git a/app.json b/app.json new file mode 100644 index 0000000..fe02cc0 --- /dev/null +++ b/app.json @@ -0,0 +1,14 @@ +{ + "pages":[ + "pages/index/index", + "pages/logs/logs" + ], + "window":{ + "backgroundTextStyle":"light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "计算器", + "navigationBarTextStyle":"black" + }, + "style": "v2", + "sitemapLocation": "sitemap.json" +} diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..06c6fc9 --- /dev/null +++ b/app.wxss @@ -0,0 +1,10 @@ +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..cf71d03 --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,71 @@ +Page({ + data:{ + num:'', + fun:'' + }, + result:null, + isClear:true, + + numButton:function(event){ + var num=event.target.dataset.value + if(this.isClear||this.data.num=="0"){ + this.setData({ //把输入的数赋值给num + num:num + }); + this.isClear = false; + }else{ + this.setData({ + num:this.data.num+num + }); + } + }, + funButton:function(event){ + var fun=this.data.fun + var num=Number(this.data.num) //获取前面输入的数 + this.setData({ + fun:event.target.dataset.value //获取操作符赋值给fun + }) + this.isClear=true; + if(this.result==null){ //装载运算结果 + this.result=num; + return; + } + if(fun=="+"){ + this.result=this.result+num + }else if(fun=="-"){ + this.result=this.result-num + }else if(fun=="*"){ + this.result=this.result*num + }else if(fun=="/"){ + this.result=this.result/num + }else if(fun=="%"){ + this.result=this.result%num + } + this.setData({ + num:this.result + }); +}, + +potButton:function(event){ + if(this.isClear){ + this.setData({num:'0.'}); + this.isClear=false; + } + if(this.data.num.indexOf('.')>=0){ //查找小数点 + return; + } + this.setData({num:this.data.num+'.'}); +}, +DELButton:function(event){ + var num=this.data.num.substr(0,this.data.num.length-1); + this.setData({ + num: num ==''?'0':num + }); +}, + +resetButton:function(event){ + this.result=null, + this.isClear=false, + this.setData({num:"0",fun:''}); +}, +}) \ No newline at end of file diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..329a6a4 --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1,39 @@ + + + + {{num}} + {{fun}} + + + + + AC + DEL + % + ÷ + + + 7 + 8 + 9 + × + + + 4 + 5 + 6 + - + + + 1 + 2 + 3 + + + + + 0 + . + = + + + \ No newline at end of file diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..890fb00 --- /dev/null +++ b/pages/index/index.wxss @@ -0,0 +1,70 @@ +page{ + display: flex; + flex-direction: column-reverse; + height: 100%; + } + + #result{ /*运算+结果区域*/ + flex: flex-basis; + flex-direction: row; + background:rgb(255, 255, 255); + position: relative; + } + + #num{ /*结果*/ + position: absolute; + font-size: 57px; + bottom: 5vh; + right: 4vw; + } + + #fun{ /*不知道咋把运算符隐藏……我就直接设字体大小为0了嘿嘿*/ + font-size: 0px; + } + + .buttons{ /*按键部分*/ + flex: flex-basis; + display:flex; + flex-direction: column; + font-size: 49px; + } + + .buttons>view{ /*按键部分排版*/ + flex:1; + display:flex; + } + + .buttons>view>view{ + flex: 1; + border-top: 1px solid rgb(255, 255, 255); + border-left: 1px solid rgb(255, 255, 255); + box-sizing: border-box; + display: flex; + justify-content: center; + } + + .buttons >view:last-child>view:first-child{ /*0的盒子*/ + flex-basis: 25.4%; + } + + .buttons >view:first-child>view:first-child{ /*AC*/ + color: orange; + /*flex-basis: 2%;*/ + } + + .buttons>view:first-child>view:nth-child(2){ /*DEL*/ + color:orange; + } + + .buttons>view:first-child>view:nth-child(3){ /*%*/ + color:orange; + } + + .buttons >view>view:last-child{ /*每一个view最后一个元素颜色*/ + color: orange; + } + + .bg{ /*hover-class的颜色*/ + background: rgb(179, 177, 177); + } + \ No newline at end of file diff --git a/pages/logs/logs.js b/pages/logs/logs.js new file mode 100644 index 0000000..3c7cb60 --- /dev/null +++ b/pages/logs/logs.js @@ -0,0 +1,15 @@ +// logs.js +const util = require('../../utils/util.js') + +Page({ + data: { + logs: [] + }, + onLoad() { + this.setData({ + logs: (wx.getStorageSync('logs') || []).map(log => { + return util.formatTime(new Date(log)) + }) + }) + } +}) diff --git a/pages/logs/logs.json b/pages/logs/logs.json new file mode 100644 index 0000000..3ee76c1 --- /dev/null +++ b/pages/logs/logs.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "查看启动日志", + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/logs/logs.wxml b/pages/logs/logs.wxml new file mode 100644 index 0000000..b5a85ac --- /dev/null +++ b/pages/logs/logs.wxml @@ -0,0 +1,6 @@ + + + + {{index + 1}}. {{log}} + + diff --git a/pages/logs/logs.wxss b/pages/logs/logs.wxss new file mode 100644 index 0000000..94d4b88 --- /dev/null +++ b/pages/logs/logs.wxss @@ -0,0 +1,8 @@ +.log-list { + display: flex; + flex-direction: column; + padding: 40rpx; +} +.log-item { + margin: 10rpx; +} diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..5a23a25 --- /dev/null +++ b/project.config.json @@ -0,0 +1,64 @@ +{ + "description": "项目配置文件", + "packOptions": { + "ignore": [] + }, + "setting": { + "bundle": false, + "userConfirmedBundleSwitch": false, + "urlCheck": true, + "scopeDataCheck": false, + "coverView": true, + "es6": true, + "postcss": true, + "compileHotReLoad": false, + "preloadBackgroundData": false, + "minified": true, + "autoAudits": false, + "newFeature": false, + "uglifyFileName": false, + "uploadWithSourceMap": true, + "useIsolateContext": true, + "nodeModules": false, + "enhance": false, + "useCompilerModule": true, + "userConfirmedUseCompilerModuleSwitch": false, + "useMultiFrameRuntime": true, + "useApiHook": true, + "useApiHostProcess": true, + "showShadowRootInWxmlPanel": true, + "packNpmManually": false, + "enableEngineNative": false, + "packNpmRelationList": [], + "minifyWXSS": true + }, + "compileType": "miniprogram", + "libVersion": "2.14.4", + "appid": "wxd2a3746dfa2f088d", + "projectname": "%E8%AE%A1%E7%AE%97%E5%99%A8-1", + "debugOptions": { + "hidedInDevtools": [] + }, + "scripts": {}, + "isGameTourist": false, + "condition": { + "search": { + "list": [] + }, + "conversation": { + "list": [] + }, + "game": { + "list": [] + }, + "plugin": { + "list": [] + }, + "gamePlugin": { + "list": [] + }, + "miniprogram": { + "list": [] + } + } +} \ No newline at end of file diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/utils/util.js b/utils/util.js new file mode 100644 index 0000000..764bc2c --- /dev/null +++ b/utils/util.js @@ -0,0 +1,19 @@ +const formatTime = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}` +} + +const formatNumber = n => { + n = n.toString() + return n[1] ? n : `0${n}` +} + +module.exports = { + formatTime +}