2025-07-15 16:18:34 +08:00
|
|
|
|
<template>
|
|
|
|
|
|
<view class="radio_body" :style="props?.radioStyle">
|
|
|
|
|
|
<view
|
|
|
|
|
|
v-for="(i, index) in getEnums()"
|
|
|
|
|
|
:key="`item_${index}`"
|
2026-01-15 19:26:00 +08:00
|
|
|
|
:class="`item item_${props?.size} ${props?.disableds?.includes(i?.value) ? 'disabled' : ''}`"
|
|
|
|
|
|
:style="i?.value === props?.valueModel || i?.value === selectValue ? getStyleInfo() : ''"
|
2025-07-15 16:18:34 +08:00
|
|
|
|
@click="onClick(i)"
|
|
|
|
|
|
>
|
|
|
|
|
|
{{ i?.text }}
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
|
|
|
import { onMounted, ref, watch } from 'vue'
|
2026-01-15 19:26:00 +08:00
|
|
|
|
import { getStyleBgInfo } from '@/common/libraries/getPageConfig'
|
2025-07-15 16:18:34 +08:00
|
|
|
|
interface EnumItem {
|
|
|
|
|
|
text?: string
|
|
|
|
|
|
value?: string
|
|
|
|
|
|
}
|
|
|
|
|
|
const props = defineProps([
|
|
|
|
|
|
'valueModel',
|
|
|
|
|
|
'Enums',
|
|
|
|
|
|
'size',
|
|
|
|
|
|
'radioStyle',
|
|
|
|
|
|
'selectStyle',
|
|
|
|
|
|
'disableds' // 不可选数组 6-7 kfyy ,7.40 cook,
|
|
|
|
|
|
])
|
|
|
|
|
|
const selectValue = ref('')
|
2026-01-15 19:26:00 +08:00
|
|
|
|
const getStyleInfo = () => {
|
|
|
|
|
|
return {
|
|
|
|
|
|
...props.selectStyle,
|
|
|
|
|
|
...getStyleBgInfo()
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-07-15 16:18:34 +08:00
|
|
|
|
const getEnums = (): any => {
|
|
|
|
|
|
let list: EnumItem[] = Object.entries(props?.Enums as Record<string, EnumItem>).map(
|
|
|
|
|
|
([_key, value]) => ({
|
|
|
|
|
|
text: value.text,
|
|
|
|
|
|
value: value.value
|
|
|
|
|
|
})
|
|
|
|
|
|
)
|
|
|
|
|
|
return list
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
watch(
|
|
|
|
|
|
() => props?.valueModel,
|
|
|
|
|
|
() => {
|
|
|
|
|
|
console.log('mounted2', props?.valueModel)
|
|
|
|
|
|
selectValue.value = props?.valueModel
|
|
|
|
|
|
}
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
const emit = defineEmits(['update:valueModel', 'onChange'])
|
|
|
|
|
|
const onClick = (e: { value: string }) => {
|
|
|
|
|
|
if (props?.disableds?.includes(e?.value)) {
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
selectValue.value = e?.value
|
|
|
|
|
|
emit('update:valueModel', e?.value)
|
|
|
|
|
|
emit('onChange', e)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
onMounted(() => {
|
|
|
|
|
|
console.log('mounted1', props?.valueModel)
|
|
|
|
|
|
if (props?.valueModel) {
|
|
|
|
|
|
selectValue.value = props?.valueModel
|
|
|
|
|
|
}
|
|
|
|
|
|
})
|
|
|
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.radio_body {
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
.item {
|
|
|
|
|
|
padding: 0 27rpx;
|
|
|
|
|
|
font-size: 26rpx;
|
|
|
|
|
|
height: 60rpx;
|
|
|
|
|
|
line-height: 60rpx;
|
|
|
|
|
|
color: #333;
|
|
|
|
|
|
text-align: center;
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
align-items: center;
|
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
background-color: #f3f3f4;
|
|
|
|
|
|
border-radius: 6rpx;
|
|
|
|
|
|
margin-right: 15rpx;
|
|
|
|
|
|
&:last-child {
|
|
|
|
|
|
margin: 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
.active {
|
2025-08-29 09:51:02 +08:00
|
|
|
|
color: #fff;
|
|
|
|
|
|
background-color: #2a7efb;
|
2025-07-15 16:18:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
.disabled {
|
|
|
|
|
|
opacity: 0.7;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
</style>
|