22 changed files with 461 additions and 0 deletions
@ -0,0 +1,39 @@ |
|||||
|
//app.js
|
||||
|
App({ |
||||
|
onLaunch: function () { |
||||
|
// 展示本地存储能力
|
||||
|
var 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 |
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,36 @@ |
|||||
|
{ |
||||
|
"pages": [ |
||||
|
"pages/home/index", |
||||
|
"pages/user/index", |
||||
|
"pages/billboards/index", |
||||
|
"pages/topics/index" |
||||
|
], |
||||
|
"window": { |
||||
|
"backgroundTextStyle": "light", |
||||
|
"navigationBarBackgroundColor": "#fff", |
||||
|
"navigationBarTitleText": "凤栖市北", |
||||
|
"navigationBarTextStyle": "black" |
||||
|
}, |
||||
|
"tabBar": { |
||||
|
"list": [ |
||||
|
{ |
||||
|
"pagePath": "pages/home/index", |
||||
|
"text": "首页" |
||||
|
}, |
||||
|
{ |
||||
|
"pagePath": "pages/billboards/index", |
||||
|
"text": "宣传栏" |
||||
|
}, |
||||
|
{ |
||||
|
"pagePath": "pages/topics/index", |
||||
|
"text": "议事厅" |
||||
|
}, |
||||
|
{ |
||||
|
"pagePath": "pages/user/index", |
||||
|
"text": "我的" |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"debug": true, |
||||
|
"sitemapLocation": "sitemap.json" |
||||
|
} |
||||
@ -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; |
||||
|
} |
||||
@ -0,0 +1,66 @@ |
|||||
|
// pages/billboards/index.js
|
||||
|
Page({ |
||||
|
|
||||
|
/** |
||||
|
* 页面的初始数据 |
||||
|
*/ |
||||
|
data: { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad: function (options) { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面初次渲染完成 |
||||
|
*/ |
||||
|
onReady: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面显示 |
||||
|
*/ |
||||
|
onShow: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面隐藏 |
||||
|
*/ |
||||
|
onHide: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面卸载 |
||||
|
*/ |
||||
|
onUnload: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面相关事件处理函数--监听用户下拉动作 |
||||
|
*/ |
||||
|
onPullDownRefresh: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面上拉触底事件的处理函数 |
||||
|
*/ |
||||
|
onReachBottom: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 用户点击右上角分享 |
||||
|
*/ |
||||
|
onShareAppMessage: function () { |
||||
|
|
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"usingComponents": {} |
||||
|
} |
||||
@ -0,0 +1,2 @@ |
|||||
|
<!--pages/billboards/index.wxml--> |
||||
|
<text>pages/billboards/index.wxml</text> |
||||
@ -0,0 +1 @@ |
|||||
|
/* pages/billboards/index.wxss */ |
||||
@ -0,0 +1,54 @@ |
|||||
|
//index.js
|
||||
|
//获取应用实例
|
||||
|
const app = getApp() |
||||
|
|
||||
|
Page({ |
||||
|
data: { |
||||
|
motto: 'Hello World', |
||||
|
userInfo: {}, |
||||
|
hasUserInfo: false, |
||||
|
canIUse: wx.canIUse('button.open-type.getUserInfo') |
||||
|
}, |
||||
|
//事件处理函数
|
||||
|
bindViewTap: function() { |
||||
|
wx.navigateTo({ |
||||
|
url: '../logs/logs' |
||||
|
}) |
||||
|
}, |
||||
|
onLoad: function () { |
||||
|
if (app.globalData.userInfo) { |
||||
|
this.setData({ |
||||
|
userInfo: app.globalData.userInfo, |
||||
|
hasUserInfo: true |
||||
|
}) |
||||
|
} else if (this.data.canIUse){ |
||||
|
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
|
||||
|
// 所以此处加入 callback 以防止这种情况
|
||||
|
app.userInfoReadyCallback = res => { |
||||
|
this.setData({ |
||||
|
userInfo: res.userInfo, |
||||
|
hasUserInfo: true |
||||
|
}) |
||||
|
} |
||||
|
} else { |
||||
|
// 在没有 open-type=getUserInfo 版本的兼容处理
|
||||
|
wx.getUserInfo({ |
||||
|
success: res => { |
||||
|
app.globalData.userInfo = res.userInfo |
||||
|
this.setData({ |
||||
|
userInfo: res.userInfo, |
||||
|
hasUserInfo: true |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
getUserInfo: function(e) { |
||||
|
console.log(e) |
||||
|
app.globalData.userInfo = e.detail.userInfo |
||||
|
this.setData({ |
||||
|
userInfo: e.detail.userInfo, |
||||
|
hasUserInfo: true |
||||
|
}) |
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"usingComponents": {} |
||||
|
} |
||||
@ -0,0 +1,13 @@ |
|||||
|
<!--index.wxml--> |
||||
|
<view class="container"> |
||||
|
<view class="userinfo"> |
||||
|
<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button> |
||||
|
<block wx:else> |
||||
|
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image> |
||||
|
<text class="userinfo-nickname">{{userInfo.nickName}}</text> |
||||
|
</block> |
||||
|
</view> |
||||
|
<view class="usermotto"> |
||||
|
<text class="user-motto">{{motto}}</text> |
||||
|
</view> |
||||
|
</view> |
||||
@ -0,0 +1,21 @@ |
|||||
|
/**index.wxss**/ |
||||
|
.userinfo { |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
align-items: center; |
||||
|
} |
||||
|
|
||||
|
.userinfo-avatar { |
||||
|
width: 128rpx; |
||||
|
height: 128rpx; |
||||
|
margin: 20rpx; |
||||
|
border-radius: 50%; |
||||
|
} |
||||
|
|
||||
|
.userinfo-nickname { |
||||
|
color: #aaa; |
||||
|
} |
||||
|
|
||||
|
.usermotto { |
||||
|
margin-top: 200px; |
||||
|
} |
||||
@ -0,0 +1,66 @@ |
|||||
|
// pages/topics/index.js
|
||||
|
Page({ |
||||
|
|
||||
|
/** |
||||
|
* 页面的初始数据 |
||||
|
*/ |
||||
|
data: { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad: function (options) { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面初次渲染完成 |
||||
|
*/ |
||||
|
onReady: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面显示 |
||||
|
*/ |
||||
|
onShow: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面隐藏 |
||||
|
*/ |
||||
|
onHide: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面卸载 |
||||
|
*/ |
||||
|
onUnload: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面相关事件处理函数--监听用户下拉动作 |
||||
|
*/ |
||||
|
onPullDownRefresh: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面上拉触底事件的处理函数 |
||||
|
*/ |
||||
|
onReachBottom: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 用户点击右上角分享 |
||||
|
*/ |
||||
|
onShareAppMessage: function () { |
||||
|
|
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"usingComponents": {} |
||||
|
} |
||||
@ -0,0 +1,2 @@ |
|||||
|
<!--pages/topics/index.wxml--> |
||||
|
<text>pages/topics/index.wxml</text> |
||||
@ -0,0 +1 @@ |
|||||
|
/* pages/topics/index.wxss */ |
||||
@ -0,0 +1,66 @@ |
|||||
|
// pages/user/index.js
|
||||
|
Page({ |
||||
|
|
||||
|
/** |
||||
|
* 页面的初始数据 |
||||
|
*/ |
||||
|
data: { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面加载 |
||||
|
*/ |
||||
|
onLoad: function (options) { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面初次渲染完成 |
||||
|
*/ |
||||
|
onReady: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面显示 |
||||
|
*/ |
||||
|
onShow: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面隐藏 |
||||
|
*/ |
||||
|
onHide: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 生命周期函数--监听页面卸载 |
||||
|
*/ |
||||
|
onUnload: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面相关事件处理函数--监听用户下拉动作 |
||||
|
*/ |
||||
|
onPullDownRefresh: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 页面上拉触底事件的处理函数 |
||||
|
*/ |
||||
|
onReachBottom: function () { |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
/** |
||||
|
* 用户点击右上角分享 |
||||
|
*/ |
||||
|
onShareAppMessage: function () { |
||||
|
|
||||
|
} |
||||
|
}) |
||||
@ -0,0 +1,3 @@ |
|||||
|
{ |
||||
|
"usingComponents": {} |
||||
|
} |
||||
@ -0,0 +1,2 @@ |
|||||
|
<!--pages/user/index.wxml--> |
||||
|
<text>pages/user/index.wxml</text> |
||||
@ -0,0 +1 @@ |
|||||
|
/* pages/user/index.wxss */ |
||||
@ -0,0 +1,43 @@ |
|||||
|
{ |
||||
|
"description": "项目配置文件", |
||||
|
"packOptions": { |
||||
|
"ignore": [] |
||||
|
}, |
||||
|
"setting": { |
||||
|
"urlCheck": true, |
||||
|
"es6": true, |
||||
|
"postcss": true, |
||||
|
"minified": true, |
||||
|
"newFeature": true, |
||||
|
"autoAudits": false, |
||||
|
"coverView": true |
||||
|
}, |
||||
|
"compileType": "miniprogram", |
||||
|
"libVersion": "2.8.1", |
||||
|
"appid": "wx3bcb2b4ced1544f7", |
||||
|
"projectname": "fqsb_wx", |
||||
|
"debugOptions": { |
||||
|
"hidedInDevtools": [] |
||||
|
}, |
||||
|
"isGameTourist": false, |
||||
|
"simulatorType": "wechat", |
||||
|
"simulatorPluginLibVersion": {}, |
||||
|
"condition": { |
||||
|
"search": { |
||||
|
"current": -1, |
||||
|
"list": [] |
||||
|
}, |
||||
|
"conversation": { |
||||
|
"current": -1, |
||||
|
"list": [] |
||||
|
}, |
||||
|
"game": { |
||||
|
"currentL": -1, |
||||
|
"list": [] |
||||
|
}, |
||||
|
"miniprogram": { |
||||
|
"current": -1, |
||||
|
"list": [] |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
{ |
||||
|
"desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", |
||||
|
"rules": [{ |
||||
|
"action": "allow", |
||||
|
"page": "*" |
||||
|
}] |
||||
|
} |
||||
@ -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: formatTime |
||||
|
} |
||||
Loading…
Reference in new issue