微页面设计开发指南

一、目标实现

左侧:为可用的组件列表,可拖动任一组件到中间的预览区域

中间:为页面预览效果页面,选中任一组件,可在右侧进行参数配置

右侧:为组件的参数配置(选中中间的组件时出现),页面配置(选中页面管理tab按钮时出现),组件管理(选中组件管理tab时出现),更改配置,中间的预览区域立即更新视图

对于电商类的小程序,这种微页面有大量的需求,频繁的改动页面样式、结构和内容,以及发布内嵌的H5页面,后台做到灵活可配置。可免去频繁发布小程序的烦恼。

二、开发设计规范

后台部分

管理后台文件目录结构

1. 可将以上的页面进行模块拆分:

  1. components目录放一些常用的组件,leftComponentsPage.vue和rightConfigPage.vue分别为左侧和右侧的集成组件

  2. configComponents目录是右侧显示的对应组件和页面的配置相关的组件,每个组件对应一个配置,封装成对应的组件

  3. viewComponents目录放置组件对应的样式结构代码,每个组件封装成一个样式组件,名称和配置组件一一对应

  4. details.vue为整合页面,分别调用左侧的leftComponentsPage.vue组件和右侧的rightConfigPage.vue组件,以及中间预览遍历组件按需加载样式组件

2. 数据流方向

3. 组件数据格式

以图片组件为例:

{
  "image":{
    "showMethod":"YHYG", // 显示的排列方式,一行一个
    "borderWidth":0, 
    "pageMargin":0,
    "maxImageNum":10,
    "cornerType":"ZJ",
    "imageType":"normal",
    "showNum":6,
    "indicator":"style1",
    "items":[
      {
        "title":"",
        "imageUrl":"",
        "imageWidth":345,
        "imageHeight":241,
        "action":"webview",
        "maAppid":"",
        "maPagePath":"",
        "extLink":"",
        "actionArea":"hotArea",
        "hotAreas":{
            "width":100,
            "height":100,
            "xAxis":128,
            "yAxis":63
        }
      }
    ]
  }
}

image下面为组件的属性,由云端接口直接返回,items下面的每一项对应单个图片属性,右侧配置区域可对每个属性进行配置,每上传一张图片,往items里增加一项

4. 视图组件结构和对应样式

<template>
<!-- 组件1:图片组件 -->
<div class="component-wrapper image-component" :style="wrapperStyle">
<div class="image-list">
   <div :style="imgItemStyle" class="image-item" v-for="(img, imgIndex) in imgObject.items" :key="imgIndex">
    <img class="image" :src="img.imageUrl ? img.imageUrl : defaultImg">
<div :class="['hotarea', debugMode ? 'debug' : '' ]" :style="img.hotAreaStyle"
@click="redirectPageTo(img.action, img.extLink, img.maAppid, img.maPagePath)" v-if="img.action !== 'nothing'">
</div>
   </div>
</div>
</div>
</template>

类名为component-wrapper的图层为最外层,宽度为屏幕宽度100%(后台预览页面宽度定为375px),为这个图层设置左右padding值为组件传过来的pageMargin的大小

computed: {
  wrapperStyle() {
    return {
      padding-left: this.comData.image.pageMargin + 'px',
      padding-right: this.comData.image.pageMargin + 'px'
    }
  }
}

通过传入组件数据items数组数据,动态计算相关图层样式动态绑定到对应的元素上热区hot-area图层样式对象hotAreaStyle根据组件是否开启点击交互,是默认全区域还是选定区域计算而来

computed: {
  imgObject() {
    this.comData.image.items.map((item) => {
      if (item.action !== 'nothing') {
        item.hotAreaStyle = {
          width: (item.actionArea === 'hotArea' ? item.hotAreas.width : item.imageWidth) + 'px',
          height: (item.actionArea === 'hotArea' ? item.hotAreas.height : item.imageHeight) + 'px',
          left: item.actionArea === 'hotArea' ? item.hotAreas.xAxis + 'px' : 0 ,
          top: item.actionArea === 'hotArea' ? item.hotAreas.yAxis + 'px' : 0
        }
      }
    })
    return this.comData.image
  }
}

小程序端

1. 小程序端页面组件开发

小程序端的页面样式和结构可以部分复用viewComponents中的代码,只需将结构标签div改为view,将img改为image,v-if改为wx:if,v-for改为wx:for对应组件放在根目录下的custom-components下的microPage目录里

主页面放在subpackage下面的microPage下

<view class="page-com" wx:for="{{ comData }}" wx:for-item="item" wx:key="index" wx:if="{{ pageStatus === 'ON' && pageDelete === 'NORMAL' }}">
  <!-- 图片组件渲染 -->
  <image-view comData="{{ item.components }}" wx:if="{{ item.comType === 'image' }}" />
  <!-- 按钮组件渲染 -->
  <button-view comData="{{ item.components }}" wx:if="{{ item.comType === 'btn' }}" />
  <!-- 悬浮组件渲染 -->
  <absolute-view comData="{{ item.components }}" showCom="{{ showCom }}" wx:if="{{ item.comType === 'absolute' }}" />
