上周没啥事就想给本身找点事作,因而跑到贴吧发了个帖子,大概意思就是免费帮别人作一个小程序,只要需求新颖就行。而后有两三我的联系,最后定下了帮其中一我的作。html
此次真的是彻底从0开始,需求很简单,只有文字描述。(为了避免暴露太多就不放图了)小程序
大概从上周四晚上着手构思,排版、UI都是本身琢磨着作的,因此样式很通常(如今是真体会到了UI的重要性)。今天上午最后整理完,终于发布到线上了。如今就记录下这次小程序开发中的一些功能吧,若是有更好的实现方法也欢迎告知。(服务端用的是 云开发,全部功能都是基于此实现)数组
在个人页面或者其余隐私页面都会判断用户是否登陆,除了openid之外就是要判断头像、昵称是否获取到。缓存
我没有把昵称和头像存到缓存中,我考虑到若是放到缓存中,用户修改头像昵称后再进入,那两者显示的仍是以前的,没法更新。因此我判断登陆与否是根据 res.authSetting['scope.userInfo']
是否受权过决定的。bash
judgeIsAuth(fn,par='') {
const that = this;
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
wx.getUserInfo({
success: res => {
if(fn) {
fn(par)
}
}
})
} else {
//此处跳登陆页面
return false;
}
}
})
}
复制代码
//上传图片
uploadImg() {
const that = this;
const curImgList = this.data.uploadImgList; //展现图片的数组
if (curImgList.length >= 3) {
return false;
}
// 选择图片
wx.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
wx.showLoading({
title: '上传中',
})
const tempFilesSize = res.tempFiles[0].size;
if (tempFilesSize > 2000000) {
app.info('上传图片不能超过2M')
return false;
}
const filePath = res.tempFilePaths[0]
//上传的图片保存到云存储的路径。原本名字想按上传的图片名字设置,结果没实现,只能先按时间戳设了
const cloudPath = 'task/task' + Date.now() + filePath.match(/\.[^.]+?$/)[0]
wx.cloud.uploadFile({
cloudPath,
filePath,
success: res => {
curImgList.push(res.fileID)
that.setData({
uploadImgList: curImgList
})
wx.hideLoading()
},
fail: e => {
wx.hideLoading()
wx.showToast({
icon: 'none',
title: '上传失败',
})
}
})
},
fail: e => {
console.log(e)
}
})
}
//删除图片
removeImg(e) {
//每张图片上放一个删除按钮,并绑定下标,删除时从数组中经过下标取
const curIndex = e.currentTarget.dataset.index;
const curImgList = this.data.uploadImgList;
wx.cloud.deleteFile({
fileList: [curImgList[curIndex]],
success: res => {
// handle success
curImgList.splice(curIndex, 1);
this.setData({
uploadImgList: curImgList
})
},
fail: err => {
// handle error
}
})
}
复制代码
这个功能用云开发实现有点坑,要请求不少次。app
由于这个产品中被邀请的新用户统一后会与推荐者绑定,之后某些地方消耗的积分会给推荐者返利。因此要考虑的地方仍是挺多的。ide
这个地方就不放代码了,简单说下实现的逻辑。测试
首先,数据是经过记录表聚合在一块儿的,判断日榜仍是周榜,我是经过时间戳判断的,好比如今是2019-08-30 14:58,那先用 Date.now()
获取当前的时间戳A,再获取今天0点的时间戳B Date.parse(2019-08-30)
,判断A大于等于B便可获得今日排行榜,周榜也相似。ui
db.collection('coupon_record').aggregate().match({
timestamp: $.gte(minTimestamp)
}).group({
_id: '$openid',
avatarUrl: $.last('$avatarUrl'),
nickName: $.last('$nickName'),
timestamp: $.last('$timestamp'),
acquireTotal: $.sum('$couponNum')
}).sort({
acquireTotal: -1,
timestamp: 1
}).limit(10).end()
复制代码
终于过审了,期间失败了一次(由于里面的有一条测试的数据没删除)。小程序码放到下方,欢迎来提Bug。this
另外,感谢 阿里图标库,让我省了不少时间