SelectMenu.vue 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <div :key="menuType">
  3. <div class="nav">
  4. <template v-for="item in labels" :key="item.id" >
  5. <div class="nav-btn cursor-pointer yse-events" @click.stop="select(item)" :class="[active.id == item.id ? 'nav-btn-active':'']">{{item.label}}</div>
  6. </template>
  7. </div>
  8. </div>
  9. </template>
  10. <script setup>
  11. import {ref,onMounted,toRefs} from "vue"
  12. let emits = defineEmits(["select"])
  13. let props = defineProps({
  14. labels: {
  15. type: Array,
  16. required:true
  17. }
  18. ,
  19. selectedIndex:{
  20. type: Number,
  21. default:1
  22. }
  23. })
  24. let active = ref(props.labels[props.selectedIndex])
  25. function select(item){
  26. if(item.id === active.value.id){
  27. return;
  28. }
  29. active.value = item;
  30. emits("select", active.value)
  31. }
  32. onMounted(()=>{
  33. select(active.value)
  34. })
  35. </script>
  36. <style lang="scss" scoped>
  37. .nav{
  38. margin: 0 auto;
  39. display: flex;
  40. justify-content: center;
  41. .nav-btn{
  42. width:162px;
  43. height: 46px;
  44. border: none;
  45. background-image: url("@/assets/img/tabs_btn1.png");
  46. background-size: 100% 100%;
  47. color: #B4FFFB;
  48. font-size: 16px;
  49. font-weight: 500;
  50. line-height: 46px;
  51. text-align: center;
  52. margin: 0 16/16*1rem 0 16/16*1rem;
  53. }
  54. .nav-btn-active{
  55. background-image: url("@/assets/img/tabs_btn_active.png");
  56. }
  57. }
  58. </style>