更新记录

1.0.0(2022-11-19)


平台兼容性

阿里云 腾讯云 支付宝云
× ×
Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.6.4 × × × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

云函数类插件通用教程

使用云函数类插件的前提是:使用HBuilderX 2.9+


声明:这个小程序业务只是适合本作者、功能可能没有那么完善、所以请各位下单先要先看清楚,如遇技术问题作者会不吝赐教,请各位五星好评

安装如遇问题及时联系作者处理

项目集成了 vant @antv/f2 dayjs

没有token 40002 验证失败 40003 用户不存在 40004 查询失败 -1 添加失败 -2

<!-- 不知道为啥slot失效 本来可以封装成页面组件的 -->

页面 page status => 0: 失败 1: 成功 2: 加载 3: 暂无数据

使用流程:

  1. 进行商家登录
  2. 进入商品管理添加商品
  3. 进入楼号管理添加楼号,比如“天安1号楼”
  4. 进入取餐时间管理添加时间,比如“12:00”
  5. 进入发布今日菜单,填好标题,选择好订餐开始和截止时间,添加商品,进行发布
  6. 分享到群里给其他人点餐
  7. 进到群里点击分享的卡片添加取餐地址取餐时间进行点餐(仅限商家分享,群里的其他人不能分享)
  8. 进入订单列表查看订餐情况
  9. 商家进入已发布菜单,可以查看订餐情况

这块小程序主要针对园区订餐、菜市场订餐、免费提供给商家使用,这种模式是取得大家信任的。

有的园区订餐上千人,市场少数几十人,开发者收益可以通过广告变现

订单实现方式:通过事务生成订单和子项 商品库存使用原子操作,并发很高的时候有可能会出现超卖情况。还涉及其他逻辑判断不好叙述,如下单判断库存是否够、扣完库存之后再判断库存是否够、等等防止超卖

(本来可以使用redis的但是成本太高放弃了)

(也可以使用消息队列来处理这个问题的但是使用第三方的成本也太高了,自己本地实现了一个,哎,云函数没有全局变量,故此也不行)

不得已才使用了上面的方式

请求也实现了拦截器使用方式类似 axios

class InterceptorManager {
  __handlers = []

  use (fulfilled, rejected) {
    this.__handlers.push({
      fulfilled: fulfilled,
      rejected: rejected
    })
    return this.__handlers.length - 1
  }

  forEach (fn) {
    this.__handlers.forEach(fn)
  }
}

class Request {
  interceptors = {
    request: new InterceptorManager(),
    response: new InterceptorManager()
  }

  async callFunction (data) {
    let promise = Promise.resolve(data)

    const chain = [this.#dispatchRequest.bind(this), undefined]

    this.interceptors.request.forEach(interceptor => {
      chain.unshift(interceptor.fulfilled, interceptor.rejected)
    })

    this.interceptors.response.forEach(interceptor => {
      chain.push(interceptor.fulfilled, interceptor.rejected)
    })

    while (chain.length) {
      promise = promise.then(chain.shift(), chain.shift())
    }

    try {
      const res = await promise
      return [null, res]
    } catch (err) {
      return [err, null]
    }
  }

  #dispatchRequest (data) {
    return uniCloud.callFunction(data)
  }
}

// methods 使用
async goodsList () {
  // err 就是错误 如果你在拦截器中已经处理,在这可以不处理
  // res 就是正确返回的结果
  const [err, res] = await goodsList()

  if (err) return

  this.list = res
}

封装拦截器之类的很简单,所以不必要使用什么三方插件 里面还有其他干货,不懂的或者有其他问题的可以加作者

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问