chuangte_bike_newxcx/page_shanghu/guanli/components/PayChannelSelector.vue

101 lines
1.8 KiB
Vue
Raw Normal View History

2026-06-02 16:35:58 +08:00
<template>
<view class="pay-section">
<view class="section-head">
<text class="section-title">支付渠道</text>
</view>
<view class="option-list" v-if="channelList.length > 0">
<view
v-for="item in channelList"
:key="item.id"
class="option-item"
:class="{ active: selectedChannelId === item.id }"
hover-class="app-tap-hover"
@click="$emit('select', item)"
>
<view class="option-icon-wrap">
<image v-if="item.picture" class="option-icon-img" :src="item.picture" mode="aspectFit"></image>
</view>
<view class="option-info">
<view class="option-name">{{ item.name }}</view>
</view>
<view class="radio" :class="{ checked: selectedChannelId === item.id }"></view>
</view>
</view>
<view class="empty-tip" v-else>暂无可用支付渠道</view>
</view>
</template>
<script>
export default {
name: 'PayChannelSelector',
props: {
channelList: {
type: Array,
default: () => []
},
selectedChannelId: {
type: [String, Number],
default: null
}
}
}
</script>
<style lang="scss" scoped>
@import './agent-order-theme.scss';
.pay-section {
@include ao-section;
}
.section-head {
@include ao-section-head;
}
.section-title {
@include ao-section-title;
}
.option-item {
@include ao-option-item;
}
.option-icon-wrap {
width: 56rpx;
height: 56rpx;
border-radius: 12rpx;
margin-right: 20rpx;
flex-shrink: 0;
background: #fff;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
border: 1rpx solid $ao-border;
}
.option-icon-img {
width: 100%;
height: 100%;
}
.option-info {
flex: 1;
min-width: 0;
}
.option-name {
font-size: 30rpx;
font-weight: 500;
color: $ao-text;
}
.radio {
@include ao-radio;
}
.empty-tip {
@include ao-empty-tip;
}
</style>