医美小程序实战教程-店铺信息加载

Posted 低代码布道师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了医美小程序实战教程-店铺信息加载相关的知识,希望对你有一定的参考价值。

我们前两篇分析了一下医美小程序首页的制作方法,官方模板是使用的外部数据源,不利于我们自己管理数据。所以我们使用自建数据源来进行重新开发,当然了如果是使用自建数据源免不了就涉及到开发了,本节我们介绍一下从数据库中读取信息展示到页面上。页面的最终效果如下:

业务逻辑

要想进行开发首先需要把逻辑想明白了,按照页面的规划我们是需要读取店铺的信息,那从哪读取呢?

在软件开发领域信息一般是存放到数据库中,所以我们需要从数据库中读取信息。微搭提供了一套在线的文档型数据库。区别于关系型数据库,它的数据结构可以定义的更复杂。我们的数据源这样定义

页面上只显示一条记录,那如何读取信息呢?数据库的查询多条可以返回一个记录的集合,这个正是我们需要的

功能实现

进入到应用管理,找到我们创建的医美小程序后台

默认显示的是首页,我们在首页上进行功能操作

那应该从哪开始呢?你可以这样想,页面一加载的时候就显示信息。那这个一开始这个动作是在哪里操作呢?

需要在低代码编辑里操作,点击导航栏上的低代码编辑

打开编辑器后,分为全局生命周期和页面生命周期,我们可以在页面生命周期里写代码

具体的代码如下:

export default {
  async onPageLoad(query) {
    const ret = await app.dataSources.shop_8cp2v9w.wedaGetList();
    if(ret.code!=0){
      return
    }
    const formContent = getformContent($page.dataset.state.formContent,ret.data[0]);
    $page.dataset.state.formContent = [...formContent]
  },
  onPageShow() {
    //console.log('---------> LifeCycle onPageShow')
  },
  onPageReady() {
    //console.log('---------> LifeCycle onPageReady')
  },
  onPageHide() {
    //console.log('---------> LifeCycle onPageHide')
  },
  onPageUnload() {
    //console.log('---------> LifeCycle onPageUnload')
  },
}

function getformContent(formContent,data){
  formContent && Array.isArray(formContent) && formContent.map((item)=>{
    const {key} = item;
    switch(key) {
      case 'location':
        console.log("location",data[key])
        item.value = getLocation(data[key]);
        console.log("locationvalue",item.value)
      break;
      case 'telphone':
        item.value = data[key];
      break;
      case 'workTime':
        item.value = getWorkTime(data[key]);
      break;
      default:
        item.value = data[key];
      return item;
    }
  })
  return formContent;
}

function getLocation(location){
  let {province = '',city = '',district='',address = ''} = location;
  return `${province}-${city}-${district}-${address}`;
}

function getWorkTime(data){
  let weekNum = [];
  let weekMap = {
    1:'周一',
    2:'周二',
    3:'周三',
    4:'周四',
    5:'周五',
    6:'周六',
    7:'周七',
  }
  let startWeek,
      endWeek,
      startHour,
      endHour,
      startMin,
      endMin,
      weekText;
  for(let prop in data){
    startHour = parseInt(data[prop].start/60);
    startMin = parseInt(data[prop].start%60);
    endHour = parseInt(data[prop].end/60);
    endMin = parseInt(data[prop].end%60);
    weekNum.push(prop.replace('week','')*1);
  }
  weekNum = weekNum.sort();
  startWeek = weekMap[weekNum[0]];
  endWeek = weekMap[[weekNum[weekNum.length-1]]];
  
  startHour = padding(startHour,2);
  endHour = padding(endHour,2);
  startMin = padding(startMin,2);
  endMin = padding(endMin,2);

  weekText = weekNum.length ===1 ? startWeek:`${startWeek} 至 ${endWeek}`;
  return `${weekText},${startHour}:${startMin}-${endHour}:${endMin}`;
}

function padding(num,length){
  for(var len = (num+"").length;len<length;len = num.length){
    num = "0"+num;
  }
  return num;
}

代码解析

首先是async/await,因为微搭数据源定义的方法都是异步的,所谓的异步是如果代码执行时遇到异步的方法不等待执行完会继续往下执行,这样如果后续需要依据方法返回的结果去处理是不行的。

这个时候就需要我们等待异步的方法执行完毕在继续执行,所以方法onPageLoad前边需要加async关键字。而里边遇到异步方法需要等待返回结果的,前边需要加上await关键字。

如果希望调用数据源,我们需要调用微搭的数据源api,具体是app.dataSources.shop_8cp2v9w.wedaGetList()

shop_8cp2v9w是数据源的名称,对应数据源管理里的名称

wedaGetList对应的是数据源中的方法

数据源方法调用后返回了一个对象,如果成功调用,ret.code就返回0,失败就返回其他值,所以我们加了一个判断,如果调用失败那么后续代码就不再执行了

if(ret.code!=0){
return
}

为了增加代码的可读性,将逻辑封装为函数

function getformContent(formContent,data){
}

这个函数的目的是为了返回页面上需要的信息,接收两个参数,一个是页面中定义的变量,另外一个是从数据库中查询的信息

我们可以通过$page.dataset.state.formContent语法来获取页面中定义的变量

数据源的方法调用成功后,ret.data返回的是一个数组,我们通过中括号的语法来获取第一条记录ret.data[0]

函数成功执行后通过赋值语句来给页面的变量赋值

$page.dataset.state.formContent = […formContent]

其中的...是展开的语法,这样就可以将formContent的对应的信息赋值给页面中的变量

getformContent代码解析

formContent && Array.isArray(formContent) 通过&& 语法来计算变量的值,如果他们都是true那么会执行第三个变量,要是有一个为false就结束执行了。&& 也叫短路运算符,两边必须都为true才是true如果有一处是false就返回false

Array.isArray(formContent)这一句话是调用了一个API用来判断formContent是否是数组

formContent.map((item)=>{})这一句是一个数组的迭代语法,这样就可以迭代数组中的每个值。(item)=>{}这个叫箭头函数,和function (item){}的意思是一样的

之后使用了switch case语法来判断数组中的键,不同的键调用不同的函数,分别来格式化信息。

getLocation代码解析

这个代码的主体逻辑是将家庭住址合并显示到一行中

let {province = ‘’,city = ‘’,district=’’,address = ‘’} = location;

这个通过解构赋值来分别将Location中的键值对拆解到定义好的变量中

${province}-${city}-${district}-${address}

一对儿反向的单引号表示这个是个模板字符串,而其中的${}表示里边的内容是一个变量,在程序执行的时候可以计算成具体的值

程序最终的效果就是字符串拼接

getWorkTime代码解析

这段代码的意思就计算周一到周日的工作时间,拼接的结果是显示成如下

padding代码解析

这个是为了时间前边补零,如果是一位就补一个0,如果是两位就直接显示时间的值

总结

好了用了一定的篇幅我们介绍了如何在微搭中从数据库读取值并显示到页面上,这块要想弄好,基本的编程功底是少不了的,要想提高编程能力还是在于长期的训练,熟练就好。

以上是关于医美小程序实战教程-店铺信息加载的主要内容,如果未能解决你的问题,请参考以下文章

医美小程序实战教程店铺信息编辑

医美小程序实战教程-店铺信息编辑

医美小程序实战教程-店铺信息编辑后提交

医美小程序实战教程-店铺信息渲染

医美小程序实战视频教程店铺数据源的建立

医美小程序实战教程-首页的制作