zoukankan      html  css  js  c++  java
  • Vue-ElementUI 自定义封装系列-改造DatePicker

    因为后台管理系统中经常会用到DatePicker 来作为常规查询条件中的时间范围,录入单据的创建时间范围,为了追加默认选项和一些常规配置例如:defalutTime来保证查询的时间范围是可以到指定日期之内的,快捷时间范围选项(一周内/一个月/三个月/半年/一年)等,为了将这些相关默认选项进行封装,将DatePicker组件进行默认封装,后续相关程序就可以大量减少代码。

    封装如下:

    <template>
      <el-date-picker
        v-model="timevalue1"
        :picker-options="pickerOptions"
        type="daterange"
        placeholder="选择日期时间"
        align="right"
        @change="changeTime"/>
    </template>
    
    <script>
    export default {
      name: 'd2DateTimePicker',
      model: {
        prop: 'timevalue',
        event: 'change'
      },
    
      props: {
        timevalue: {
          type: Array,
          required: true,
          default: () => {
            return []
          }
        }
    
      },
      data() {
        return {
          timevalue1: [new Date(), new Date(2021, 10, 11)],
          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])
              }
            }]
          }
        }
      },
      watch: {
        timevalue: {
          immediate: true,
          // console.log(val, 'time')
          handler(val) {
            if (val.length > 0) {
              this.timevalue1 = val
            }
            this.$emit('change', val)
          }
    
        },
        timevalue1: {
          immediate: true,
          // console.log(val, 'time')
          handler(newVal) {
            this.$emit('change', newVal)
          }
    
        }
    
      },
      methods: {
        changeTime(val) {
          // var oval = this.moment(val).format('YYYY-MM-DD HH:mm:ss')
          // console.log(val)
          this.$emit('change', val)
        }
      }
    
    }
    </script>
    

      

    外部使用示例:

    <d2-date-time-picker v-model="searchDateRange" />
    import d2DateTimePicker from './d2DateTimePicker'
    
    
    export default {
      name: 'HelloWorld',
      components: {
        d2DateTimePicker
      },
      data() {
        return {
          searchDateRange: [],
        }
      },
    

      

  • 相关阅读:
    接口文档神器之apidoc
    ApiDoc 后端接口注释文档的使用
    Golang 数组和切片
    go切片展开
    Go的json解析:Marshal与Unmarshal
    golang depth read map
    golang 多级json转map
    GoLang中 json、map、struct 之间的相互转化
    利用delve(dlv)在Visual Code中进行go程序的远程调试-debug方式
    maximum-depth-of-binary-tree——找出数的最大深度
  • 原文地址:https://www.cnblogs.com/volts0302/p/15094936.html
Copyright © 2011-2022 走看看