select-tag.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <template>
  2. <div class="time-tag-container">
  3. <div class="custom-tag-container">
  4. <div v-for="tag in tags" :key="tag.value" class="custom-tag"
  5. :class="{ 'active': selectedValue === tag.value }" @click="handleTagClick(tag)">
  6. <span class="tag-text">{{ tag.label }}</span>
  7. </div>
  8. </div>
  9. </div>
  10. </template>
  11. <script>
  12. export default {
  13. name: 'SelectTag',
  14. props: {
  15. tags: {
  16. type: Array,
  17. default: () => []
  18. },
  19. selectedValue: {
  20. type: String,
  21. default: ''
  22. }
  23. },
  24. methods: {
  25. handleTagClick(tag) {
  26. if (tag.value === 'custom') {
  27. // 触发自定义时间选择器显示事件
  28. this.$emit('show-custom-picker', tag.value);
  29. } else {
  30. // 触发普通时间范围变化事件
  31. this.$emit('change', tag.value);
  32. }
  33. }
  34. }
  35. }
  36. </script>
  37. <style lang="scss" scoped>
  38. .time-tag-container {
  39. display: flex;
  40. justify-content: flex-start;
  41. margin-top: 30rpx;
  42. }
  43. .custom-tag-container {
  44. display: flex;
  45. flex-wrap: wrap;
  46. gap: 5rpx;
  47. align-items: center;
  48. }
  49. .custom-tag {
  50. display: flex;
  51. align-items: center;
  52. padding: 7rpx 15rpx;
  53. color: #FFFFFF;
  54. border-radius: 20rpx;
  55. font-size: 24rpx;
  56. cursor: pointer;
  57. transition: all 0.3s ease;
  58. }
  59. .custom-tag.active {
  60. background: rgba(255, 255, 255, 0.2);
  61. color: #FFFFFF;
  62. font-weight: bold;
  63. background: rgba(255, 255, 255, 0.2);
  64. }
  65. // .custom-tag:hover {
  66. // background: rgba(255, 255, 255, 0.4);
  67. // border-color: rgba(255, 255, 255, 0.6);
  68. // }
  69. .tag-text {
  70. // margin-right: 8rpx;
  71. }
  72. </style>