</view>

循环遍历传过来的页面组件数据,渲染不同的组件拿image图片组件举例,它的结构代码

<!-- 组件1:图片组件 -->
<view class="component-wrapper image-component" style="{{ wrapperStyle }}">
  <view class="image-list">
    <view class="image-item" wx:for="{{ imgObject.items }}" wx:for-index="imgIndex" wx:for-item="img"wx:key="imgIndex">
      <image class="image" src="{{ img.imageUrl }}" style="width: {{ img.imageWidth }}px;" wx:if="{{ img.imageUrl }}" mode="widthFix"></image>
      <view class="hotarea" style="{{ img.hotAreaStyle }}" wx:if="{{ img.action !== 'nothing' }}"bindtap="redirectPageTo" data-com="{{ img }}"></view>
    </view>
  </view>
</view>

由于小程序里面不支持动态样式绑定,我们将样式拼接成字符串,加入到组件列表里,另外后台传过来的像素单位是px,需要做转化rpx

attached() {
  this.data.comData.image.items.map((item) => {
    if (this.data.comData.image.action !== 'nothing') {
      let width = item.actionArea === 'hotArea' ? item.hotAreas.width : item.imageWidth
      let height = item.actionArea === 'hotArea' ? item.hotAreas.height : item.imageHeight
      let left = item.actionArea === 'hotArea' ? item.hotAreas.xAxis : 0
      let top = item.actionArea === 'hotArea' ? item.hotAreas.yAxis : 0
      item.hotAreaStyle = 'width: ' + app.pxToRpx(width) + 'rpx;height: ' +
      app.pxToRpx(height) + 'rpx;left: ' + app.pxToRpx(left) + 'rpx;top: ' + app.pxToRpx(top) + 'rpx;'
    }
  })
  this.setData({
    wrapperStyle: 'padding: 0 ' + app.pxToRpx(this.data.comData.image.pageMargin) + 'px',
    imgObject: this.data.comData.image
  })
}

像素单位转化方法封装在app下

pxToRpx(value) {
  return value * (750 / this.globalData.system.windowWidth);
}

三、开发步骤

后台部分

1. 增加组件图标

首先在leftComponentsPage.vue为该组件指定显示的图标

comList(val) {
  val.map((item) = >{
    switch (item.type) {
    case 'image':
      item.icon = 'pic';
      break;
    case 'absolute':
      item.icon = 'absolutebtn';
      break;
    case 'btn':
      item.icon = 'operation';
      break;
    default:
      item.icon = 'pic'
      break;
    }
  }) this.buildComList = val
}

2. 给组件增加配置文件

在configComponents目录下新增 组件名.vue 对应的配置文件,然后在components下的rightConfigPage.vue中引入该组件

<!-- 组件配置 -->
<div v-else-if="activeBtn === 'com'">
<!-- 1、图片组件 -->
<image-config v-if="previewComList[selectedComIndex].type === 'image'"
v-on="$listeners"
              :configData="previewComList[selectedComIndex]"></image-config>
<!-- 2、悬浮按钮组件 -->
<absolute-config v-if="previewComList[selectedComIndex].type === 'absolute'"v-on="$listeners" 
  :configData="previewComList[selectedComIndex]"></absolute-config>
<!-- 3、按钮组件 -->
<btn-config v-if="previewComList[selectedComIndex].type === 'btn'"
v-on="$listeners"
            :configData="previewComList[selectedComIndex]"></btn-config>
</div>

配置文件通过props接收传过来的configData数据,赋值给本地的data里面的configs,配置文件里的input通过v-mode监听改变configs,然后通过监听configs数据调用$emit调用父组件传过来的方法,达到数据从父组件 -> 孙子组件 -> 父组件的响应式

3. 给预览页面增加组件

在viewComponents下新建组件名.vue文件,然后在detail.vue中引入

<div :style="{position: 'relative'}" v-for="(com, comIndex) in previewComList" :key="comIndex">
  <div :class="['com-area', selectedComIndex === comIndex ? 'border-selected' : '']" @click="selectCom(com, comIndex)">
    <!-- 组件1:图片组件 -->
    <image-view :comData="com.configObj" :debugMode="debug" v-if="com.type ==='image'"></image-view>
    <!-- 组件2:悬浮按钮组件 -->
    <absolute-view :comData="com.configObj" :debugMode="debug" v-if="com.type ==='absolute'"></absolute-view>
    <!-- 组件删除按钮 -->
    <div v-if="selectedComIndex === comIndex" class="delete-com-btn" 
    @click="deleteCom(com, comIndex)">
    <i class="el-icon-delete"></i>
  </div>
