header.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <div class="cord-header">
  3. <div v-if="title" class="left" />
  4. <el-tooltip v-if="title" :content="$t(title)" placement="top-start">
  5. <div class="title text-ellipsis">{{ $t(title) }}</div>
  6. </el-tooltip>
  7. <el-radio-group
  8. v-model="tabPosition"
  9. style="margin-right: 20px"
  10. :size="size"
  11. @input="changeTab"
  12. >
  13. <el-radio-button
  14. v-for="item in shortcutDate"
  15. type="primary"
  16. :key="item.label"
  17. :label="item.value"
  18. >{{ $t(item.label) }}</el-radio-button
  19. >
  20. </el-radio-group>
  21. <el-date-picker
  22. v-model="daterange"
  23. :clearable="false"
  24. type="daterange"
  25. :size="size"
  26. value-format="yyyy-MM-dd"
  27. :range-separator="$t('至')"
  28. :start-placeholder="$t('开始日期')"
  29. :end-placeholder="$t('结束日期')"
  30. :picker-options="pickerOptions"
  31. @change="pickerChange"
  32. >
  33. </el-date-picker>
  34. </div>
  35. </template>
  36. <script>
  37. export default {
  38. name: "header",
  39. props: {
  40. title: String,
  41. subTitle: String,
  42. size: {
  43. type: String,
  44. },
  45. shortcutDate: {
  46. type: Array,
  47. default: () => [
  48. {
  49. label: "近7日",
  50. value: "近七日",
  51. },
  52. {
  53. label: "近1个月",
  54. value: "近一月",
  55. },
  56. {
  57. label: "近半年",
  58. value: "近半年",
  59. },
  60. ],
  61. },
  62. returnWhere: Function,
  63. },
  64. data() {
  65. return {
  66. daterange: ["", ""],
  67. tabPosition: "近七日",
  68. pickerOptions: {
  69. disabledDate(time) {
  70. return time.getTime() > Date.now();
  71. },
  72. },
  73. };
  74. },
  75. methods: {
  76. changeTab() {
  77. this.daterange = ["", ""];
  78. this.$emit("returnWhere", {
  79. type: this.tabPosition,
  80. });
  81. },
  82. pickerChange(e) {
  83. this.tabPosition = "";
  84. this.$emit("returnWhere", {
  85. begindate: e[0],
  86. enddate: e[1],
  87. });
  88. },
  89. },
  90. };
  91. </script>
  92. <style scoped>
  93. .cord-header {
  94. display: flex;
  95. height: 32px;
  96. justify-content: space-between;
  97. align-items: center;
  98. }
  99. .cord-header div {
  100. flex-shrink: 0;
  101. }
  102. .left {
  103. width: 6px;
  104. height: 26px;
  105. background: #3874f6;
  106. margin-right: 22px;
  107. }
  108. .title {
  109. flex: 1;
  110. width: 0;
  111. font-family: Microsoft YaHei, Microsoft YaHei;
  112. font-weight: bold;
  113. font-size: 20px;
  114. color: #333333;
  115. padding-right: 20px;
  116. }
  117. .text-ellipsis {
  118. overflow: hidden;
  119. white-space: nowrap;
  120. text-overflow: ellipsis;
  121. -o-text-overflow: ellipsis;
  122. }
  123. /deep/ .el-date-editor {
  124. width: 220px;
  125. }
  126. /deep/ .el-date-editor .el-range__close-icon {
  127. width: 0 !important;
  128. }
  129. </style>