btnSelectInfo.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div>
  3. <el-button-group>
  4. <el-button v-for="item in btnTitle" :key="item.index" :type="item === dataTypeNow ?'primary':''" size="small" @click="btnClick(item)">{{$t(item)}}</el-button>
  5. </el-button-group>
  6. <el-date-picker
  7. style="margin-left: 10px"
  8. v-model="dateData"
  9. @change="onChange"
  10. size="small"
  11. format="yyyy-MM"
  12. value-format="yyyy-MM"
  13. type="monthrange"
  14. :range-separator="$t('至')"
  15. :start-placeholder="$t(`开始月份`)"
  16. :end-placeholder="$t(`结束月份`)">
  17. </el-date-picker>
  18. </div>
  19. </template>
  20. <script>
  21. export default {
  22. name: "btnSelectInfo",
  23. props:{
  24. btnTitle: Array,
  25. dateType:String
  26. },
  27. data(){
  28. return {
  29. dateData:[],
  30. dataTypeNow:'本年'
  31. }
  32. },
  33. methods:{
  34. btnClick(data){
  35. this.dataTypeNow = data
  36. if (data == '本年'){
  37. let year = new Date().getFullYear()
  38. let begdate = year + '-01'
  39. let enddate = year + '-12'
  40. this.dateData = [begdate,enddate]
  41. }else if (data == '本季'){
  42. const now = new Date();
  43. const quarterStartMonth = Math.floor(now.getMonth() / 3) * 3;
  44. const quarterStartDate = new Date(now.getFullYear(), quarterStartMonth);
  45. const quarterEndDate = new Date(now.getFullYear(), quarterStartMonth + 3);
  46. this.dateData = [quarterStartDate,quarterEndDate]
  47. }else if (data == '本月'){
  48. const now = new Date();
  49. const monthStartDate = new Date(now.getFullYear(), now.getMonth());
  50. this.dateData = [monthStartDate,monthStartDate]
  51. }
  52. this.$emit('btnClick',data)
  53. },
  54. onChange(){
  55. if (this.dateData){
  56. this.dataTypeNow = ''
  57. }
  58. this.$emit('btnClick',this.dataTypeNow,this.dateData)
  59. }
  60. },
  61. mounted() {
  62. this.dataTypeNow = this.dateType
  63. this.btnClick(this.dateType)
  64. }
  65. }
  66. </script>
  67. <style scoped>
  68. </style>