我用七天时间开发了一款小程序

上周没啥事就想给本身找点事作,因而跑到贴吧发了个帖子,大概意思就是免费帮别人作一个小程序,只要需求新颖就行。而后有两三我的联系,最后定下了帮其中一我的作。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;
        }
      }
    })
  }
复制代码

图片上传

图片上传

  • 图片不超过3张,上传一张,按钮对应的数量就减小一张,当上传3张时,上传按钮隐藏
  • 图片也能够删除
  • 上传的图片不能超过2M
//上传图片
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

河狸帮帮

另外,感谢 阿里图标库,让我省了不少时间

相关文章
相关标签/搜索