低代码实践(四)

 

 

 关键点

  • 如何判断当前openid是普通买家、商家、供应商?

  • 一键搞定下拉刷新列表功能

  • 添加页面返回后的列表页面没有刷新,怎么办?

 

 

 

如何判断当前openid是普通买家、商家、供应商?

首先,需要单独的一张模型(表)来存储openid和usertype的关系mapping,因此新建一个模型,如下:

 

然后,我们的预期是:这个模型中,比如我想把某微信账号的openid变成商家,那就增加这个openid和商家类型,如:

 

接着,我们定义两个global变量,分别用来保存当前用户是否为商家、当前用户是否为供应商:

 

  

然后就是代码部分,需要在app_launch中,判断当前openid是什么角色:

/**
 * 可通过 app 获取或修改全局应用的 变量 状态 等信息
 * 具体可以console.info 在编辑器Console面板查看更多信息
 * 如果需要 async-await,请在方法前 async
 **/
export default {
  async onAppLaunch(launchOpts) {
    app.state.userInfo={};

    const result=await app.cloud.callConnector({
      name: "getopenid_xxxxxxxxxxx",
      methodName: "getopenid",
      params:{}
    });

    app.state.userInfo.openid=result.openid;  //赋给全局变量
    $app.dataset.state.wx_openid=result.openid;

    //判断当前openid是否为商家
    $app.dataset.state.i_am_seller=false
    let res1 = await app.cloud.dataSources.users_u9v16tm.wedaGetRecords({
        "where": [
        {
          "key": "openid",
          "rel": "eq",
          "val": $app.dataset.state.wx_openid
        },
        {
          "key": "user_type",
          "rel": "eq",
          "val": "1"
        }
      ]
    });

    if(res1.total>0)
    {
      $app.dataset.state.i_am_seller=true
    }

    //判断当前openid是否为供应商
    $app.dataset.state.i_am_provider=false
    let res2 = await app.cloud.dataSources.users_u9v16tm.wedaGetRecords({
        "where": [
        {
          "key": "openid",
          "rel": "eq",
          "val": $app.dataset.state.wx_openid
        },
        {
          "key": "user_type",
          "rel": "eq",
          "val": "2"
        }
      ]
    });
    if(res2.total>0)
    {
      $app.dataset.state.i_am_provider=true
    }

  },
  onAppShow(appShowOpts) {
    //console.log('---------> LifeCycle onAppShow', appShowOpts)
  },
  onAppHide() {
    //console.log('---------> LifeCycle onAppHide')
  },
  onAppError(options) {
    //console.log('---------> LifeCycle onAppError', options)
  },
  onAppPageNotFound(options) {
    //console.log('---------> LifeCycle onAppPageNotFound', options)
  },
  onAppUnhandledRejection(options) {
    //console.log('---------> LifeCycle onAppUnhandledRejection', options)
  }
}  

最后就是UI的绑定:

 

  

一键搞定下拉刷新列表功能

这个是最容易的部分,直接上界面设置:

 

 

 

 

 搞定,很简单

  

 

添加页面返回后的列表页面没有刷新,怎么办?

 这个两种解决方式:

  1. 不解决,但是提供下拉刷新功能,妥协来解决,就是上面这个方法
  2. 在page_show方法里,reload数据源

我们就说下reload方式:

/*
* 可通过 $page 获取或修改当前页面的 变量 状态 handler lifecyle 等信息
* 可通过 app 获取或修改全局应用的 变量 状态 等信息
* 具体可以 console.info 在编辑器Console面板查看更多信息
* 如果需要 async-await,请在方法前 async
*/

export default {
  onPageLoad(query) {
  },
  async onPageShow() {
    let res = await app.cloud.dataSources.bought_produ_xxxxxxxxx.wedaGetRecords({     //红色部分是模型标识,不是模型名称,是模型标识
      "orderBy": "createdAt",
      "orderType": "desc",
      "pageNo": 1,
      "pageSize": 5,
      "where": [
        {                                      //这里的where要根据各个页面的查询来,这里只是个sample
          "key": "zt",
          "rel": "eq",
          "val": "2"
        }
      ]
    });

    $page.dataset.state.wedaListMeta=res
  },
  onPageReady() {
    // console.log('---------> LifeCycle onPageReady')
  },
  onPageHide() {
    // console.log('---------> LifeCycle onPageHide')
  },
  onPageUnload() {
    // console.log('---------> LifeCycle onPageUnload')
  },
}

OK。  

 

最后,再附上结论xmind图:

posted @ 2022-04-30 16:22  McKay  阅读(105)  评论(0编辑  收藏  举报