DatePicker.vue 1.42 KB
<template>
  <el-date-picker
    :key="dateFormat"
    v-model="dateVal"
    class="rc-date"
    :type="dateFormat"
    :format="format"
    :value-format="format"
    :placeholder="placeholder"
    @change="handleChange"
  />
</template>
<script>
export default {
  name: 'RcDate',
  components: {},
  model: {
    prop: 'value',
    event: 'change'
  },
  props: {
    value: [Date, String],
    placeholder: {
      type: String,
      default: '请选择日期'
    },
    format: {
      type: String,
      default: 'yyyy-MM-dd'
    },
    dateFormat: {
      type: String,
      default: 'date'
    }
  },
  data() {
    return {
      dateVal: this.value
    }
  },
  computed: {

  },
  watch: {
    value(val) {
      this.dateVal = val
    },
    dateFormat(newVal) {
      this.dateVal = ''
      this.$emit('dateTypeChange', newVal)
      if (newVal === 'date') {
        this.format = 'yyyy-MM-dd'
      } else if (newVal === 'month') {
        this.format = 'yyyy-MM'
      } else {
        this.format = 'yyyy'
      }
    }
  },
  created() {},
  mounted() {
    switch (this.dateFormat) {
      case 'date': this.format = 'yyyy-MM-dd'; return
      case 'month': this.format = 'yyyy-MM'; return
      case 'year': this.format = 'yyyy'; return
    }
  },
  methods: {
    handleChange(val) {
      this.$emit('change', val)
    }
  }
}
</script>
<style lang="stylus" scoped>
  .rc-date {
    &.el-input {
      width 202px
    }
  }
</style>