</div>

小程序端

1. 增加组件对应的视图组件

在根目录custom-components下面的landingPage下新建以组件名命名的目录,里面包含js,json,wxml,wxss文件,在subpackage/landingPage/index.json中引入该组件

"usingComponents": {
  "image-view": "../../custom-components/landingPage/image/index",
  "button-view": "../../custom-components/landingPage/button/index",
  "absolute-view": "../../custom-components/landingPage/absolute/index"
}

在subpackage/landingPage/index.wxml文件中增加组件代码

<!-- 图片组件渲染 -->
<image-view comData="{{ item.components }}" wx:if="{{ item.comType === 'image' }}" />

最终实现

四. 注意事项

  1. 小程序端需要做单位转化,将传过来的px统一转成rpx用

  2. 小程序中组件中的wxml文件中每个热区的hotarea元素需要增加一个监控的class,命名以hotarea-xxx(xxx为后台定义热区的时候的命名)


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: gd32 系列控制器是一款性能稳定、价格合理的单片机产品。想要对 gd32 系列控制器进行入门开发,需要有一定的电子技术基础。对于初学者来说,建议从了解 gd32 系列控制器的基本特性开始。 首先,我们需要了解 gd32 系列控制器的硬件特性。gd32 系列控制器采用的是 ARM Cortex-M3 内核,具有高性能、低功耗、可靠性强等特点。此外,gd32 系列控制器还具有丰富的外设资源,例如定时器、ADC、UART、SPI、I2C 等,可满足各种应用需求。 其次,我们需要掌握 gd32 系列控制器的软件开发环境。gd32 系列控制器支持多种编程语言,如 C 语言、汇编语言等。在软件开发环境方面,建议使用 Keil、IAR 等常用的嵌入式开发工具,这些工具可以降低开发难度,提高程序开发效率。 最后,针对 gd32 系列控制器的具体开发需求,可以通过查看 gd32 系列控制器的技术文档、代码示例及其他开发资源来进行深入学习和实践。 总之,gd32 系列控制器入门开发指南需要掌握硬件特性、软件开发环境和自身开发需求等方面的知识。通过深入学习和实践,可以逐步掌握 gd32 系列控制器的开发技巧,实现各种应用需求。 ### 回答2: GD32系列控制器是一种高性价比的控制器,由中国的光电工业和GD公司联合开发生产,可应用于电机控制、物联网、工业自动化控制等领域。本文将介绍GD32系列控制器入门开发指南。 首先,对于初学者来说,需要了解GD32系列控制器的基本知识,包括芯片的架构、存储器、时钟、中断、GPIO、串口等。可以通过阅读相关的文献资料或者视频教程进行学习。 其次,需要选择一款合适的开发板,如GD32F103C8T6小板、GD32F350等,同时需要安装相关的开发环境。根据自己的需求,可选择Keil、IAR、CubeMX等常用开发软件,也可以选择使用免费的开源工具Eclipse。 然后,针对具体应用场景,需要编写相应的程序代码。可通过模拟实验、仿真调试等方式,逐步完善代码,并进行实验验证。 最后,需要注意一些常见问题,如GPIO的输入和输出、定时器的使用、中断处理等等。在解决问题的过程中,可以参考相关技术论坛和社区,与其他开发人员进行交流学习。 总之,掌握GD32系列控制器的基础知识,选择合适的开发板和开发环境,编写程序代码并进行实验验证,同时注意常见问题,就可以逐步深入掌握GD32系列控制器的开发与应用。 ### 回答3: GB32控制器是一种高性价比的控制器,比ST公司的STM32和NXP公司的LPC等控制器更加便宜。GB32系列控制器使用ARM Cortex-M3架构,具有强大的处理能力和高度集成的外设功能。此外,GB32系列控制器还具有丰富的开发工具和资源,使得对初学者很友好。 要进行GD32系列控制器开发,首先需要了解其开发环境和官方开发工具。GD32系列控制器使用的是Keil MDK-ARM开发环境,可从官方网站下载并安装。同时,还可以使用开源的GCC编译器和Eclipse IDE来进行开发。另外,GD32系列控制器还提供了一些示例代码和参考资料,以便初学者快速入门。 在编写程序时,需要使用ARM标准的C语言,在程序中调用相应的库函数和中断函数。需要注意的是,GD32系列控制器具有许多不同的模块和功能,因此开发人员需要按照自己的需求对相应的外设进行初始化并配置。 总体来说,GD32系列控制器入门开发指南重在帮助初学者理解和掌握GD32系列控制器的特点、开发环境及基本应用,同时提供一些实用工具和资源,为开发者提供快速入门的有力支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值