tj
2025-05-28 6ef1b14f735acdc3ff77a50da1bb09a5bb983dcc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<template>
    <view class="flex top-tabs">
      <view
        class="top-tab t-grey p10"
        v-for="(item, index) in tabs"
        :key="index"
        :class="{ active: index === flg }"
        @tap="changeIndex(index)"
      >
        {{ item.name || item.label || '' }}
      </view>
    </view>
  </template>
  
  <script setup lang="ts">
 
  interface TabItem {
    name?: string
    label?: string
    [key: string]: any
  }
  
  const props = defineProps<{
    tabs: TabItem[]
    flg: number
  }>()
  
  const emits = defineEmits<{
    (e: 'update:flg', val: number): void
    (e: 'change', val: number): void
  }>()
  
  function changeIndex(index: number) {
    if (index !== props.flg) {
      emits('update:flg', index)
      emits('change', index)
    }
  }
  </script>
  
  <style scoped lang="scss">
  .top-tabs {
    display: flex;
    .top-tab {
      color: #ffffff;
      flex: 1;
      text-align: center;
    }
  
    .top-tab.active {
      color: #ffffff;
      font-weight: 600;
      font-size: 36rpx;
      line-height: 32rpx;
      text-align: center;
      position: relative;
    }
  
    .top-tab.active::before {
      content: '';
      position: absolute;
      left: 16rpx;
      right: 16rpx;
      bottom: 8rpx;
      height: 8rpx;
      background: #ffffff;
      border-radius: 4rpx;
    }
  }
  </style>