enum-data.vue 1.4 KB
Newer Older
Y
yurj26 已提交
1
<script lang="uts">
DCloud-WZF's avatar
DCloud-WZF 已提交
2
  import {type PropType} from 'vue'
D
DCloud_LXH 已提交
3

D
DCloud_LXH 已提交
4
  export type ItemType = { value : number; name : string }
5

D
DCloud_LXH 已提交
6
  export default {
7
    emits: ['change'],
D
DCloud_LXH 已提交
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
    props: {
      title: {
        type: String,
        default: ''
      },
      items: {
        type: Array as PropType<Array<ItemType>>,
        required: true
      }
    },
    data() {
      return {
        current: 0
      }
    },
    methods: {
      // @ts-ignore
      _change(e : RadioGroupChangeEvent) {
        const selected = this.items.find((item: ItemType) : boolean => {
          return item.name === e.detail.value
D
DCloud_LXH 已提交
28
        })
D
DCloud_LXH 已提交
29 30 31 32 33 34 35 36 37 38 39
        if (selected !== null) {
          this.current = selected.value
          this.$emit('change', this.current)
          uni.showToast({
            icon: 'none',
            title: '当前选中:' + selected.name,
          })
        }
      }
    }
  }
40 41 42
</script>

<template>
D
DCloud_LXH 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55
  <view class="uni-padding-wrap">
    <view class="uni-title uni-common-mt">
      <text class="uni-title-text"> {{title}} </text>
    </view>
  </view>
  <view class="uni-list uni-common-pl">
    <radio-group @change="_change" class="radio-group">
      <radio class="uni-list-cell uni-list-cell-pd radio" v-for="(item, index) in items" :key="item.name"
        :class="index < items.length - 1 ? 'uni-list-cell-line' : ''" :value="item.name" :checked="index === current">
        {{ item.name }}
      </radio>
    </radio-group>
  </view>
56 57
</template>

D
DCloud_LXH 已提交
58
<style></style>