微信小程序项目的简单功能合集(三)

158 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

之前总结过两篇微信小程序项目的简单功能,本来是没什么功能可总结的了,但是该微信小程序项目在客户体验之后,要求添加了新功能,因此继续总结下。

1. 修改下单的座位信息(主要的功能点是处理数据)

这里的功能点先简单说明下:用户选择好座位下单成功之后,后面可能会需要修改座位,日期等信息。因此在订单页面点击“改签”按钮,跳转到修改页面,点击页面上每个座位信息,可以跳转去重新选座,选好之后回到该页面,选好的座位就会替换之前的座位信息。

a. 在修改页面,根据跳转页面传递的参数订单id去请求订单数据,然后展示到页面。点击每个座位时(因为需要跳转到主页修改座位,使用wx.switchTab跳转,不能携带参数,所以使用wx.setStorageSync把需要的数据存储起来),存储订单数据,当前座位id,然后跳转去选座。

b. 在主页选好座位之后,点击“确认修改”按钮,就会回到修改页面,同时把需要展示座位相关的信息当作参数传递到该页面。在修改页面根据参数座位id请求到后台返回的座位信息,再根据存储起来的订单数据中的座位id和点击修改座位id对比,在相同的情况下,使用新的座位数据替换订单数据中的点击修改的座位信息,再改变data中的订单数据变量。

if (options.id && options.isChangeInfo && isBuy) {
        let detailItemId = wx.getStorageSync('detailItemId')
        let orderData = wx.getStorageSync('orderData');
        $api.orderConfirm({
            scheduled_time_type: data.scheduled_time_type,
            seat_id: data.seat_id
          })
          .then(res => {
            this.setData({
              seatLists: res.data.seat_list,
            })
            orderData.detail.forEach(item => {
              let list = item.detail.map(it => {
                let newList = this.data.seatLists[0]
                if (it.id === detailItemId) {
                  newList['id'] = data.seat_id
                  newList['before_id'] = detailItemId
                }
                return it.id === detailItemId ? newList : it;
              });
              item.detail = list
            })
            this.setData({
              orderData,
            })
          })
          .catch(err => {
            if (err.code == 202) {
              wx.showToast({
                icon: 'none',
                title: err.msg
              })
            }
          })
      }

注:感觉代码逻辑还是挺混乱的,一开始写的时候,完全没有头绪,不知道怎么处理从后台得到的数据,并整合需要的新数据,变成页面上最终展示的数据

2. 导航功能

导航按钮绑定点击事件,使用wx.getLocationAPI获取当前的地理位置、速度(需要在微信公众号平台「开发」-「开发管理」-「接口设置」中开通该接口权限),再在成功回调函数中使用wx.openLocationAPI调起微信内置地图查看位置,实现导航

//导航
  toMap() {
    const lat = this.data.latitude;
    const lon = this.data.longitude;
    const address = '地址';
    wx.getLocation({
      type: 'gcj02', //返回可以用于wx.openLocation的经纬度
      success() {
        wx.openLocation({
          type: 'gcj02',
          latitude: lat,
          longitude: lon,
          name: address,
          scale: 28
        })
      },
      fail: e => {
        console.log(e);
        // 判断用户是否拒绝了授权
        ···
      }
    })
  },