对vant-timepicker的详用

1.基本介绍:

        在使用DatetimePicker的组件的时候,发现可以不仅仅局限于对时间的选择,还可以限制对具体某一天的使用(之测试过vue2 vue3未测)

2.逻辑说明:

        在DatetimePicker里面有一个picker-options的Props,可以用来绑定其实际的规则,以及便利使用的方法,通过在date里面实现双向绑定,可以通过在生命周期内函数的改变从而使得组件的规则发生改变。

3.具体实现:

        <el-date-picker
          v-model="date"                      //绑定具体时间的值
          align="right"
          type="date"                         //类型选择
          placeholder="选择日期"
          :clearable="false"                  //清空时间
          @change="dateChange"                //改变方法绑定
          :picker-options="pickerOptions"     //规则事件绑定
        >
        </el-date-picker>
//disabledDate 在这里我主要用于对时间是被允许显示的判断
data(){
    return{
        pickerOptions: {
            disabledDate: (time) => {},
            shortcuts: []
        },
    }
}

在生命周期内绑定该方法(我的建议在create内)

    getDay() {
      const // 定义常量
        { in_date } = this.hosUserInfo, // 开始时间
        inDateTS = +this.$moment(in_date || '1970-01-01').valueOf(), // 开始时间戳
        nowTS = +this.$mymoment().timeStamp,
        dayTS = 3600 * 24 * 1000; // 一天的时间戳

      // 配置禁止查询时间
      this.pickerOptions['disabledDate'] = (time) => {
        // 禁止选择12年前的日期
        if (time.getTime() < inDateTS) return true;
        // 禁止选择大于今天的日期(今天是可以被选择的)
        else if (time.getTime() > Date.now()) return true;
      };

      // 生成快捷日期配置规则
      this.pickerOptions.shortcuts = [];
      const timeRules = [
        { text: '开始时间', timestamp: inDateTS },
        { text: '今天', timestamp: nowTS },
        { text: '昨天', timestamp: nowTS - dayTS },
        { text: '一周前', timestamp: nowTS - dayTS * 7 },
        { text: '两周前', timestamp: nowTS - dayTS * 14 },
        { text: '三周前', timestamp: nowTS - dayTS * 21 },
        ...(() => {
          const months = [];
          for (let i = 1; i < 12; i++) {
            months.push({
              text: `${numberFormatChinese(i)}个月前`,
              timestamp: nowTS - dayTS * (30 * i),
            });
          }
          return months;
        })(),
        { text: '一年前', timestamp: nowTS - dayTS * 365 },
      ];
      // 根据需求来判断是否展现指定的快捷跳转
      for (const item of timeRules) {
        if (inDateTS <= item.timestamp) {
          const { text, timestamp } = item;
          this.pickerOptions.shortcuts.push({
            text,
            onClick: (picker) => picker.$emit('pick', timestamp),
          });
        }
      }
    },
    dateChange() {
      //绑定你要跳转的方法
      this.selDate = this.$moment(this.date).format('YYYY-MM-DD');
      this.getInfoDetail(this.selDate);
    },

4.实现效果:

5.总结:

        在某些不想选择时间但是会有常用时间的地方会用到 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值