<template>
|
|
<view class="flex card">
|
|
<view>
|
|
<uv-checkbox-group
|
|
v-model="selectCheckboxValue"
|
|
@change="onSelectChange"
|
|
>
|
|
<uv-checkbox
|
|
size="36rpx"
|
|
icon-size="36rpx"
|
|
activeColor="#00A9FF"
|
|
:name="1"
|
|
></uv-checkbox>
|
|
</uv-checkbox-group>
|
|
</view>
|
|
<view class="info">
|
|
<view class="flex name">
|
|
<view>{{ data.name }}</view>
|
|
<view :class="['tag', `tag-${data.type}`]">{{ typeDesc }}</view>
|
|
</view>
|
|
<view class="id">{{ data.cerNo }}</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
const MEMBER_TYPE_AND_DESC_MAPPING = {
|
|
0: '成人',
|
|
1: '青少年',
|
|
2: '儿童',
|
|
}
|
|
|
|
export default {
|
|
props: {
|
|
data: {
|
|
type: Object,
|
|
default() {
|
|
return {}
|
|
}
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
selectCheckboxValue: [],
|
|
}
|
|
},
|
|
computed: {
|
|
isSelected: {
|
|
set(val) {
|
|
this.selectCheckboxValue = val ? [1]: []
|
|
|
|
if (this.data.isSelected == val) {
|
|
return
|
|
}
|
|
|
|
this.$emit('selectChange', val)
|
|
},
|
|
get() {
|
|
return this.selectCheckboxValue.length ? true : false
|
|
}
|
|
},
|
|
typeDesc() {
|
|
return MEMBER_TYPE_AND_DESC_MAPPING[this.data.type]
|
|
},
|
|
},
|
|
watch: {
|
|
data: {
|
|
handler(val) {
|
|
this.isSelected = val.isSelected
|
|
},
|
|
immediate: true,
|
|
deep: true,
|
|
}
|
|
},
|
|
methods: {
|
|
onSelectChange(val) {
|
|
this.isSelected = val.length ? true : false
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.card {
|
|
justify-content: flex-start;
|
|
column-gap: 24rpx;
|
|
padding: 24rpx;
|
|
background: #F9F9F9;
|
|
}
|
|
|
|
.info {
|
|
.name {
|
|
justify-content: flex-start;
|
|
column-gap: 24rpx;
|
|
font-size: 32rpx;
|
|
color: #181818;
|
|
|
|
.tag {
|
|
padding: 2rpx 14rpx;
|
|
font-size: 24rpx;
|
|
color: #00A9FF;
|
|
background: #E9F8FF;
|
|
border: 2rpx solid #00A9FF;
|
|
border-radius: 8rpx;
|
|
|
|
&-1 {
|
|
color: #03C25C;
|
|
background: #E9FFF5;
|
|
border-color: #03C25C;
|
|
}
|
|
|
|
&-2 {
|
|
color: #EE6E05;
|
|
background: #FFEFE9;
|
|
border-color: #EE6E05;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
.id {
|
|
margin-top: 8rpx;
|
|
font-size: 28rpx;
|
|
color: #9B9B9B;
|
|
}
|
|
}
|
|
</style>
|