前言

对于全栈玩家,各个组件都需相应了解才可做好前后端的CRUD

以下为实战结合Element官网的心得体会

如图所示:

【ElementUI】详细分析DatePicker 日期选择器-LMLPHP

1. 通用Demo

如果只想要一个选择日期,而不是范围,Demo如下:

<template>
  <div class="block">
    <span class="demonstration">默认</span>
    <el-date-picker
      v-model="value1"
      type="date"
      placeholder="选择日期">
    </el-date-picker>
  </div>
  <div class="block">
    <span class="demonstration">带快捷选项</span>
    <el-date-picker
      v-model="value2"
      align="right"
      type="date"
      placeholder="选择日期"
      :picker-options="pickerOptions">
    </el-date-picker>
  </div>
</template>

截图如下:

【ElementUI】详细分析DatePicker 日期选择器-LMLPHP

如果需要时间选择,总体Demo如下:

<template>
  <!-- 包含快捷选项的日期选择器 -->
  <div class="block">
    <!-- 演示快捷选项 -->
    <span class="demonstration">带快捷选项</span>
    <!-- 日期选择器组件 -->
    <el-date-picker
      v-model="value2"
      type="datetimerange"
      align="right"
      unlink-panels
      range-separator=""
      start-placeholder="开始日期"
      end-placeholder="结束日期"
      :picker-options="pickerOptions">
    </el-date-picker>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        // 日期选择器的选项
        pickerOptions: {
          // 快捷选项
          shortcuts: [
            // 最近一周
            {
              text: '最近一周',
              onClick(picker) {
                const end = new Date();
                const start = new Date();
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
                picker.$emit('pick', [start, end]);
              }
            },
            // 最近一个月
            {
              text: '最近一个月',
              onClick(picker) {
                const end = new Date();
                const start = new Date();
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
                picker.$emit('pick', [start, end]);
              }
            },
            // 最近三个月
            {
              text: '最近三个月',
              onClick(picker) {
                const end = new Date();
                const start = new Date();
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
                picker.$emit('pick', [start, end]);
              }
            }
          ]
        },
        // 绑定的值1
        value1: '',
        // 绑定的值2
        value2: ''
      };
    }
  };
</script>

具体的参数解释如下:

  • unlink-panels解除左右面板的联动(各自独立切换当前月份),选择日期范围时,默认情况下左右面板会联动
  • type为daterange,则显示到日,若为datetimerange则显示到秒

如果是按照默认月份,具体如下:

<template>
  <div class="block">
    <span class="demonstration">带快捷选项</span>
    <el-date-picker
      v-model="value2"
      type="monthrange"
      align="right"
      unlink-panels
      range-separator=""
      start-placeholder="开始月份"
      end-placeholder="结束月份"
      :picker-options="pickerOptions">
    </el-date-picker>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        pickerOptions: {
          shortcuts: [{
            text: '本月',
            onClick(picker) {
              picker.$emit('pick', [new Date(), new Date()]);
            }
          }, {
            text: '今年至今',
            onClick(picker) {
              const end = new Date();
              const start = new Date(new Date().getFullYear(), 0);
              picker.$emit('pick', [start, end]);
            }
          }, {
            text: '最近六个月',
            onClick(picker) {
              const end = new Date();
              const start = new Date();
              start.setMonth(start.getMonth() - 6);
              picker.$emit('pick', [start, end]);
            }
          }]
        },
        value1: '',
        value2: ''
      };
    }
  };
</script>

截图如下:

【ElementUI】详细分析DatePicker 日期选择器-LMLPHP

2. 快捷键

对于快捷键选项除了实现上述方案还可如下:

// 时间选择
pickerOptions: {
  shortcuts: [{
    text: '上周',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      // 设置起始日期为本周的第一天
      start.setDate(end.getDate() - end.getDay() - 6);
      // 设置结束日期为本周的最后一天
      end.setDate(end.getDate() - end.getDay() );
      picker.$emit('pick', [start, end]);
    }
  }, {
    text: '这周',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      // 设置起始日期为本周的第一天
      start.setDate(end.getDate() - end.getDay() + 1);
      // 设置结束日期为本周的最后一天
      end.setDate(end.getDate() - end.getDay() + 7);
      picker.$emit('pick', [start, end]);
    }
  }, {
    text: '下周',
    onClick(picker) {
      const end = new Date();
      const start = new Date();
      // 设置起始日期为下周的第一天
      start.setDate(end.getDate() - end.getDay() + 8);
      // 设置结束日期为下周的最后一天
      end.setDate(end.getDate() - end.getDay() + 14);
      picker.$emit('pick', [start, end]);
    }
  }]
},

截图如下:

【ElementUI】详细分析DatePicker 日期选择器-LMLPHP

pickerOptions: {
  disabledDate(time) {
    return time.getTime() > Date.now();
  },
  shortcuts: [{
    text: '今天',
    onClick(picker) {
      picker.$emit('pick', new Date());
    }
  }, {
    text: '昨天',
    onClick(picker) {
      const date = new Date();
      date.setTime(date.getTime() - 3600 * 1000 * 24);
      picker.$emit('pick', date);
    }
  }, {
    text: '一周前',
    onClick(picker) {
      const date = new Date();
      date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
      picker.$emit('pick', date);
    }
  }]
},

截图如下:

【ElementUI】详细分析DatePicker 日期选择器-LMLPHP

3. 参数

更多的参数解释如下:

对于日期选择的更多参数说明:

04-05 08:35