小程序开发

支付宝小程序日期选择组件封装开发教程

编辑时间:2019-08-24 16:10  浏览次数:浏览次数
摘要:微信小程序的日期选择组件很不好用,比如安卓和IOS设备上,样式明显不同,因为小程序调用该组件是调用系统原生组件,所以会有一定的差异。

支付宝小程序日期组件 微信小程序的日期选择组件很不好用,比如安卓和IOS设备上,样式明显不同,因为小程序调用该组件是调用系统原生组件,所以会有一定的差异。另外,小程序提供的日期组件并不满足当前的业务需求: 该日期为快递上门时间。

用户只可选择的日期范围,当日往后 2 天(即 今天 , 明天 )的日期,并且时间选择为早上 9 点至下午 18 点间的 10 个小时整点时间. 由于是快递上门,所以可选择的时间点为当前时间点 2 小时后(比如,现在时间是11点,用户可选择的最早时间为13点). 如果当前时间晚于下午 18 点,则用户应该可以看到 明天 及 后天 2 天的时间点. 针对以上需求,借助小程序的 picker-view 组件,进行了二次封装,以下是封装后的组件。

项目结构 ├── README.md ├── app.acss ├── app.js ├── app.json ├── components   // 组件目录 │   └── dateTimePicker              // 日期组件目录 │       ├── datePickerBase.js       // 基础 js 文件,需在使用文件中引入 │       ├── dateTimePicker.acss     // 组件默认样式,除非特殊需要,一般不用修改 │       ├── dateTimePicker.axml     // 组件默认结构 │       ├── dateTimePicker.js       // 组件 js  │       ├── dateTimePicker.json     // 组件配置信息 │       └── js │           ├── handleDateArr.js    // 日期数组处理的 js ,用以生成所需的日期数组 │           └── moment.min.js       // 时间生成使用 moment.js │ └── pages// 示例目录 └── index
        ├── index.acss
        ├── index.axml
        ├── index.js
        └── index.json

支付宝小程序的组件引用方法,及使用说明,可参照 支付宝使用自定义组件 查看,也可参照本示例中pages/index 下的使用方法. pages/index/index.json需配置usingComponents , 填写组件路径 { defaultTitle: 日期选择picker demo, usingComponents: { picker: ../../components/dateTimePicker/dateTimePicker } } pages/index/index.js引入基础文件,详细配置及使用说明,参照 js 文件内容 // 引入基础初始 import datePicker from \'../../components/dateTimePicker/datePickerBase\' pages/index/index.axml 使用 picker 组件
        title={{datePicker.title}}
        class={{datePicker.class}}
        visible={{datePicker.visible}}
        onHidePicker=hidePicker
        onConfirm=onConfirm
        pickerValue={{datePicker.defaultValue}} />

其中 title     // 组件标题 class       // 组件样式,可以自定义 visible    // 组件显示/隐藏 onHidePicker    // 隐藏该组件的事件 onConfirm       // 点击组件弹窗确定后的事件,onConfirm(str),其中 str 为最终回调的参数,可取到 picker 的值 pickerValue     // 默认参数,用来初始的时候用,传入数据是 picker 的索引值,默认(0,0),即 默认选中两列 picker 的第一项 一些其他的说明 组件的封装过程中,由于采用的是支付宝的 picker-view 所以在界面上没有花过多的时间,主要可能还是日期时间数组的生成需要处理一下,借助了 moment.js 库,对于时间处理上还是很方便的,以下是对处理日期数组 handleDateArr.js 的代码说明. // 依赖于 moment.js const Moment = require(\'./moment.min\') /**
 * 生成日期时间数组
 * @param dayLength // 要生成的天数时长,不传的话,默认生成 1 天
 * @param timeSection // 时间区间,默认 10 , 可下单区间早上9点到下午6点,可下单时间在当前小时后2小时
 */
function getDaysArr(dayLength, timeSection){
  let _daysArr = [[],[]]
  let _dayLength = dayLength || 1
  const _timeSection = timeSection || 10
  const _nowHour = Moment().format(\'HH\')  // 当前时间 小时
  const _expressHour = parseInt(_nowHour) + 2 // 可下单时间,当前时间 +2
  const _earlyHour = 9  // 最早时间
  const _endHour = 19 // 截止时间
  for(let i = 0; i < _dayLength; i++){
    // 当天时间处理
    if( i === 0){

      if(_expressHour <= _earlyHour ){

        // 早于早上 9点时
        _daysArr[1].push(getHoursArr(_earlyHour, _timeSection))

        // 处理日期
        _daysArr[0].push(Moment().add(i, \'days\').format(\'YYYY-MM-DD\'))

      } else if( _expressHour > _earlyHour && _expressHour < _endHour){

        // 晚于早上 9 点, 早于下午 18 点之前
        _daysArr[1].push(getHoursArr(_expressHour, (_endHour - _expressHour)))
        // 处理日期
        _daysArr[0].push(Moment().add(i, \'days\').format(\'YYYY-MM-DD\'))
      } else if ( _expressHour >= _endHour && _expressHour < 24){

        // 超过晚上 19 点之后,日期天数增加一天
        _dayLength++

      }

    } else {
      // 其他日期时间处理

      // 早于早上 9点时
      _daysArr[1].push(getHoursArr(_earlyHour, _timeSection))
      // 处理日期
      _daysArr[0].push(Moment().add(i, \'days\').format(\'YYYY-MM-DD\'))
    }

  }

  /**
   * 获取小时时间数组
   * @param nowHour // 当前小时
   * @param hoursLength // 小时区间长度
   */
  function getHoursArr(nowHour, hoursLength) {
    let _hoursArr = []
    for(let j = 0 ; j < hoursLength; j++){
      _hoursArr.push(`${nowHour + j}:00:00`)
    }
    return _hoursArr
  }

  return _daysArr
}

module.exports = {
  getDaysArr
}
在 dateTimePicker.js 文件中使用 handleDateArr.js 的方法
...
const { getDaysArr } = require(\'./js/handleDateArr\');   // 引入处理函数

Component({
  data: {
    ...
  },
  methods: {
    // 获取日期数据
    doGetDaysArr() {
      this.setData({
        dateTimeData: getDaysArr(2)     // 传入参数,需返回的日期天数,2天
      });
    }
  }
});

以上就是该组件的基本说明,代码相对比较简单,觉得可以给目前在做支付宝小程序并有相关需要的参考一下。

本文地址:https://www.webbj.cn/operation/xcx1866.html

免责声明:我司网站转载此文,不代表本网的观点和立场。不以盈利为目的,如有侵犯公司或个人权益,请联系QQ:451521464沟通,我司会第一时间删除文章。 思捷智联是北京小程序开发公司,欢迎咨询免费获取思维导图!
推荐阅读
思捷智联

思捷智联是一家2009年成立于北京的IT外包公司,我们致力于为企业提供app软件开发和微信小程序开发服务。公司成立10年来,我们为民政部、方正电子、神州数码、联想控股、壹基金、首钢集团、北京大学、北京师范大学、今麦郎、丰汇租赁、万通控股等上百家企业提供了IT外包服务。我们努力实现每一位客户的托付,为客户创造实在的效益,让您与梦想走得更近。

微信咨询

扫描微信二维码
同市场经理沟通需求

感受专业服务,从来电咨询开始
136-6130-7020