效果显示  
 
< template>  
  < div>  
    < a-popover 
      placement = " bottom"  
      overlayClassName = " season-picker"  
      trigger = " click"  
      v-model = " showSeason"  
    >  
      < template  #content >  
        < div  class = " season-picker-box" >  
          < div  class = " season-picker-box_header" >  
            < a-icon 
              title = " 前一年"  
              class = " season-picker-box_header-left"  
              type = " double-left"  
              @click = " prev"  
            > </ a-icon>  
            < span 
              role = " button"  
              class = " season-picker-box_header-label"  
              >  {{ year }}年</ span 
            >  
            < a-icon 
              type = " double-right"  
              title = " 后一年"  
              @click = " next"  
              class = " season-picker-box_header-right"  
            > </ a-icon>  
          </ div>  
          < div  class = " season-picker_content" >  
            < table  class = " el-month-table" >  
              < tr>  
                < td>  
                  < div>  
                    < a 
                      :class = " { choose: seasonValue[0] === year && seasonValue[1] === 1 }"  
                      class = " cell"  
                      @click = " selectSeason(1)"  
                      >  一季度</ a 
                    >  
                  </ div>  
                </ td>  
                < td>  
                  < div>  
                    < a 
                      :class = " { choose: seasonValue[0] === year && seasonValue[1] === 2 }"  
                      class = " cell"  
                      @click = " selectSeason(2)"  
                      >  二季度</ a 
                    >  
                  </ div>  
                </ td>  
              </ tr>  
              < tr>  
                < td>  
                  < div>  
                    < a 
                      :class = " { choose: seasonValue[0] === year && seasonValue[1] === 3 }"  
                      class = " cell"  
                      @click = " selectSeason(3)"  
                      >  三季度</ a 
                    >  
                  </ div>  
                </ td>  
                < td>  
                  < div>  
                    < a 
                      :class = " { choose: seasonValue[0] === year && seasonValue[1] === 4 }"  
                      class = " cell"  
                      @click = " selectSeason(4)"  
                      >  四季度</ a 
                    >  
                  </ div>  
                </ td>  
              </ tr>  
            </ table>  
          </ div>  
        </ div>  
      </ template>  
      < a-input 
        v-model = " strValue"  
        readOnly 
      />  
    </ a-popover>  
  </ div>  
</ template>  
  
< script> 
const  CNNUM  =  [ "一" ,  "二" ,  "三" ,  "四" ] ; 
const  CHOOSEMONTH  =  [ 
  [ "01" ,  "02" ,  "03" ] , 
  [ "04" ,  "05" ,  "06" ] , 
  [ "07" ,  "08" ,  "09" ] , 
  [ "10" ,  "11" ,  "12" ] , 
] ; 
export  default  { 
  name :  "quarterPicker" , 
  model :  { 
    prop :  "value" , 
    event :  "change" , 
  } , 
  props :  { 
    value :  { 
      type :  Array, 
      default :  ( )  =>  [ ] , 
    } , 
    defaultValue :  { 
      type :  Array, 
      default :  ( )  =>  [ ] , 
    } , 
  } , 
  watch :  { 
    defaultValue :  { 
      handler ( newVal )  { 
      
        if  ( newVal &&  newVal. length)  { 
          this . dealDate ( newVal) ; 
        } 
      } , 
      deep :  true , 
      immediate :  true , 
    } , 
    value ( newVal )  { 
     
      if  ( newVal &&  newVal. length)  { 
        this . dealDate ( newVal,  true ) ; 
      } 
    } , 
  } , 
  data ( )  { 
    return  { 
      showSeason :  false , 
      year :  new  Date ( ) . getFullYear ( ) , 
      strValue :  "" , 
      seasonValue :  [ "" ,  "" ] , 
    } ; 
  } , 
  methods :  { 
    dealDate ( date,  isValue )  { 
      this . year =  Number ( date[ 0 ] . split ( "-" ) [ 0 ] ) ; 
      const  month =  date[ 0 ] . split ( "-" ) [ 1 ] ; 
      CHOOSEMONTH . forEach ( ( item,  index )  =>  { 
        if  ( item. indexOf ( month)  !==  - 1 )  { 
          this . selectSeason ( index +  1 ,  isValue) ; 
        } 
      } ) ; 
    } , 
    prev ( )  { 
      this . year =  this . year *  1  -  1 ; 
    } , 
    next ( )  { 
      this . year =  this . year *  1  +  1 ; 
    } , 
    selectSeason ( i,  isValue =  false  )  { 
      this . strValue =  ` ${ this . year} - ${ CNNUM [ i -  1 ] } 季度 ` ; 
      if  ( ! isValue)  { 
      
        this . $emit ( "change" ,  [ 
          ` ${ this . year} - ${ CHOOSEMONTH [ i -  1 ] [ 0 ] } ` , 
          ` ${ this . year} - ${ CHOOSEMONTH [ i -  1 ] [ 2 ] } ` , 
        ] ) ; 
      } 
      this . seasonValue =  [ this . year,  i] ; 
      this . showSeason =  false ; 
    } , 
  } , 
} ; 
< / script> 
  
<style lang="less" scoped>
.season-picker  { 
  margin :  0; 
  padding :  0; 
  color :  #000000d9; 
  font-size :  14px; 
  .ant-popover-inner-content  { 
    overflow :  hidden; 
    vertical-align :  top; 
    background :  #fff; 
    border-radius :  2px; 
    box-shadow :  0 3px 6px -4px #0000001f,  0 6px 16px #00000014,  0 9px 28px 8px #0000000d; 
    transition :  margin 0.3s; 
    width :  200px; 
    color :  #000000d9; 
    padding :  0 8px !important ; 
    .ant-popover-arrow  { 
      display :  none !important ; 
    } 
  } 
  &-box  { 
    &_header  { 
      display :  flex; 
      height :  34px; 
      line-height :  28px; 
      color :  #000000d9; 
      box-sizing :  border-box; 
      border-bottom :  1px solid #f0f0f0; 
      justify-content :  space-between; 
      margin-bottom :  15px; 
      &-left,
      &-right  { 
        line-height :  28px; 
        color :  #00000040; 
        &:hover  { 
          color :  #000000d9; 
        } 
      } 
    } 
    .el-month-table  { 
      width :  100%; 
    } 
    .el-month-table td div  { 
      margin :  10px; 
      font-size :  14px; 
      .cell  { 
        font-size :  12px; 
        color :  #333333; 
        padding :  8px; 
        &:hover  { 
          color :  #40a9ff; 
          background :  #e6f7ff; 
          cursor :  pointer; 
        } 
      } 
    } 
    .choose  { 
      color :  #fff !important ; 
      background :  #1890ff !important ; 
    } 
  } 
} 
</style>