DateOptions.vue 1.65 KB
<template>
  <div>
    <!-- 两种形式 0:select 1:button -->
    <template v-if="showType === 0">
      <!-- select -->
      <el-select v-model="dateType" placeholder="请选择日期">
        <el-option
          v-for="item in dateList"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        >
        </el-option>
      </el-select>
    </template>
    <template v-else>
      <!-- button -->
    </template>
    <el-date-picker
      v-show="dateType === 'day'"
      v-model="dayVal"
      type="date"
      placeholder="选择日期"
    />
    <el-date-picker
      v-show="dateType === 'week'"
      v-model="weekVal"
      type="week"
      format="yyyy 第 WW 周"
      placeholder="选择周"
    />
    <el-date-picker
      v-show="dateType === 'month'"
      v-model="monthVal"
      type="month"
      placeholder="选择月"
    />
    <el-date-picker
      v-show="dateType === 'year'"
      v-model="yearVal"
      type="year"
      placeholder="选择年"
    />
  </div>
</template>

<script>
const list = ['day', 'week', 'month', 'year'].map(item => ({
  label: item,
  value: item
}))
export default {
  name: 'DateOptions',
  props: {
    showType: {
      type: Number,
      default: 0
    },
    dateList: {
      type: Array,
      default: () => list
    },
    defaultsDate: {
      type: String,
      default: 'day'
    }
  },
  data() {
    return {
      dayVal: '',
      weekVal: '',
      monthVal: '',
      yearVal: ''
    }
  },
  computed: {
    dateType: {
      get() {
        return this.defaultsDate
      },
      set(val) {
        this.$emit('update:defaultsDate', val)
      }
    }
  }
}
</script>