all files / src/datePicker/ dayButton.vue

0% Statements 0/9
0% Branches 0/10
100% Functions 0/0
0% Lines 0/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135                                                                                                                                                                                                                                                                             
<script>
import {isPc} from '../utils'
export default {
  props: {
    selected: {
      type: Boolean,
      default: false
    },
    date: {
      type: Date
    },
    disabled: {
      type: Boolean,
      default: false
    }
  },
  data () {
    return {
      hover: false
    }
  },
  computed: {
    isNow () {
      const now = new Date()
      return this.date && this.date.getYear() === now.getYear() && this.date.getMonth() === now.getMonth() && this.date.getDate() === now.getDate()
    },
    dayButtonClass () {
      return {
        selected: this.selected,
        hover: this.hover,
        'mu-day-button': true,
        disabled: this.disabled,
        now: this.isNow
      }
    }
  },
  methods: {
    handleHover () {
      if (isPc() && !this.disabled) this.hover = true
    },
    handleHoverExit () {
      this.hover = false
    },
    handleClick (event) {
      this.$emit('click', event)
    }
  },
  render (h) {
    return this.date ? h('button', {
      class: this.dayButtonClass,
      on: {
        mouseenter: this.handleHover,
        mouseleave: this.handleHoverExit,
        click: this.handleClick
      },
      domProps: {
        disabled: this.disabled
      }
    }, [
      h('div', {class: 'mu-day-button-bg'}),
      h('span', {
        class: 'mu-day-button-text',
        domProps: {
          innerHTML: this.date.getDate()
        }
      })
    ]) : h('span', {class: 'mu-day-empty'})
  }
}
</script>
 
<style lang="less">
@import "../styles/import.less";
.mu-day-button {
  display: inline-block;
  background: none;
  user-select: none;
  outline: none;
  text-decoration: none;
  cursor: pointer;
  margin: 0px;
  padding: 4px 0px;
  font-size: inherit;
  font-weight: 400;
  position: relative;
  border: 10px;
  width: 42px;
  &.disabled{
    opacity: .4;
  }
}
 
.mu-day-empty {
  font-weight: 400;
  padding: 4px 0px;
  position: relative;
  width: 42px;
}
.mu-day-button-bg {
  position: absolute;
  top: 0;
  left: 4px;
  height: 34px;
  background-color: @primaryColor;
  border-radius: 50%;
  opacity: 0;
  transform: scale(0);
  transition: all .45s @easeOutFunction;
  width: 34px;
  .mu-day-button.hover &,
  .mu-day-button.selected &{
    transform: scale(1);
  }
  .mu-day-button.hover &{
    opacity: 0.6;
  }
  .mu-day-button.selected &{
    opacity: 1;
  }
}
 
.mu-day-button-text{
  font-weight: 400;
  position: relative;
  color: @textColor;
  .mu-day-button.now &{
    color: @primaryColor;
  }
  .mu-day-button.hover &,
  .mu-day-button.selected &{
    color: @alternateTextColor;
  }
}
</style>