<template>
|
|
<popupSelect
|
|
ref="popupRef"
|
|
title="请选择增值服务"
|
|
@confirm="onConfirm"
|
|
>
|
|
<view class="content">
|
|
<view class="flex-between option"
|
|
v-for="(option, index) in increaseServiceOptions"
|
|
:key="`option-${index}`"
|
|
@click="onSelectServe(option.id)"
|
|
>
|
|
<view class="option-info">
|
|
<view class="option-title">{{ option.title }}</view>
|
|
<view class="option-desc">{{ option.detail }}</view>
|
|
</view>
|
|
<up-icon
|
|
name="checkmark-circle-fill"
|
|
:color="serves.includes(option.id) ? '#FFBF60' : '#BDBDBD'"
|
|
size="46rpx"
|
|
></up-icon>
|
|
</view>
|
|
</view>
|
|
</popupSelect>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, computed } from 'vue'
|
|
import { useStore } from 'vuex'
|
|
|
|
import popupSelect from '../components/popupSelect.vue';
|
|
|
|
const store = useStore()
|
|
|
|
const props = defineProps({
|
|
modelValue: {
|
|
type: Array,
|
|
default() {
|
|
return []
|
|
}
|
|
},
|
|
})
|
|
|
|
const emit = defineEmits(['update:modelValue', 'confirm'])
|
|
|
|
const serves = ref([])
|
|
|
|
const increaseServiceOptions = computed(() => {
|
|
return store.getters.increaseServiceOptions
|
|
})
|
|
|
|
const onSelectServe = (serve) => {
|
|
const oldServes = serves.value
|
|
let newServes = []
|
|
|
|
if (oldServes.includes(serve)) {
|
|
newServes = oldServes.filter(item => item !== serve)
|
|
} else {
|
|
newServes = oldServes.concat(serve)
|
|
}
|
|
|
|
serves.value = newServes
|
|
}
|
|
|
|
const popupRef = ref()
|
|
|
|
const open = () => {
|
|
store.dispatch('fetchIncreaseServiceOptions')
|
|
serves.value = props.modelValue
|
|
popupRef.value.open()
|
|
}
|
|
|
|
const close = () => {
|
|
popupRef.value.close()
|
|
}
|
|
|
|
const onConfirm = () => {
|
|
emit('update:modelValue', serves.value)
|
|
emit('confirm')
|
|
}
|
|
|
|
defineExpose({ open, close })
|
|
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
.content {
|
|
padding-bottom: 25rpx;
|
|
}
|
|
|
|
.option {
|
|
padding: 0 49rpx 0 25rpx;
|
|
background-color: #FFF5E5;
|
|
border-radius: 8rpx;
|
|
|
|
& + & {
|
|
margin-top: 12rpx;
|
|
}
|
|
|
|
&-info {
|
|
padding: 7rpx 0 13rpx 0;
|
|
}
|
|
|
|
&-title {
|
|
color: #000000;
|
|
font-size: 28rpx;
|
|
line-height: 37rpx;
|
|
}
|
|
|
|
&-desc {
|
|
margin-top: 12rpx;
|
|
color: #707070;
|
|
font-size: 20rpx;
|
|
line-height: 26rpx;
|
|
}
|
|
}
|
|
|
|
</style>
|